From 85f7e73d17845b509e3ceeba61ef69a45d6289a6 Mon Sep 17 00:00:00 2001 From: thePR0M3TH3AN <53631862+PR0M3TH3AN@users.noreply.github.com> Date: Fri, 15 May 2026 08:34:52 -0400 Subject: [PATCH] Fix disc designer search and layer state bugs --- src/index.html | 46 ++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 38 insertions(+), 8 deletions(-) diff --git a/src/index.html b/src/index.html index e378697..dcb9db6 100644 --- a/src/index.html +++ b/src/index.html @@ -1872,6 +1872,7 @@ const $ = (id) => document.getElementById(id); const SCHEMA_VERSION = 5; + const MIN_SUPPORTED_SCHEMA_VERSION = 4; const presets = { dvd: { @@ -2082,18 +2083,28 @@ return mediaCategories.find((item) => item.value === value)?.label || value || ''; } - function populateCategorySelects() { - const options = mediaCategories - .map((item) => ``) + function categoryOptions(emptyLabel = 'Any category') { + return mediaCategories + .map((item, index) => ``) .join(''); + } + + function populateCategorySelects() { + const options = categoryOptions('Any category'); document.querySelectorAll('.categorySelect').forEach((select) => { select.innerHTML = options; }); + const designerMetaSelect = $('designerCategoryField'); + if (designerMetaSelect) designerMetaSelect.innerHTML = categoryOptions('Uncategorized'); const metaSelect = $('categoryField'); if (metaSelect) { const current = metaSelect.value || state.meta?.category || ''; metaSelect.value = mediaCategories.some((item) => item.value === current) ? current : ''; } + if (designerMetaSelect) { + const current = designerMetaSelect.value || state.meta?.category || ''; + designerMetaSelect.value = mediaCategories.some((item) => item.value === current) ? current : ''; + } } function eventTemplateSummary(payload) { @@ -4072,8 +4083,7 @@ for (const e of events) { let payload = null; try { payload = JSON.parse(e.content || '{}'); } catch { continue; } - // Only show posts from the current share schema onwards (unless fetching own designs) - if (!skipVersionFilter && (payload.version ?? 0) < SCHEMA_VERSION) continue; + if (!skipVersionFilter && (payload.version ?? 0) < MIN_SUPPORTED_SCHEMA_VERSION) continue; const title = payload.meta?.title || payload.title || ''; const imdb = payload.meta?.imdbId || ''; const category = payload.meta?.category || payload.category || ''; @@ -4399,7 +4409,6 @@ const category = $('nostrCategory').value; const out = $('nostrResults'); out.innerHTML = '
Searching…
'; - invalidateFeedCache(); await fetchFeedAndReactions(); let rows = buildRowsFromEvents(_feedCache.events || [], type, q, false, category); if (q) rows = deduplicateRows(rows); @@ -4442,6 +4451,7 @@ function importDiscDesignFromPayload(payload, targetKey) { const key = targetKey || state.activeDiscDesign || 'a'; + persistDesignerLayers(state.activeDiscDesign || 'a'); if (payload?.templateMode === 'disc-design' && payload.discDesign) { const { key: _k, ...design } = payload.discDesign; const importedLayers = Array.isArray(payload.layers) @@ -4478,15 +4488,20 @@ function openDiscDesignNostrSearch() { const target = askDiscDesignSlot(); + persistDesignerLayers(state.activeDiscDesign || 'a'); state.activeDiscDesign = target; + loadDesignerLayers(target); const importTarget = $('importDiscTarget'); if (importTarget) importTarget.value = target; const designerTarget = $('designerImportTarget'); if (designerTarget) designerTarget.value = target; $('nostrType').value = 'disc-design'; - $('nostrQuery').value = state.meta.title || state.discDesigns[target]?.name || ''; + $('nostrQuery').value = ''; + $('nostrCategory').value = state.meta.category || ''; $('nostrModal').classList.add('open'); switchModalTab('Search'); + syncDesignerInputs(); + render(); runNostrSearch(); } @@ -4703,11 +4718,21 @@ }); $('saveProjectBtn').addEventListener('click', downloadProject); - $('designerSaveProjectBtn').addEventListener('click', downloadSingleDesign); + $('designerSaveProjectBtn').addEventListener('click', () => { + try { + downloadSingleDesign(); + } catch (error) { + alert(error.message || 'Could not save this disc design.'); + } + }); $('designerLoadProjectBtn').addEventListener('click', openDiscDesignNostrSearch); $('designerLoadFileBtn').addEventListener('click', () => { const target = askDiscDesignSlot(); + persistDesignerLayers(state.activeDiscDesign || 'a'); state.activeDiscDesign = target; + loadDesignerLayers(target); + syncDesignerInputs(); + render(); $('discProjectFile').click(); }); $('discProjectFile').addEventListener('change', (event) => { @@ -4754,6 +4779,8 @@ $('designerClearBtn').addEventListener('click', () => { state.discDesigns[state.activeDiscDesign].src = ''; + state.discDesigns[state.activeDiscDesign].layers = []; + state.layers = state.layers.filter(l => l.target !== 'designer-disc'); $('designerUrl').value = ''; render(); }); @@ -5037,6 +5064,9 @@ }); normalizeDiscState(); normalizeJewelState(); + if ((parsed.appMode || parsed.ui?.appMode) === 'designer') { + loadDesignerLayers(parsed.activeDiscDesign || parsed.ui?.activeDiscDesign || state.activeDiscDesign || 'a'); + } } catch (error) { console.warn('Autosave restore failed', error); }