add footer message for required restart

This commit is contained in:
Josh Hawkins 2026-02-11 11:02:53 -06:00
parent efd10aaa6a
commit 0db6e87413
2 changed files with 21 additions and 1 deletions

View File

@ -1231,6 +1231,7 @@
"selectPreset": "Select preset", "selectPreset": "Select preset",
"manualPlaceholder": "Enter FFmpeg arguments" "manualPlaceholder": "Enter FFmpeg arguments"
}, },
"restartRequiredFooter": "Configuration changed - Restart required",
"sections": { "sections": {
"detect": "Detection", "detect": "Detection",
"record": "Recording", "record": "Recording",

View File

@ -1,7 +1,14 @@
// Base Section Component for config form sections // Base Section Component for config form sections
// Used as a foundation for reusable section components // Used as a foundation for reusable section components
import { useMemo, useCallback, useState, useEffect, useRef } from "react"; import {
useMemo,
useCallback,
useState,
useEffect,
useRef,
useContext,
} from "react";
import useSWR from "swr"; import useSWR from "swr";
import axios from "axios"; import axios from "axios";
import { toast } from "sonner"; import { toast } from "sonner";
@ -46,6 +53,7 @@ import { applySchemaDefaults } from "@/lib/config-schema";
import { cn } from "@/lib/utils"; import { cn } from "@/lib/utils";
import { ConfigSectionData, JsonValue } from "@/types/configForm"; import { ConfigSectionData, JsonValue } from "@/types/configForm";
import ActivityIndicator from "@/components/indicators/activity-indicator"; import ActivityIndicator from "@/components/indicators/activity-indicator";
import { StatusBarMessagesContext } from "@/context/statusbar-provider";
import { import {
cameraUpdateTopicMap, cameraUpdateTopicMap,
buildOverrides, buildOverrides,
@ -159,6 +167,7 @@ export function ConfigSection({
]); ]);
const [isOpen, setIsOpen] = useState(!defaultCollapsed); const [isOpen, setIsOpen] = useState(!defaultCollapsed);
const { send: sendRestart } = useRestart(); const { send: sendRestart } = useRestart();
const statusBar = useContext(StatusBarMessagesContext);
// Create a key for this section's pending data // Create a key for this section's pending data
const pendingDataKey = useMemo( const pendingDataKey = useMemo(
@ -505,6 +514,15 @@ export function ConfigSection({
}); });
if (needsRestart) { if (needsRestart) {
statusBar?.addMessage(
"config_restart_required",
t("configForm.restartRequiredFooter", {
ns: "views/settings",
defaultValue: "Configuration changed - Restart required",
}),
undefined,
"config_restart_required",
);
toast.success( toast.success(
t("toast.successRestartRequired", { t("toast.successRestartRequired", {
ns: "views/settings", ns: "views/settings",
@ -578,6 +596,7 @@ export function ConfigSection({
cameraName, cameraName,
t, t,
refreshConfig, refreshConfig,
statusBar,
onSave, onSave,
rawFormData, rawFormData,
sanitizeSectionData, sanitizeSectionData,