Fixing admin & super admin checked

This commit is contained in:
Maxime Lalo 2023-08-03 14:43:25 +02:00
parent 624aab70a5
commit 0e2a27dbb7
2 changed files with 82 additions and 8 deletions

View File

@ -33,7 +33,7 @@ export default function CollaboratorInformations(props: IProps) {
useEffect(() => { useEffect(() => {
if (!userSelected) return; if (!userSelected) return;
setIsAdminChecked(userSelected.role?.name === "admin" && !userSelected.office_role); setIsAdminChecked(userSelected.role?.name === "admin");
}, [userSelected]); }, [userSelected]);
const handleRoleChange = useCallback((option: IOption) => { const handleRoleChange = useCallback((option: IOption) => {
@ -81,7 +81,21 @@ export default function CollaboratorInformations(props: IProps) {
}), }),
); );
} else { } 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<User>({
uid: userSelected?.uid as string,
office_role: undefined,
role: defaultRole,
}),
);
} }
setAdminModalOpened(false); setAdminModalOpened(false);
} catch (e) { } catch (e) {

View File

@ -12,7 +12,7 @@ import Typography, { ITypo, ITypoColor } from "@Front/Components/DesignSystem/Ty
import DefaultUserDashboard from "@Front/Components/LayoutTemplates/DefaultUserDashboard"; import DefaultUserDashboard from "@Front/Components/LayoutTemplates/DefaultUserDashboard";
import JwtService from "@Front/Services/JwtService/JwtService"; import JwtService from "@Front/Services/JwtService/JwtService";
import Toasts from "@Front/Stores/Toasts"; 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 { EAppointmentStatus, EVote } from "le-coffre-resources/dist/SuperAdmin/Appointment";
import Image from "next/image"; import Image from "next/image";
import { useRouter } from "next/router"; import { useRouter } from "next/router";
@ -28,6 +28,7 @@ export default function UserInformations(props: IProps) {
const [userSelected, setUserSelected] = useState<User | null>(null); const [userSelected, setUserSelected] = useState<User | null>(null);
const [availableRoles, setAvailableRoles] = useState<IOption[]>([]); const [availableRoles, setAvailableRoles] = useState<IOption[]>([]);
const [roleModalOpened, setRoleModalOpened] = useState<boolean>(false);
const [isSuperAdminModalOpened, setIsSuperAdminModalOpened] = useState<boolean>(false); const [isSuperAdminModalOpened, setIsSuperAdminModalOpened] = useState<boolean>(false);
const [superAdminModalType, setSuperAdminModalType] = useState<"add" | "remove">("add"); const [superAdminModalType, setSuperAdminModalType] = useState<"add" | "remove">("add");
const [adminModalType, setAdminModalType] = 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<boolean>(false); const [isAdminChecked, setIsAdminChecked] = useState<boolean>(false);
const [isAdminModalOpened, setIsAdminModalOpened] = useState<boolean>(false); const [isAdminModalOpened, setIsAdminModalOpened] = useState<boolean>(false);
const [selectedOption, setSelectedOption] = useState<IOption | null>(null);
const [currentAppointment, setCurrentAppointment] = useState<Appointment | null>(null); const [currentAppointment, setCurrentAppointment] = useState<Appointment | null>(null);
const handleRoleChange = useCallback((option: IOption) => {
setSelectedOption(option);
setRoleModalOpened(true);
}, []);
/** When page change, get the user of the page */ /** When page change, get the user of the page */
const getUser = useCallback(async () => { const getUser = useCallback(async () => {
@ -83,7 +91,7 @@ export default function UserInformations(props: IProps) {
const closeAdminModal = useCallback(() => { const closeAdminModal = useCallback(() => {
setIsAdminModalOpened(false); setIsAdminModalOpened(false);
setIsAdminChecked(userSelected?.role?.name === "admin" && !userSelected.office_role); setIsAdminChecked(userSelected?.role?.name === "admin");
}, [userSelected]); }, [userSelected]);
const handleAdminChanged = (checked: boolean) => { const handleAdminChanged = (checked: boolean) => {
@ -111,7 +119,21 @@ export default function UserInformations(props: IProps) {
}), }),
); );
} else { } 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<User>({
uid: userSelected?.uid as string,
office_role: undefined,
role: defaultRole,
}),
);
} }
setIsAdminModalOpened(false); setIsAdminModalOpened(false);
}, [userSelected, adminModalType]); }, [userSelected, adminModalType]);
@ -123,7 +145,7 @@ export default function UserInformations(props: IProps) {
const closeSuperAdminModal = useCallback(() => { const closeSuperAdminModal = useCallback(() => {
setIsSuperAdminModalOpened(false); setIsSuperAdminModalOpened(false);
setIsSuperAdminChecked(userSelected?.role?.name === "super-admin" && !userSelected.office_role); setIsSuperAdminChecked(userSelected?.role?.name === "super-admin");
}, [userSelected]); }, [userSelected]);
const handleSuperAdminChanged = (checked: boolean) => { const handleSuperAdminChanged = (checked: boolean) => {
@ -156,11 +178,33 @@ export default function UserInformations(props: IProps) {
setIsSuperAdminModalOpened(false); setIsSuperAdminModalOpened(false);
}, [userSelected, currentAppointment, superAdminModalType, getUser]); }, [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<User>({
uid: userSelected?.uid as string,
office_role: OfficeRole.hydrate<OfficeRole>({
uid: selectedOption?.value as string,
}),
}),
);
setRoleModalOpened(false);
getUser();
}, [getUser, selectedOption?.value, userSelected?.uid]);
/** Reset switch state when userSelect change */ /** Reset switch state when userSelect change */
useEffect(() => { useEffect(() => {
if (!userSelected) return; if (!userSelected) return;
setIsSuperAdminChecked(userSelected.role?.name === "super-admin"); setIsSuperAdminChecked(userSelected.role?.name === "super-admin");
setIsAdminChecked(userSelected.role?.name === "admin" && !userSelected.office_role); setIsAdminChecked(userSelected.role?.name === "admin");
}, [userSelected]); }, [userSelected]);
const userHasVoted = useCallback(() => { const userHasVoted = useCallback(() => {
@ -223,7 +267,8 @@ export default function UserInformations(props: IProps) {
<SelectField <SelectField
placeholder="Rôle" placeholder="Rôle"
name="role" name="role"
options={availableRoles} options={availableRoles.filter((role) => role.label !== "admin")}
onChange={handleRoleChange}
selectedOption={{ selectedOption={{
value: userSelected?.office_role ? userSelected?.office_role?.uid : userSelected?.role?.uid, value: userSelected?.office_role ? userSelected?.office_role?.uid : userSelected?.role?.uid,
label: userSelected?.office_role ? userSelected?.office_role?.name : userSelected?.role?.name!, label: userSelected?.office_role ? userSelected?.office_role?.name : userSelected?.role?.name!,
@ -271,6 +316,21 @@ export default function UserInformations(props: IProps) {
</div> </div>
</div> </div>
</div> </div>
<Confirm
isOpen={roleModalOpened}
onClose={closeRoleModal}
onAccept={changeRole}
closeBtn
header={"Changement de rôle"}
confirmText={"Valider"}
cancelText={"Annuler"}>
<div className={classes["modal-content"]}>
<Typography typo={ITypo.P_16} className={classes["text"]}>
Attribuer le rôle de <span className={classes["role-name"]}>{selectedOption?.label}</span> à{" "}
{userSelected?.contact?.first_name} {userSelected?.contact?.last_name} ?
</Typography>
</div>
</Confirm>
<Confirm <Confirm
isOpen={isSuperAdminModalOpened} isOpen={isSuperAdminModalOpened}
onClose={closeSuperAdminModal} onClose={closeSuperAdminModal}