diff --git a/webpage/src/components/FileListItem.svelte b/webpage/src/components/FileListItem.svelte index 048e3d1..49e6d3b 100644 --- a/webpage/src/components/FileListItem.svelte +++ b/webpage/src/components/FileListItem.svelte @@ -10,6 +10,9 @@ QuestionIcon, TagIcon, UserIcon, + CheckCircleIcon, + WarningIcon, + WarningCircleIcon, } from "phosphor-svelte"; import { isFetchingRemote, @@ -43,6 +46,52 @@ $: syncStatus = $syncStateMap[type][file.name] || { state: SyncState.UNKNOWN, linkedFiles: [] }; + $: statusConfig = (() => { + switch (syncStatus.state) { + case SyncState.UNKNOWN: + return { + icon: QuestionIcon, + color: "text-amber-500", + variant: "warning", + text: "Prüfsumme fehlt. Bitte Metadaten aktualisieren.", + }; + case SyncState.SINGLE_SIDED: + return { + icon: CircleIcon, + color: "text-green-600", + variant: "info", + text: `Datei existiert nur ${type === "buzzer" ? "auf dem Buzzer" : "lokal"}.`, + }; + case SyncState.SYNCED: + return { + icon: CheckCircleIcon, + color: "text-green-600", + variant: "info", + text: "Datei ist synchronisiert.", + }; + case SyncState.CONFLICT: + return { + icon: WarningIcon, + color: "text-amber-600", + variant: "warning", + text: `Konflikt: Name/Tags weichen ab. Vergleiche mit ${syncStatus.linkedFiles[0]} ${type === "buzzer" ? "lokal" : "auf dem Buzzer"}`, + }; + case SyncState.DUPLICATE: + const duplicateText = + syncStatus.linkedFiles.length === 0 + ? `Diese Datei ist hier ok, aber ${type === "buzzer" ? "lokal" : "auf dem Buzzer"} existieren mehrere identische Versionen.` + : `Mehrfach vorhanden: Gleicher Inhalt auch in ${syncStatus.linkedFiles.join(" ")}`; + return { + icon: WarningCircleIcon, + color: "text-red-600", + variant: "danger", + text: duplicateText, + }; + default: + return null; + } + })(); + function toggleSelection() { if ($isFetchingRemote) return; @@ -102,16 +151,19 @@