Drop stale label drafts after inactivity and bump version to 0.2.3
ci/woodpecker/push/woodpecker Pipeline was successful
ci/woodpecker/pr/woodpecker Pipeline was successful

This commit is contained in:
2026-04-12 22:29:09 +02:00
parent 39dd474813
commit e50f848896
5 changed files with 221 additions and 11 deletions
+40 -6
View File
@@ -34,6 +34,7 @@ const STOCK_LEVEL_OPTIONS = [
const QUANTITY_UNIT_OPTIONS = ['g', 'ml', 'pc'];
const EXPIRATION_DAY_OPTIONS = ['3', '5', '8', '10', '15', '20', '25', '30', '45', '60', '90', '120', '150', '180'];
const LABEL_DRAFT_STALE_MS = 30 * 60 * 1000;
export function renderLabelCreatePage() {
return `
@@ -607,9 +608,7 @@ function createDefaultForm() {
};
}
function loadLabelDraft() {
const draft = loadStoredValue(STORAGE_KEYS.labelDraft, createDefaultForm());
function normalizeLabelDraft(draft) {
return {
...createDefaultForm(),
...draft,
@@ -638,6 +637,41 @@ function buildDraftPayload(form) {
};
}
function buildLabelDraftEnvelope(form) {
return {
form: buildDraftPayload(form),
savedAt: Date.now(),
};
}
function saveLabelDraft(form) {
saveStoredValue(STORAGE_KEYS.labelDraft, buildLabelDraftEnvelope(form));
}
function loadLabelDraft() {
const storedDraft = loadStoredValue(STORAGE_KEYS.labelDraft, null);
if (!storedDraft || typeof storedDraft !== 'object' || Array.isArray(storedDraft)) {
return createDefaultForm();
}
const hasEnvelope =
storedDraft.form
&& typeof storedDraft.form === 'object'
&& !Array.isArray(storedDraft.form);
if (!hasEnvelope) {
return normalizeLabelDraft(storedDraft);
}
const savedAt = Number(storedDraft.savedAt || 0);
if (!savedAt || Date.now() - savedAt >= LABEL_DRAFT_STALE_MS) {
return createDefaultForm();
}
return normalizeLabelDraft(storedDraft.form);
}
export function labelCreatePageData(store) {
return {
previewState: createAsyncState(),
@@ -1084,7 +1118,7 @@ export function labelCreatePageData(store) {
this.persistDraft();
},
persistDraft() {
saveStoredValue(STORAGE_KEYS.labelDraft, buildDraftPayload(this.form));
saveLabelDraft(this.form);
},
get filteredLocations() {
const query = this.locationSearch.trim().toLowerCase();
@@ -1487,7 +1521,7 @@ export function labelCreatePageData(store) {
message: `${entryName} was ${operationVerb} successfully.`,
});
this.upsertPreview = entry;
saveStoredValue(STORAGE_KEYS.labelDraft, buildDraftPayload(this.form));
saveLabelDraft(this.form);
} catch (error) {
this.fieldErrors = normalizeValidationError(error);
this.submitError = error.message;
@@ -1508,7 +1542,7 @@ export function labelCreatePageData(store) {
this.fieldErrors = {};
this.upsertPreview = null;
this.printIssue = '';
saveStoredValue(STORAGE_KEYS.labelDraft, this.form);
saveLabelDraft(this.form);
if (revokePreview && this.previewUrl.startsWith('blob:')) {
URL.revokeObjectURL(this.previewUrl);
}