diff --git a/web/public/locales/en/views/settings.json b/web/public/locales/en/views/settings.json index 1946a1c62..9f211a442 100644 --- a/web/public/locales/en/views/settings.json +++ b/web/public/locales/en/views/settings.json @@ -386,11 +386,11 @@ "title": "Camera Review Settings", "object_descriptions": { "title": "Generative AI Object Descriptions", - "desc": "Temporarily enable/disable Generative AI object descriptions for this camera. When disabled, AI generated descriptions will not be requested for tracked objects on this camera." + "desc": "Temporarily enable/disable Generative AI object descriptions for this camera until Frigate restarts. When disabled, AI generated descriptions will not be requested for tracked objects on this camera." }, "review_descriptions": { "title": "Generative AI Review Descriptions", - "desc": "Temporarily enable/disable Generative AI review descriptions for this camera. When disabled, AI generated descriptions will not be requested for review items on this camera." + "desc": "Temporarily enable/disable Generative AI review descriptions for this camera until Frigate restarts. When disabled, AI generated descriptions will not be requested for review items on this camera." }, "review": { "title": "Review", diff --git a/web/src/views/settings/CameraReviewSettingsView.tsx b/web/src/views/settings/CameraReviewSettingsView.tsx index 7a7b92e4e..974ed1ed6 100644 --- a/web/src/views/settings/CameraReviewSettingsView.tsx +++ b/web/src/views/settings/CameraReviewSettingsView.tsx @@ -1,6 +1,7 @@ import Heading from "@/components/ui/heading"; import { useCallback, useContext, useEffect, useMemo, useState } from "react"; -import { Toaster, toast } from "sonner"; +import { toast } from "sonner"; +import { Toaster } from "@/components/ui/sonner"; import { Form, FormControl, @@ -158,11 +159,12 @@ export default function CameraReviewSettingsView({ }); } setChangedValue(true); + setUnsavedChanges(true); setSelectDetections(isChecked as boolean); }, // we know that these deps are correct // eslint-disable-next-line react-hooks/exhaustive-deps - [watchedAlertsZones], + [watchedAlertsZones, setUnsavedChanges], ); const saveToConfig = useCallback( @@ -197,6 +199,8 @@ export default function CameraReviewSettingsView({ position: "top-center", }, ); + setChangedValue(false); + setUnsavedChanges(false); updateConfig(); } else { toast.error( @@ -229,7 +233,14 @@ export default function CameraReviewSettingsView({ setIsLoading(false); }); }, - [updateConfig, setIsLoading, selectedCamera, cameraConfig, t], + [ + updateConfig, + setIsLoading, + selectedCamera, + cameraConfig, + t, + setUnsavedChanges, + ], ); const onCancel = useCallback(() => { @@ -495,6 +506,7 @@ export default function CameraReviewSettingsView({ )} onCheckedChange={(checked) => { setChangedValue(true); + setUnsavedChanges(true); return checked ? field.onChange([ ...field.value, @@ -600,6 +612,8 @@ export default function CameraReviewSettingsView({ zone.name, )} onCheckedChange={(checked) => { + setChangedValue(true); + setUnsavedChanges(true); return checked ? field.onChange([ ...field.value, @@ -699,7 +713,6 @@ export default function CameraReviewSettingsView({ )} /> -