// =============================== // state.js — Stato condiviso (foto + attività) // =============================== // Modalità corrente: "photos" | "activities" window.state = { mode: "photos", // default items: [], // contiene gli item della modalità corrente }; // =============================== // MODE HELPERS // =============================== function normalizeMode(mode) { return mode === "activities" ? "activities" : "photos"; } function cacheKeyForMode(mode) { return normalizeMode(mode) === "photos" ? "photosCache" : "activitiesCache"; } function lastSyncKeyForMode(mode) { return normalizeMode(mode) === "photos" ? "lastSyncPhotos" : "lastSyncActivities"; } // =============================== // LAST SYNC // =============================== function getLastSync() { return getLastSyncForMode(state.mode); } function setLastSync(ts) { setLastSyncForMode(state.mode, ts); } function getLastSyncForMode(mode) { return localStorage.getItem(lastSyncKeyForMode(mode)); } function setLastSyncForMode(mode, ts) { if (!ts) return; localStorage.setItem(lastSyncKeyForMode(mode), ts); } // =============================== // GET / SET ITEMS // =============================== function getLocalItems() { return state.items; } function getLocalItemsForMode(mode) { try { const safeMode = normalizeMode(mode); const raw = localStorage.getItem(cacheKeyForMode(safeMode)); if (!raw) return []; const arr = JSON.parse(raw); return Array.isArray(arr) ? arr : []; } catch (e) { console.warn("getLocalItemsForMode error:", e); return []; } } function setLocalItems(arr) { // Compatibilità con codice vecchio. // Salva in base alla modalità corrente. setLocalItemsForMode(state.mode, arr); } function setLocalItemsForMode(mode, arr) { const safeMode = normalizeMode(mode); const safeArr = Array.isArray(arr) ? arr : []; try { localStorage.setItem(cacheKeyForMode(safeMode), JSON.stringify(safeArr)); // Aggiorna state.items solo se sto salvando la modalità attualmente visibile if (state.mode === safeMode) { state.items = safeArr; } } catch (e) { console.warn("setLocalItemsForMode error:", e); } } function setLocalPhotos(arr) { setLocalItemsForMode("photos", arr); } function setLocalActivities(arr) { setLocalItemsForMode("activities", arr); } // =============================== // ADD / REMOVE ITEM // =============================== function addItemLocal(item) { addItemLocalForMode(state.mode, item); } function addItemLocalForMode(mode, item) { if (!item || item.id == null) return; const safeMode = normalizeMode(mode); const arr = getLocalItemsForMode(safeMode); const next = arr.filter(x => String(x.id) !== String(item.id)); next.push(item); setLocalItemsForMode(safeMode, next); } function removeItemLocal(id) { removeItemLocalForMode(state.mode, id); } function removeItemLocalForMode(mode, id) { if (id == null) return; const safeMode = normalizeMode(mode); const arr = getLocalItemsForMode(safeMode); const before = arr.length; const next = arr.filter(x => String(x.id) !== String(id)); const after = next.length; console.log("[removeItemLocalForMode]", { mode: safeMode, id, before, after, }); setLocalItemsForMode(safeMode, next); } function addPhotoLocal(item) { addItemLocalForMode("photos", item); } function addActivityLocal(item) { addItemLocalForMode("activities", item); } function removePhotoLocal(id) { removeItemLocalForMode("photos", id); } function removeActivityLocal(id) { removeItemLocalForMode("activities", id); } // =============================== // LOCAL STORAGE CACHE // =============================== function saveLocalState() { saveLocalStateForMode(state.mode); } function saveLocalStateForMode(mode) { const safeMode = normalizeMode(mode); try { const arr = state.mode === safeMode ? state.items : getLocalItemsForMode(safeMode); localStorage.setItem(cacheKeyForMode(safeMode), JSON.stringify(arr || [])); } catch (e) { console.warn("saveLocalStateForMode error:", e); } } function savePhotosCache() { saveLocalStateForMode("photos"); } function saveActivitiesCache() { saveLocalStateForMode("activities"); } function loadLocalState() { try { const safeMode = normalizeMode(state.mode); const arr = getLocalItemsForMode(safeMode); // Non filtrare qui deleted_at. // Il filtro deve stare solo in gallery.js, // perché dipende dal checkbox "Mostra eliminate". state.items = arr; return state.items; } catch (e) { console.warn("loadLocalState error:", e); } state.items = []; return []; } // =============================== // CAMBIO MODALITÀ GALLERY // =============================== function setGalleryMode(mode) { const safeMode = normalizeMode(mode); state.mode = safeMode; loadLocalState(); if (typeof refreshGallery === "function") { refreshGallery(); } console.log("[setGalleryMode]", { mode: state.mode, items: getLocalItems().length, sample: getLocalItems().slice(0, 3), }); } // =============================== // EXPORT // =============================== window.normalizeMode = normalizeMode; window.getLastSync = getLastSync; window.setLastSync = setLastSync; window.getLastSyncForMode = getLastSyncForMode; window.setLastSyncForMode = setLastSyncForMode; window.getLocalItems = getLocalItems; window.setLocalItems = setLocalItems; window.getLocalItemsForMode = getLocalItemsForMode; window.setLocalItemsForMode = setLocalItemsForMode; window.setLocalPhotos = setLocalPhotos; window.setLocalActivities = setLocalActivities; window.addItemLocal = addItemLocal; window.removeItemLocal = removeItemLocal; window.addItemLocalForMode = addItemLocalForMode; window.removeItemLocalForMode = removeItemLocalForMode; window.addPhotoLocal = addPhotoLocal; window.addActivityLocal = addActivityLocal; window.removePhotoLocal = removePhotoLocal; window.removeActivityLocal = removeActivityLocal; window.saveLocalState = saveLocalState; window.saveLocalStateForMode = saveLocalStateForMode; window.savePhotosCache = savePhotosCache; window.saveActivitiesCache = saveActivitiesCache; window.loadLocalState = loadLocalState; window.setGalleryMode = setGalleryMode;