From 16c21cf1fae317113970c1ebf0978f5f5b5328fe Mon Sep 17 00:00:00 2001 From: maziggy Date: Wed, 31 Dec 2025 11:40:14 +0100 Subject: [PATCH] - Added confirmation modal to sidebar's quick power switch --- frontend/src/components/SwitchbarPopover.tsx | 133 +++++++++++-------- 1 file changed, 78 insertions(+), 55 deletions(-) diff --git a/frontend/src/components/SwitchbarPopover.tsx b/frontend/src/components/SwitchbarPopover.tsx index 0ac7071ee..1c0dd62fb 100644 --- a/frontend/src/components/SwitchbarPopover.tsx +++ b/frontend/src/components/SwitchbarPopover.tsx @@ -1,7 +1,9 @@ +import { useState } from 'react'; import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query'; import { Plug, Power, PowerOff, Loader2, Wifi, WifiOff, Zap } from 'lucide-react'; import { api } from '../api/client'; import type { SmartPlug } from '../api/client'; +import { ConfirmModal } from './ConfirmModal'; interface SwitchbarPopoverProps { onClose: () => void; @@ -9,6 +11,7 @@ interface SwitchbarPopoverProps { function SwitchItem({ plug }: { plug: SmartPlug }) { const queryClient = useQueryClient(); + const [confirmAction, setConfirmAction] = useState<'on' | 'off' | null>(null); // Fetch current status const { data: status, isLoading: statusLoading } = useQuery({ @@ -29,66 +32,86 @@ function SwitchItem({ plug }: { plug: SmartPlug }) { const isReachable = status?.reachable ?? false; const isPending = controlMutation.isPending; + const handleConfirm = () => { + if (confirmAction) { + controlMutation.mutate(confirmAction); + setConfirmAction(null); + } + }; + return ( -
-
-
- -
-
-

{plug.name}

-
- {statusLoading ? ( - - ) : isReachable ? ( - <> - - {status?.state || 'Unknown'} - {status?.energy?.power !== null && status?.energy?.power !== undefined && ( - <> - | - - {Math.round(status.energy.power)}W - - )} - - ) : ( - <> - - Offline - - )} + <> +
+
+
+
+
+

{plug.name}

+
+ {statusLoading ? ( + + ) : isReachable ? ( + <> + + {status?.state || 'Unknown'} + {status?.energy?.power !== null && status?.energy?.power !== undefined && ( + <> + | + + {Math.round(status.energy.power)}W + + )} + + ) : ( + <> + + Offline + + )} +
+
+
+ +
+ +
-
- - -
-
+ {confirmAction && ( + setConfirmAction(null)} + /> + )} + ); }