From a7761225bc344fb074c7312a892306461c2e235a Mon Sep 17 00:00:00 2001 From: Josh Hawkins <32435876+hawkeye217@users.noreply.github.com> Date: Thu, 2 Apr 2026 08:25:11 -0500 Subject: [PATCH] ensure polygon is closed before allowing save --- web/src/components/settings/MotionMaskEditPane.tsx | 8 +++++++- web/src/components/settings/ObjectMaskEditPane.tsx | 8 +++++++- web/src/components/settings/ZoneEditPane.tsx | 8 +++++++- 3 files changed, 21 insertions(+), 3 deletions(-) diff --git a/web/src/components/settings/MotionMaskEditPane.tsx b/web/src/components/settings/MotionMaskEditPane.tsx index e5734d07a7..4fa09837ca 100644 --- a/web/src/components/settings/MotionMaskEditPane.tsx +++ b/web/src/components/settings/MotionMaskEditPane.tsx @@ -156,7 +156,7 @@ export default function MotionMaskEditPane({ message: t("masksAndZones.form.name.error.mustNotBeEmpty"), }), enabled: z.boolean(), - isFinished: z.boolean().refine(() => polygon?.isFinished === true, { + isFinished: z.boolean().refine((val) => val === true, { message: t("masksAndZones.form.polygonDrawing.error.mustBeFinished"), }), }); @@ -172,6 +172,12 @@ export default function MotionMaskEditPane({ }, }); + useEffect(() => { + if (polygon?.isFinished !== undefined) { + form.setValue("isFinished", polygon.isFinished, { shouldValidate: true }); + } + }, [polygon?.isFinished, form]); + const saveToConfig = useCallback( async ({ name: maskId, diff --git a/web/src/components/settings/ObjectMaskEditPane.tsx b/web/src/components/settings/ObjectMaskEditPane.tsx index dde87f55e2..4bff73c288 100644 --- a/web/src/components/settings/ObjectMaskEditPane.tsx +++ b/web/src/components/settings/ObjectMaskEditPane.tsx @@ -144,7 +144,7 @@ export default function ObjectMaskEditPane({ }), enabled: z.boolean(), objects: z.string(), - isFinished: z.boolean().refine(() => polygon?.isFinished === true, { + isFinished: z.boolean().refine((val) => val === true, { message: t("masksAndZones.form.polygonDrawing.error.mustBeFinished"), }), }); @@ -161,6 +161,12 @@ export default function ObjectMaskEditPane({ }, }); + useEffect(() => { + if (polygon?.isFinished !== undefined) { + form.setValue("isFinished", polygon.isFinished, { shouldValidate: true }); + } + }, [polygon?.isFinished, form]); + const saveToConfig = useCallback( async ({ name: maskId, diff --git a/web/src/components/settings/ZoneEditPane.tsx b/web/src/components/settings/ZoneEditPane.tsx index ef9a3c3cba..0affaff079 100644 --- a/web/src/components/settings/ZoneEditPane.tsx +++ b/web/src/components/settings/ZoneEditPane.tsx @@ -208,7 +208,7 @@ export default function ZoneEditPane({ }) .optional() .or(z.literal("")), - isFinished: z.boolean().refine(() => polygon?.isFinished === true, { + isFinished: z.boolean().refine((val) => val === true, { message: t("masksAndZones.form.polygonDrawing.error.mustBeFinished"), }), objects: z.array(z.string()).optional(), @@ -334,6 +334,12 @@ export default function ZoneEditPane({ } }, [polygon, form, t, watchSpeedEstimation]); + useEffect(() => { + if (polygon?.isFinished !== undefined) { + form.setValue("isFinished", polygon.isFinished, { shouldValidate: true }); + } + }, [polygon?.isFinished, form]); + const saveToConfig = useCallback( async ( {