frontend for enabled_in_config

This commit is contained in:
Josh Hawkins 2026-01-21 11:17:55 -06:00
parent 366365e59f
commit e8d227eb0a
4 changed files with 26 additions and 5 deletions

View File

@ -289,6 +289,10 @@ export default function PolygonItem({
const handleToggleEnabled = useCallback( const handleToggleEnabled = useCallback(
(e: React.MouseEvent) => { (e: React.MouseEvent) => {
e.stopPropagation(); e.stopPropagation();
// Prevent toggling if disabled in config
if (polygon.enabled_in_config === false) {
return;
}
if (!polygon) { if (!polygon) {
return; return;
} }
@ -354,7 +358,7 @@ export default function PolygonItem({
<button <button
type="button" type="button"
onClick={handleToggleEnabled} onClick={handleToggleEnabled}
disabled={isLoading} disabled={isLoading || polygon.enabled_in_config === false}
className="mr-2 cursor-pointer border-none bg-transparent p-0 transition-opacity hover:opacity-70 disabled:cursor-not-allowed disabled:opacity-50" className="mr-2 cursor-pointer border-none bg-transparent p-0 transition-opacity hover:opacity-70 disabled:cursor-not-allowed disabled:opacity-50"
> >
<PolygonItemIcon <PolygonItemIcon
@ -370,14 +374,22 @@ export default function PolygonItem({
</button> </button>
</TooltipTrigger> </TooltipTrigger>
<TooltipContent> <TooltipContent>
{isPolygonEnabled {polygon.enabled_in_config === false
? t("button.disable", { ns: "common" }) ? t("masksAndZones.disabledInConfig", {
: t("button.enable", { ns: "common" })} ns: "views/settings",
})
: isPolygonEnabled
? t("button.disable", { ns: "common" })
: t("button.enable", { ns: "common" })}
</TooltipContent> </TooltipContent>
</Tooltip> </Tooltip>
))} ))}
<p <p
className={`cursor-default ${!isPolygonEnabled ? "line-through" : ""}`} className={cn(
"cursor-default",
!isPolygonEnabled && "opacity-60",
polygon.enabled_in_config === false && "line-through",
)}
> >
{polygon.friendly_name ?? polygon.name} {polygon.friendly_name ?? polygon.name}
{!isPolygonEnabled && " (disabled)"} {!isPolygonEnabled && " (disabled)"}

View File

@ -13,6 +13,7 @@ export type Polygon = {
color: number[]; color: number[];
friendly_name?: string; friendly_name?: string;
enabled?: boolean; enabled?: boolean;
enabled_in_config?: boolean;
}; };
export type ZoneFormValuesType = { export type ZoneFormValuesType = {

View File

@ -110,6 +110,7 @@ export interface CameraConfig {
[maskId: string]: { [maskId: string]: {
friendly_name?: string; friendly_name?: string;
enabled: boolean; enabled: boolean;
enabled_in_config?: boolean;
coordinates: string; coordinates: string;
}; };
}; };
@ -138,6 +139,7 @@ export interface CameraConfig {
[maskId: string]: { [maskId: string]: {
friendly_name?: string; friendly_name?: string;
enabled: boolean; enabled: boolean;
enabled_in_config?: boolean;
coordinates: string; coordinates: string;
}; };
}; };
@ -153,6 +155,7 @@ export interface CameraConfig {
[maskId: string]: { [maskId: string]: {
friendly_name?: string; friendly_name?: string;
enabled: boolean; enabled: boolean;
enabled_in_config?: boolean;
coordinates: string; coordinates: string;
}; };
}; };
@ -291,6 +294,7 @@ export interface CameraConfig {
coordinates: string; coordinates: string;
distances: string[]; distances: string[];
enabled: boolean; enabled: boolean;
enabled_in_config?: boolean;
filters: Record<string, unknown>; filters: Record<string, unknown>;
inertia: number; inertia: number;
loitering_time: number; loitering_time: number;

View File

@ -235,6 +235,7 @@ export default function MasksAndZonesView({
name, name,
friendly_name: zoneData.friendly_name, friendly_name: zoneData.friendly_name,
enabled: zoneData.enabled, enabled: zoneData.enabled,
enabled_in_config: zoneData.enabled_in_config,
objects: zoneData.objects, objects: zoneData.objects,
points: interpolatePoints( points: interpolatePoints(
parseCoordinates(zoneData.coordinates), parseCoordinates(zoneData.coordinates),
@ -263,6 +264,7 @@ export default function MasksAndZonesView({
name: maskId, name: maskId,
friendly_name: maskData.friendly_name, friendly_name: maskData.friendly_name,
enabled: maskData.enabled, enabled: maskData.enabled,
enabled_in_config: maskData.enabled_in_config,
objects: [], objects: [],
points: interpolatePoints( points: interpolatePoints(
parseCoordinates(maskData.coordinates), parseCoordinates(maskData.coordinates),
@ -286,6 +288,7 @@ export default function MasksAndZonesView({
name: maskId, name: maskId,
friendly_name: maskData.friendly_name, friendly_name: maskData.friendly_name,
enabled: maskData.enabled, enabled: maskData.enabled,
enabled_in_config: maskData.enabled_in_config,
objects: [], objects: [],
points: interpolatePoints( points: interpolatePoints(
parseCoordinates(maskData.coordinates), parseCoordinates(maskData.coordinates),
@ -322,6 +325,7 @@ export default function MasksAndZonesView({
name: maskId, name: maskId,
friendly_name: maskData.friendly_name, friendly_name: maskData.friendly_name,
enabled: maskData.enabled, enabled: maskData.enabled,
enabled_in_config: maskData.enabled_in_config,
objects: [objectName], objects: [objectName],
points: interpolatePoints( points: interpolatePoints(
parseCoordinates(maskData.coordinates), parseCoordinates(maskData.coordinates),