import OfficeRoles from "@Front/Api/LeCoffreApi/Admin/OfficeRoles/OfficeRoles"; import Button from "@Front/Components/DesignSystem/Button"; import CheckBox from "@Front/Components/DesignSystem/CheckBox"; import Form from "@Front/Components/DesignSystem/Form"; import Confirm from "@Front/Components/DesignSystem/Modal/Confirm"; import Typography, { ITypo } from "@Front/Components/DesignSystem/Typography"; import DefaultRoleDashboard from "@Front/Components/LayoutTemplates/DefaultRoleDashboard"; import { OfficeRole, Rule, RulesGroup } from "le-coffre-resources/dist/Admin"; import { useRouter } from "next/router"; import { useCallback, useEffect, useState } from "react"; import React from "react"; import classes from "./classes.module.scss"; import RulesGroups from "@Front/Api/LeCoffreApi/Admin/RulesGroups/RulesGroups"; type RuleGroupsCheckbox = RulesGroup & { checked: boolean; }; export default function RolesInformations() { const router = useRouter(); let { roleUid } = router.query; const [roleSelected, setRoleSelected] = useState(null); const [rulesGroupsCheckboxes, setRulesGroupsCheckboxes] = useState([]); const [selectAll, setSelectAll] = useState(false); const [isConfirmModalOpened, setIsConfirmModalOpened] = useState(false); const openConfirmModal = useCallback(() => { setIsConfirmModalOpened(true); }, []); const closeConfirmModal = useCallback(() => { setIsConfirmModalOpened(false); }, []); useEffect(() => { setSelectAll(false); async function getUser() { if (!roleUid) return; const role = await OfficeRoles.getInstance().getByUid(roleUid as string, { q: { rules: true, }, }); const rulesGroups = await RulesGroups.getInstance().get({ include: { rules: true, }, }); if (!role) return; setRoleSelected(role); if (!role.rules) return; const rulesCheckboxes = rulesGroups .map((ruleGroup) => { if (ruleGroup.rules?.every((rule) => role.rules?.find((r) => r.uid === rule.uid))) { return { ...ruleGroup, checked: true }; } return { ...ruleGroup, checked: false }; }) .sort((ruleA, ruleB) => (ruleA.name! < ruleB.name! ? 1 : -1)) .sort((rule) => (rule.checked ? -1 : 1)); const selectAll = rulesCheckboxes.every((rule) => rule.checked); setSelectAll(selectAll); setRulesGroupsCheckboxes(rulesCheckboxes); } getUser(); }, [roleUid]); const handleSelectAllChange = useCallback( (e: React.ChangeEvent) => { setSelectAll(e.target.checked); const checked = e.target.checked; rulesGroupsCheckboxes.forEach((rule) => (rule.checked = checked)); setRulesGroupsCheckboxes([...rulesGroupsCheckboxes]); }, [rulesGroupsCheckboxes], ); const modifyRules = useCallback(async () => { if (!roleSelected || !roleSelected.uid) return; const rulesGroupsChecked = rulesGroupsCheckboxes.filter((rule) => rule.checked); let newRules: Rule[] = []; for (let ruleGroup of rulesGroupsChecked) { if (!ruleGroup.rules) continue; newRules = [...newRules, ...ruleGroup.rules]; } await OfficeRoles.getInstance().put(roleSelected.uid, { uid: roleSelected.uid, rules: newRules, }); const roleUpdated = await OfficeRoles.getInstance().getByUid(roleSelected.uid, { q: { rules: true, }, }); setRoleSelected(roleUpdated); closeConfirmModal(); }, [closeConfirmModal, roleSelected, rulesGroupsCheckboxes]); const handleRuleChange = useCallback( (e: React.ChangeEvent) => { const ruleUid = e.target.value; const rule = rulesGroupsCheckboxes.find((rule) => rule.uid === ruleUid); if (!rule) return; rule.checked = e.target.checked; setRulesGroupsCheckboxes([...rulesGroupsCheckboxes]); }, [rulesGroupsCheckboxes], ); return (
Gestion des rôles
{roleSelected?.name}
Modifier les droits
{rulesGroupsCheckboxes.map((ruleGroup) => (
))}
En enregistrant vous modifiez les droits des rôles.
); }