From 1dc1dbc91fbb6c7def770e7fd58323b907493f5a Mon Sep 17 00:00:00 2001 From: Josh Hawkins <32435876+hawkeye217@users.noreply.github.com> Date: Mon, 27 Oct 2025 14:46:47 -0500 Subject: [PATCH] use table on desktop and keep cards on mobile --- web/src/views/settings/TriggerView.tsx | 416 +++++++++++++++++-------- 1 file changed, 288 insertions(+), 128 deletions(-) diff --git a/web/src/views/settings/TriggerView.tsx b/web/src/views/settings/TriggerView.tsx index fb7afaa89..883c1f391 100644 --- a/web/src/views/settings/TriggerView.tsx +++ b/web/src/views/settings/TriggerView.tsx @@ -13,12 +13,21 @@ import { TooltipProvider, TooltipTrigger, } from "@/components/ui/tooltip"; +import { + Table, + TableBody, + TableCell, + TableHead, + TableHeader, + TableRow, +} from "@/components/ui/table"; import { LuPlus, LuTrash, LuPencil, LuSearch, LuExternalLink, + LuCircle, } from "react-icons/lu"; import ActivityIndicator from "@/components/indicators/activity-indicator"; import TriggerWizardDialog from "@/components/trigger/TriggerWizardDialog"; @@ -136,25 +145,14 @@ export default function TriggerView({ } return current; }); - const target = document.querySelector( - `#trigger-${triggers_status_ws.name}`, - ); - if (target) { - const ring = target.querySelector(".trigger-ring"); - if (ring) { - ring.classList.add(`outline-selected`); - ring.classList.remove("outline-transparent"); - const timeout = setTimeout(() => { - ring.classList.remove(`outline-selected`); - ring.classList.add("outline-transparent"); - setTriggeredTrigger((prev) => - (prev || []).filter((name) => name !== triggers_status_ws.name), - ); - }, 3000); - return () => clearTimeout(timeout); - } - } + const timeout = setTimeout(() => { + setTriggeredTrigger((prev) => + (prev || []).filter((name) => name !== triggers_status_ws.name), + ); + }, 3000); + + return () => clearTimeout(timeout); }, [triggers_status_ws, selectedCamera, mutate]); useEffect(() => { @@ -487,72 +485,69 @@ export default function TriggerView({
-
-
- {triggers.length === 0 ? ( -
-

- {t("triggers.table.noTriggers")} -

-
- ) : ( -
- {triggers.map((trigger) => ( -
-
-
-

+ {triggers.length === 0 ? ( +
+

+ {t("triggers.table.noTriggers")} +

+
+ ) : ( + triggers.map((trigger) => ( +
+
+
+
+ +
+
+
{trigger.friendly_name || trigger.name} -

-
-
- - {t(`triggers.type.${trigger.type}`)} - -
- +
+
+ + {t(`triggers.type.${trigger.type}`)} + -
+ {t("triggers.table.lastTriggered")}:{" "} {trigger_status && trigger_status.triggers[trigger.name] @@ -581,9 +576,173 @@ export default function TriggerView({ }, ) : "Never"} + + {trigger_status?.triggers[trigger.name] + ?.triggering_event_id && ( + + )} + +
+
+
+ +
+ + + + + +

{t("triggers.table.edit")}

+
+
+ + + + + +

{t("triggers.table.deleteTrigger")}

+
+
+
+
+
+
+ )) + )} +
+ + {/* Desktop Table View */} +
+
+ + + + + {t("name", { ns: "common" })} + {t("triggers.table.type")} + + {t("triggers.table.lastTriggered")} + + + {t("triggers.table.actions")} + + + + + {triggers.length === 0 ? ( + + + {t("triggers.table.noTriggers")} + + + ) : ( + triggers.map((trigger) => ( + + + + + +
+ {trigger.friendly_name || trigger.name} +
+
+ + + {t(`triggers.type.${trigger.type}`)} + + + + + + {trigger_status && + trigger_status.triggers[trigger.name] + ?.last_triggered + ? formatUnixTimestampToDateTime( + trigger_status.triggers[trigger.name] + ?.last_triggered, + { + timezone: config.ui.timezone, + date_format: + config.ui.time_format == "24hour" + ? t( + "time.formattedTimestamp2.24hour", + { + ns: "common", + }, + ) + : t( + "time.formattedTimestamp2.12hour", + { + ns: "common", + }, + ), + time_style: "medium", + date_style: "medium", + }, + ) + : "Never"} + + {trigger_status?.triggers[trigger.name] + ?.triggering_event_id && ( - + {t("details.item.button.viewInExplore", { @@ -591,63 +750,64 @@ export default function TriggerView({ })} - + )} - - - -
- - - - - - -

{t("triggers.table.edit")}

-
-
- - - - - -

{t("triggers.table.deleteTrigger")}

-
-
-
-
- - ))} - - )} +
+ + +
+ + + + + +

{t("triggers.table.edit")}

+
+
+ + + + + +

{t("triggers.table.deleteTrigger")}

+
+
+
+
+
+
+ )) + )} +
+