v2.3 Papierkorb: pushToTrash() mit Klon und harter Obergrenze
This commit is contained in:
@@ -66,6 +66,28 @@ async function saveTrash() {
|
|||||||
await Store.set('trash', trash);
|
await Store.set('trash', trash);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Legt einen Eintrag in den Papierkorb. Klont das Objekt (structuredClone),
|
||||||
|
* damit der trash-Eintrag nicht per Referenz an boards[] haengt und nach dem
|
||||||
|
* Restore-Loop konsistent bleibt. Setzt deletedAt. Erzwingt die harte Obergrenze
|
||||||
|
* TRASH_MAX_ENTRIES (Quota-Schutz, TRASH-04): bei Ueberlauf fallen die aeltesten
|
||||||
|
* Eintraege heraus. Speichern uebernimmt der Aufrufer (saveTrash()).
|
||||||
|
* @param {{ item: Object, type: 'bookmark'|'board', originBoardId: (string|null) }} entry
|
||||||
|
*/
|
||||||
|
function pushToTrash({ item, type, originBoardId }) {
|
||||||
|
trash.push({
|
||||||
|
item: structuredClone(item),
|
||||||
|
type,
|
||||||
|
originBoardId: originBoardId ?? null,
|
||||||
|
deletedAt: Date.now()
|
||||||
|
});
|
||||||
|
// Aelteste zuerst kappen, falls die Obergrenze ueberschritten ist.
|
||||||
|
if (trash.length > TRASH_MAX_ENTRIES) {
|
||||||
|
trash.sort((a, b) => a.deletedAt - b.deletedAt);
|
||||||
|
trash = trash.slice(trash.length - TRASH_MAX_ENTRIES);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Page-seitiger Wrapper um das DOM-freie ensureInbox() aus quicksave-core.js.
|
// Page-seitiger Wrapper um das DOM-freie ensureInbox() aus quicksave-core.js.
|
||||||
// ensureInbox() mutiert das globale boards-Array in-place; wir persistieren nur,
|
// ensureInbox() mutiert das globale boards-Array in-place; wir persistieren nur,
|
||||||
// wenn die Inbox neu angelegt wurde, und geben das Inbox-Board-Objekt zurueck
|
// wenn die Inbox neu angelegt wurde, und geben das Inbox-Board-Objekt zurueck
|
||||||
|
|||||||
Reference in New Issue
Block a user