mirror of
https://github.com/blakeblackshear/frigate.git
synced 2026-05-03 12:07:40 +03:00
fix role checkboxes
This commit is contained in:
parent
310d02a746
commit
ac01d40707
@ -73,27 +73,27 @@ export default function CameraEditForm({
|
|||||||
)
|
)
|
||||||
.min(1, {
|
.min(1, {
|
||||||
message: t("camera.cameraConfig.ffmpeg.inputsRequired"),
|
message: t("camera.cameraConfig.ffmpeg.inputsRequired"),
|
||||||
}),
|
})
|
||||||
// .refine(
|
.refine(
|
||||||
// (inputs) => {
|
(inputs) => {
|
||||||
// const roleOccurrences = new Map<Role, number>();
|
const roleOccurrences = new Map<Role, number>();
|
||||||
// inputs.forEach((input) => {
|
inputs.forEach((input) => {
|
||||||
// input.roles.forEach((role) => {
|
input.roles.forEach((role) => {
|
||||||
// roleOccurrences.set(
|
roleOccurrences.set(
|
||||||
// role,
|
role,
|
||||||
// (roleOccurrences.get(role) || 0) + 1,
|
(roleOccurrences.get(role) || 0) + 1,
|
||||||
// );
|
);
|
||||||
// });
|
});
|
||||||
// });
|
});
|
||||||
// return Array.from(roleOccurrences.values()).every(
|
return Array.from(roleOccurrences.values()).every(
|
||||||
// (count) => count <= 1,
|
(count) => count <= 1,
|
||||||
// );
|
);
|
||||||
// },
|
},
|
||||||
// {
|
{
|
||||||
// message: t("camera.cameraConfig.ffmpeg.rolesUnique"),
|
message: t("camera.cameraConfig.ffmpeg.rolesUnique"),
|
||||||
// path: ["inputs"],
|
path: ["inputs"],
|
||||||
// },
|
},
|
||||||
// ),
|
),
|
||||||
}),
|
}),
|
||||||
}),
|
}),
|
||||||
[t],
|
[t],
|
||||||
@ -149,19 +149,12 @@ export default function CameraEditForm({
|
|||||||
name: "ffmpeg.inputs",
|
name: "ffmpeg.inputs",
|
||||||
});
|
});
|
||||||
|
|
||||||
// Track used roles across all streams in the form
|
// Watch ffmpeg.inputs to track used roles
|
||||||
// const currentUsedRoles = useMemo(() => {
|
const watchedInputs = form.watch("ffmpeg.inputs");
|
||||||
// const roles = new Set<Role>();
|
|
||||||
// const values = form.getValues();
|
|
||||||
// values.ffmpeg.inputs.forEach((input) => {
|
|
||||||
// input.roles.forEach((role) => roles.add(role));
|
|
||||||
// });
|
|
||||||
// return roles;
|
|
||||||
// }, [form]);
|
|
||||||
|
|
||||||
const saveCameraConfig = (values: FormValues) => {
|
const saveCameraConfig = (values: FormValues) => {
|
||||||
setIsLoading(true);
|
setIsLoading(true);
|
||||||
const configData = {
|
const configData: ConfigSetBody["config_data"] = {
|
||||||
cameras: {
|
cameras: {
|
||||||
[values.cameraName]: {
|
[values.cameraName]: {
|
||||||
enabled: values.enabled,
|
enabled: values.enabled,
|
||||||
@ -220,7 +213,11 @@ export default function CameraEditForm({
|
|||||||
// If camera name changed, delete old camera config
|
// If camera name changed, delete old camera config
|
||||||
const deleteRequestBody: ConfigSetBody = {
|
const deleteRequestBody: ConfigSetBody = {
|
||||||
requires_restart: 1,
|
requires_restart: 1,
|
||||||
config_data: { cameras: { [cameraName]: "" } },
|
config_data: {
|
||||||
|
cameras: {
|
||||||
|
[cameraName]: "",
|
||||||
|
},
|
||||||
|
},
|
||||||
update_topic: `config/cameras/${cameraName}/remove`,
|
update_topic: `config/cameras/${cameraName}/remove`,
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -247,14 +244,23 @@ export default function CameraEditForm({
|
|||||||
|
|
||||||
// Determine available roles for new streams
|
// Determine available roles for new streams
|
||||||
const getAvailableRoles = (): Role[] => {
|
const getAvailableRoles = (): Role[] => {
|
||||||
const values = form.getValues();
|
|
||||||
const used = new Set<Role>();
|
const used = new Set<Role>();
|
||||||
values.ffmpeg.inputs.forEach((input) => {
|
watchedInputs.forEach((input) => {
|
||||||
input.roles.forEach((role) => used.add(role));
|
input.roles.forEach((role) => used.add(role));
|
||||||
});
|
});
|
||||||
return used.has("detect") ? [] : ["detect"];
|
return used.has("detect") ? [] : ["detect"];
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const getUsedRolesExcludingIndex = (excludeIndex: number) => {
|
||||||
|
const roles = new Set<Role>();
|
||||||
|
watchedInputs.forEach((input, idx) => {
|
||||||
|
if (idx !== excludeIndex) {
|
||||||
|
input.roles.forEach((role) => roles.add(role));
|
||||||
|
}
|
||||||
|
});
|
||||||
|
return roles;
|
||||||
|
};
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
<Toaster position="top-center" closeButton />
|
<Toaster position="top-center" closeButton />
|
||||||
@ -358,11 +364,10 @@ export default function CameraEditForm({
|
|||||||
: field.value.filter((r) => r !== role);
|
: field.value.filter((r) => r !== role);
|
||||||
field.onChange(updatedRoles);
|
field.onChange(updatedRoles);
|
||||||
}}
|
}}
|
||||||
// disabled={
|
disabled={
|
||||||
// !field.value.includes(role) &&
|
!field.value.includes(role) &&
|
||||||
// currentUsedRoles.has(role) &&
|
getUsedRolesExcludingIndex(index).has(role)
|
||||||
// currentUsedRoles.size > 0
|
}
|
||||||
// }
|
|
||||||
/>
|
/>
|
||||||
<span>{role}</span>
|
<span>{role}</span>
|
||||||
</label>
|
</label>
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user