import { Role, FormStatus, PermissionList } from "@/types";
import { useForm } from "@inertiajs/react";
import { Button, Checkbox, SimpleGrid, Stack, Text, TextInput } from "@mantine/core";
import { IconDeviceFloppy } from "@tabler/icons-react";
import React from "react";
interface Props {
role?: Role;
status: FormStatus;
permissions: PermissionList;
}
export default function UserForm({ role, status, permissions }: Props) {
// 1. Initialize form with the permissions passed from PHP
const { data, setData, post, put, processing, errors } = useForm({
name: role?.name || '',
permissions: permissions,
});
// Handle individual permission toggle
const handlePermissionChange = (group: string, index: number, checked: boolean) => {
const updatedPermissions = { ...data.permissions };
if (updatedPermissions[group] && updatedPermissions[group][index]) {
// Create a new object for the specific permission to trigger state update
updatedPermissions[group][index] = {
...updatedPermissions[group][index],
checked
};
setData('permissions', updatedPermissions);
}
};
// Handle "Check All" for a specific group
const handleGroupCheckboxChange = (group: string, checked: boolean) => {
const updatedPermissions = { ...data.permissions };
if (updatedPermissions[group]) {
updatedPermissions[group] = updatedPermissions[group].map(p => ({
...p,
checked
}));
setData('permissions', updatedPermissions);
}
};
function submit(event: React.FormEvent) {
event.preventDefault();
if (status === 'create') {
post(route('management.roles.store'));
} else {
// Use put() for updates if your route is Route::put
post(route('management.roles.update', { id: role?.id }));
}
}
// IMPORTANT: Map over data.permissions (state), not permissions (prop)
const permissionCheckboxes = Object.entries(data.permissions).map(([group, list]) => {
const allChecked = list.every(p => p.checked);
const someChecked = list.some(p => p.checked);
return (