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")}
+
+
+
+
+
+
+ ))
+ )}
+
+