Drop stale label drafts after inactivity and bump version to 0.2.3
This commit is contained in:
@@ -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);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user