diff --git a/src/front/Components/DesignSystem/Header/Notifications/index.tsx b/src/front/Components/DesignSystem/Header/Notifications/index.tsx index 88b0cabf..cfebdfbe 100644 --- a/src/front/Components/DesignSystem/Header/Notifications/index.tsx +++ b/src/front/Components/DesignSystem/Header/Notifications/index.tsx @@ -1,10 +1,11 @@ -import React from "react"; -import classes from "./classes.module.scss"; -import Image from "next/image"; +import InfoIcon from "@Assets/Icons/info.svg"; import NotificationIcon from "@Assets/Icons/notification.svg"; import Toasts, { IToast } from "@Front/Stores/Toasts"; +import Image from "next/image"; +import React from "react"; + +import classes from "./classes.module.scss"; import NotificationModal from "./NotificationModal"; -import InfoIcon from "@Assets/Icons/info.svg"; type IProps = { isModalOpen: boolean; diff --git a/src/front/Components/DesignSystem/Header/Profile/ProfileModal/index.tsx b/src/front/Components/DesignSystem/Header/Profile/ProfileModal/index.tsx index 6612a016..b871b131 100644 --- a/src/front/Components/DesignSystem/Header/Profile/ProfileModal/index.tsx +++ b/src/front/Components/DesignSystem/Header/Profile/ProfileModal/index.tsx @@ -20,7 +20,14 @@ export default class ProfileModal extends React.Component {
- + { Module.getInstance().get().modules.pages.DeedTypes.pages.Create.props.path, Module.getInstance().get().modules.pages.DeedTypes.pages.DeedTypesInformations.props.path, Module.getInstance().get().modules.pages.DeedTypes.pages.Edit.props.path, + Module.getInstance().get().modules.pages.DocumentTypes.pages.Edit.props.path, + Module.getInstance().get().modules.pages.DocumentTypes.pages.Create.props.path, + Module.getInstance().get().modules.pages.DocumentTypes.pages.DocumentTypesInformations.props.path, + Module.getInstance().get().modules.pages.DocumentTypes.props.path, ]} /> void; + checked?: boolean; + label: string; +}; +export default function Switch({ onChange, checked, label }: IProps) { + const [isChecked, setIsChecked] = useState(checked ? checked : false); + + useEffect(() => { + setIsChecked(checked ? checked : false); + }, [checked]); + + const handleChange = useCallback(() => { + setIsChecked(!isChecked); + onChange?.(!isChecked); + }, [isChecked, onChange]); + + return ( +
+
+
+
+ + {label} + +
+ ); +} diff --git a/src/front/Components/Layouts/Collaborators/CollaboratorInformations/index.tsx b/src/front/Components/Layouts/Collaborators/CollaboratorInformations/index.tsx index f2c5a7ac..f5730d3c 100644 --- a/src/front/Components/Layouts/Collaborators/CollaboratorInformations/index.tsx +++ b/src/front/Components/Layouts/Collaborators/CollaboratorInformations/index.tsx @@ -3,9 +3,9 @@ import OfficeRoles from "@Front/Api/LeCoffreApi/Admin/OfficeRoles/OfficeRoles"; import Roles from "@Front/Api/LeCoffreApi/Admin/Roles/Roles"; import Users from "@Front/Api/LeCoffreApi/Admin/Users/Users"; import Button, { EButtonVariant } from "@Front/Components/DesignSystem/Button"; -import CheckBox from "@Front/Components/DesignSystem/CheckBox"; import SelectField, { IOption } from "@Front/Components/DesignSystem/Form/SelectField"; import Confirm from "@Front/Components/DesignSystem/Modal/Confirm"; +import Switch from "@Front/Components/DesignSystem/Switch"; import Typography, { ITypo, ITypoColor } from "@Front/Components/DesignSystem/Typography"; import DefaultCollaboratorDashboard from "@Front/Components/LayoutTemplates/DefaultCollaboratorDashboard"; import Module from "@Front/Config/Module"; @@ -26,9 +26,16 @@ export default function CollaboratorInformations(props: IProps) { const [roleModalOpened, setRoleModalOpened] = useState(false); const [adminModalOpened, setAdminModalOpened] = useState(false); - + const [adminRoleType, setAdminRoleType] = useState<"add" | "remove">("add"); const [selectedOption, setSelectedOption] = useState(null); + const [isAdminChecked, setIsAdminChecked] = useState(false); + + useEffect(() => { + if (!userSelected) return; + setIsAdminChecked(userSelected.role?.name === "admin" && !userSelected.office_role); + }, [userSelected]); + const handleRoleChange = useCallback((option: IOption) => { setSelectedOption(option); setRoleModalOpened(true); @@ -56,31 +63,43 @@ export default function CollaboratorInformations(props: IProps) { }, [selectedOption, userSelected]); const changeAdmin = useCallback(async () => { - const adminRole = await Roles.getInstance().getOne({ - where: { - name: "admin", - }, - }); + try { + if (adminRoleType === "add") { + const adminRole = await Roles.getInstance().getOne({ + where: { + name: "admin", + }, + }); - if (!adminRole) return; - await Users.getInstance().put( - userSelected?.uid as string, - User.hydrate({ - uid: userSelected?.uid as string, - office_role: undefined, - role: adminRole, - }), - ); - setRoleModalOpened(false); - }, [userSelected]); + if (!adminRole) return; + await Users.getInstance().put( + userSelected?.uid as string, + User.hydrate({ + uid: userSelected?.uid as string, + office_role: undefined, + role: adminRole, + }), + ); + } else { + // retirer rôle admin + } + setAdminModalOpened(false); + } catch (e) { + console.error(e); + } + }, [adminRoleType, userSelected]); - const openAdminModal = useCallback(() => { + const openAdminModal = useCallback((checked: boolean) => { + setIsAdminChecked(checked); + if (checked) setAdminRoleType("add"); + else setAdminRoleType("remove"); setAdminModalOpened(true); }, []); const closeAdminModal = useCallback(() => { + setIsAdminChecked(userSelected?.role?.name === "admin" && !userSelected.office_role); setAdminModalOpened(false); - }, []); + }, [userSelected]); useEffect(() => { async function getUser() { @@ -167,15 +186,7 @@ export default function CollaboratorInformations(props: IProps) {
{userSelected?.role?.name !== "super-admin" && (
- +
)}
@@ -189,7 +200,7 @@ export default function CollaboratorInformations(props: IProps) { cancelText={"Annuler"}>
- Attributer le rôle de {selectedOption?.label} à{" "} + Attribuer le rôle de {selectedOption?.label} à{" "} {userSelected?.contact?.first_name} {userSelected?.contact?.last_name} ?
@@ -204,7 +215,8 @@ export default function CollaboratorInformations(props: IProps) { cancelText={"Annuler"}>
- Attributer le rôle d'administrateur à {userSelected?.contact?.first_name} {userSelected?.contact?.last_name} ? + {adminRoleType === "add" ? "Attribuer" : "Retirer"} le rôle d'administrateur à{" "} + {userSelected?.contact?.first_name} {userSelected?.contact?.last_name} ?
diff --git a/src/front/Components/Layouts/Collaborators/index.tsx b/src/front/Components/Layouts/Collaborators/index.tsx index 90e43453..00314e81 100644 --- a/src/front/Components/Layouts/Collaborators/index.tsx +++ b/src/front/Components/Layouts/Collaborators/index.tsx @@ -1,8 +1,8 @@ import Typography, { ITypo, ITypoColor } from "@Front/Components/DesignSystem/Typography"; +import DefaultCollaboratorDashboard from "@Front/Components/LayoutTemplates/DefaultCollaboratorDashboard"; import BasePage from "../Base"; import classes from "./classes.module.scss"; -import DefaultCollaboratorDashboard from "@Front/Components/LayoutTemplates/DefaultCollaboratorDashboard"; type IProps = {}; type IState = {}; @@ -12,7 +12,7 @@ export default class Collaborators extends BasePage {
- Informations du collaboraeur + Informations du collaborateur
Sélectionnez un collaborateur diff --git a/src/front/Components/Layouts/Users/UserInformations/index.tsx b/src/front/Components/Layouts/Users/UserInformations/index.tsx index 22ebaf28..a50d01a1 100644 --- a/src/front/Components/Layouts/Users/UserInformations/index.tsx +++ b/src/front/Components/Layouts/Users/UserInformations/index.tsx @@ -1,15 +1,16 @@ import WarningIcon from "@Assets/images/warning.png"; import OfficeRoles from "@Front/Api/LeCoffreApi/Admin/OfficeRoles/OfficeRoles"; import Users from "@Front/Api/LeCoffreApi/SuperAdmin/Users/Users"; -import CheckBox from "@Front/Components/DesignSystem/CheckBox"; import SelectField, { IOption } from "@Front/Components/DesignSystem/Form/SelectField"; import Confirm from "@Front/Components/DesignSystem/Modal/Confirm"; +import Switch from "@Front/Components/DesignSystem/Switch"; import Typography, { ITypo, ITypoColor } from "@Front/Components/DesignSystem/Typography"; import DefaultUserDashboard from "@Front/Components/LayoutTemplates/DefaultUserDashboard"; +import Toasts from "@Front/Stores/Toasts"; import User from "le-coffre-resources/dist/Notary"; import Image from "next/image"; import { useRouter } from "next/router"; -import { useEffect, useState } from "react"; +import { useCallback, useEffect, useState } from "react"; import classes from "./classes.module.scss"; @@ -21,42 +22,82 @@ export default function UserInformations(props: IProps) { const [userSelected, setUserSelected] = useState(null); const [availableRoles, setAvailableRoles] = useState([]); - const [addSuperAdminModalOpened, setAddSuperAdminModalOpened] = useState(false); - const [removeSuperAdminModalOpened, setRemoveSuperAdminModalOpened] = useState(false); + const [isSuperAdminModalOpened, setIsSuperAdminModalOpened] = useState(false); + const [superAdminModalType, setSuperAdminModalType] = useState<"add" | "remove">("add"); + const [adminModalType, setAdminModalType] = useState<"add" | "remove">("add"); - const openAddSuperAdminModal = () => { - setAddSuperAdminModalOpened(true); + const [isSuperAdminChecked, setIsSuperAdminChecked] = useState(false); + const [isAdminChecked, setIsAdminChecked] = useState(false); + const [isAdminModalOpened, setIsAdminModalOpened] = useState(false); + + /** Functions for the admin modal */ + const openAdminModal = () => { + setIsAdminModalOpened(true); }; - const closeAddSuperAdminModal = () => { - setAddSuperAdminModalOpened(false); + const closeAdminModal = useCallback(() => { + setIsAdminModalOpened(false); + setIsAdminChecked(userSelected?.role?.name === "admin" && !userSelected.office_role); + }, [userSelected]); + + const handleAdminChanged = (checked: boolean) => { + setIsAdminChecked(checked); + setAdminModalType(checked ? "add" : "remove"); + openAdminModal(); }; - const openRemoveSuperAdminModal = () => { - setRemoveSuperAdminModalOpened(true); - }; - - const closeRemoveSuperAdminModal = () => { - setRemoveSuperAdminModalOpened(false); - }; - - const handleCheckboxAdminChanged = (e: React.ChangeEvent) => { - const checked = e.target.checked; - if (checked) { - openAddSuperAdminModal(); + const handleAdminModalAccepted = useCallback(async () => { + if (!userSelected) return; + if (adminModalType === "add") { + // add super admin } else { - openRemoveSuperAdminModal(); + // remove super admin } + setIsAdminModalOpened(false); + }, [userSelected, adminModalType]); + + /** Functions for the super admin modal */ + const openSuperAdminModal = () => { + setIsSuperAdminModalOpened(true); }; - const addSuperAdmin = async () => { - closeAddSuperAdminModal(); + const closeSuperAdminModal = useCallback(() => { + setIsSuperAdminModalOpened(false); + setIsSuperAdminChecked(userSelected?.role?.name === "super-admin" && !userSelected.office_role); + }, [userSelected]); + + const handleSuperAdminChanged = (checked: boolean) => { + setIsSuperAdminChecked(checked); + setSuperAdminModalType(checked ? "add" : "remove"); + openSuperAdminModal(); }; - const removeSuperAdmin = async () => { - closeRemoveSuperAdminModal(); - }; + const handleSuperAdminModalAccepted = useCallback(async () => { + if (!userSelected) return; + if (superAdminModalType === "add") { + Toasts.getInstance().open({ + title: "Vote attribué", + text: "Vous avez voté pour attribuer le titre de Super Admin à " + userSelected.contact?.first_name, + }); + // add super admin + } else { + Toasts.getInstance().open({ + title: "Vote attribué", + text: "Vous avez voté pour supprimer le titre de Super Admin à " + userSelected.contact?.first_name, + }); + // remove super admin + } + setIsSuperAdminModalOpened(false); + }, [userSelected, superAdminModalType]); + /** Reset switch state when userSelect change */ + useEffect(() => { + if (!userSelected) return; + setIsSuperAdminChecked(userSelected.role?.name === "super-admin"); + setIsAdminChecked(userSelected.role?.name === "admin" && !userSelected.office_role); + }, [userSelected]); + + /** When page change, get the user of the page */ useEffect(() => { async function getUser() { if (!userUid) return; @@ -137,23 +178,8 @@ export default function UserInformations(props: IProps) { Attribuer un titre
- - + +
warning @@ -174,38 +200,33 @@ export default function UserInformations(props: IProps) {
- Nommer une personne Super Administrateur nécessite 3 votes de super administrateurs existants. Souhaitez-vous - attribuer un vote ? + {superAdminModalType === "add" ? "Nommer" : "Retirer"} une personne Super Administrateur nécessite 3 votes de + super administrateurs existants. Souhaitez-vous attribuer un vote ?
-
- - Retirer un collaborateur du rôle de Super Administrateur nécessite 3 votes de super administrateurs existants. - Souhaitez-vous attribuer un vote ? - -
+