Merge branch 'dev' into staging

This commit is contained in:
Vins 2023-07-25 16:34:59 +02:00
commit 0d58e6b5ae
34 changed files with 709 additions and 184 deletions

View File

@ -2,6 +2,21 @@ import { DeedType } from "le-coffre-resources/dist/Admin";
import BaseAdmin from "../BaseAdmin"; import BaseAdmin from "../BaseAdmin";
export type IPutDeedTypesParams = {
uid?: DeedType["uid"];
name?: DeedType["name"];
description?: DeedType["description"];
deed?: DeedType["deed"];
office?: DeedType["office"];
archived_at?: DeedType["archived_at"];
document_types?: DeedType["document_types"];
};
export type IPostDeedTypesParams = {
name?: DeedType["name"];
description?: DeedType["description"];
};
export type IGetDeedTypesParams = { export type IGetDeedTypesParams = {
where?: {}; where?: {};
include?: {}; include?: {};
@ -46,4 +61,34 @@ export default class DeedTypes extends BaseAdmin {
return Promise.reject(err); return Promise.reject(err);
} }
} }
public async put(uid: string, body: IPutDeedTypesParams) {
const url = new URL(this.baseURl.concat(`/${uid}`));
try {
return await this.putRequest<DeedType>(url, body);
} catch (err) {
this.onError(err);
return Promise.reject(err);
}
}
public async post(body: IPostDeedTypesParams) {
const url = new URL(this.baseURl);
try {
return await this.postRequest<DeedType>(url, body);
} catch (err) {
this.onError(err);
return Promise.reject(err);
}
}
public async delete(uid: string) {
const url = new URL(this.baseURl);
try {
return await this.deleteRequest<DeedType>(url);
} catch (err) {
this.onError(err);
return Promise.reject(err);
}
}
} }

View File

@ -9,6 +9,7 @@ export type IGetRolesParams = {
}; };
export type IPutRoleParams = { export type IPutRoleParams = {
uid: OfficeRole["uid"];
rules: OfficeRole["rules"]; rules: OfficeRole["rules"];
}; };

View File

@ -0,0 +1,83 @@
import { Role } from "le-coffre-resources/dist/Admin";
import BaseAdmin from "../BaseAdmin";
export type IGetRolesParams = {
where?: {};
include?: {};
select?: {};
};
export type IPutRoleParams = {
uid: Role["uid"];
rules: Role["rules"];
};
export default class Roles extends BaseAdmin {
private static instance: Roles;
private readonly baseURl = this.namespaceUrl.concat("/roles");
private constructor() {
super();
}
public static getInstance() {
if (!this.instance) {
return new Roles();
} else {
return this.instance;
}
}
public async get(q?: IGetRolesParams): Promise<Role[]> {
const url = new URL(this.baseURl);
if (q) {
const query = { q };
Object.entries(query).forEach(([key, value]) => url.searchParams.set(key, JSON.stringify(value)));
}
try {
return await this.getRequest<Role[]>(url);
} catch (err) {
this.onError(err);
return Promise.reject(err);
}
}
public async getOne(q?: IGetRolesParams): Promise<Role | null> {
const url = new URL(this.baseURl);
if (q) {
const query = { q };
Object.entries(query).forEach(([key, value]) => url.searchParams.set(key, JSON.stringify(value)));
}
try {
const res = await this.getRequest<Role[]>(url);
if (!res) return null;
if (res.length > 1) throw new Error("More than one role found");
return res[0] ? res[0] : null;
} catch (err) {
this.onError(err);
return Promise.reject(err);
}
}
public async getByUid(uid: string, q?: any): Promise<Role> {
const url = new URL(this.baseURl.concat(`/${uid}`));
if (q) Object.entries(q).forEach(([key, value]) => url.searchParams.set(key, JSON.stringify(value)));
try {
return await this.getRequest<Role>(url);
} catch (err) {
this.onError(err);
return Promise.reject(err);
}
}
public async put(uid: string, body: IPutRoleParams): Promise<Role> {
const url = new URL(this.baseURl.concat(`/${uid}`));
try {
return await this.putRequest<Role>(url, body);
} catch (err) {
this.onError(err);
return Promise.reject(err);
}
}
}

View File

@ -1,7 +1,7 @@
import PenICon from "@Assets/Icons/pen.svg"; import PenICon from "@Assets/Icons/pen.svg";
import { IDashBoardFolder } from "@Front/Components/LayoutTemplates/DefaultNotaryDashboard";
import Module from "@Front/Config/Module"; import Module from "@Front/Config/Module";
import classNames from "classnames"; import classNames from "classnames";
import { OfficeFolder } from "le-coffre-resources/dist/Notary";
import Image from "next/image"; import Image from "next/image";
import Link from "next/link"; import Link from "next/link";
import React from "react"; import React from "react";
@ -10,7 +10,7 @@ import Typography, { ITypo } from "../Typography";
import classes from "./classes.module.scss"; import classes from "./classes.module.scss";
type IProps = { type IProps = {
folder: IDashBoardFolder; folder: OfficeFolder;
type: EFolderBoxInformationType; type: EFolderBoxInformationType;
isArchived?: boolean; isArchived?: boolean;
}; };
@ -42,7 +42,7 @@ export default function FolderBoxInformation(props: IProps) {
</div> </div>
); );
function renderContentByType(folder: IDashBoardFolder, type: EFolderBoxInformationType) { function renderContentByType(folder: OfficeFolder, type: EFolderBoxInformationType) {
switch (type) { switch (type) {
case EFolderBoxInformationType.DESCRIPTION: case EFolderBoxInformationType.DESCRIPTION:
return ( return (

View File

@ -1,16 +1,16 @@
import ChevronIcon from "@Assets/Icons/chevron.svg"; import ChevronIcon from "@Assets/Icons/chevron.svg";
import { IDashBoardFolder } from "@Front/Components/LayoutTemplates/DefaultNotaryDashboard"; import { OfficeFolder } from "le-coffre-resources/dist/Notary";
import { EDocumentStatus } from "le-coffre-resources/dist/Notary/Document";
import Image from "next/image"; import Image from "next/image";
import React from "react"; import React from "react";
import Typography, { ITypo } from "../Typography"; import Typography, { ITypo } from "../Typography";
import WarningBadge from "../WarningBadge"; import WarningBadge from "../WarningBadge";
import classes from "./classes.module.scss"; import classes from "./classes.module.scss";
import { EDocumentStatus } from "le-coffre-resources/dist/Customer/Document";
type IProps = { type IProps = {
folder: IDashBoardFolder; folder: OfficeFolder;
onSelectedFolder?: (folder: IDashBoardFolder) => void; onSelectedFolder?: (folder: OfficeFolder) => void;
}; };
type IState = {}; type IState = {};

View File

@ -1,18 +1,18 @@
import { IDashBoardFolder } from "@Front/Components/LayoutTemplates/DefaultNotaryDashboard";
import Module from "@Front/Config/Module"; import Module from "@Front/Config/Module";
import { EDocumentStatus } from "le-coffre-resources/dist/Customer/Document"; import classNames from "classnames";
import { OfficeFolder } from "le-coffre-resources/dist/Notary";
import { EDocumentStatus } from "le-coffre-resources/dist/Notary/Document";
import Link from "next/link"; import Link from "next/link";
import { useRouter } from "next/router"; import { useRouter } from "next/router";
import React from "react"; import React from "react";
import FolderContainer from "../FolderContainer"; import FolderContainer from "../FolderContainer";
import classes from "./classes.module.scss"; import classes from "./classes.module.scss";
import classNames from "classnames";
type IProps = { type IProps = {
folders: IDashBoardFolder[]; folders: OfficeFolder[];
isArchived: boolean; isArchived: boolean;
onSelectedFolder?: (folder: IDashBoardFolder) => void; onSelectedFolder?: (folder: OfficeFolder) => void;
onCloseLeftSide?: () => void; onCloseLeftSide?: () => void;
}; };
@ -27,7 +27,7 @@ class FolderListClass extends React.Component<IPropsClass, IState> {
? Module.getInstance().get().modules.pages.Folder.pages.FolderArchived.pages.FolderInformation.props.path ? Module.getInstance().get().modules.pages.Folder.pages.FolderArchived.pages.FolderInformation.props.path
: Module.getInstance().get().modules.pages.Folder.pages.FolderInformation.props.path; : Module.getInstance().get().modules.pages.Folder.pages.FolderInformation.props.path;
public override render(): JSX.Element { public override render(): JSX.Element {
return <div className={classNames(classes["root"], this.props.isArchived ? classes["archived"]:"")}>{this.renderFolders()}</div>; return <div className={classNames(classes["root"], this.props.isArchived ? classes["archived"] : "")}>{this.renderFolders()}</div>;
} }
private renderFolders(): JSX.Element[] { private renderFolders(): JSX.Element[] {

View File

@ -1,19 +1,19 @@
import { IDashBoardFolder } from "@Front/Components/LayoutTemplates/DefaultNotaryDashboard";
import Module from "@Front/Config/Module"; import Module from "@Front/Config/Module";
import { OfficeFolder } from "le-coffre-resources/dist/Notary";
import { EDocumentStatus } from "le-coffre-resources/dist/Notary/Document";
import Link from "next/link"; import Link from "next/link";
import { NextRouter, useRouter } from "next/router";
import React from "react"; import React from "react";
import BlockList, { IBlock } from "../BlockList";
import Button from "../Button"; import Button from "../Button";
import SearchBar from "../SearchBar"; import SearchBar from "../SearchBar";
import classes from "./classes.module.scss"; import classes from "./classes.module.scss";
import BlockList, { IBlock } from "../BlockList";
import { NextRouter, useRouter } from "next/router";
import { EDocumentStatus } from "le-coffre-resources/dist/SuperAdmin/Document";
type IProps = { type IProps = {
folders: IDashBoardFolder[]; folders: OfficeFolder[];
isArchived: boolean; isArchived: boolean;
onSelectedFolder?: (folder: IDashBoardFolder) => void; onSelectedFolder?: (folder: OfficeFolder) => void;
onCloseLeftSide?: () => void; onCloseLeftSide?: () => void;
}; };
@ -22,7 +22,7 @@ type IPropsClass = IProps & {
}; };
type IState = { type IState = {
filteredFolders: IDashBoardFolder[]; filteredFolders: OfficeFolder[];
}; };
class FolderListContainerClass extends React.Component<IPropsClass, IState> { class FolderListContainerClass extends React.Component<IPropsClass, IState> {
@ -97,7 +97,7 @@ class FolderListContainerClass extends React.Component<IPropsClass, IState> {
} }
private filterFolders(value: string): void { private filterFolders(value: string): void {
const filteredFolders: IDashBoardFolder[] = this.props.folders.filter((folder) => { const filteredFolders: OfficeFolder[] = this.props.folders.filter((folder) => {
const name = folder.name.toLowerCase(); const name = folder.name.toLowerCase();
const number = folder.folder_number.toLowerCase(); const number = folder.folder_number.toLowerCase();

View File

@ -1,5 +1,5 @@
import PenIcon from "@Assets/Icons/pen.svg"; import PenIcon from "@Assets/Icons/pen.svg";
import { IDashBoardFolder } from "@Front/Components/LayoutTemplates/DefaultNotaryDashboard"; import { OfficeFolder } from "le-coffre-resources/dist/Notary";
import Module from "@Front/Config/Module"; import Module from "@Front/Config/Module";
import { Customer } from "le-coffre-resources/dist/Notary"; import { Customer } from "le-coffre-resources/dist/Notary";
import Image from "next/image"; import Image from "next/image";
@ -13,7 +13,7 @@ import { EDocumentStatus } from "le-coffre-resources/dist/Customer/Document";
type IProps = { type IProps = {
customer: Customer; customer: Customer;
folder: IDashBoardFolder; folder: OfficeFolder;
isArchived?: boolean; isArchived?: boolean;
}; };
type IState = {}; type IState = {};

View File

@ -1,11 +1,11 @@
import ChevronIcon from "@Assets/Icons/chevron.svg"; import ChevronIcon from "@Assets/Icons/chevron.svg";
import PlusIcon from "@Assets/Icons/plus.svg"; import PlusIcon from "@Assets/Icons/plus.svg";
import Documents from "@Front/Api/LeCoffreApi/SuperAdmin/Documents/Documents"; import Documents from "@Front/Api/LeCoffreApi/SuperAdmin/Documents/Documents";
import { IDashBoardFolder } from "@Front/Components/LayoutTemplates/DefaultNotaryDashboard";
import Module from "@Front/Config/Module"; import Module from "@Front/Config/Module";
import classNames from "classnames"; import classNames from "classnames";
import Customer, { Document } from "le-coffre-resources/dist/Customer";
import { EDocumentStatus } from "le-coffre-resources/dist/Customer/Document"; import { EDocumentStatus } from "le-coffre-resources/dist/Customer/Document";
import { Customer, Document } from "le-coffre-resources/dist/Notary";
import { OfficeFolder } from "le-coffre-resources/dist/Notary";
import Image from "next/image"; import Image from "next/image";
import Link from "next/link"; import Link from "next/link";
import React from "react"; import React from "react";
@ -20,7 +20,7 @@ import UserFolderHeader from "./UserFolderHeader";
type IProps = { type IProps = {
customer: Customer; customer: Customer;
animationDelay?: number; animationDelay?: number;
folder: IDashBoardFolder; folder: OfficeFolder;
isArchived?: boolean; isArchived?: boolean;
isOpened: boolean; isOpened: boolean;
onChange: (id: string) => void; onChange: (id: string) => void;

View File

@ -87,7 +87,11 @@ export default class DefaultDeedTypesDashboard extends React.Component<IProps, I
public override async componentDidMount() { public override async componentDidMount() {
this.onWindowResize = WindowStore.getInstance().onResize((window) => this.onResize(window)); this.onWindowResize = WindowStore.getInstance().onResize((window) => this.onResize(window));
const query: IGetDeedTypesParams = {}; const query: IGetDeedTypesParams = {
where: {
archived_at: null,
},
};
const deedTypes = await DeedTypes.getInstance().get(query); const deedTypes = await DeedTypes.getInstance().get(query);
this.setState({ deedTypes }); this.setState({ deedTypes });

View File

@ -7,8 +7,8 @@ import Version from "@Front/Components/DesignSystem/Version";
import BackArrow from "@Front/Components/Elements/BackArrow"; import BackArrow from "@Front/Components/Elements/BackArrow";
import WindowStore from "@Front/Stores/WindowStore"; import WindowStore from "@Front/Stores/WindowStore";
import classNames from "classnames"; import classNames from "classnames";
import { OfficeFolder } from "le-coffre-resources/dist/Customer";
import EFolderStatus from "le-coffre-resources/dist/Customer/EFolderStatus"; import EFolderStatus from "le-coffre-resources/dist/Customer/EFolderStatus";
import { OfficeFolder } from "le-coffre-resources/dist/Notary";
import Image from "next/image"; import Image from "next/image";
import React, { ReactNode } from "react"; import React, { ReactNode } from "react";
@ -18,30 +18,17 @@ type IProps = {
title: string; title: string;
children?: ReactNode; children?: ReactNode;
isArchived?: boolean; isArchived?: boolean;
onSelectedFolder: (folder: IDashBoardFolder) => void; onSelectedFolder: (folder: OfficeFolder) => void;
hasBackArrow: boolean; hasBackArrow: boolean;
backArrowUrl?: string; backArrowUrl?: string;
mobileBackText?: string; mobileBackText?: string;
}; };
type IState = { type IState = {
folders: IDashBoardFolder[] | null; folders: OfficeFolder[] | null;
isLeftSideOpen: boolean; isLeftSideOpen: boolean;
leftSideCanBeClosed: boolean; leftSideCanBeClosed: boolean;
}; };
export type IDashBoardFolder = {
uid?: OfficeFolder["uid"];
name: OfficeFolder["name"];
folder_number: OfficeFolder["folder_number"];
documents?: OfficeFolder["documents"];
description: OfficeFolder["description"];
deed?: OfficeFolder["deed"];
created_at: OfficeFolder["created_at"];
customers?: OfficeFolder["customers"];
archived_description: OfficeFolder["archived_description"];
status: OfficeFolder["status"];
};
export default class DefaultNotaryDashboard extends React.Component<IProps, IState> { export default class DefaultNotaryDashboard extends React.Component<IProps, IState> {
private onWindowResize = () => {}; private onWindowResize = () => {};
public static defaultProps: Partial<IProps> = { public static defaultProps: Partial<IProps> = {

View File

@ -90,7 +90,6 @@ export default class DefaultRoleDashboard extends React.Component<IProps, IState
}; };
const roles = await OfficeRoles.getInstance().get(query); const roles = await OfficeRoles.getInstance().get(query);
console.log(roles);
this.setState({ roles }); this.setState({ roles });
} }

View File

@ -1,16 +1,18 @@
import ChevronIcon from "@Assets/Icons/chevron.svg"; import ChevronIcon from "@Assets/Icons/chevron.svg";
import OfficeRoles from "@Front/Api/LeCoffreApi/Admin/OfficeRoles/OfficeRoles"; import OfficeRoles from "@Front/Api/LeCoffreApi/Admin/OfficeRoles/OfficeRoles";
import Users from "@Front/Api/LeCoffreApi/SuperAdmin/Users/Users"; 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 Button, { EButtonVariant } from "@Front/Components/DesignSystem/Button";
import CheckBox from "@Front/Components/DesignSystem/CheckBox"; import CheckBox from "@Front/Components/DesignSystem/CheckBox";
import SelectField, { IOption } from "@Front/Components/DesignSystem/Form/SelectField"; import SelectField, { IOption } from "@Front/Components/DesignSystem/Form/SelectField";
import Confirm from "@Front/Components/DesignSystem/Modal/Confirm";
import Typography, { ITypo, ITypoColor } from "@Front/Components/DesignSystem/Typography"; import Typography, { ITypo, ITypoColor } from "@Front/Components/DesignSystem/Typography";
import DefaultCollaboratorDashboard from "@Front/Components/LayoutTemplates/DefaultCollaboratorDashboard"; import DefaultCollaboratorDashboard from "@Front/Components/LayoutTemplates/DefaultCollaboratorDashboard";
import Module from "@Front/Config/Module"; import Module from "@Front/Config/Module";
import User from "le-coffre-resources/dist/Notary"; import User, { OfficeRole } from "le-coffre-resources/dist/Admin";
import Link from "next/link"; import Link from "next/link";
import { useRouter } from "next/router"; import { useRouter } from "next/router";
import { useEffect, useState } from "react"; import { useCallback, useEffect, useState } from "react";
import classes from "./classes.module.scss"; import classes from "./classes.module.scss";
@ -22,6 +24,64 @@ export default function CollaboratorInformations(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 [adminModalOpened, setAdminModalOpened] = useState<boolean>(false);
const [selectedOption, setSelectedOption] = useState<IOption | null>(null);
const handleRoleChange = useCallback((option: IOption) => {
setSelectedOption(option);
setRoleModalOpened(true);
}, []);
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);
}, [selectedOption, userSelected]);
const changeAdmin = useCallback(async () => {
const adminRole = await Roles.getInstance().getOne({
where: {
name: "admin",
},
});
if (!adminRole) return;
await Users.getInstance().put(
userSelected?.uid as string,
User.hydrate<User>({
uid: userSelected?.uid as string,
office_role: undefined,
role: adminRole,
}),
);
setRoleModalOpened(false);
}, [userSelected]);
const openAdminModal = useCallback(() => {
setAdminModalOpened(true);
}, []);
const closeAdminModal = useCallback(() => {
setAdminModalOpened(false);
}, []);
useEffect(() => { useEffect(() => {
async function getUser() { async function getUser() {
if (!collaboratorUid) return; if (!collaboratorUid) return;
@ -38,6 +98,10 @@ export default function CollaboratorInformations(props: IProps) {
if (!roles) return; if (!roles) return;
setAvailableRoles(roles.map((role) => ({ value: role.uid, label: role.name }))); setAvailableRoles(roles.map((role) => ({ value: role.uid, label: role.name })));
setUserSelected(user); setUserSelected(user);
setSelectedOption({
value: user?.office_role ? user?.office_role?.uid : user?.role?.uid,
label: user?.office_role ? user?.office_role?.name : user?.role?.name!,
});
} }
getUser(); getUser();
@ -96,22 +160,54 @@ export default function CollaboratorInformations(props: IProps) {
placeholder="Rôle" placeholder="Rôle"
name="role" name="role"
options={availableRoles} options={availableRoles}
selectedOption={{ selectedOption={selectedOption!}
value: userSelected?.office_role ? userSelected?.office_role?.uid : userSelected?.role?.uid, onChange={handleRoleChange}
label: userSelected?.office_role ? userSelected?.office_role?.name : userSelected?.role?.name!, disabled={userSelected?.role?.name === "super-admin"}
}}
/>
</div>
<div className={classes["third-line"]}>
<CheckBox
option={{
value: "1",
label: "Nommer administrateur de l'office",
}}
toolTip="blabla"
/> />
</div> </div>
{userSelected?.role?.name !== "super-admin" && (
<div className={classes["third-line"]}>
<CheckBox
onChange={openAdminModal}
option={{
value: "1",
label: "Nommer administrateur de l'office",
}}
toolTip="blabla"
checked={userSelected?.role?.name === "admin" && !userSelected.office_role}
/>
</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"]}>
Attributer le rôle de <span className={classes["role-name"]}>{selectedOption?.label}</span> à{" "}
{userSelected?.contact?.first_name} {userSelected?.contact?.last_name} ?
</Typography>
</div>
</Confirm>
<Confirm
isOpen={adminModalOpened}
onClose={closeAdminModal}
onAccept={changeAdmin}
closeBtn
header={"Changement de rôle"}
confirmText={"Valider"}
cancelText={"Annuler"}>
<div className={classes["modal-content"]}>
<Typography typo={ITypo.P_16} className={classes["text"]}>
Attributer le rôle d'administrateur à {userSelected?.contact?.first_name} {userSelected?.contact?.last_name} ?
</Typography>
</div>
</Confirm>
</div> </div>
</DefaultCollaboratorDashboard> </DefaultCollaboratorDashboard>
); );

View File

@ -1,16 +1,46 @@
import DeedTypes from "@Front/Api/LeCoffreApi/Admin/DeedTypes/DeedTypes";
import Button, { EButtonVariant } from "@Front/Components/DesignSystem/Button"; import Button, { EButtonVariant } from "@Front/Components/DesignSystem/Button";
import Form from "@Front/Components/DesignSystem/Form"; import Form from "@Front/Components/DesignSystem/Form";
import TextAreaField from "@Front/Components/DesignSystem/Form/TextareaField";
import TextField from "@Front/Components/DesignSystem/Form/TextField";
import Typography, { ITypo } from "@Front/Components/DesignSystem/Typography"; import Typography, { ITypo } from "@Front/Components/DesignSystem/Typography";
import DefaultDeedTypesDashboard from "@Front/Components/LayoutTemplates/DefaultDeedTypeDashboard"; import DefaultDeedTypesDashboard from "@Front/Components/LayoutTemplates/DefaultDeedTypeDashboard";
import Module from "@Front/Config/Module";
import JwtService from "@Front/Services/JwtService/JwtService";
import { DeedType, Office } from "le-coffre-resources/dist/Admin";
import { useRouter } from "next/router";
import { useCallback } from "react"; import { useCallback } from "react";
import classes from "./classes.module.scss"; import classes from "./classes.module.scss";
import TextField from "@Front/Components/DesignSystem/Form/TextField";
import TextAreaField from "@Front/Components/DesignSystem/Form/TextareaField";
type IProps = {}; type IProps = {};
export default function DeedTypesCreate(props: IProps) { export default function DeedTypesCreate(props: IProps) {
const onSubmitHandler = useCallback(async (e: React.FormEvent<HTMLFormElement> | null, values: { [key: string]: string }) => {}, []); const router = useRouter();
const onSubmitHandler = useCallback(
async (e: React.FormEvent<HTMLFormElement> | null, values: { [key: string]: string }) => {
try {
const jwt = JwtService.getInstance().decodeJwt();
const deedType = await DeedTypes.getInstance().post(
DeedType.hydrate<DeedType>({
name: values["name"],
description: values["description"],
office: Office.hydrate<Office>({
uid: jwt?.office_Id
})
}),
);
router.push(
Module.getInstance()
.get()
.modules.pages.DeedTypes.pages.DeedTypesInformations.props.path.replace("[uid]", deedType.uid!),
);
} catch (e) {
console.error(e);
}
},
[router],
);
return ( return (
<DefaultDeedTypesDashboard mobileBackText={"Liste des types d'actes"} hasBackArrow title="Créer un type d'acte"> <DefaultDeedTypesDashboard mobileBackText={"Liste des types d'actes"} hasBackArrow title="Créer un type d'acte">

View File

@ -1,15 +1,16 @@
import DeedTypes from "@Front/Api/LeCoffreApi/Admin/DeedTypes/DeedTypes"; import DeedTypes from "@Front/Api/LeCoffreApi/Admin/DeedTypes/DeedTypes";
import Button, { EButtonVariant } from "@Front/Components/DesignSystem/Button";
import Form from "@Front/Components/DesignSystem/Form"; import Form from "@Front/Components/DesignSystem/Form";
import TextAreaField from "@Front/Components/DesignSystem/Form/TextareaField";
import TextField from "@Front/Components/DesignSystem/Form/TextField";
import Typography, { ITypo } from "@Front/Components/DesignSystem/Typography"; import Typography, { ITypo } from "@Front/Components/DesignSystem/Typography";
import DefaultDeedTypesDashboard from "@Front/Components/LayoutTemplates/DefaultDeedTypeDashboard"; import DefaultDeedTypesDashboard from "@Front/Components/LayoutTemplates/DefaultDeedTypeDashboard";
import Module from "@Front/Config/Module";
import { DeedType } from "le-coffre-resources/dist/Admin"; import { DeedType } 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 classes from "./classes.module.scss"; import classes from "./classes.module.scss";
import TextField from "@Front/Components/DesignSystem/Form/TextField";
import TextAreaField from "@Front/Components/DesignSystem/Form/TextareaField";
import Button, { EButtonVariant } from "@Front/Components/DesignSystem/Button";
export default function DeedTypesEdit() { export default function DeedTypesEdit() {
const router = useRouter(); const router = useRouter();
@ -31,7 +32,28 @@ export default function DeedTypesEdit() {
getDeedType(); getDeedType();
}, [deedTypeUid]); }, [deedTypeUid]);
const onSubmitHandler = useCallback(async (e: React.FormEvent<HTMLFormElement> | null, values: { [key: string]: string }) => {}, []); const onSubmitHandler = useCallback(
async (e: React.FormEvent<HTMLFormElement> | null, values: { [key: string]: string }) => {
try {
await DeedTypes.getInstance().put(
deedTypeUid as string,
DeedType.hydrate<DeedType>({
uid: deedTypeUid as string,
name: values["name"],
description: values["description"],
}),
);
router.push(
Module.getInstance()
.get()
.modules.pages.DeedTypes.pages.DeedTypesInformations.props.path.replace("[uid]", deedTypeUid as string),
);
} catch (e) {
console.error(e);
}
},
[deedTypeUid, router],
);
return ( return (
<DefaultDeedTypesDashboard mobileBackText={"Liste des types d'actes"} hasBackArrow title="Modifier les informations d'un acte"> <DefaultDeedTypesDashboard mobileBackText={"Liste des types d'actes"} hasBackArrow title="Modifier les informations d'un acte">

View File

@ -5,6 +5,7 @@ import DocumentTypes from "@Front/Api/LeCoffreApi/Admin/DocumentTypes/DocumentTy
import Button, { EButtonVariant } from "@Front/Components/DesignSystem/Button"; import Button, { EButtonVariant } from "@Front/Components/DesignSystem/Button";
import Form from "@Front/Components/DesignSystem/Form"; import Form from "@Front/Components/DesignSystem/Form";
import { IOption } from "@Front/Components/DesignSystem/Form/SelectField"; import { IOption } from "@Front/Components/DesignSystem/Form/SelectField";
import Confirm from "@Front/Components/DesignSystem/Modal/Confirm";
import MultiSelect from "@Front/Components/DesignSystem/MultiSelect"; import MultiSelect from "@Front/Components/DesignSystem/MultiSelect";
import Typography, { ITypo, ITypoColor } from "@Front/Components/DesignSystem/Typography"; import Typography, { ITypo, ITypoColor } from "@Front/Components/DesignSystem/Typography";
import DefaultDeedTypesDashboard from "@Front/Components/LayoutTemplates/DefaultDeedTypeDashboard"; import DefaultDeedTypesDashboard from "@Front/Components/LayoutTemplates/DefaultDeedTypeDashboard";
@ -28,6 +29,27 @@ export default function DeedTypesInformations(props: IProps) {
const [availableDocuments, setAvailableDocuments] = useState<DocumentType[]>([]); const [availableDocuments, setAvailableDocuments] = useState<DocumentType[]>([]);
const [selectedDocuments, setSelectedDocuments] = useState<IOption[]>([]); const [selectedDocuments, setSelectedDocuments] = useState<IOption[]>([]);
const [isDeleteModalOpened, setIsDeleteModalOpened] = useState<boolean>(false);
const openDeleteModal = useCallback(() => {
setIsDeleteModalOpened(true);
}, []);
const closeDeleteModal = useCallback(() => {
setIsDeleteModalOpened(false);
}, []);
const deleteDeedType = useCallback(async () => {
await DeedTypes.getInstance().put(
deedTypeUid as string,
DeedType.hydrate<DeedType>({
uid: deedTypeUid as string,
archived_at: new Date(),
}),
);
router.push(Module.getInstance().get().modules.pages.DeedTypes.props.path);
}, [deedTypeUid, router]);
useEffect(() => { useEffect(() => {
async function getDeedType() { async function getDeedType() {
if (!deedTypeUid) return; if (!deedTypeUid) return;
@ -37,6 +59,15 @@ export default function DeedTypesInformations(props: IProps) {
}, },
}); });
setDeedTypeSelected(deedType); setDeedTypeSelected(deedType);
if (!deedType.document_types) return;
const documentsOptions: IOption[] = deedType.document_types?.map((documentType) => {
return {
label: documentType.name,
value: documentType.uid,
};
});
setSelectedDocuments(documentsOptions);
} }
async function getDocuments() { async function getDocuments() {
@ -44,12 +75,19 @@ export default function DeedTypesInformations(props: IProps) {
setAvailableDocuments(documents); setAvailableDocuments(documents);
} }
setSelectedDocuments([]);
getDocuments(); getDocuments();
getDeedType(); getDeedType();
}, [deedTypeUid]); }, [deedTypeUid]);
const onSubmitHandler = useCallback(async (e: React.FormEvent<HTMLFormElement> | null, values: { [key: string]: string }) => {}, []); const onSubmitHandler = useCallback(
async (e: React.FormEvent<HTMLFormElement> | null, values: { [key: string]: string }) => {
await DeedTypes.getInstance().put(deedTypeUid as string, {
uid: deedTypeUid as string,
document_types: selectedDocuments.map((document) => DocumentType.hydrate<DocumentType>({ uid: document.value as string })),
});
},
[deedTypeUid, selectedDocuments],
);
const onDocumentChangeHandler = useCallback((values: MultiValue<IOption>) => { const onDocumentChangeHandler = useCallback((values: MultiValue<IOption>) => {
setSelectedDocuments(values as IOption[]); setSelectedDocuments(values as IOption[]);
@ -121,8 +159,24 @@ export default function DeedTypesInformations(props: IProps) {
</Form> </Form>
</div> </div>
<div className={classes["delete-container"]}> <div className={classes["delete-container"]}>
<Button variant={EButtonVariant.GHOST}>Supprimer</Button> <Button variant={EButtonVariant.GHOST} onClick={openDeleteModal}>
Supprimer
</Button>
</div> </div>
<Confirm
isOpen={isDeleteModalOpened}
onClose={closeDeleteModal}
onAccept={deleteDeedType}
closeBtn
header={"Supprimer le type d'acte ?"}
confirmText={"Valider"}
cancelText={"Annuler"}>
<div className={classes["modal-content"]}>
<Typography typo={ITypo.P_16} className={classes["text"]}>
Êtes-vous sûr de vouloir supprimer ce type d'acte ?
</Typography>
</div>
</Confirm>
</div> </div>
</DefaultDeedTypesDashboard> </DefaultDeedTypesDashboard>
); );

View File

@ -6,20 +6,20 @@ import Folders from "@Front/Api/LeCoffreApi/SuperAdmin/Folders/Folders";
import Button, { EButtonVariant } from "@Front/Components/DesignSystem/Button"; import Button, { EButtonVariant } 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 { IOption } from "@Front/Components/DesignSystem/Form/SelectField";
import TextAreaField from "@Front/Components/DesignSystem/Form/TextareaField";
import TextField from "@Front/Components/DesignSystem/Form/TextField";
import Confirm from "@Front/Components/DesignSystem/Modal/Confirm"; import Confirm from "@Front/Components/DesignSystem/Modal/Confirm";
import Typography, { ITypo, ITypoColor } from "@Front/Components/DesignSystem/Typography"; import Typography, { ITypo, ITypoColor } from "@Front/Components/DesignSystem/Typography";
import BackArrow from "@Front/Components/Elements/BackArrow"; import BackArrow from "@Front/Components/Elements/BackArrow";
import DefaultNotaryDashboard from "@Front/Components/LayoutTemplates/DefaultNotaryDashboard"; import DefaultNotaryDashboard from "@Front/Components/LayoutTemplates/DefaultNotaryDashboard";
import Module from "@Front/Config/Module"; import Module from "@Front/Config/Module";
import { OfficeFolder } from "le-coffre-resources/dist/Customer"; import { OfficeFolder } from "le-coffre-resources/dist/Notary";
import { NextRouter, useRouter } from "next/router"; import { NextRouter, useRouter } from "next/router";
import React from "react"; import React from "react";
import BasePage from "../../Base"; import BasePage from "../../Base";
import classes from "./classes.module.scss"; import classes from "./classes.module.scss";
import { IOption } from "@Front/Components/DesignSystem/Form/SelectField";
import TextField from "@Front/Components/DesignSystem/Form/TextField";
import TextAreaField from "@Front/Components/DesignSystem/Form/TextareaField";
type IProps = {}; type IProps = {};
type IPropsClass = IProps & { type IPropsClass = IProps & {
@ -110,11 +110,7 @@ class AskDocumentsClass extends BasePage<IPropsClass, IState> {
cancelText={"Annuler"} cancelText={"Annuler"}
confirmText={"Ajouter"}> confirmText={"Ajouter"}>
<div className={classes["add-document-form-container"]}> <div className={classes["add-document-form-container"]}>
<TextField <TextField name="document_name" placeholder="Nom du document à ajouter" onChange={this.onDocumentNameChange} />
name="document_name"
placeholder="Nom du document à ajouter"
onChange={this.onDocumentNameChange}
/>
<TextAreaField <TextAreaField
name="description" name="description"
placeholder="Description visible par le client" placeholder="Description visible par le client"
@ -211,10 +207,7 @@ class AskDocumentsClass extends BasePage<IPropsClass, IState> {
const oldDocumentsType = this.state.folder?.deed?.document_types!; const oldDocumentsType = this.state.folder?.deed?.document_types!;
await Deeds.getInstance().put(this.state.folder?.deed?.uid!, { await Deeds.getInstance().put(this.state.folder?.deed?.uid!, {
document_types: [ document_types: [...oldDocumentsType, documentType],
...oldDocumentsType,
documentType,
],
}); });
await this.loadData(); await this.loadData();

View File

@ -2,7 +2,7 @@ import PlusIcon from "@Assets/Icons/plus.svg";
import Button, { EButtonVariant } from "@Front/Components/DesignSystem/Button"; import Button, { EButtonVariant } from "@Front/Components/DesignSystem/Button";
import Typography, { ITypo, ITypoColor } from "@Front/Components/DesignSystem/Typography"; import Typography, { ITypo, ITypoColor } from "@Front/Components/DesignSystem/Typography";
import UserFolder from "@Front/Components/DesignSystem/UserFolder"; import UserFolder from "@Front/Components/DesignSystem/UserFolder";
import { IDashBoardFolder } from "@Front/Components/LayoutTemplates/DefaultNotaryDashboard"; import { OfficeFolder } from "le-coffre-resources/dist/Notary";
import Module from "@Front/Config/Module"; import Module from "@Front/Config/Module";
import Link from "next/link"; import Link from "next/link";
import React from "react"; import React from "react";
@ -10,7 +10,7 @@ import React from "react";
import classes from "./classes.module.scss"; import classes from "./classes.module.scss";
type IProps = { type IProps = {
folder: IDashBoardFolder; folder: OfficeFolder;
}; };
type IState = { type IState = {
openedCustomer: string; openedCustomer: string;
@ -75,13 +75,12 @@ export default class ClientSection extends React.Component<IProps, IState> {
return output ?? null; return output ?? null;
} }
private changeUserFolder(uid: string) { private changeUserFolder(uid: string) {
this.setState({ this.setState({
openedCustomer: uid === this.state.openedCustomer ? "" : uid, openedCustomer: uid === this.state.openedCustomer ? "" : uid,
}); });
} }
private doesFolderHaveCustomer(): boolean { private doesFolderHaveCustomer(): boolean {
if (!this.props.folder?.customers) return false; if (!this.props.folder?.customers) return false;
return this.props.folder?.customers!.length > 0; return this.props.folder?.customers!.length > 0;

View File

@ -6,9 +6,9 @@ import TextAreaField from "@Front/Components/DesignSystem/Form/TextareaField";
import Confirm from "@Front/Components/DesignSystem/Modal/Confirm"; import Confirm from "@Front/Components/DesignSystem/Modal/Confirm";
import QuantityProgressBar from "@Front/Components/DesignSystem/QuantityProgressBar"; import QuantityProgressBar from "@Front/Components/DesignSystem/QuantityProgressBar";
import Typography, { ITypo, ITypoColor } from "@Front/Components/DesignSystem/Typography"; import Typography, { ITypo, ITypoColor } from "@Front/Components/DesignSystem/Typography";
import DefaultNotaryDashboard, { IDashBoardFolder } from "@Front/Components/LayoutTemplates/DefaultNotaryDashboard"; import DefaultNotaryDashboard from "@Front/Components/LayoutTemplates/DefaultNotaryDashboard";
import Module from "@Front/Config/Module"; import Module from "@Front/Config/Module";
import { OfficeFolder } from "le-coffre-resources/dist/Customer"; import { OfficeFolder } from "le-coffre-resources/dist/Notary";
import { EDocumentStatus } from "le-coffre-resources/dist/Notary/Document"; import { EDocumentStatus } from "le-coffre-resources/dist/Notary/Document";
import Link from "next/link"; import Link from "next/link";
import { NextRouter, useRouter } from "next/router"; import { NextRouter, useRouter } from "next/router";
@ -26,7 +26,7 @@ type IPropsClass = IProps & {
}; };
type IState = { type IState = {
selectedFolder: IDashBoardFolder | null; selectedFolder: OfficeFolder | null;
isArchivedModalOpen: boolean; isArchivedModalOpen: boolean;
inputArchivedDescripton: string; inputArchivedDescripton: string;
}; };
@ -133,7 +133,7 @@ class FolderInformationClass extends BasePage<IPropsClass, IState> {
} }
public override async componentDidMount() { public override async componentDidMount() {
this.setState({ this.setState({
selectedFolder: (await this.getFolder()) as IDashBoardFolder, selectedFolder: (await this.getFolder()) as OfficeFolder,
}); });
} }
@ -159,7 +159,7 @@ class FolderInformationClass extends BasePage<IPropsClass, IState> {
return this.state.selectedFolder?.customers!.length > 0; return this.state.selectedFolder?.customers!.length > 0;
} }
private onSelectedFolder(folder: IDashBoardFolder): void { private onSelectedFolder(folder: OfficeFolder): void {
this.setState({ selectedFolder: folder }); this.setState({ selectedFolder: folder });
} }

View File

@ -1,5 +1,3 @@
import BasePage from "../../Base";
import classes from "./classes.module.scss";
import Customers from "@Front/Api/LeCoffreApi/SuperAdmin/Customers/Customers"; import Customers from "@Front/Api/LeCoffreApi/SuperAdmin/Customers/Customers";
import Button, { EButtonVariant } from "@Front/Components/DesignSystem/Button"; import Button, { EButtonVariant } from "@Front/Components/DesignSystem/Button";
import Form from "@Front/Components/DesignSystem/Form"; import Form from "@Front/Components/DesignSystem/Form";
@ -7,13 +5,16 @@ import TextField from "@Front/Components/DesignSystem/Form/TextField";
import Confirm from "@Front/Components/DesignSystem/Modal/Confirm"; 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 BackArrow from "@Front/Components/Elements/BackArrow"; import BackArrow from "@Front/Components/Elements/BackArrow";
import DefaultNotaryDashboard, { IDashBoardFolder } from "@Front/Components/LayoutTemplates/DefaultNotaryDashboard"; import DefaultNotaryDashboard from "@Front/Components/LayoutTemplates/DefaultNotaryDashboard";
import Module from "@Front/Config/Module"; import Module from "@Front/Config/Module";
import Customer, { Contact } from "le-coffre-resources/dist/Customer"; import { Contact, Customer, OfficeFolder } from "le-coffre-resources/dist/Notary";
import Link from "next/link"; import Link from "next/link";
import { NextRouter, useRouter } from "next/router"; import { NextRouter, useRouter } from "next/router";
import { ChangeEvent } from "react"; import { ChangeEvent } from "react";
import BasePage from "../../Base";
import classes from "./classes.module.scss";
type IProps = {}; type IProps = {};
type IPropsClass = IProps & { type IPropsClass = IProps & {
@ -22,7 +23,7 @@ type IPropsClass = IProps & {
customerUid: string; customerUid: string;
}; };
type IState = { type IState = {
selectedFolder: IDashBoardFolder | null; selectedFolder: OfficeFolder | null;
inputNameValue: string; inputNameValue: string;
inputFirstNameValue: string; inputFirstNameValue: string;
inputEmailValue: string; inputEmailValue: string;
@ -31,7 +32,7 @@ type IState = {
doesInputHaveValues: boolean; doesInputHaveValues: boolean;
inputBirthdate: Date | null; inputBirthdate: Date | null;
inputAddress: string; inputAddress: string;
folder: IDashBoardFolder | null; folder: OfficeFolder | null;
customer: Customer | null; customer: Customer | null;
}; };
class UpdateClientClass extends BasePage<IPropsClass, IState> { class UpdateClientClass extends BasePage<IPropsClass, IState> {
@ -222,7 +223,7 @@ class UpdateClientClass extends BasePage<IPropsClass, IState> {
this.setState({ inputPhoneNumberValue: event.target.value }); this.setState({ inputPhoneNumberValue: event.target.value });
} }
private onSelectedFolder(folder: IDashBoardFolder): void { private onSelectedFolder(folder: OfficeFolder): void {
this.setState({ selectedFolder: folder }); this.setState({ selectedFolder: folder });
} }

View File

@ -7,9 +7,9 @@ import MultiSelect from "@Front/Components/DesignSystem/MultiSelect";
import RadioBox from "@Front/Components/DesignSystem/RadioBox"; import RadioBox from "@Front/Components/DesignSystem/RadioBox";
import Typography, { ITypo } from "@Front/Components/DesignSystem/Typography"; import Typography, { ITypo } from "@Front/Components/DesignSystem/Typography";
import BackArrow from "@Front/Components/Elements/BackArrow"; import BackArrow from "@Front/Components/Elements/BackArrow";
import DefaultNotaryDashboard, { IDashBoardFolder } from "@Front/Components/LayoutTemplates/DefaultNotaryDashboard"; import DefaultNotaryDashboard from "@Front/Components/LayoutTemplates/DefaultNotaryDashboard";
import Module from "@Front/Config/Module"; import Module from "@Front/Config/Module";
import User from "le-coffre-resources/dist/Notary"; import User, { OfficeFolder } from "le-coffre-resources/dist/Notary";
import Link from "next/link"; import Link from "next/link";
import { NextRouter, useRouter } from "next/router"; import { NextRouter, useRouter } from "next/router";
@ -21,7 +21,7 @@ type IPropsClass = {
router: NextRouter; router: NextRouter;
}; };
type IState = { type IState = {
selectedFolder: IDashBoardFolder | null; selectedFolder: OfficeFolder | null;
selectedOption?: ERadioBoxValue; selectedOption?: ERadioBoxValue;
availableCollaborators: User[]; availableCollaborators: User[];
selectedCollaborators: readonly IOption[]; selectedCollaborators: readonly IOption[];
@ -163,7 +163,7 @@ class UpdateFolderCollaboratorsClass extends BasePage<IPropsClass, IState> {
}); });
} }
private onSelectedFolder(folder: IDashBoardFolder): void { private onSelectedFolder(folder: OfficeFolder): void {
this.setState({ selectedFolder: folder }); this.setState({ selectedFolder: folder });
} }

View File

@ -1,16 +1,17 @@
import Folders from "@Front/Api/LeCoffreApi/SuperAdmin/Folders/Folders";
import Button, { EButtonVariant } from "@Front/Components/DesignSystem/Button"; import Button, { EButtonVariant } from "@Front/Components/DesignSystem/Button";
import Form from "@Front/Components/DesignSystem/Form"; import Form from "@Front/Components/DesignSystem/Form";
import TextAreaField from "@Front/Components/DesignSystem/Form/TextareaField";
import Typography, { ITypo } from "@Front/Components/DesignSystem/Typography"; import Typography, { ITypo } from "@Front/Components/DesignSystem/Typography";
import BackArrow from "@Front/Components/Elements/BackArrow"; import BackArrow from "@Front/Components/Elements/BackArrow";
import DefaultNotaryDashboard, { IDashBoardFolder } from "@Front/Components/LayoutTemplates/DefaultNotaryDashboard"; import DefaultNotaryDashboard from "@Front/Components/LayoutTemplates/DefaultNotaryDashboard";
import Module from "@Front/Config/Module"; import Module from "@Front/Config/Module";
import { OfficeFolder } from "le-coffre-resources/dist/Notary";
import Link from "next/link"; import Link from "next/link";
import { NextRouter, useRouter } from "next/router"; import { NextRouter, useRouter } from "next/router";
import BasePage from "../../Base"; import BasePage from "../../Base";
import classes from "./classes.module.scss"; import classes from "./classes.module.scss";
import Folders from "@Front/Api/LeCoffreApi/SuperAdmin/Folders/Folders";
import TextAreaField from "@Front/Components/DesignSystem/Form/TextareaField";
type IProps = {}; type IProps = {};
@ -20,7 +21,7 @@ type IPropsClass = IProps & {
}; };
type IState = { type IState = {
folder: IDashBoardFolder | null; folder: OfficeFolder | null;
}; };
class UpdateFolderDescriptionClass extends BasePage<IPropsClass, IState> { class UpdateFolderDescriptionClass extends BasePage<IPropsClass, IState> {
private backwardPath = Module.getInstance() private backwardPath = Module.getInstance()

View File

@ -5,14 +5,14 @@ import Select, { IOption } from "@Front/Components/DesignSystem/Form/SelectField
import TextField from "@Front/Components/DesignSystem/Form/TextField"; import TextField from "@Front/Components/DesignSystem/Form/TextField";
import Typography, { ITypo } from "@Front/Components/DesignSystem/Typography"; import Typography, { ITypo } from "@Front/Components/DesignSystem/Typography";
import BackArrow from "@Front/Components/Elements/BackArrow"; import BackArrow from "@Front/Components/Elements/BackArrow";
import DefaultNotaryDashboard, { IDashBoardFolder } from "@Front/Components/LayoutTemplates/DefaultNotaryDashboard"; import DefaultNotaryDashboard from "@Front/Components/LayoutTemplates/DefaultNotaryDashboard";
import Module from "@Front/Config/Module"; import Module from "@Front/Config/Module";
import { Deed, OfficeFolder } from "le-coffre-resources/dist/Notary";
import Link from "next/link"; import Link from "next/link";
import { NextRouter, useRouter } from "next/router"; import { NextRouter, useRouter } from "next/router";
import BasePage from "../../Base"; import BasePage from "../../Base";
import classes from "./classes.module.scss"; import classes from "./classes.module.scss";
import { Deed, OfficeFolder } from "le-coffre-resources/dist/Notary";
type IProps = {}; type IProps = {};
@ -22,7 +22,7 @@ type IPropsClass = IProps & {
}; };
type IState = { type IState = {
selectedFolder: IDashBoardFolder | null; selectedFolder: OfficeFolder | null;
}; };
class UpdateFolderMetadataClass extends BasePage<IPropsClass, IState> { class UpdateFolderMetadataClass extends BasePage<IPropsClass, IState> {
constructor(props: IPropsClass) { constructor(props: IPropsClass) {
@ -93,7 +93,7 @@ class UpdateFolderMetadataClass extends BasePage<IPropsClass, IState> {
...values, ...values,
deed: Deed.hydrate<Deed>({ deed: Deed.hydrate<Deed>({
uid: values["deed"], uid: values["deed"],
}) }),
}); });
await Folders.getInstance().put(this.props.folderUid, newValues); await Folders.getInstance().put(this.props.folderUid, newValues);
@ -106,7 +106,7 @@ class UpdateFolderMetadataClass extends BasePage<IPropsClass, IState> {
} }
} }
private async getFolder(): Promise<IDashBoardFolder> { private async getFolder(): Promise<OfficeFolder> {
const query = { const query = {
q: { q: {
deed: { include: { deed_type: true } }, deed: { include: { deed_type: true } },
@ -118,7 +118,7 @@ class UpdateFolderMetadataClass extends BasePage<IPropsClass, IState> {
return folder; return folder;
} }
private onSelectedFolder(folder: IDashBoardFolder): void { private onSelectedFolder(folder: OfficeFolder): void {
this.setState({ selectedFolder: folder }); this.setState({ selectedFolder: folder });
} }
} }

View File

@ -1,12 +1,13 @@
import Typography, { ITypo, ITypoColor } from "@Front/Components/DesignSystem/Typography"; import Typography, { ITypo, ITypoColor } from "@Front/Components/DesignSystem/Typography";
import DefaultNotaryDashboard, { IDashBoardFolder } from "@Front/Components/LayoutTemplates/DefaultNotaryDashboard"; import DefaultNotaryDashboard from "@Front/Components/LayoutTemplates/DefaultNotaryDashboard";
import { OfficeFolder } from "le-coffre-resources/dist/Notary";
import BasePage from "../Base"; import BasePage from "../Base";
import classes from "./classes.module.scss"; import classes from "./classes.module.scss";
type IProps = {}; type IProps = {};
type IState = { type IState = {
selectedFolder: IDashBoardFolder | null; selectedFolder: OfficeFolder | null;
isArchivedModalOpen: boolean; isArchivedModalOpen: boolean;
}; };
export default class Folder extends BasePage<IProps, IState> { export default class Folder extends BasePage<IProps, IState> {
@ -37,7 +38,7 @@ export default class Folder extends BasePage<IProps, IState> {
); );
} }
private onSelectedFolder(folder: IDashBoardFolder): void { private onSelectedFolder(folder: OfficeFolder): void {
this.setState({ selectedFolder: folder }); this.setState({ selectedFolder: folder });
} }
} }

View File

@ -1,11 +1,11 @@
import React from "react"; import React from "react";
import classes from "./classes.module.scss"; import classes from "./classes.module.scss";
import { IDashBoardFolder } from "@Front/Components/LayoutTemplates/DefaultNotaryDashboard"; import { OfficeFolder } from "le-coffre-resources/dist/Notary";
import Typography, { ITypo, ITypoColor } from "@Front/Components/DesignSystem/Typography"; import Typography, { ITypo, ITypoColor } from "@Front/Components/DesignSystem/Typography";
import UserFolder from "@Front/Components/DesignSystem/UserFolder"; import UserFolder from "@Front/Components/DesignSystem/UserFolder";
type IProps = { type IProps = {
folder: IDashBoardFolder; folder: OfficeFolder;
}; };
type IState = { type IState = {
openedCustomer: string; openedCustomer: string;

View File

@ -4,9 +4,9 @@ import Button, { EButtonVariant } from "@Front/Components/DesignSystem/Button";
import FolderBoxInformation, { EFolderBoxInformationType } from "@Front/Components/DesignSystem/FolderBoxInformation"; import FolderBoxInformation, { EFolderBoxInformationType } from "@Front/Components/DesignSystem/FolderBoxInformation";
import QuantityProgressBar from "@Front/Components/DesignSystem/QuantityProgressBar"; import QuantityProgressBar from "@Front/Components/DesignSystem/QuantityProgressBar";
import Typography, { ITypo, ITypoColor } from "@Front/Components/DesignSystem/Typography"; import Typography, { ITypo, ITypoColor } from "@Front/Components/DesignSystem/Typography";
import DefaultNotaryDashboard, { IDashBoardFolder } from "@Front/Components/LayoutTemplates/DefaultNotaryDashboard"; import DefaultNotaryDashboard from "@Front/Components/LayoutTemplates/DefaultNotaryDashboard";
import Module from "@Front/Config/Module"; import Module from "@Front/Config/Module";
import { OfficeFolder } from "le-coffre-resources/dist/Customer"; import { OfficeFolder } from "le-coffre-resources/dist/Notary";
import { NextRouter, useRouter } from "next/router"; import { NextRouter, useRouter } from "next/router";
import BasePage from "../../Base"; import BasePage from "../../Base";
@ -21,7 +21,7 @@ type IPropsClass = IProps & {
}; };
type IState = { type IState = {
selectedFolder: IDashBoardFolder | null; selectedFolder: OfficeFolder | null;
isArchivedModalOpen: boolean; isArchivedModalOpen: boolean;
}; };
class FolderInformationClass extends BasePage<IPropsClass, IState> { class FolderInformationClass extends BasePage<IPropsClass, IState> {
@ -111,7 +111,7 @@ class FolderInformationClass extends BasePage<IPropsClass, IState> {
return this.state.selectedFolder?.customers !== undefined; return this.state.selectedFolder?.customers !== undefined;
} }
private onSelectedFolder(folder: IDashBoardFolder): void { private onSelectedFolder(folder: OfficeFolder): void {
this.setState({ selectedFolder: folder }); this.setState({ selectedFolder: folder });
} }

View File

@ -1,22 +1,23 @@
import Button, { EButtonVariant } from "@Front/Components/DesignSystem/Button"; import Button, { EButtonVariant } from "@Front/Components/DesignSystem/Button";
import Form from "@Front/Components/DesignSystem/Form"; import Form from "@Front/Components/DesignSystem/Form";
import TextField from "@Front/Components/DesignSystem/Form/TextField";
import Select, { IOption } from "@Front/Components/DesignSystem/Form/SelectField"; import Select, { IOption } from "@Front/Components/DesignSystem/Form/SelectField";
import TextField from "@Front/Components/DesignSystem/Form/TextField";
import Typography, { ITypo } from "@Front/Components/DesignSystem/Typography"; import Typography, { ITypo } from "@Front/Components/DesignSystem/Typography";
import BackArrow from "@Front/Components/Elements/BackArrow"; import BackArrow from "@Front/Components/Elements/BackArrow";
import DefaultNotaryDashboard, { IDashBoardFolder } from "@Front/Components/LayoutTemplates/DefaultNotaryDashboard"; import DefaultNotaryDashboard from "@Front/Components/LayoutTemplates/DefaultNotaryDashboard";
import Module from "@Front/Config/Module";
import { OfficeFolder } from "le-coffre-resources/dist/Notary";
import Link from "next/link";
import { useRouter } from "next/router"; import { useRouter } from "next/router";
import BasePage from "../../Base"; import BasePage from "../../Base";
import classes from "./classes.module.scss"; import classes from "./classes.module.scss";
import Link from "next/link";
import Module from "@Front/Config/Module";
type IProps = { type IProps = {
selectedFolderUid: string; selectedFolderUid: string;
}; };
type IState = { type IState = {
selectedFolder: IDashBoardFolder | null; selectedFolder: OfficeFolder | null;
selectedOption?: IOption; selectedOption?: IOption;
}; };
class UpdateFolderMetadataClass extends BasePage<IProps, IState> { class UpdateFolderMetadataClass extends BasePage<IProps, IState> {
@ -77,7 +78,7 @@ class UpdateFolderMetadataClass extends BasePage<IProps, IState> {
}); });
} }
private onSelectedFolder(folder: IDashBoardFolder): void { private onSelectedFolder(folder: OfficeFolder): void {
this.setState({ selectedFolder: folder }); this.setState({ selectedFolder: folder });
} }
} }

View File

@ -1,11 +1,13 @@
import DefaultNotaryDashboard, { IDashBoardFolder } from "@Front/Components/LayoutTemplates/DefaultNotaryDashboard";
import BasePage from "../Base";
import Typography, { ITypo, ITypoColor } from "@Front/Components/DesignSystem/Typography"; import Typography, { ITypo, ITypoColor } from "@Front/Components/DesignSystem/Typography";
import DefaultNotaryDashboard from "@Front/Components/LayoutTemplates/DefaultNotaryDashboard";
import { OfficeFolder } from "le-coffre-resources/dist/Notary";
import BasePage from "../Base";
import classes from "./classes.module.scss"; import classes from "./classes.module.scss";
type IProps = {}; type IProps = {};
type IState = { type IState = {
selectedFolder: IDashBoardFolder | null; selectedFolder: OfficeFolder | null;
isArchivedModalOpen: boolean; isArchivedModalOpen: boolean;
}; };
export default class FolderArchived extends BasePage<IProps, IState> { export default class FolderArchived extends BasePage<IProps, IState> {
@ -40,7 +42,7 @@ export default class FolderArchived extends BasePage<IProps, IState> {
); );
} }
private onSelectedFolder(folder: IDashBoardFolder): void { private onSelectedFolder(folder: OfficeFolder): void {
this.setState({ selectedFolder: folder }); this.setState({ selectedFolder: folder });
} }
} }

View File

@ -1,48 +1,48 @@
import CoffreIcon from "@Assets/Icons/coffre.svg"; import CoffreIcon from "@Assets/Icons/coffre.svg";
// import { FrontendVariables } from "@Front/Config/VariablesFront";
import idNoteLogo from "@Assets/Icons/id-note-logo.svg"; import idNoteLogo from "@Assets/Icons/id-note-logo.svg";
import Button, { EButtonVariant } from "@Front/Components/DesignSystem/Button"; import Button, { EButtonVariant } from "@Front/Components/DesignSystem/Button";
import Typography, { ITypo } from "@Front/Components/DesignSystem/Typography"; import Typography, { ITypo } from "@Front/Components/DesignSystem/Typography";
import DefaultDoubleSidePage from "@Front/Components/LayoutTemplates/DefaultDoubleSidePage"; import DefaultDoubleSidePage from "@Front/Components/LayoutTemplates/DefaultDoubleSidePage";
import Module from "@Front/Config/Module";
import JwtService from "@Front/Services/JwtService/JwtService";
import UserStore from "@Front/Stores/UserStore"; import UserStore from "@Front/Stores/UserStore";
import Image from "next/image"; import Image from "next/image";
import { useRouter } from "next/router";
import { useCallback } from "react";
import BasePage from "../Base";
import classes from "./classes.module.scss"; import classes from "./classes.module.scss";
import LandingImage from "./landing-connect.jpeg"; import LandingImage from "./landing-connect.jpeg";
export default class LoginClass extends BasePage { export default function Login() {
public override render(): JSX.Element { const router = useRouter();
return ( const redirectUserOnConnection = useCallback(() => {
<DefaultDoubleSidePage title={"Login"} image={LandingImage}> async function getUser() {
<div className={classes["root"]}> try {
<Image alt="coffre" src={CoffreIcon} /> await UserStore.instance.connect(process.env["NEXT_PUBLIC_ADMIN_ID"] as string);
<Typography typo={ITypo.H1}> await JwtService.getInstance().checkJwt();
<div className={classes["title"]}>Connexion espace professionnel</div> router.push(Module.getInstance().get().modules.pages.Folder.props.path);
</Typography> } catch (e) {
<Button onClick={this.redirectUserOnConnection} icon={idNoteLogo} iconposition={"left"}> console.error(e);
S'identifier avec ID.not }
</Button> }
<Typography typo={ITypo.P_18}>
<div className={classes["forget-password"]}>Vous n'arrivez pas à vous connecter ?</div>
</Typography>
<Button variant={EButtonVariant.LINE}>Contacter l'administrateur</Button>
</div>
</DefaultDoubleSidePage>
);
}
private async redirectUserOnConnection() { getUser();
// const variables = FrontendVariables.getInstance(); }, [router]);
// const baseFronturl = variables.BACK_API_PROTOCOL + variables.FRONT_APP_HOST; return (
<DefaultDoubleSidePage title={"Login"} image={LandingImage}>
await UserStore.instance.connect(process.env["NEXT_PUBLIC_ADMIN_ID"] as string); <div className={classes["root"]}>
// await JwtService.getInstance().checkJwt(); <Image alt="coffre" src={CoffreIcon} />
// window.location.assign("http://localhost:3000" + "/folders"); <Typography typo={ITypo.H1}>
<div className={classes["title"]}>Connexion espace professionnel</div>
// const authorizeEndPoint = variables.IDNOT_AUTHORIZE_ENDPOINT; </Typography>
// const clientId = variables.IDNOT_CLIENT_ID; <Button onClick={redirectUserOnConnection} icon={idNoteLogo} iconposition={"left"}>
// const url = `${authorizeEndPoint}?client_id=${clientId}&redirect_uri=${baseFronturl}/authorized-client&scope=openid,profile,offline_access&response_type=code`; S'identifier avec ID.not
// window.location.assign(url); </Button>
} <Typography typo={ITypo.P_18}>
<div className={classes["forget-password"]}>Vous n'arrivez pas à vous connecter ?</div>
</Typography>
<Button variant={EButtonVariant.LINE}>Contacter l'administrateur</Button>
</div>
</DefaultDoubleSidePage>
);
} }

View File

@ -1,13 +1,15 @@
import Roles from "@Front/Api/LeCoffreApi/Admin/OfficeRoles/OfficeRoles"; import OfficeRoles from "@Front/Api/LeCoffreApi/Admin/OfficeRoles/OfficeRoles";
import Rules from "@Front/Api/LeCoffreApi/Admin/Rules/Rules"; 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,11 +24,22 @@ 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() {
if (!roleUid) return; if (!roleUid) return;
const role = await Roles.getInstance().getByUid(roleUid as string, { const role = await OfficeRoles.getInstance().getByUid(roleUid as string, {
q: { q: {
rules: true, rules: true,
}, },
@ -64,19 +77,32 @@ 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)); await OfficeRoles.getInstance().put(roleSelected.uid, {
const role = await Roles.getInstance().put(roleSelected.uid, { uid: roleSelected.uid,
rules, rules,
}); });
if (!role) return;
setRoleSelected(role); const roleUpdated = await OfficeRoles.getInstance().getByUid(roleSelected.uid, {
if (!role.rules) return; q: {
setRulesCheckboxes(role.rules.map((rule) => ({ ...rule, checked: false }))); rules: true,
},
});
setRoleSelected(roleUpdated);
closeConfirmModal();
}, [closeConfirmModal, roleSelected, rulesCheckboxes]);
const handleRuleChange = useCallback(
(e: React.ChangeEvent<HTMLInputElement>) => {
const ruleUid = e.target.value;
const rule = rulesCheckboxes.find((rule) => rule.uid === ruleUid);
if (!rule) return;
rule.checked = e.target.checked;
setRulesCheckboxes([...rulesCheckboxes]);
}, },
[roleSelected, rulesCheckboxes], [rulesCheckboxes],
); );
return ( return (
@ -103,19 +129,37 @@ 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}>
<CheckBox option={{ label: rule.name, value: rule.uid }} checked={rule.checked} /> <CheckBox
option={{ label: rule.name, value: rule.uid }}
checked={rule.checked}
onChange={handleRuleChange}
/>
</div> </div>
))} ))}
</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 modifiez les droits des rôles.
</Typography>
</div>
</Confirm>
</div> </div>
</DefaultRoleDashboard> </DefaultRoleDashboard>
); );

View File

@ -3,6 +3,7 @@ import OfficeRoles from "@Front/Api/LeCoffreApi/Admin/OfficeRoles/OfficeRoles";
import Users from "@Front/Api/LeCoffreApi/SuperAdmin/Users/Users"; import Users from "@Front/Api/LeCoffreApi/SuperAdmin/Users/Users";
import CheckBox from "@Front/Components/DesignSystem/CheckBox"; import CheckBox from "@Front/Components/DesignSystem/CheckBox";
import SelectField, { IOption } from "@Front/Components/DesignSystem/Form/SelectField"; import SelectField, { IOption } from "@Front/Components/DesignSystem/Form/SelectField";
import Confirm from "@Front/Components/DesignSystem/Modal/Confirm";
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 User from "le-coffre-resources/dist/Notary"; import User from "le-coffre-resources/dist/Notary";
@ -20,6 +21,42 @@ 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 [addSuperAdminModalOpened, setAddSuperAdminModalOpened] = useState<boolean>(false);
const [removeSuperAdminModalOpened, setRemoveSuperAdminModalOpened] = useState<boolean>(false);
const openAddSuperAdminModal = () => {
setAddSuperAdminModalOpened(true);
};
const closeAddSuperAdminModal = () => {
setAddSuperAdminModalOpened(false);
};
const openRemoveSuperAdminModal = () => {
setRemoveSuperAdminModalOpened(true);
};
const closeRemoveSuperAdminModal = () => {
setRemoveSuperAdminModalOpened(false);
};
const handleCheckboxAdminChanged = (e: React.ChangeEvent<HTMLInputElement>) => {
const checked = e.target.checked;
if (checked) {
openAddSuperAdminModal();
} else {
openRemoveSuperAdminModal();
}
};
const addSuperAdmin = async () => {
closeAddSuperAdminModal();
};
const removeSuperAdmin = async () => {
closeRemoveSuperAdminModal();
};
useEffect(() => { useEffect(() => {
async function getUser() { async function getUser() {
if (!userUid) return; if (!userUid) return;
@ -109,6 +146,7 @@ export default function UserInformations(props: IProps) {
toolTip="tooltip" toolTip="tooltip"
/> />
<CheckBox <CheckBox
onChange={handleCheckboxAdminChanged}
option={{ option={{
label: "Nommer super admin LEcoffre.io", label: "Nommer super admin LEcoffre.io",
value: "title", value: "title",
@ -135,6 +173,40 @@ export default function UserInformations(props: IProps) {
</div> </div>
</div> </div>
</div> </div>
<Confirm
isOpen={addSuperAdminModalOpened}
onClose={closeAddSuperAdminModal}
onAccept={addSuperAdmin}
closeBtn
header={`Souhaitez-vous attribuer un vote à ${
userSelected?.contact?.first_name + " " + userSelected?.contact?.last_name
} pour devenir Super Administrateur ?`}
confirmText={"Attribuer un vote"}
cancelText={"Annuler"}>
<div className={classes["modal-content"]}>
<Typography typo={ITypo.P_16} className={classes["text"]}>
Nommer une personne Super Administrateur nécessite 3 votes de super administrateurs existants. Souhaitez-vous
attribuer un vote ?
</Typography>
</div>
</Confirm>
<Confirm
isOpen={removeSuperAdminModalOpened}
onClose={closeRemoveSuperAdminModal}
onAccept={removeSuperAdmin}
closeBtn
header={`Souhaitez-vous retirer ${
userSelected?.contact?.first_name + " " + userSelected?.contact?.last_name
} de la liste des Super Administrateurs ?`}
confirmText={"Attribuer un vote"}
cancelText={"Annuler"}>
<div className={classes["modal-content"]}>
<Typography typo={ITypo.P_16} className={classes["text"]}>
Retirer un collaborateur du rôle de Super Administrateur nécessite 3 votes de super administrateurs existants.
Souhaitez-vous attribuer un vote ?
</Typography>
</div>
</Confirm>
</div> </div>
</DefaultUserDashboard> </DefaultUserDashboard>
); );

View File

@ -213,6 +213,36 @@
} }
} }
}, },
"DocumentTypes": {
"enabled": true,
"props": {
"path": "/document-types",
"labelKey": "documentTypes"
},
"pages": {
"DocumentTypesInformations": {
"enabled": true,
"props": {
"path": "/document-types/[uid]",
"labelKey": "documentInformations"
}
},
"Create": {
"enabled": true,
"props": {
"path": "/document-types/create",
"labelKey": "createDocumentType"
}
},
"Edit": {
"enabled": true,
"props": {
"path": "/document-types/[uid]/edit",
"labelKey": "editDocumentType"
}
}
}
},
"404": { "404": {
"enabled": true, "enabled": true,
"props": { "props": {

View File

@ -213,6 +213,36 @@
} }
} }
}, },
"DocumentTypes": {
"enabled": true,
"props": {
"path": "/document-types",
"labelKey": "documentTypes"
},
"pages": {
"DocumentTypesInformations": {
"enabled": true,
"props": {
"path": "/document-types/[uid]",
"labelKey": "documentInformations"
}
},
"Create": {
"enabled": true,
"props": {
"path": "/document-types/create",
"labelKey": "createDocumentType"
}
},
"Edit": {
"enabled": true,
"props": {
"path": "/document-types/[uid]/edit",
"labelKey": "editDocumentType"
}
}
}
},
"404": { "404": {
"enabled": true, "enabled": true,
"props": { "props": {

View File

@ -213,6 +213,36 @@
} }
} }
}, },
"DocumentTypes": {
"enabled": true,
"props": {
"path": "/document-types",
"labelKey": "documentTypes"
},
"pages": {
"DocumentTypesInformations": {
"enabled": true,
"props": {
"path": "/document-types/[uid]",
"labelKey": "documentInformations"
}
},
"Create": {
"enabled": true,
"props": {
"path": "/document-types/create",
"labelKey": "createDocumentType"
}
},
"Edit": {
"enabled": true,
"props": {
"path": "/document-types/[uid]/edit",
"labelKey": "editDocumentType"
}
}
}
},
"404": { "404": {
"enabled": true, "enabled": true,
"props": { "props": {