Validation popup on rules modifying

This commit is contained in:
Maxime Lalo 2023-07-25 15:27:10 +02:00
parent 6a091581f7
commit d307869633
3 changed files with 44 additions and 19 deletions

View File

@ -163,6 +163,7 @@ export default function CollaboratorInformations(props: IProps) {
label: "Nommer administrateur de l'office", label: "Nommer administrateur de l'office",
}} }}
toolTip="blabla" toolTip="blabla"
checked={userSelected?.office_role?.name! === "admin"}
/> />
</div> </div>
</div> </div>

View File

@ -158,7 +158,7 @@ export default function DeedTypesInformations(props: IProps) {
</div> </div>
<div className={classes["delete-container"]}> <div className={classes["delete-container"]}>
<Button variant={EButtonVariant.GHOST} onClick={openDeleteModal}> <Button variant={EButtonVariant.GHOST} onClick={openDeleteModal}>
Archiver Supprimer
</Button> </Button>
</div> </div>
<Confirm <Confirm
@ -166,12 +166,12 @@ export default function DeedTypesInformations(props: IProps) {
onClose={closeDeleteModal} onClose={closeDeleteModal}
onAccept={deleteDeedType} onAccept={deleteDeedType}
closeBtn closeBtn
header={"Archiver le type d'acte ?"} header={"Supprimer le type d'acte ?"}
confirmText={"Valider"} confirmText={"Valider"}
cancelText={"Annuler"}> cancelText={"Annuler"}>
<div className={classes["modal-content"]}> <div className={classes["modal-content"]}>
<Typography typo={ITypo.P_16} className={classes["text"]}> <Typography typo={ITypo.P_16} className={classes["text"]}>
Êtes-vous sûr de vouloir archiver ce type d'acte ? Êtes-vous sûr de vouloir supprimer ce type d'acte ?
</Typography> </Typography>
</div> </div>
</Confirm> </Confirm>

View File

@ -3,11 +3,13 @@ import Rules from "@Front/Api/LeCoffreApi/Admin/Rules/Rules";
import Button from "@Front/Components/DesignSystem/Button"; import Button from "@Front/Components/DesignSystem/Button";
import CheckBox from "@Front/Components/DesignSystem/CheckBox"; import CheckBox from "@Front/Components/DesignSystem/CheckBox";
import Form from "@Front/Components/DesignSystem/Form"; import Form from "@Front/Components/DesignSystem/Form";
import Confirm from "@Front/Components/DesignSystem/Modal/Confirm";
import Typography, { ITypo } from "@Front/Components/DesignSystem/Typography"; import Typography, { ITypo } from "@Front/Components/DesignSystem/Typography";
import DefaultRoleDashboard from "@Front/Components/LayoutTemplates/DefaultRoleDashboard"; import DefaultRoleDashboard from "@Front/Components/LayoutTemplates/DefaultRoleDashboard";
import { Role, Rule } from "le-coffre-resources/dist/Admin"; import { Role, Rule } from "le-coffre-resources/dist/Admin";
import { useRouter } from "next/router"; import { useRouter } from "next/router";
import { useCallback, useEffect, useState } from "react"; import { useCallback, useEffect, useState } from "react";
import React from "react";
import classes from "./classes.module.scss"; import classes from "./classes.module.scss";
@ -22,6 +24,17 @@ export default function RolesInformations(props: IProps) {
const [roleSelected, setRoleSelected] = useState<Role | null>(null); const [roleSelected, setRoleSelected] = useState<Role | null>(null);
const [rulesCheckboxes, setRulesCheckboxes] = useState<RuleCheckbox[]>([]); const [rulesCheckboxes, setRulesCheckboxes] = useState<RuleCheckbox[]>([]);
const [selectAll, setSelectAll] = useState<boolean>(false); const [selectAll, setSelectAll] = useState<boolean>(false);
const [isConfirmModalOpened, setIsConfirmModalOpened] = useState<boolean>(false);
const openConfirmModal = useCallback(() => {
setIsConfirmModalOpened(true);
}, []);
const closeConfirmModal = useCallback(() => {
setIsConfirmModalOpened(false);
}, []);
useEffect(() => { useEffect(() => {
setSelectAll(false); setSelectAll(false);
async function getUser() { async function getUser() {
@ -64,8 +77,7 @@ export default function RolesInformations(props: IProps) {
[rulesCheckboxes], [rulesCheckboxes],
); );
const onSubmitHandler = useCallback( const modifyRules = useCallback(async () => {
async (e: React.FormEvent<HTMLFormElement> | null, values: { [key: string]: string }) => {
if (!roleSelected || !roleSelected.uid) return; if (!roleSelected || !roleSelected.uid) return;
const rules = rulesCheckboxes.filter((rule) => rule.checked)?.map((rule) => Rule.hydrate<Rule>(rule)); const rules = rulesCheckboxes.filter((rule) => rule.checked)?.map((rule) => Rule.hydrate<Rule>(rule));
const role = await Roles.getInstance().put(roleSelected.uid, { const role = await Roles.getInstance().put(roleSelected.uid, {
@ -75,9 +87,7 @@ export default function RolesInformations(props: IProps) {
setRoleSelected(role); setRoleSelected(role);
if (!role.rules) return; if (!role.rules) return;
setRulesCheckboxes(role.rules.map((rule) => ({ ...rule, checked: false }))); setRulesCheckboxes(role.rules.map((rule) => ({ ...rule, checked: false })));
}, }, [roleSelected, rulesCheckboxes]);
[roleSelected, rulesCheckboxes],
);
return ( return (
<DefaultRoleDashboard mobileBackText={"Liste des rôles"}> <DefaultRoleDashboard mobileBackText={"Liste des rôles"}>
@ -103,7 +113,7 @@ export default function RolesInformations(props: IProps) {
checked={selectAll} checked={selectAll}
/> />
</div> </div>
<Form onSubmit={onSubmitHandler}> <Form>
<div className={classes["rights"]}> <div className={classes["rights"]}>
{rulesCheckboxes.map((rule) => ( {rulesCheckboxes.map((rule) => (
<div className={classes["right"]} key={rule.uid}> <div className={classes["right"]} key={rule.uid}>
@ -112,10 +122,24 @@ export default function RolesInformations(props: IProps) {
))} ))}
</div> </div>
<div className={classes["save-container"]}> <div className={classes["save-container"]}>
<Button type="submit">Enregistrer</Button> <Button onClick={openConfirmModal}>Enregistrer</Button>
</div> </div>
</Form> </Form>
</div> </div>
<Confirm
isOpen={isConfirmModalOpened}
onClose={closeConfirmModal}
onAccept={modifyRules}
closeBtn
header={"Êtes-vous sûr d'enregistrer ?"}
confirmText={"Valider"}
cancelText={"Annuler"}>
<div className={classes["modal-content"]}>
<Typography typo={ITypo.P_16} className={classes["text"]}>
En enregistrant vous modifier les droits des rôles.
</Typography>
</div>
</Confirm>
</div> </div>
</DefaultRoleDashboard> </DefaultRoleDashboard>
); );