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:
1 parent
b747a3ba74
commit
d17c9277ff
2 files changed
+17
-37
No files matched your search
+3
-17
@@ -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));
|
||||
|
||||
@@ -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);
|
||||
};
|
||||
|
||||
|
||||
Reference in new issue
Block a user