diff --git a/src/components/SignatureCard.tsx b/src/components/SignatureCard.tsx index a3ed70a..264a53e 100644 --- a/src/components/SignatureCard.tsx +++ b/src/components/SignatureCard.tsx @@ -1,18 +1,42 @@ import { Card, CardContent } from "@/components/ui/card"; import { Badge } from "@/components/ui/badge"; +import { Button } from "@/components/ui/button"; +import { + AlertDialog, + AlertDialogAction, + AlertDialogCancel, + AlertDialogContent, + AlertDialogDescription, + AlertDialogFooter, + AlertDialogHeader, + AlertDialogTitle, + AlertDialogTrigger, +} from "@/components/ui/alert-dialog"; import { SigviewRecord as Signature } from "@/lib/pbtypes"; import { getSignatureMeta } from "@/hooks/useSignatureCategories"; +import { Trash2 } from "lucide-react"; interface SignatureCardProps { signature: Signature; + onDelete?: (signatureId: string) => Promise; } -export const SignatureCard = ({ signature }: SignatureCardProps) => { +export const SignatureCard = ({ signature, onDelete }: SignatureCardProps) => { const meta = getSignatureMeta(signature.type); const isGasSite = signature.type?.toLowerCase().includes('gas'); + const handleDelete = async () => { + if (onDelete) { + try { + await onDelete(signature.id); + } catch (error) { + console.error('Failed to delete signature:', error); + } + } + }; + return ( - +
{/* Type Badge - Most Important */} @@ -45,6 +69,44 @@ export const SignatureCard = ({ signature }: SignatureCardProps) => {
+ + {/* Delete Button */} + {onDelete && ( +
+ + + + + + + Delete Signature + + Are you sure you want to delete signature {signature.identifier}? +
+ This action cannot be undone. +
+
+ + + Cancel + + + Delete + + +
+
+
+ )}
); diff --git a/src/components/SignatureCategories.tsx b/src/components/SignatureCategories.tsx index fbe3084..0564ddf 100644 --- a/src/components/SignatureCategories.tsx +++ b/src/components/SignatureCategories.tsx @@ -1,4 +1,3 @@ - import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"; import { Badge } from "@/components/ui/badge"; import { Collapsible, CollapsibleContent, CollapsibleTrigger } from "@/components/ui/collapsible"; @@ -9,9 +8,10 @@ import { SignatureCategory } from "@/hooks/useSignatureCategories"; interface SignatureCategoriesProps { categories: SignatureCategory[]; onToggleCategory: (categoryId: string) => void; + onDelete?: (signatureId: string) => Promise; } -export const SignatureCategories = ({ categories, onToggleCategory }: SignatureCategoriesProps) => { +export const SignatureCategories = ({ categories, onToggleCategory, onDelete }: SignatureCategoriesProps) => { if (categories.length === 0) { return ( @@ -51,7 +51,7 @@ export const SignatureCategories = ({ categories, onToggleCategory }: SignatureC
{category.signatures.map((signature) => ( - + ))}
diff --git a/src/components/SignatureListItem.tsx b/src/components/SignatureListItem.tsx index abd8096..bb0f4da 100644 --- a/src/components/SignatureListItem.tsx +++ b/src/components/SignatureListItem.tsx @@ -1,13 +1,26 @@ import { Badge } from "@/components/ui/badge"; -import { Clock, AlertTriangle, Skull } from "lucide-react"; +import { Button } from "@/components/ui/button"; +import { + AlertDialog, + AlertDialogAction, + AlertDialogCancel, + AlertDialogContent, + AlertDialogDescription, + AlertDialogFooter, + AlertDialogHeader, + AlertDialogTitle, + AlertDialogTrigger, +} from "@/components/ui/alert-dialog"; +import { Clock, AlertTriangle, Skull, Trash2 } from "lucide-react"; import { SigviewRecord as Signature } from "@/lib/pbtypes"; import { getSignatureMeta } from "@/hooks/useSignatureCategories"; interface SignatureListItemProps { signature: Signature; + onDelete?: (signatureId: string) => Promise; } -export const SignatureListItem = ({ signature }: SignatureListItemProps) => { +export const SignatureListItem = ({ signature, onDelete }: SignatureListItemProps) => { const isOld = () => { if (!signature.updated) return false; const updatedTime = new Date(signature.updated); @@ -46,6 +59,16 @@ export const SignatureListItem = ({ signature }: SignatureListItemProps) => { const isGasSite = signature.type?.toLowerCase().includes('gas'); const oldEntry = isOld(); + const handleDelete = async () => { + if (onDelete) { + try { + await onDelete(signature.id); + } catch (error) { + console.error('Failed to delete signature:', error); + } + } + }; + return (
{ )}
+ + {/* Delete Button */} + {onDelete && ( + + + + + + + Delete Signature + + Are you sure you want to delete signature {signature.identifier}? +
+ This action cannot be undone. +
+
+ + + Cancel + + + Delete + + +
+
+ )} ); }; diff --git a/src/components/SystemTracker.tsx b/src/components/SystemTracker.tsx index b1d014f..63c8678 100644 --- a/src/components/SystemTracker.tsx +++ b/src/components/SystemTracker.tsx @@ -15,9 +15,10 @@ interface SystemTrackerProps { system: string; cleanMode: boolean; onCleanModeToggle: (enabled: boolean) => void; + onDelete?: (signatureId: string) => Promise; } -export const SystemTracker = ({ system, cleanMode, onCleanModeToggle }: SystemTrackerProps) => { +export const SystemTracker = ({ system, cleanMode, onCleanModeToggle, onDelete }: SystemTrackerProps) => { const { data: signaturesData, refetch: refetchSignatures, @@ -146,6 +147,7 @@ export const SystemTracker = ({ system, cleanMode, onCleanModeToggle }: SystemTr )} diff --git a/src/pages/SystemView.tsx b/src/pages/SystemView.tsx index 6db0df0..36f760d 100644 --- a/src/pages/SystemView.tsx +++ b/src/pages/SystemView.tsx @@ -8,7 +8,7 @@ import { Header } from "@/components/Header"; import { parseSignature, parseScannedPercentage } from "@/utils/signatureParser"; import { getSystemId } from "@/utils/systemApi"; import pb from "@/lib/pocketbase"; -import { SigviewRecord as Signature, SignatureRecord, SigviewRecord } from "@/lib/pbtypes"; +import { SigviewRecord as Signature, SignatureRecord } from "@/lib/pbtypes"; export const SystemView = () => { const { system, region } = useParams(); @@ -70,8 +70,21 @@ export const SystemView = () => { const deleteSignature = async (signatureId: string): Promise => { try { await pb.collection('signature').delete(signatureId); + + // Invalidate queries to refresh the data + queryClient.invalidateQueries({ queryKey: ['signatures', system] }); + + toast({ + title: "Signature Deleted", + description: "The signature has been successfully deleted.", + }); } catch (error) { console.error('Failed to delete signature:', error); + toast({ + title: "Delete Failed", + description: error instanceof Error ? error.message : "Failed to delete signature.", + variant: "destructive" + }); throw error; } }; @@ -179,6 +192,7 @@ export const SystemView = () => { system={system} cleanMode={cleanMode} onCleanModeToggle={setCleanMode} + onDelete={deleteSignature} />