Merge branch 'dev' into staging
This commit is contained in:
commit
0d58e6b5ae
@ -2,6 +2,21 @@ import { DeedType } from "le-coffre-resources/dist/Admin";
|
||||
|
||||
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 = {
|
||||
where?: {};
|
||||
include?: {};
|
||||
@ -46,4 +61,34 @@ export default class DeedTypes extends BaseAdmin {
|
||||
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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -9,6 +9,7 @@ export type IGetRolesParams = {
|
||||
};
|
||||
|
||||
export type IPutRoleParams = {
|
||||
uid: OfficeRole["uid"];
|
||||
rules: OfficeRole["rules"];
|
||||
};
|
||||
|
||||
|
83
src/front/Api/LeCoffreApi/Admin/Roles/Roles.ts
Normal file
83
src/front/Api/LeCoffreApi/Admin/Roles/Roles.ts
Normal 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);
|
||||
}
|
||||
}
|
||||
}
|
@ -1,7 +1,7 @@
|
||||
import PenICon from "@Assets/Icons/pen.svg";
|
||||
import { IDashBoardFolder } from "@Front/Components/LayoutTemplates/DefaultNotaryDashboard";
|
||||
import Module from "@Front/Config/Module";
|
||||
import classNames from "classnames";
|
||||
import { OfficeFolder } from "le-coffre-resources/dist/Notary";
|
||||
import Image from "next/image";
|
||||
import Link from "next/link";
|
||||
import React from "react";
|
||||
@ -10,7 +10,7 @@ import Typography, { ITypo } from "../Typography";
|
||||
import classes from "./classes.module.scss";
|
||||
|
||||
type IProps = {
|
||||
folder: IDashBoardFolder;
|
||||
folder: OfficeFolder;
|
||||
type: EFolderBoxInformationType;
|
||||
isArchived?: boolean;
|
||||
};
|
||||
@ -42,7 +42,7 @@ export default function FolderBoxInformation(props: IProps) {
|
||||
</div>
|
||||
);
|
||||
|
||||
function renderContentByType(folder: IDashBoardFolder, type: EFolderBoxInformationType) {
|
||||
function renderContentByType(folder: OfficeFolder, type: EFolderBoxInformationType) {
|
||||
switch (type) {
|
||||
case EFolderBoxInformationType.DESCRIPTION:
|
||||
return (
|
||||
|
@ -1,16 +1,16 @@
|
||||
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 React from "react";
|
||||
|
||||
import Typography, { ITypo } from "../Typography";
|
||||
import WarningBadge from "../WarningBadge";
|
||||
import classes from "./classes.module.scss";
|
||||
import { EDocumentStatus } from "le-coffre-resources/dist/Customer/Document";
|
||||
|
||||
type IProps = {
|
||||
folder: IDashBoardFolder;
|
||||
onSelectedFolder?: (folder: IDashBoardFolder) => void;
|
||||
folder: OfficeFolder;
|
||||
onSelectedFolder?: (folder: OfficeFolder) => void;
|
||||
};
|
||||
type IState = {};
|
||||
|
||||
|
@ -1,18 +1,18 @@
|
||||
import { IDashBoardFolder } from "@Front/Components/LayoutTemplates/DefaultNotaryDashboard";
|
||||
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 { useRouter } from "next/router";
|
||||
import React from "react";
|
||||
|
||||
import FolderContainer from "../FolderContainer";
|
||||
import classes from "./classes.module.scss";
|
||||
import classNames from "classnames";
|
||||
|
||||
type IProps = {
|
||||
folders: IDashBoardFolder[];
|
||||
folders: OfficeFolder[];
|
||||
isArchived: boolean;
|
||||
onSelectedFolder?: (folder: IDashBoardFolder) => void;
|
||||
onSelectedFolder?: (folder: OfficeFolder) => void;
|
||||
onCloseLeftSide?: () => void;
|
||||
};
|
||||
|
||||
|
@ -1,19 +1,19 @@
|
||||
import { IDashBoardFolder } from "@Front/Components/LayoutTemplates/DefaultNotaryDashboard";
|
||||
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 { NextRouter, useRouter } from "next/router";
|
||||
import React from "react";
|
||||
|
||||
import BlockList, { IBlock } from "../BlockList";
|
||||
import Button from "../Button";
|
||||
import SearchBar from "../SearchBar";
|
||||
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 = {
|
||||
folders: IDashBoardFolder[];
|
||||
folders: OfficeFolder[];
|
||||
isArchived: boolean;
|
||||
onSelectedFolder?: (folder: IDashBoardFolder) => void;
|
||||
onSelectedFolder?: (folder: OfficeFolder) => void;
|
||||
onCloseLeftSide?: () => void;
|
||||
};
|
||||
|
||||
@ -22,7 +22,7 @@ type IPropsClass = IProps & {
|
||||
};
|
||||
|
||||
type IState = {
|
||||
filteredFolders: IDashBoardFolder[];
|
||||
filteredFolders: OfficeFolder[];
|
||||
};
|
||||
|
||||
class FolderListContainerClass extends React.Component<IPropsClass, IState> {
|
||||
@ -97,7 +97,7 @@ class FolderListContainerClass extends React.Component<IPropsClass, IState> {
|
||||
}
|
||||
|
||||
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 number = folder.folder_number.toLowerCase();
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
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 { Customer } from "le-coffre-resources/dist/Notary";
|
||||
import Image from "next/image";
|
||||
@ -13,7 +13,7 @@ import { EDocumentStatus } from "le-coffre-resources/dist/Customer/Document";
|
||||
|
||||
type IProps = {
|
||||
customer: Customer;
|
||||
folder: IDashBoardFolder;
|
||||
folder: OfficeFolder;
|
||||
isArchived?: boolean;
|
||||
};
|
||||
type IState = {};
|
||||
|
@ -1,11 +1,11 @@
|
||||
import ChevronIcon from "@Assets/Icons/chevron.svg";
|
||||
import PlusIcon from "@Assets/Icons/plus.svg";
|
||||
import Documents from "@Front/Api/LeCoffreApi/SuperAdmin/Documents/Documents";
|
||||
import { IDashBoardFolder } from "@Front/Components/LayoutTemplates/DefaultNotaryDashboard";
|
||||
import Module from "@Front/Config/Module";
|
||||
import classNames from "classnames";
|
||||
import Customer, { Document } from "le-coffre-resources/dist/Customer";
|
||||
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 Link from "next/link";
|
||||
import React from "react";
|
||||
@ -20,7 +20,7 @@ import UserFolderHeader from "./UserFolderHeader";
|
||||
type IProps = {
|
||||
customer: Customer;
|
||||
animationDelay?: number;
|
||||
folder: IDashBoardFolder;
|
||||
folder: OfficeFolder;
|
||||
isArchived?: boolean;
|
||||
isOpened: boolean;
|
||||
onChange: (id: string) => void;
|
||||
|
@ -87,7 +87,11 @@ export default class DefaultDeedTypesDashboard extends React.Component<IProps, I
|
||||
|
||||
public override async componentDidMount() {
|
||||
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);
|
||||
this.setState({ deedTypes });
|
||||
|
@ -7,8 +7,8 @@ import Version from "@Front/Components/DesignSystem/Version";
|
||||
import BackArrow from "@Front/Components/Elements/BackArrow";
|
||||
import WindowStore from "@Front/Stores/WindowStore";
|
||||
import classNames from "classnames";
|
||||
import { OfficeFolder } from "le-coffre-resources/dist/Customer";
|
||||
import EFolderStatus from "le-coffre-resources/dist/Customer/EFolderStatus";
|
||||
import { OfficeFolder } from "le-coffre-resources/dist/Notary";
|
||||
import Image from "next/image";
|
||||
import React, { ReactNode } from "react";
|
||||
|
||||
@ -18,30 +18,17 @@ type IProps = {
|
||||
title: string;
|
||||
children?: ReactNode;
|
||||
isArchived?: boolean;
|
||||
onSelectedFolder: (folder: IDashBoardFolder) => void;
|
||||
onSelectedFolder: (folder: OfficeFolder) => void;
|
||||
hasBackArrow: boolean;
|
||||
backArrowUrl?: string;
|
||||
mobileBackText?: string;
|
||||
};
|
||||
type IState = {
|
||||
folders: IDashBoardFolder[] | null;
|
||||
folders: OfficeFolder[] | null;
|
||||
isLeftSideOpen: 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> {
|
||||
private onWindowResize = () => {};
|
||||
public static defaultProps: Partial<IProps> = {
|
||||
|
@ -90,7 +90,6 @@ export default class DefaultRoleDashboard extends React.Component<IProps, IState
|
||||
};
|
||||
|
||||
const roles = await OfficeRoles.getInstance().get(query);
|
||||
console.log(roles);
|
||||
|
||||
this.setState({ roles });
|
||||
}
|
||||
|
@ -1,16 +1,18 @@
|
||||
import ChevronIcon from "@Assets/Icons/chevron.svg";
|
||||
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 CheckBox from "@Front/Components/DesignSystem/CheckBox";
|
||||
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 DefaultCollaboratorDashboard from "@Front/Components/LayoutTemplates/DefaultCollaboratorDashboard";
|
||||
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 { useRouter } from "next/router";
|
||||
import { useEffect, useState } from "react";
|
||||
import { useCallback, useEffect, useState } from "react";
|
||||
|
||||
import classes from "./classes.module.scss";
|
||||
|
||||
@ -22,6 +24,64 @@ export default function CollaboratorInformations(props: IProps) {
|
||||
const [userSelected, setUserSelected] = useState<User | null>(null);
|
||||
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(() => {
|
||||
async function getUser() {
|
||||
if (!collaboratorUid) return;
|
||||
@ -38,6 +98,10 @@ export default function CollaboratorInformations(props: IProps) {
|
||||
if (!roles) return;
|
||||
setAvailableRoles(roles.map((role) => ({ value: role.uid, label: role.name })));
|
||||
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();
|
||||
@ -96,22 +160,54 @@ export default function CollaboratorInformations(props: IProps) {
|
||||
placeholder="Rôle"
|
||||
name="role"
|
||||
options={availableRoles}
|
||||
selectedOption={{
|
||||
value: userSelected?.office_role ? userSelected?.office_role?.uid : userSelected?.role?.uid,
|
||||
label: userSelected?.office_role ? userSelected?.office_role?.name : userSelected?.role?.name!,
|
||||
}}
|
||||
selectedOption={selectedOption!}
|
||||
onChange={handleRoleChange}
|
||||
disabled={userSelected?.role?.name === "super-admin"}
|
||||
/>
|
||||
</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>
|
||||
<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>
|
||||
</DefaultCollaboratorDashboard>
|
||||
);
|
||||
|
@ -1,16 +1,46 @@
|
||||
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 TextAreaField from "@Front/Components/DesignSystem/Form/TextareaField";
|
||||
import TextField from "@Front/Components/DesignSystem/Form/TextField";
|
||||
import Typography, { ITypo } from "@Front/Components/DesignSystem/Typography";
|
||||
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 classes from "./classes.module.scss";
|
||||
import TextField from "@Front/Components/DesignSystem/Form/TextField";
|
||||
import TextAreaField from "@Front/Components/DesignSystem/Form/TextareaField";
|
||||
|
||||
type 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 (
|
||||
<DefaultDeedTypesDashboard mobileBackText={"Liste des types d'actes"} hasBackArrow title="Créer un type d'acte">
|
||||
|
@ -1,15 +1,16 @@
|
||||
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 TextAreaField from "@Front/Components/DesignSystem/Form/TextareaField";
|
||||
import TextField from "@Front/Components/DesignSystem/Form/TextField";
|
||||
import Typography, { ITypo } from "@Front/Components/DesignSystem/Typography";
|
||||
import DefaultDeedTypesDashboard from "@Front/Components/LayoutTemplates/DefaultDeedTypeDashboard";
|
||||
import Module from "@Front/Config/Module";
|
||||
import { DeedType } from "le-coffre-resources/dist/Admin";
|
||||
import { useRouter } from "next/router";
|
||||
import { useCallback, useEffect, useState } from "react";
|
||||
|
||||
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() {
|
||||
const router = useRouter();
|
||||
@ -31,7 +32,28 @@ export default function DeedTypesEdit() {
|
||||
getDeedType();
|
||||
}, [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 (
|
||||
<DefaultDeedTypesDashboard mobileBackText={"Liste des types d'actes"} hasBackArrow title="Modifier les informations d'un acte">
|
||||
|
@ -5,6 +5,7 @@ import DocumentTypes from "@Front/Api/LeCoffreApi/Admin/DocumentTypes/DocumentTy
|
||||
import Button, { EButtonVariant } from "@Front/Components/DesignSystem/Button";
|
||||
import Form from "@Front/Components/DesignSystem/Form";
|
||||
import { IOption } from "@Front/Components/DesignSystem/Form/SelectField";
|
||||
import Confirm from "@Front/Components/DesignSystem/Modal/Confirm";
|
||||
import MultiSelect from "@Front/Components/DesignSystem/MultiSelect";
|
||||
import Typography, { ITypo, ITypoColor } from "@Front/Components/DesignSystem/Typography";
|
||||
import DefaultDeedTypesDashboard from "@Front/Components/LayoutTemplates/DefaultDeedTypeDashboard";
|
||||
@ -28,6 +29,27 @@ export default function DeedTypesInformations(props: IProps) {
|
||||
const [availableDocuments, setAvailableDocuments] = useState<DocumentType[]>([]);
|
||||
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(() => {
|
||||
async function getDeedType() {
|
||||
if (!deedTypeUid) return;
|
||||
@ -37,6 +59,15 @@ export default function DeedTypesInformations(props: IProps) {
|
||||
},
|
||||
});
|
||||
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() {
|
||||
@ -44,12 +75,19 @@ export default function DeedTypesInformations(props: IProps) {
|
||||
setAvailableDocuments(documents);
|
||||
}
|
||||
|
||||
setSelectedDocuments([]);
|
||||
getDocuments();
|
||||
getDeedType();
|
||||
}, [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>) => {
|
||||
setSelectedDocuments(values as IOption[]);
|
||||
@ -121,8 +159,24 @@ export default function DeedTypesInformations(props: IProps) {
|
||||
</Form>
|
||||
</div>
|
||||
<div className={classes["delete-container"]}>
|
||||
<Button variant={EButtonVariant.GHOST}>Supprimer</Button>
|
||||
<Button variant={EButtonVariant.GHOST} onClick={openDeleteModal}>
|
||||
Supprimer
|
||||
</Button>
|
||||
</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>
|
||||
</DefaultDeedTypesDashboard>
|
||||
);
|
||||
|
@ -6,20 +6,20 @@ import Folders from "@Front/Api/LeCoffreApi/SuperAdmin/Folders/Folders";
|
||||
import Button, { EButtonVariant } from "@Front/Components/DesignSystem/Button";
|
||||
import CheckBox from "@Front/Components/DesignSystem/CheckBox";
|
||||
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 Typography, { ITypo, ITypoColor } from "@Front/Components/DesignSystem/Typography";
|
||||
import BackArrow from "@Front/Components/Elements/BackArrow";
|
||||
import DefaultNotaryDashboard from "@Front/Components/LayoutTemplates/DefaultNotaryDashboard";
|
||||
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 React from "react";
|
||||
|
||||
import BasePage from "../../Base";
|
||||
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 IPropsClass = IProps & {
|
||||
@ -110,11 +110,7 @@ class AskDocumentsClass extends BasePage<IPropsClass, IState> {
|
||||
cancelText={"Annuler"}
|
||||
confirmText={"Ajouter"}>
|
||||
<div className={classes["add-document-form-container"]}>
|
||||
<TextField
|
||||
name="document_name"
|
||||
placeholder="Nom du document à ajouter"
|
||||
onChange={this.onDocumentNameChange}
|
||||
/>
|
||||
<TextField name="document_name" placeholder="Nom du document à ajouter" onChange={this.onDocumentNameChange} />
|
||||
<TextAreaField
|
||||
name="description"
|
||||
placeholder="Description visible par le client"
|
||||
@ -211,10 +207,7 @@ class AskDocumentsClass extends BasePage<IPropsClass, IState> {
|
||||
|
||||
const oldDocumentsType = this.state.folder?.deed?.document_types!;
|
||||
await Deeds.getInstance().put(this.state.folder?.deed?.uid!, {
|
||||
document_types: [
|
||||
...oldDocumentsType,
|
||||
documentType,
|
||||
],
|
||||
document_types: [...oldDocumentsType, documentType],
|
||||
});
|
||||
|
||||
await this.loadData();
|
||||
|
@ -2,7 +2,7 @@ import PlusIcon from "@Assets/Icons/plus.svg";
|
||||
import Button, { EButtonVariant } from "@Front/Components/DesignSystem/Button";
|
||||
import Typography, { ITypo, ITypoColor } from "@Front/Components/DesignSystem/Typography";
|
||||
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 Link from "next/link";
|
||||
import React from "react";
|
||||
@ -10,7 +10,7 @@ import React from "react";
|
||||
import classes from "./classes.module.scss";
|
||||
|
||||
type IProps = {
|
||||
folder: IDashBoardFolder;
|
||||
folder: OfficeFolder;
|
||||
};
|
||||
type IState = {
|
||||
openedCustomer: string;
|
||||
@ -75,7 +75,6 @@ export default class ClientSection extends React.Component<IProps, IState> {
|
||||
return output ?? null;
|
||||
}
|
||||
|
||||
|
||||
private changeUserFolder(uid: string) {
|
||||
this.setState({
|
||||
openedCustomer: uid === this.state.openedCustomer ? "" : uid,
|
||||
|
@ -6,9 +6,9 @@ import TextAreaField from "@Front/Components/DesignSystem/Form/TextareaField";
|
||||
import Confirm from "@Front/Components/DesignSystem/Modal/Confirm";
|
||||
import QuantityProgressBar from "@Front/Components/DesignSystem/QuantityProgressBar";
|
||||
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 { 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 Link from "next/link";
|
||||
import { NextRouter, useRouter } from "next/router";
|
||||
@ -26,7 +26,7 @@ type IPropsClass = IProps & {
|
||||
};
|
||||
|
||||
type IState = {
|
||||
selectedFolder: IDashBoardFolder | null;
|
||||
selectedFolder: OfficeFolder | null;
|
||||
isArchivedModalOpen: boolean;
|
||||
inputArchivedDescripton: string;
|
||||
};
|
||||
@ -133,7 +133,7 @@ class FolderInformationClass extends BasePage<IPropsClass, IState> {
|
||||
}
|
||||
public override async componentDidMount() {
|
||||
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;
|
||||
}
|
||||
|
||||
private onSelectedFolder(folder: IDashBoardFolder): void {
|
||||
private onSelectedFolder(folder: OfficeFolder): void {
|
||||
this.setState({ selectedFolder: folder });
|
||||
}
|
||||
|
||||
|
@ -1,5 +1,3 @@
|
||||
import BasePage from "../../Base";
|
||||
import classes from "./classes.module.scss";
|
||||
import Customers from "@Front/Api/LeCoffreApi/SuperAdmin/Customers/Customers";
|
||||
import Button, { EButtonVariant } from "@Front/Components/DesignSystem/Button";
|
||||
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 Typography, { ITypo } from "@Front/Components/DesignSystem/Typography";
|
||||
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 Customer, { Contact } from "le-coffre-resources/dist/Customer";
|
||||
import { Contact, Customer, OfficeFolder } from "le-coffre-resources/dist/Notary";
|
||||
import Link from "next/link";
|
||||
import { NextRouter, useRouter } from "next/router";
|
||||
import { ChangeEvent } from "react";
|
||||
|
||||
import BasePage from "../../Base";
|
||||
import classes from "./classes.module.scss";
|
||||
|
||||
type IProps = {};
|
||||
|
||||
type IPropsClass = IProps & {
|
||||
@ -22,7 +23,7 @@ type IPropsClass = IProps & {
|
||||
customerUid: string;
|
||||
};
|
||||
type IState = {
|
||||
selectedFolder: IDashBoardFolder | null;
|
||||
selectedFolder: OfficeFolder | null;
|
||||
inputNameValue: string;
|
||||
inputFirstNameValue: string;
|
||||
inputEmailValue: string;
|
||||
@ -31,7 +32,7 @@ type IState = {
|
||||
doesInputHaveValues: boolean;
|
||||
inputBirthdate: Date | null;
|
||||
inputAddress: string;
|
||||
folder: IDashBoardFolder | null;
|
||||
folder: OfficeFolder | null;
|
||||
customer: Customer | null;
|
||||
};
|
||||
class UpdateClientClass extends BasePage<IPropsClass, IState> {
|
||||
@ -222,7 +223,7 @@ class UpdateClientClass extends BasePage<IPropsClass, IState> {
|
||||
this.setState({ inputPhoneNumberValue: event.target.value });
|
||||
}
|
||||
|
||||
private onSelectedFolder(folder: IDashBoardFolder): void {
|
||||
private onSelectedFolder(folder: OfficeFolder): void {
|
||||
this.setState({ selectedFolder: folder });
|
||||
}
|
||||
|
||||
|
@ -7,9 +7,9 @@ import MultiSelect from "@Front/Components/DesignSystem/MultiSelect";
|
||||
import RadioBox from "@Front/Components/DesignSystem/RadioBox";
|
||||
import Typography, { ITypo } from "@Front/Components/DesignSystem/Typography";
|
||||
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 User from "le-coffre-resources/dist/Notary";
|
||||
import User, { OfficeFolder } from "le-coffre-resources/dist/Notary";
|
||||
import Link from "next/link";
|
||||
import { NextRouter, useRouter } from "next/router";
|
||||
|
||||
@ -21,7 +21,7 @@ type IPropsClass = {
|
||||
router: NextRouter;
|
||||
};
|
||||
type IState = {
|
||||
selectedFolder: IDashBoardFolder | null;
|
||||
selectedFolder: OfficeFolder | null;
|
||||
selectedOption?: ERadioBoxValue;
|
||||
availableCollaborators: User[];
|
||||
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 });
|
||||
}
|
||||
|
||||
|
@ -1,16 +1,17 @@
|
||||
import Folders from "@Front/Api/LeCoffreApi/SuperAdmin/Folders/Folders";
|
||||
import Button, { EButtonVariant } from "@Front/Components/DesignSystem/Button";
|
||||
import Form from "@Front/Components/DesignSystem/Form";
|
||||
import TextAreaField from "@Front/Components/DesignSystem/Form/TextareaField";
|
||||
import Typography, { ITypo } from "@Front/Components/DesignSystem/Typography";
|
||||
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 { NextRouter, useRouter } from "next/router";
|
||||
|
||||
import BasePage from "../../Base";
|
||||
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 = {};
|
||||
|
||||
@ -20,7 +21,7 @@ type IPropsClass = IProps & {
|
||||
};
|
||||
|
||||
type IState = {
|
||||
folder: IDashBoardFolder | null;
|
||||
folder: OfficeFolder | null;
|
||||
};
|
||||
class UpdateFolderDescriptionClass extends BasePage<IPropsClass, IState> {
|
||||
private backwardPath = Module.getInstance()
|
||||
|
@ -5,14 +5,14 @@ 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 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 { Deed, OfficeFolder } from "le-coffre-resources/dist/Notary";
|
||||
import Link from "next/link";
|
||||
import { NextRouter, useRouter } from "next/router";
|
||||
|
||||
import BasePage from "../../Base";
|
||||
import classes from "./classes.module.scss";
|
||||
import { Deed, OfficeFolder } from "le-coffre-resources/dist/Notary";
|
||||
|
||||
type IProps = {};
|
||||
|
||||
@ -22,7 +22,7 @@ type IPropsClass = IProps & {
|
||||
};
|
||||
|
||||
type IState = {
|
||||
selectedFolder: IDashBoardFolder | null;
|
||||
selectedFolder: OfficeFolder | null;
|
||||
};
|
||||
class UpdateFolderMetadataClass extends BasePage<IPropsClass, IState> {
|
||||
constructor(props: IPropsClass) {
|
||||
@ -93,7 +93,7 @@ class UpdateFolderMetadataClass extends BasePage<IPropsClass, IState> {
|
||||
...values,
|
||||
deed: Deed.hydrate<Deed>({
|
||||
uid: values["deed"],
|
||||
})
|
||||
}),
|
||||
});
|
||||
|
||||
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 = {
|
||||
q: {
|
||||
deed: { include: { deed_type: true } },
|
||||
@ -118,7 +118,7 @@ class UpdateFolderMetadataClass extends BasePage<IPropsClass, IState> {
|
||||
return folder;
|
||||
}
|
||||
|
||||
private onSelectedFolder(folder: IDashBoardFolder): void {
|
||||
private onSelectedFolder(folder: OfficeFolder): void {
|
||||
this.setState({ selectedFolder: folder });
|
||||
}
|
||||
}
|
||||
|
@ -1,12 +1,13 @@
|
||||
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 classes from "./classes.module.scss";
|
||||
|
||||
type IProps = {};
|
||||
type IState = {
|
||||
selectedFolder: IDashBoardFolder | null;
|
||||
selectedFolder: OfficeFolder | null;
|
||||
isArchivedModalOpen: boolean;
|
||||
};
|
||||
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 });
|
||||
}
|
||||
}
|
||||
|
@ -1,11 +1,11 @@
|
||||
import React from "react";
|
||||
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 UserFolder from "@Front/Components/DesignSystem/UserFolder";
|
||||
|
||||
type IProps = {
|
||||
folder: IDashBoardFolder;
|
||||
folder: OfficeFolder;
|
||||
};
|
||||
type IState = {
|
||||
openedCustomer: string;
|
||||
|
@ -4,9 +4,9 @@ import Button, { EButtonVariant } from "@Front/Components/DesignSystem/Button";
|
||||
import FolderBoxInformation, { EFolderBoxInformationType } from "@Front/Components/DesignSystem/FolderBoxInformation";
|
||||
import QuantityProgressBar from "@Front/Components/DesignSystem/QuantityProgressBar";
|
||||
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 { OfficeFolder } from "le-coffre-resources/dist/Customer";
|
||||
import { OfficeFolder } from "le-coffre-resources/dist/Notary";
|
||||
import { NextRouter, useRouter } from "next/router";
|
||||
|
||||
import BasePage from "../../Base";
|
||||
@ -21,7 +21,7 @@ type IPropsClass = IProps & {
|
||||
};
|
||||
|
||||
type IState = {
|
||||
selectedFolder: IDashBoardFolder | null;
|
||||
selectedFolder: OfficeFolder | null;
|
||||
isArchivedModalOpen: boolean;
|
||||
};
|
||||
class FolderInformationClass extends BasePage<IPropsClass, IState> {
|
||||
@ -111,7 +111,7 @@ class FolderInformationClass extends BasePage<IPropsClass, IState> {
|
||||
return this.state.selectedFolder?.customers !== undefined;
|
||||
}
|
||||
|
||||
private onSelectedFolder(folder: IDashBoardFolder): void {
|
||||
private onSelectedFolder(folder: OfficeFolder): void {
|
||||
this.setState({ selectedFolder: folder });
|
||||
}
|
||||
|
||||
|
@ -1,22 +1,23 @@
|
||||
import Button, { EButtonVariant } from "@Front/Components/DesignSystem/Button";
|
||||
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 TextField from "@Front/Components/DesignSystem/Form/TextField";
|
||||
import Typography, { ITypo } from "@Front/Components/DesignSystem/Typography";
|
||||
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 BasePage from "../../Base";
|
||||
import classes from "./classes.module.scss";
|
||||
import Link from "next/link";
|
||||
import Module from "@Front/Config/Module";
|
||||
|
||||
type IProps = {
|
||||
selectedFolderUid: string;
|
||||
};
|
||||
type IState = {
|
||||
selectedFolder: IDashBoardFolder | null;
|
||||
selectedFolder: OfficeFolder | null;
|
||||
selectedOption?: IOption;
|
||||
};
|
||||
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 });
|
||||
}
|
||||
}
|
||||
|
@ -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 DefaultNotaryDashboard from "@Front/Components/LayoutTemplates/DefaultNotaryDashboard";
|
||||
import { OfficeFolder } from "le-coffre-resources/dist/Notary";
|
||||
|
||||
import BasePage from "../Base";
|
||||
import classes from "./classes.module.scss";
|
||||
|
||||
type IProps = {};
|
||||
type IState = {
|
||||
selectedFolder: IDashBoardFolder | null;
|
||||
selectedFolder: OfficeFolder | null;
|
||||
isArchivedModalOpen: boolean;
|
||||
};
|
||||
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 });
|
||||
}
|
||||
}
|
||||
|
@ -1,18 +1,33 @@
|
||||
import CoffreIcon from "@Assets/Icons/coffre.svg";
|
||||
// import { FrontendVariables } from "@Front/Config/VariablesFront";
|
||||
import idNoteLogo from "@Assets/Icons/id-note-logo.svg";
|
||||
import Button, { EButtonVariant } from "@Front/Components/DesignSystem/Button";
|
||||
import Typography, { ITypo } from "@Front/Components/DesignSystem/Typography";
|
||||
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 Image from "next/image";
|
||||
import { useRouter } from "next/router";
|
||||
import { useCallback } from "react";
|
||||
|
||||
import BasePage from "../Base";
|
||||
import classes from "./classes.module.scss";
|
||||
import LandingImage from "./landing-connect.jpeg";
|
||||
|
||||
export default class LoginClass extends BasePage {
|
||||
public override render(): JSX.Element {
|
||||
export default function Login() {
|
||||
const router = useRouter();
|
||||
const redirectUserOnConnection = useCallback(() => {
|
||||
async function getUser() {
|
||||
try {
|
||||
await UserStore.instance.connect(process.env["NEXT_PUBLIC_ADMIN_ID"] as string);
|
||||
await JwtService.getInstance().checkJwt();
|
||||
router.push(Module.getInstance().get().modules.pages.Folder.props.path);
|
||||
} catch (e) {
|
||||
console.error(e);
|
||||
}
|
||||
}
|
||||
|
||||
getUser();
|
||||
}, [router]);
|
||||
return (
|
||||
<DefaultDoubleSidePage title={"Login"} image={LandingImage}>
|
||||
<div className={classes["root"]}>
|
||||
@ -20,7 +35,7 @@ export default class LoginClass extends BasePage {
|
||||
<Typography typo={ITypo.H1}>
|
||||
<div className={classes["title"]}>Connexion espace professionnel</div>
|
||||
</Typography>
|
||||
<Button onClick={this.redirectUserOnConnection} icon={idNoteLogo} iconposition={"left"}>
|
||||
<Button onClick={redirectUserOnConnection} icon={idNoteLogo} iconposition={"left"}>
|
||||
S'identifier avec ID.not
|
||||
</Button>
|
||||
<Typography typo={ITypo.P_18}>
|
||||
@ -31,18 +46,3 @@ export default class LoginClass extends BasePage {
|
||||
</DefaultDoubleSidePage>
|
||||
);
|
||||
}
|
||||
|
||||
private async redirectUserOnConnection() {
|
||||
// const variables = FrontendVariables.getInstance();
|
||||
// const baseFronturl = variables.BACK_API_PROTOCOL + variables.FRONT_APP_HOST;
|
||||
|
||||
await UserStore.instance.connect(process.env["NEXT_PUBLIC_ADMIN_ID"] as string);
|
||||
// await JwtService.getInstance().checkJwt();
|
||||
// window.location.assign("http://localhost:3000" + "/folders");
|
||||
|
||||
// const authorizeEndPoint = variables.IDNOT_AUTHORIZE_ENDPOINT;
|
||||
// const clientId = variables.IDNOT_CLIENT_ID;
|
||||
// const url = `${authorizeEndPoint}?client_id=${clientId}&redirect_uri=${baseFronturl}/authorized-client&scope=openid,profile,offline_access&response_type=code`;
|
||||
// window.location.assign(url);
|
||||
}
|
||||
}
|
||||
|
@ -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 Button from "@Front/Components/DesignSystem/Button";
|
||||
import CheckBox from "@Front/Components/DesignSystem/CheckBox";
|
||||
import Form from "@Front/Components/DesignSystem/Form";
|
||||
import Confirm from "@Front/Components/DesignSystem/Modal/Confirm";
|
||||
import Typography, { ITypo } from "@Front/Components/DesignSystem/Typography";
|
||||
import DefaultRoleDashboard from "@Front/Components/LayoutTemplates/DefaultRoleDashboard";
|
||||
import { Role, Rule } from "le-coffre-resources/dist/Admin";
|
||||
import { useRouter } from "next/router";
|
||||
import { useCallback, useEffect, useState } from "react";
|
||||
import React from "react";
|
||||
|
||||
import classes from "./classes.module.scss";
|
||||
|
||||
@ -22,11 +24,22 @@ export default function RolesInformations(props: IProps) {
|
||||
const [roleSelected, setRoleSelected] = useState<Role | null>(null);
|
||||
const [rulesCheckboxes, setRulesCheckboxes] = useState<RuleCheckbox[]>([]);
|
||||
const [selectAll, setSelectAll] = useState<boolean>(false);
|
||||
|
||||
const [isConfirmModalOpened, setIsConfirmModalOpened] = useState<boolean>(false);
|
||||
|
||||
const openConfirmModal = useCallback(() => {
|
||||
setIsConfirmModalOpened(true);
|
||||
}, []);
|
||||
|
||||
const closeConfirmModal = useCallback(() => {
|
||||
setIsConfirmModalOpened(false);
|
||||
}, []);
|
||||
|
||||
useEffect(() => {
|
||||
setSelectAll(false);
|
||||
async function getUser() {
|
||||
if (!roleUid) return;
|
||||
const role = await Roles.getInstance().getByUid(roleUid as string, {
|
||||
const role = await OfficeRoles.getInstance().getByUid(roleUid as string, {
|
||||
q: {
|
||||
rules: true,
|
||||
},
|
||||
@ -64,19 +77,32 @@ export default function RolesInformations(props: IProps) {
|
||||
[rulesCheckboxes],
|
||||
);
|
||||
|
||||
const onSubmitHandler = useCallback(
|
||||
async (e: React.FormEvent<HTMLFormElement> | null, values: { [key: string]: string }) => {
|
||||
const modifyRules = useCallback(async () => {
|
||||
if (!roleSelected || !roleSelected.uid) return;
|
||||
const rules = rulesCheckboxes.filter((rule) => rule.checked)?.map((rule) => Rule.hydrate<Rule>(rule));
|
||||
const role = await Roles.getInstance().put(roleSelected.uid, {
|
||||
await OfficeRoles.getInstance().put(roleSelected.uid, {
|
||||
uid: roleSelected.uid,
|
||||
rules,
|
||||
});
|
||||
if (!role) return;
|
||||
setRoleSelected(role);
|
||||
if (!role.rules) return;
|
||||
setRulesCheckboxes(role.rules.map((rule) => ({ ...rule, checked: false })));
|
||||
|
||||
const roleUpdated = await OfficeRoles.getInstance().getByUid(roleSelected.uid, {
|
||||
q: {
|
||||
rules: true,
|
||||
},
|
||||
[roleSelected, rulesCheckboxes],
|
||||
});
|
||||
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]);
|
||||
},
|
||||
[rulesCheckboxes],
|
||||
);
|
||||
|
||||
return (
|
||||
@ -103,19 +129,37 @@ export default function RolesInformations(props: IProps) {
|
||||
checked={selectAll}
|
||||
/>
|
||||
</div>
|
||||
<Form onSubmit={onSubmitHandler}>
|
||||
<Form>
|
||||
<div className={classes["rights"]}>
|
||||
{rulesCheckboxes.map((rule) => (
|
||||
<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 className={classes["save-container"]}>
|
||||
<Button type="submit">Enregistrer</Button>
|
||||
<Button onClick={openConfirmModal}>Enregistrer</Button>
|
||||
</div>
|
||||
</Form>
|
||||
</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>
|
||||
</DefaultRoleDashboard>
|
||||
);
|
||||
|
@ -3,6 +3,7 @@ import OfficeRoles from "@Front/Api/LeCoffreApi/Admin/OfficeRoles/OfficeRoles";
|
||||
import Users from "@Front/Api/LeCoffreApi/SuperAdmin/Users/Users";
|
||||
import CheckBox from "@Front/Components/DesignSystem/CheckBox";
|
||||
import SelectField, { IOption } from "@Front/Components/DesignSystem/Form/SelectField";
|
||||
import Confirm from "@Front/Components/DesignSystem/Modal/Confirm";
|
||||
import Typography, { ITypo, ITypoColor } from "@Front/Components/DesignSystem/Typography";
|
||||
import DefaultUserDashboard from "@Front/Components/LayoutTemplates/DefaultUserDashboard";
|
||||
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 [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(() => {
|
||||
async function getUser() {
|
||||
if (!userUid) return;
|
||||
@ -109,6 +146,7 @@ export default function UserInformations(props: IProps) {
|
||||
toolTip="tooltip"
|
||||
/>
|
||||
<CheckBox
|
||||
onChange={handleCheckboxAdminChanged}
|
||||
option={{
|
||||
label: "Nommer super admin LEcoffre.io",
|
||||
value: "title",
|
||||
@ -135,6 +173,40 @@ export default function UserInformations(props: IProps) {
|
||||
</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>
|
||||
</DefaultUserDashboard>
|
||||
);
|
||||
|
@ -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": {
|
||||
"enabled": true,
|
||||
"props": {
|
||||
|
@ -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": {
|
||||
"enabled": true,
|
||||
"props": {
|
||||
|
@ -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": {
|
||||
"enabled": true,
|
||||
"props": {
|
||||
|
Loading…
x
Reference in New Issue
Block a user