From 0e2a27dbb7e4f72f8ac0328d549da3e9eaa74193 Mon Sep 17 00:00:00 2001 From: Maxime Lalo Date: Thu, 3 Aug 2023 14:43:25 +0200 Subject: [PATCH] :sparkles: Fixing admin & super admin checked --- .../CollaboratorInformations/index.tsx | 18 ++++- .../Layouts/Users/UserInformations/index.tsx | 72 +++++++++++++++++-- 2 files changed, 82 insertions(+), 8 deletions(-) diff --git a/src/front/Components/Layouts/Collaborators/CollaboratorInformations/index.tsx b/src/front/Components/Layouts/Collaborators/CollaboratorInformations/index.tsx index ee40ef15..6ec149a5 100644 --- a/src/front/Components/Layouts/Collaborators/CollaboratorInformations/index.tsx +++ b/src/front/Components/Layouts/Collaborators/CollaboratorInformations/index.tsx @@ -33,7 +33,7 @@ export default function CollaboratorInformations(props: IProps) { useEffect(() => { if (!userSelected) return; - setIsAdminChecked(userSelected.role?.name === "admin" && !userSelected.office_role); + setIsAdminChecked(userSelected.role?.name === "admin"); }, [userSelected]); const handleRoleChange = useCallback((option: IOption) => { @@ -81,7 +81,21 @@ export default function CollaboratorInformations(props: IProps) { }), ); } else { - // retirer rôle admin + const defaultRole = await Roles.getInstance().getOne({ + where: { + name: "default", + }, + }); + + if (!defaultRole) return; + await Users.getInstance().put( + userSelected?.uid as string, + User.hydrate({ + uid: userSelected?.uid as string, + office_role: undefined, + role: defaultRole, + }), + ); } setAdminModalOpened(false); } catch (e) { diff --git a/src/front/Components/Layouts/Users/UserInformations/index.tsx b/src/front/Components/Layouts/Users/UserInformations/index.tsx index 6a8c174d..5ade8659 100644 --- a/src/front/Components/Layouts/Users/UserInformations/index.tsx +++ b/src/front/Components/Layouts/Users/UserInformations/index.tsx @@ -12,7 +12,7 @@ import Typography, { ITypo, ITypoColor } from "@Front/Components/DesignSystem/Ty import DefaultUserDashboard from "@Front/Components/LayoutTemplates/DefaultUserDashboard"; import JwtService from "@Front/Services/JwtService/JwtService"; import Toasts from "@Front/Stores/Toasts"; -import User, { Appointment, Vote } from "le-coffre-resources/dist/SuperAdmin"; +import User, { Appointment, OfficeRole, Vote } from "le-coffre-resources/dist/SuperAdmin"; import { EAppointmentStatus, EVote } from "le-coffre-resources/dist/SuperAdmin/Appointment"; import Image from "next/image"; import { useRouter } from "next/router"; @@ -28,6 +28,7 @@ export default function UserInformations(props: IProps) { const [userSelected, setUserSelected] = useState(null); const [availableRoles, setAvailableRoles] = useState([]); + const [roleModalOpened, setRoleModalOpened] = useState(false); const [isSuperAdminModalOpened, setIsSuperAdminModalOpened] = useState(false); const [superAdminModalType, setSuperAdminModalType] = useState<"add" | "remove">("add"); const [adminModalType, setAdminModalType] = useState<"add" | "remove">("add"); @@ -36,8 +37,15 @@ export default function UserInformations(props: IProps) { const [isAdminChecked, setIsAdminChecked] = useState(false); const [isAdminModalOpened, setIsAdminModalOpened] = useState(false); + const [selectedOption, setSelectedOption] = useState(null); + const [currentAppointment, setCurrentAppointment] = useState(null); + const handleRoleChange = useCallback((option: IOption) => { + setSelectedOption(option); + setRoleModalOpened(true); + }, []); + /** When page change, get the user of the page */ const getUser = useCallback(async () => { @@ -83,7 +91,7 @@ export default function UserInformations(props: IProps) { const closeAdminModal = useCallback(() => { setIsAdminModalOpened(false); - setIsAdminChecked(userSelected?.role?.name === "admin" && !userSelected.office_role); + setIsAdminChecked(userSelected?.role?.name === "admin"); }, [userSelected]); const handleAdminChanged = (checked: boolean) => { @@ -111,7 +119,21 @@ export default function UserInformations(props: IProps) { }), ); } else { - // retirer rôle admin + const defaultRole = await Roles.getInstance().getOne({ + where: { + name: "default", + }, + }); + + if (!defaultRole) return; + await Users.getInstance().put( + userSelected?.uid as string, + User.hydrate({ + uid: userSelected?.uid as string, + office_role: undefined, + role: defaultRole, + }), + ); } setIsAdminModalOpened(false); }, [userSelected, adminModalType]); @@ -123,7 +145,7 @@ export default function UserInformations(props: IProps) { const closeSuperAdminModal = useCallback(() => { setIsSuperAdminModalOpened(false); - setIsSuperAdminChecked(userSelected?.role?.name === "super-admin" && !userSelected.office_role); + setIsSuperAdminChecked(userSelected?.role?.name === "super-admin"); }, [userSelected]); const handleSuperAdminChanged = (checked: boolean) => { @@ -156,11 +178,33 @@ export default function UserInformations(props: IProps) { setIsSuperAdminModalOpened(false); }, [userSelected, currentAppointment, superAdminModalType, getUser]); + const closeRoleModal = useCallback(() => { + setRoleModalOpened(false); + setSelectedOption({ + value: userSelected?.office_role ? userSelected?.office_role?.uid : userSelected?.role?.uid, + label: userSelected?.office_role ? userSelected?.office_role?.name : userSelected?.role?.name!, + }); + }, [userSelected?.office_role, userSelected?.role?.name, userSelected?.role?.uid]); + + const changeRole = useCallback(async () => { + await Users.getInstance().put( + userSelected?.uid as string, + User.hydrate({ + uid: userSelected?.uid as string, + office_role: OfficeRole.hydrate({ + uid: selectedOption?.value as string, + }), + }), + ); + setRoleModalOpened(false); + getUser(); + }, [getUser, selectedOption?.value, userSelected?.uid]); + /** Reset switch state when userSelect change */ useEffect(() => { if (!userSelected) return; setIsSuperAdminChecked(userSelected.role?.name === "super-admin"); - setIsAdminChecked(userSelected.role?.name === "admin" && !userSelected.office_role); + setIsAdminChecked(userSelected.role?.name === "admin"); }, [userSelected]); const userHasVoted = useCallback(() => { @@ -223,7 +267,8 @@ export default function UserInformations(props: IProps) { role.label !== "admin")} + onChange={handleRoleChange} selectedOption={{ value: userSelected?.office_role ? userSelected?.office_role?.uid : userSelected?.role?.uid, label: userSelected?.office_role ? userSelected?.office_role?.name : userSelected?.role?.name!, @@ -271,6 +316,21 @@ export default function UserInformations(props: IProps) { + +
+ + Attribuer le rôle de {selectedOption?.label} à{" "} + {userSelected?.contact?.first_name} {userSelected?.contact?.last_name} ? + +
+