🐛 Fixing office roles in users page
This commit is contained in:
parent
a4c316c3ce
commit
a1e640da6c
@ -4,14 +4,13 @@ import Roles from "@Front/Api/LeCoffreApi/Admin/Roles/Roles";
|
|||||||
import LiveVotes from "@Front/Api/LeCoffreApi/SuperAdmin/LiveVotes/LiveVotes";
|
import LiveVotes from "@Front/Api/LeCoffreApi/SuperAdmin/LiveVotes/LiveVotes";
|
||||||
import Users from "@Front/Api/LeCoffreApi/SuperAdmin/Users/Users";
|
import Users from "@Front/Api/LeCoffreApi/SuperAdmin/Users/Users";
|
||||||
import Button, { EButtonVariant } from "@Front/Components/DesignSystem/Button";
|
import Button, { EButtonVariant } from "@Front/Components/DesignSystem/Button";
|
||||||
import SelectField, { IOption } from "@Front/Components/DesignSystem/Form/SelectField";
|
|
||||||
import Confirm from "@Front/Components/DesignSystem/Modal/Confirm";
|
import Confirm from "@Front/Components/DesignSystem/Modal/Confirm";
|
||||||
import Switch from "@Front/Components/DesignSystem/Switch";
|
import Switch from "@Front/Components/DesignSystem/Switch";
|
||||||
import Typography, { ITypo, ITypoColor } from "@Front/Components/DesignSystem/Typography";
|
import Typography, { ITypo, ITypoColor } from "@Front/Components/DesignSystem/Typography";
|
||||||
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, OfficeRole, Vote } from "le-coffre-resources/dist/SuperAdmin";
|
import User, { Appointment, 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";
|
||||||
@ -26,9 +25,7 @@ export default function UserInformations(props: IProps) {
|
|||||||
let { userUid } = router.query;
|
let { userUid } = router.query;
|
||||||
|
|
||||||
const [userSelected, setUserSelected] = useState<User | null>(null);
|
const [userSelected, setUserSelected] = useState<User | null>(null);
|
||||||
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");
|
||||||
@ -37,15 +34,8 @@ 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 () => {
|
||||||
@ -69,7 +59,6 @@ export default function UserInformations(props: IProps) {
|
|||||||
},
|
},
|
||||||
});
|
});
|
||||||
if (!user) return;
|
if (!user) return;
|
||||||
console.log("User to edit : ", user);
|
|
||||||
const roles = await OfficeRoles.getInstance().get({
|
const roles = await OfficeRoles.getInstance().get({
|
||||||
where: {
|
where: {
|
||||||
office: { uid: user.office_membership?.uid },
|
office: { uid: user.office_membership?.uid },
|
||||||
@ -77,7 +66,6 @@ export default function UserInformations(props: IProps) {
|
|||||||
},
|
},
|
||||||
});
|
});
|
||||||
if (!roles) return;
|
if (!roles) return;
|
||||||
setAvailableRoles(roles.map((role) => ({ value: role.uid, label: role.name })));
|
|
||||||
setUserSelected(user);
|
setUserSelected(user);
|
||||||
}, [userUid]);
|
}, [userUid]);
|
||||||
|
|
||||||
@ -189,28 +177,6 @@ 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?.label!,
|
|
||||||
});
|
|
||||||
}, [userSelected?.office_role, userSelected?.role?.label, 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;
|
||||||
@ -275,16 +241,9 @@ export default function UserInformations(props: IProps) {
|
|||||||
<Typography typo={ITypo.P_SB_18}>Rôle au sein de son office</Typography>
|
<Typography typo={ITypo.P_SB_18}>Rôle au sein de son office</Typography>
|
||||||
</div>
|
</div>
|
||||||
<div className={classes["second-line"]}>
|
<div className={classes["second-line"]}>
|
||||||
<SelectField
|
<Typography typo={ITypo.P_18}>
|
||||||
placeholder="Rôle"
|
{userSelected?.office_role ? userSelected?.office_role?.name : "Utilisateur restreint"}
|
||||||
name="role"
|
</Typography>
|
||||||
options={availableRoles.filter((role) => 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 : "Utilisateur restreint",
|
|
||||||
}}
|
|
||||||
/>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div className={classes["part"]}>
|
<div className={classes["part"]}>
|
||||||
@ -335,21 +294,6 @@ 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}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user