'use client'; import { useRouter } from 'next/navigation'; import { useState, useTransition } from 'react'; import { Check } from 'lucide-react'; import { toast } from 'sonner'; import { cn } from 'cn'; import { setDesignAction } from '@/app/(app)/konto/actions'; import { DESIGN_INFO, DESIGNS, type Design } from '@/lib/design'; /** Switches the look right away and stores it in the cookie in the background. */ function applyDesign(design: Design) { const root = document.documentElement; root.dataset.design = design; root.classList.toggle('dark', DESIGN_INFO[design].dark); } export function DesignPicker({ current }: { current: Design }) { const router = useRouter(); const [selected, setSelected] = useState(current); const [, startTransition] = useTransition(); function choose(design: Design) { const previous = selected; setSelected(design); applyDesign(design); startTransition(async () => { const result = await setDesignAction({ design }); if (!result.ok) { setSelected(previous); applyDesign(previous); toast.error(result.error); return; } router.refresh(); }); } return (
Design
{DESIGNS.map((design) => { const info = DESIGN_INFO[design]; const active = design === selected; return ( ); })}
); }