fix role checkboxes

This commit is contained in:
Josh Hawkins 2025-06-12 13:19:04 -05:00
parent 310d02a746
commit ac01d40707

View File

@ -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>