photo_server_json_con_aves22/public/js/state.js
2026-04-18 20:14:42 +02:00

84 lines
No EOL
1.9 KiB
JavaScript

// ===============================
// state.js — Stato condiviso
// ===============================
// ---- STATO FOTO ----
let localPhotos = [];
// ---- LAST SYNC ----
function getLastSync() {
return localStorage.getItem("lastSync");
}
function setLastSync(ts) {
if (ts) localStorage.setItem("lastSync", ts);
}
// ---- FOTO: GET / SET ----
function getLocalPhotos() {
return localPhotos;
}
function setLocalPhotos(photos) {
localPhotos = Array.isArray(photos) ? photos : [];
saveLocalState();
}
// ---- FOTO: ADD / REMOVE ----
function addPhotoLocal(photo) {
if (!photo || !photo.id) return;
// Evita duplicati
localPhotos = localPhotos.filter(p => p.id !== photo.id);
// Aggiungi la versione nuova
localPhotos.push(photo);
saveLocalState();
}
function removePhotoLocal(id) {
const before = localPhotos.length;
localPhotos = localPhotos.filter(p => p.id !== id);
const after = localPhotos.length;
console.log("[removePhotoLocal] id:", id, "prima:", before, "dopo:", after);
saveLocalState();
}
// ---- LOCAL STORAGE CACHE ----
function saveLocalState() {
try {
localStorage.setItem("photosCache", JSON.stringify(localPhotos));
} catch (e) {
console.warn("saveLocalState error:", e);
}
}
function loadLocalState() {
try {
const raw = localStorage.getItem("photosCache");
if (!raw) return [];
const arr = JSON.parse(raw);
if (Array.isArray(arr)) {
// Filtra eventuali soft delete rimaste
localPhotos = arr.filter(p => !p.deleted_at);
return localPhotos;
}
} catch (e) {
console.warn("loadLocalState error:", e);
}
return [];
}
// ---- EXPORT ----
window.getLastSync = getLastSync;
window.setLastSync = setLastSync;
window.getLocalPhotos = getLocalPhotos;
window.setLocalPhotos = setLocalPhotos;
window.addPhotoLocal = addPhotoLocal;
window.removePhotoLocal = removePhotoLocal;
window.saveLocalState = saveLocalState;
window.loadLocalState = loadLocalState;