mirror of
https://github.com/blakeblackshear/frigate.git
synced 2026-04-01 04:44:52 +03:00
zones frontend
This commit is contained in:
parent
e9aebbe53f
commit
aae5250122
@ -178,6 +178,7 @@ export default function ZoneEditPane({
|
|||||||
message: t("masksAndZones.form.zoneName.error.alreadyExists"),
|
message: t("masksAndZones.form.zoneName.error.alreadyExists"),
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
|
enabled: z.boolean().default(true),
|
||||||
inertia: z.coerce
|
inertia: z.coerce
|
||||||
.number()
|
.number()
|
||||||
.min(1, {
|
.min(1, {
|
||||||
@ -271,6 +272,13 @@ export default function ZoneEditPane({
|
|||||||
defaultValues: {
|
defaultValues: {
|
||||||
name: polygon?.name ?? "",
|
name: polygon?.name ?? "",
|
||||||
friendly_name: polygon?.friendly_name ?? polygon?.name ?? "",
|
friendly_name: polygon?.friendly_name ?? polygon?.name ?? "",
|
||||||
|
enabled:
|
||||||
|
polygon?.camera &&
|
||||||
|
polygon?.name &&
|
||||||
|
config?.cameras[polygon.camera]?.zones[polygon.name]?.enabled !==
|
||||||
|
undefined
|
||||||
|
? config?.cameras[polygon.camera]?.zones[polygon.name]?.enabled
|
||||||
|
: (polygon?.enabled ?? true),
|
||||||
inertia:
|
inertia:
|
||||||
polygon?.camera &&
|
polygon?.camera &&
|
||||||
polygon?.name &&
|
polygon?.name &&
|
||||||
@ -311,6 +319,7 @@ export default function ZoneEditPane({
|
|||||||
{
|
{
|
||||||
name: zoneName,
|
name: zoneName,
|
||||||
friendly_name,
|
friendly_name,
|
||||||
|
enabled,
|
||||||
inertia,
|
inertia,
|
||||||
loitering_time,
|
loitering_time,
|
||||||
objects: form_objects,
|
objects: form_objects,
|
||||||
@ -445,9 +454,11 @@ export default function ZoneEditPane({
|
|||||||
friendlyNameQuery = `&cameras.${polygon?.camera}.zones.${zoneName}.friendly_name=${encodeURIComponent(friendly_name)}`;
|
friendlyNameQuery = `&cameras.${polygon?.camera}.zones.${zoneName}.friendly_name=${encodeURIComponent(friendly_name)}`;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const enabledQuery = `&cameras.${polygon?.camera}.zones.${zoneName}.enabled=${enabled}`;
|
||||||
|
|
||||||
axios
|
axios
|
||||||
.put(
|
.put(
|
||||||
`config/set?cameras.${polygon?.camera}.zones.${zoneName}.coordinates=${coordinates}${inertiaQuery}${loiteringTimeQuery}${speedThresholdQuery}${distancesQuery}${objectQueries}${friendlyNameQuery}${alertQueries}${detectionQueries}`,
|
`config/set?cameras.${polygon?.camera}.zones.${zoneName}.coordinates=${coordinates}${enabledQuery}${inertiaQuery}${loiteringTimeQuery}${speedThresholdQuery}${distancesQuery}${objectQueries}${friendlyNameQuery}${alertQueries}${detectionQueries}`,
|
||||||
{
|
{
|
||||||
requires_restart: 0,
|
requires_restart: 0,
|
||||||
update_topic: `config/cameras/${polygon.camera}/zones`,
|
update_topic: `config/cameras/${polygon.camera}/zones`,
|
||||||
@ -581,6 +592,28 @@ export default function ZoneEditPane({
|
|||||||
nameDescription={t("masksAndZones.zones.name.tips")}
|
nameDescription={t("masksAndZones.zones.name.tips")}
|
||||||
placeholderName={t("masksAndZones.zones.name.inputPlaceHolder")}
|
placeholderName={t("masksAndZones.zones.name.inputPlaceHolder")}
|
||||||
/>
|
/>
|
||||||
|
<FormField
|
||||||
|
control={form.control}
|
||||||
|
name="enabled"
|
||||||
|
render={({ field }) => (
|
||||||
|
<FormItem className="flex flex-row items-center justify-between">
|
||||||
|
<div className="space-y-0.5">
|
||||||
|
<FormLabel>
|
||||||
|
{t("masksAndZones.zones.enabled.title")}
|
||||||
|
</FormLabel>
|
||||||
|
<FormDescription>
|
||||||
|
{t("masksAndZones.zones.enabled.description")}
|
||||||
|
</FormDescription>
|
||||||
|
</div>
|
||||||
|
<FormControl>
|
||||||
|
<Switch
|
||||||
|
checked={field.value}
|
||||||
|
onCheckedChange={field.onChange}
|
||||||
|
/>
|
||||||
|
</FormControl>
|
||||||
|
</FormItem>
|
||||||
|
)}
|
||||||
|
/>
|
||||||
|
|
||||||
<Separator className="my-2 flex bg-secondary" />
|
<Separator className="my-2 flex bg-secondary" />
|
||||||
<FormField
|
<FormField
|
||||||
|
|||||||
@ -18,6 +18,7 @@ export type Polygon = {
|
|||||||
export type ZoneFormValuesType = {
|
export type ZoneFormValuesType = {
|
||||||
name: string;
|
name: string;
|
||||||
friendly_name: string;
|
friendly_name: string;
|
||||||
|
enabled: boolean;
|
||||||
inertia: number;
|
inertia: number;
|
||||||
loitering_time: number;
|
loitering_time: number;
|
||||||
isFinished: boolean;
|
isFinished: boolean;
|
||||||
|
|||||||
@ -290,6 +290,7 @@ export interface CameraConfig {
|
|||||||
[zoneName: string]: {
|
[zoneName: string]: {
|
||||||
coordinates: string;
|
coordinates: string;
|
||||||
distances: string[];
|
distances: string[];
|
||||||
|
enabled: boolean;
|
||||||
filters: Record<string, unknown>;
|
filters: Record<string, unknown>;
|
||||||
inertia: number;
|
inertia: number;
|
||||||
loitering_time: number;
|
loitering_time: number;
|
||||||
|
|||||||
@ -230,6 +230,7 @@ export default function MasksAndZonesView({
|
|||||||
camera: cameraConfig.name,
|
camera: cameraConfig.name,
|
||||||
name,
|
name,
|
||||||
friendly_name: zoneData.friendly_name,
|
friendly_name: zoneData.friendly_name,
|
||||||
|
enabled: zoneData.enabled,
|
||||||
objects: zoneData.objects,
|
objects: zoneData.objects,
|
||||||
points: interpolatePoints(
|
points: interpolatePoints(
|
||||||
parseCoordinates(zoneData.coordinates),
|
parseCoordinates(zoneData.coordinates),
|
||||||
@ -241,7 +242,7 @@ export default function MasksAndZonesView({
|
|||||||
distances:
|
distances:
|
||||||
zoneData.distances?.map((distance) => parseFloat(distance)) ?? [],
|
zoneData.distances?.map((distance) => parseFloat(distance)) ?? [],
|
||||||
isFinished: true,
|
isFinished: true,
|
||||||
color: zoneData.color,
|
color: zoneData.enabled ? zoneData.color : [100, 100, 100],
|
||||||
}),
|
}),
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user