265 lines
6.2 KiB
JavaScript
265 lines
6.2 KiB
JavaScript
// ===============================
|
|
// 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;
|