fix: sablony cenoviek len z databazy, stara kopia v prehliadaci sa zmaze

Neulozene alebo zmazane sablony z localStorage sa uz neukazuju v roletkach.
Ked sa sablonu nepodari ulozit do databazy, editor to ohlasi (predtym ju
potichu ulozil len do prehliadaca).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Jakub_HostacnyandClaude Opus 5.5 committed 2026-10-21 16:53:24 +02:00
1 parent b747a3ba74
commit d17c9277ff
2 files changed
+17 -37

No files matched your search

+3 -17
View File
@@ -10,7 +10,7 @@ import { getBrevoCampaignUrl } from '@/lib/brevo';
import { TopBar } from '@/components/editor/TopBar';
import { ConfigPanel } from '@/components/editor/ConfigPanel';
import { ProductImportModal } from '@/components/editor/ProductImportModal';
import { BadgeEditorModal } from '@/components/editor/BadgeEditorModal';
import { BadgeEditorModal, clearLocalBadges } from '@/components/editor/BadgeEditorModal';
import { SavedCampaignsModal } from '@/components/editor/SavedCampaignsModal';
import { NameDialog } from '@/components/editor/NameDialog';
import JSZip from 'jszip';
@@ -64,22 +64,8 @@ export default function Home() {
console.warn('Error fetching badges in page:', e);
}
try {
const local = localStorage.getItem('coop_custom_badges');
if (local) {
const parsed = JSON.parse(local);
if (Array.isArray(parsed)) {
const existingIds = new Set(loaded.map((b) => b.id));
for (const b of parsed) {
// len šablóny neuložené do databázy – zmazané šablóny sa z prehliadača nesmú vrátiť
if (!existingIds.has(b.id) && String(b.id).startsWith('badge-')) {
loaded.push(b);
existingIds.add(b.id);
}
}
}
}
} catch (e) {}
// šablóny sú len v databáze; starú kópiu z prehliadača zmažeme
clearLocalBadges();
const all = [...loaded];
const existingIds = new Set(all.map((b) => b.id));
+14 -20
View File
@@ -55,9 +55,11 @@ function toBadgeDbPayload(badge: BadgeTemplate) {
};
}
function saveLocal(list: BadgeTemplate[]) {
// Šablóny sú len v databáze. Staršie verzie ukladali kópiu do prehliadača – tú zmažeme,
// aby sa v roletkách neukazovali neuložené alebo už zmazané šablóny.
export function clearLocalBadges() {
try {
localStorage.setItem(LOCAL_KEY, JSON.stringify(list));
localStorage.removeItem(LOCAL_KEY);
} catch {
// localStorage nemusí byť dostupný
}
@@ -358,18 +360,9 @@ export const BadgeEditorModal: React.FC<BadgeEditorModalProps> = ({
const { data } = await supabase.from('badges').select('*').order('created_at', { ascending: false });
loaded = ((data as BadgeRow[]) || []).map(badgeFromRow);
} catch {
// bez databázy použijeme kópiu v prehliadači
}
try {
const local = JSON.parse(localStorage.getItem(LOCAL_KEY) || '[]');
if (Array.isArray(local)) {
const ids = new Set(loaded.map((b) => b.id));
// z prehliadača len šablóny, ktoré ešte neboli uložené do databázy (zmazané sa nesmú vrátiť)
for (const b of local as BadgeTemplate[]) if (!ids.has(b.id) && b.id.startsWith('badge-')) loaded.push(b);
}
} catch {
// localStorage nemusí byť dostupný
// databáza nie je dostupná – zoznam ostane prázdny
}
clearLocalBadges();
if (cancelled) return;
setBadges(loaded);
open(loaded[0] || null);
@@ -507,13 +500,14 @@ export const BadgeEditorModal: React.FC<BadgeEditorModalProps> = ({
if (error) throw error;
if (data?.[0]) saved = { ...badge, id: (data[0] as BadgeRow).id };
} catch (err) {
console.warn('Šablóna sa uložila len v prehliadači:', err);
setSaving(false);
alert(`Šablónu sa nepodarilo uložiť do databázy: ${(err as Error).message || err}`);
return null;
}
const list = badges.some((b) => b.id === badge.id)
? badges.map((b) => (b.id === badge.id ? saved : b))
: [saved, ...badges];
setBadges(list);
saveLocal(list);
setBadge(saved);
setSavedJson(JSON.stringify(saved));
setSaving(false);
@@ -559,14 +553,15 @@ export const BadgeEditorModal: React.FC<BadgeEditorModalProps> = ({
let saved = copy;
try {
const { data, error } = await supabase.from('badges').insert([toBadgeDbPayload(copy)]).select();
if (!error && data?.[0]) saved = { ...copy, id: (data[0] as BadgeRow).id };
} catch {
// bez databázy ostane kópia v prehliadači
if (error || !data?.[0]) throw error || new Error('bez odpovede');
saved = { ...copy, id: (data[0] as BadgeRow).id };
} catch (err) {
alert(`Kópiu šablóny sa nepodarilo uložiť do databázy: ${(err as Error).message || err}`);
return;
}
const list = [...badges];
list.splice(list.findIndex((x) => x.id === b.id) + 1, 0, saved);
setBadges(list);
saveLocal(list);
open(saved);
};
@@ -585,7 +580,6 @@ export const BadgeEditorModal: React.FC<BadgeEditorModalProps> = ({
}
const list = badges.filter((x) => x.id !== b.id);
setBadges(list);
saveLocal(list);
if (badge?.id === b.id) open(list[0] || null);
};