,
+ ) => {
+ setFrigatePlusSettings((prevConfig) => ({
+ model: {
+ ...prevConfig.model,
+ ...newConfig.model,
+ },
+ }));
+ setUnsavedChanges(true);
+ setChangedValue(true);
+ };
+
+ const saveToConfig = useCallback(async () => {
+ setIsLoading(true);
+
+ axios
+ .put(`config/set?model.path=plus://${frigatePlusSettings.model.id}`, {
+ requires_restart: 0,
+ })
+ .then((res) => {
+ if (res.status === 200) {
+ toast.success(t("frigatePlus.toast.success"), {
+ position: "top-center",
+ });
+ setChangedValue(false);
+ addMessage(
+ "plus_restart",
+ "Restart required (Frigate+ model changed)",
+ undefined,
+ "plus_restart",
+ );
+ updateConfig();
+ } else {
+ toast.error(
+ t("frigatePlus.toast.error", { errorMessage: res.statusText }),
+ {
+ position: "top-center",
+ },
+ );
+ }
+ })
+ .catch((error) => {
+ const errorMessage =
+ error.response?.data?.message ||
+ error.response?.data?.detail ||
+ "Unknown error";
+ toast.error(
+ t("toast.save.error.title", { errorMessage, ns: "common" }),
+ {
+ position: "top-center",
+ },
+ );
+ })
+ .finally(() => {
+ setIsLoading(false);
+ });
+ }, [updateConfig, addMessage, frigatePlusSettings, t]);
+
+ const onCancel = useCallback(() => {
+ setFrigatePlusSettings(origPlusSettings);
+ setChangedValue(false);
+ removeMessage("plus_settings", "plus_settings");
+ }, [origPlusSettings, removeMessage]);
+
+ useEffect(() => {
+ if (changedValue) {
+ addMessage(
+ "plus_settings",
+ `Unsaved Frigate+ settings changes`,
+ undefined,
+ "plus_settings",
+ );
+ } else {
+ removeMessage("plus_settings", "plus_settings");
+ }
+ // we know that these deps are correct
+ // eslint-disable-next-line react-hooks/exhaustive-deps
+ }, [changedValue]);
useEffect(() => {
document.title = t("documentTitle.frigatePlus");
@@ -28,6 +198,10 @@ export default function FrigatePlusSettingsView() {
);
};
+ if (!config) {
+ return ;
+ }
+
return (
<>
@@ -101,7 +275,13 @@ export default function FrigatePlusSettingsView() {
-
{config.model.plus.name}
+
+ {config.model.plus.name} (
+ {config.model.plus.width +
+ "x" +
+ config.model.plus.height}
+ )
+
-
-
-
{config.model.plus.id}
-
+
+
+
+ {t("frigatePlus.modelInfo.availableModels")}
+
+
+
+
+ frigatePlus.modelInfo.modelSelect
+
+
+
+
+
+
)}
@@ -227,6 +481,34 @@ export default function FrigatePlusSettingsView() {
)}
+
+
+
+
+
+
+