import { useState } from "react"; import Link from "next/link"; import { Anchor, Button, Group, Stack, Table, TableTbody, TableTh, TableThead, TableTr } from "@mantine/core"; import { IconPlus } from "@tabler/icons-react"; import { useModalAction } from "@homarr/modals"; import { useI18n, useScopedI18n } from "@homarr/translation/client"; import type { AccessQueryData } from "./access-settings"; import { AccessSelectRow } from "./access-table-rows"; import { useAccessContext } from "./context"; import type { AccessFormType } from "./form"; import { FormProvider, useForm } from "./form"; import { GroupSelectModal } from "./group-select-modal"; import type { FormProps } from "./user-access-form"; export const GroupAccessForm = ({ accessQueryData, handleCountChange, handleSubmit, isPending, }: Omit, "entity">) => { const { defaultPermission } = useAccessContext(); const [groups, setGroups] = useState["groups"][number]["group"]>>( new Map(accessQueryData.groups.map(({ group }) => [group.id, group])), ); const { openModal } = useModalAction(GroupSelectModal); const t = useI18n(); const tPermissions = useScopedI18n("permission"); const form = useForm({ initialValues: { items: accessQueryData.groups.map(({ group, permission }) => ({ principalId: group.id, permission, })), }, }); const handleAddUser = () => { openModal({ presentGroupIds: form.values.items.map(({ principalId: id }) => id), onSelect: (group) => { setGroups((prev) => new Map(prev).set(group.id, group)); form.setFieldValue("items", [ { principalId: group.id, permission: defaultPermission, }, ...form.values.items, ]); handleCountChange((prev) => prev + 1); }, }); }; return (
handleSubmit(values as AccessFormType))}> {tPermissions("field.group.label")} {tPermissions("field.permission.label")} {form.values.items.map((row, index) => ( } permission={row.permission} index={index} handleCountChange={handleCountChange} /> ))}
); }; export const GroupItemContent = ({ group }: { group: AccessQueryData["groups"][number]["group"] }) => { return ( {group.name} ); };