Merge branch 'dev' into staging
This commit is contained in:
commit
d4e85a6fdc
3
src/front/Assets/Icons/green-check.svg
Normal file
3
src/front/Assets/Icons/green-check.svg
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
<svg width="22" height="22" viewBox="0 0 22 22" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<path d="M18 6L8.375 16L4 11.4545" stroke="#12BF4D" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 221 B |
@ -1,91 +1,104 @@
|
|||||||
.root {
|
.container {
|
||||||
padding: 24px;
|
|
||||||
background-color: var(--white);
|
|
||||||
border: 1px dashed #e7e7e7;
|
|
||||||
|
|
||||||
height: fit-content;
|
|
||||||
|
|
||||||
&[data-drag-over="true"] {
|
.root {
|
||||||
border: 1px dashed var(--grey);
|
padding: 24px;
|
||||||
}
|
background-color: var(--white);
|
||||||
|
border: 1px dashed #e7e7e7;
|
||||||
|
|
||||||
&.validated {
|
height: fit-content;
|
||||||
border: 1px dashed var(--green-flash);
|
|
||||||
}
|
|
||||||
|
|
||||||
.top-container {
|
&[data-drag-over="true"] {
|
||||||
display: flex;
|
border: 1px dashed var(--grey);
|
||||||
align-items: center;
|
|
||||||
|
|
||||||
.left {
|
|
||||||
margin-right: 28px;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.separator {
|
&.validated {
|
||||||
background-color: #939393;
|
border: 1px dashed var(--green-flash);
|
||||||
width: 1px;
|
|
||||||
align-self: stretch;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.right {
|
.top-container {
|
||||||
margin-left: 18px;
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
|
||||||
.refused-button {
|
.left {
|
||||||
font-size: 14px;
|
margin-right: 28px;
|
||||||
color: var(--re-hover);
|
|
||||||
margin-left: 8px;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.title {
|
.separator {
|
||||||
|
background-color: #939393;
|
||||||
|
width: 1px;
|
||||||
|
align-self: stretch;
|
||||||
|
}
|
||||||
|
|
||||||
|
.right {
|
||||||
|
margin-left: 18px;
|
||||||
|
|
||||||
|
.validated {
|
||||||
|
color: var(--green-flash);
|
||||||
|
}
|
||||||
|
|
||||||
|
.refused-button {
|
||||||
|
font-size: 14px;
|
||||||
|
color: var(--re-hover);
|
||||||
|
margin-left: 8px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.title {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
gap: 8px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.documents-container {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
gap: 16px;
|
||||||
|
margin-top: 16px;
|
||||||
|
|
||||||
|
.file-container {
|
||||||
display: flex;
|
display: flex;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
gap: 8px;
|
justify-content: space-between;
|
||||||
|
|
||||||
|
.left-part {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
gap: 8px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.cross {
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.bottom-container {
|
||||||
|
margin-top: 16px;
|
||||||
|
|
||||||
|
.add-button {
|
||||||
|
.add-document {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
gap: 14px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.text {
|
||||||
|
margin-bottom: 12px;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.documents-container {
|
.modal-content {
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
gap: 16px;
|
gap: 16px;
|
||||||
margin-top: 16px;
|
|
||||||
|
|
||||||
.file-container {
|
|
||||||
display: flex;
|
|
||||||
align-items: center;
|
|
||||||
justify-content: space-between;
|
|
||||||
|
|
||||||
.left-part {
|
|
||||||
display: flex;
|
|
||||||
align-items: center;
|
|
||||||
gap: 8px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.cross {
|
|
||||||
cursor: pointer;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.bottom-container {
|
.error-message {
|
||||||
margin-top: 16px;
|
color: var(--red-flash);
|
||||||
|
margin-top: 8px;
|
||||||
.add-button {
|
|
||||||
.add-document {
|
|
||||||
display: flex;
|
|
||||||
align-items: center;
|
|
||||||
gap: 14px;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.text {
|
|
||||||
margin-bottom: 12px;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.modal-content{
|
|
||||||
display: flex;
|
|
||||||
flex-direction: column;
|
|
||||||
gap: 16px;
|
|
||||||
}
|
|
@ -15,6 +15,7 @@ import { EDocumentStatus } from "le-coffre-resources/dist/Customer/Document";
|
|||||||
import classNames from "classnames";
|
import classNames from "classnames";
|
||||||
import Confirm from "../Modal/Confirm";
|
import Confirm from "../Modal/Confirm";
|
||||||
import InputField from "../Form/Elements/InputField";
|
import InputField from "../Form/Elements/InputField";
|
||||||
|
import GreenCheckIcon from "@Assets/Icons/green-check.svg";
|
||||||
|
|
||||||
type IProps = {
|
type IProps = {
|
||||||
defaultFiles?: FileCustomer[];
|
defaultFiles?: FileCustomer[];
|
||||||
@ -65,87 +66,103 @@ export default class DepositDocument extends React.Component<IProps, IState> {
|
|||||||
|
|
||||||
public override render(): JSX.Element {
|
public override render(): JSX.Element {
|
||||||
return (
|
return (
|
||||||
<div
|
<div className={classes["container"]}>
|
||||||
className={classNames(
|
<div
|
||||||
classes["root"],
|
className={classNames(
|
||||||
this.props.document.document_status === EDocumentStatus.VALIDATED && classes["validated"],
|
classes["root"],
|
||||||
)}
|
this.props.document.document_status === EDocumentStatus.VALIDATED && classes["validated"],
|
||||||
onDragOver={this.onDragOver}
|
)}
|
||||||
onDrop={this.onDragDrop}
|
onDragOver={this.onDragOver}
|
||||||
onDragLeave={this.onDragLeave}
|
onDrop={this.onDragDrop}
|
||||||
data-drag-over={this.state.isDragOver.toString()}>
|
onDragLeave={this.onDragLeave}
|
||||||
<input type="file" ref={this.inputRef} hidden onChange={this.onFileChange} />
|
data-drag-over={this.state.isDragOver.toString()}>
|
||||||
<div className={classes["top-container"]}>
|
<input type="file" ref={this.inputRef} hidden onChange={this.onFileChange} />
|
||||||
<div className={classes["left"]}>
|
<div className={classes["top-container"]}>
|
||||||
<Image src={DepositDocumentIcon} alt="Deposit document" />
|
<div className={classes["left"]}>
|
||||||
</div>
|
<Image src={DepositDocumentIcon} alt="Deposit document" />
|
||||||
<div className={classes["separator"]} />
|
</div>
|
||||||
<div className={classes["right"]}>
|
<div className={classes["separator"]} />
|
||||||
<Typography typo={ITypo.P_SB_16} color={ITypoColor.BLACK} className={classes["title"]}>
|
<div className={classes["right"]}>
|
||||||
{this.props.document.document_type?.name}{" "}
|
<Typography typo={ITypo.P_SB_16} color={ITypoColor.BLACK} className={classes["title"]}>
|
||||||
{this.props.document.document_type?.public_description !== "" && (
|
<div
|
||||||
<Tooltip text={this.props.document.document_type?.public_description} />
|
className={
|
||||||
)}
|
this.props.document.document_status === EDocumentStatus.VALIDATED ? classes["validated"] : ""
|
||||||
</Typography>
|
}>
|
||||||
{this.props.document.document_status !== EDocumentStatus.VALIDATED && (
|
{this.props.document.document_type?.name}
|
||||||
<Typography color={ITypoColor.GREY} typo={ITypo.CAPTION_14}>
|
|
||||||
Sélectionnez des documents .jpg, .pdf ou .png
|
|
||||||
</Typography>
|
|
||||||
)}
|
|
||||||
{this.props.document.document_history?.map((history) => (
|
|
||||||
<div key={history.uid}>{this.renderDocumentHistory(history)}</div>
|
|
||||||
))}
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
{this.props.document.document_status !== EDocumentStatus.VALIDATED && this.state.files.length > 0 && (
|
|
||||||
<div className={classes["documents-container"]}>
|
|
||||||
{this.state.files.map((file) => {
|
|
||||||
const fileObj = file.file;
|
|
||||||
if (file.archived) return;
|
|
||||||
return (
|
|
||||||
<div className={classes["file-container"]} key={fileObj.name + file.index}>
|
|
||||||
<div className={classes["left-part"]}>
|
|
||||||
<Image src={DocumentCheckIcon} alt="Document check" />
|
|
||||||
<Typography typo={ITypo.P_16} color={ITypoColor.GREY}>
|
|
||||||
{this.shortName(fileObj.name)}
|
|
||||||
</Typography>
|
|
||||||
</div>
|
|
||||||
<Image
|
|
||||||
src={CrossIcon}
|
|
||||||
alt="Cross icon"
|
|
||||||
className={classes["cross"]}
|
|
||||||
onClick={this.removeFile}
|
|
||||||
data-file={file.index}
|
|
||||||
/>
|
|
||||||
</div>
|
</div>
|
||||||
);
|
{this.props.document.document_type?.public_description !== "" &&
|
||||||
})}
|
this.props.document.document_status !== EDocumentStatus.VALIDATED && (
|
||||||
</div>
|
<Tooltip text={this.props.document.document_type?.public_description} />
|
||||||
)}
|
)}
|
||||||
{this.props.document.document_status !== EDocumentStatus.VALIDATED && (
|
{this.props.document.document_status === EDocumentStatus.VALIDATED && (
|
||||||
<div className={classes["bottom-container"]}>
|
<Image src={GreenCheckIcon} alt="Document check" />
|
||||||
<Button variant={EButtonVariant.LINE} className={classes["add-button"]} onClick={this.addDocument}>
|
)}
|
||||||
<Typography typo={ITypo.P_SB_16} color={ITypoColor.PINK_FLASH} className={classes["add-document"]}>
|
|
||||||
Ajouter un document <Image src={PlusIcon} alt="Plus icon" />
|
|
||||||
</Typography>
|
</Typography>
|
||||||
</Button>
|
{this.props.document.document_status !== EDocumentStatus.VALIDATED && (
|
||||||
|
<Typography color={ITypoColor.GREY} typo={ITypo.CAPTION_14}>
|
||||||
|
Sélectionnez des documents .jpg, .pdf ou .png
|
||||||
|
</Typography>
|
||||||
|
)}
|
||||||
|
{this.props.document.document_history?.map((history) => (
|
||||||
|
<div key={history.uid}>{this.renderDocumentHistory(history)}</div>
|
||||||
|
))}
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
{this.props.document.document_status !== EDocumentStatus.VALIDATED && this.state.files.length > 0 && (
|
||||||
|
<div className={classes["documents-container"]}>
|
||||||
|
{this.state.files.map((file) => {
|
||||||
|
const fileObj = file.file;
|
||||||
|
if (file.archived) return;
|
||||||
|
return (
|
||||||
|
<div className={classes["file-container"]} key={fileObj.name + file.index}>
|
||||||
|
<div className={classes["left-part"]}>
|
||||||
|
<Image src={DocumentCheckIcon} alt="Document check" />
|
||||||
|
<Typography typo={ITypo.P_16} color={ITypoColor.GREY}>
|
||||||
|
{this.shortName(fileObj.name)}
|
||||||
|
</Typography>
|
||||||
|
</div>
|
||||||
|
<Image
|
||||||
|
src={CrossIcon}
|
||||||
|
alt="Cross icon"
|
||||||
|
className={classes["cross"]}
|
||||||
|
onClick={this.removeFile}
|
||||||
|
data-file={file.index}
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
})}
|
||||||
|
</div>
|
||||||
|
)}
|
||||||
|
{this.props.document.document_status !== EDocumentStatus.VALIDATED && (
|
||||||
|
<div className={classes["bottom-container"]}>
|
||||||
|
<Button variant={EButtonVariant.LINE} className={classes["add-button"]} onClick={this.addDocument}>
|
||||||
|
<Typography typo={ITypo.P_SB_16} color={ITypoColor.PINK_FLASH} className={classes["add-document"]}>
|
||||||
|
Ajouter un document <Image src={PlusIcon} alt="Plus icon" />
|
||||||
|
</Typography>
|
||||||
|
</Button>
|
||||||
|
</div>
|
||||||
|
)}
|
||||||
|
<Confirm
|
||||||
|
isOpen={this.state.isShowRefusedReasonModalVisible}
|
||||||
|
onClose={this.onCloseModalShowRefusedReason}
|
||||||
|
showCancelButton={false}
|
||||||
|
onAccept={this.onCloseModalShowRefusedReason}
|
||||||
|
closeBtn
|
||||||
|
header={"Motif du refus"}
|
||||||
|
confirmText={"J'ai compris"}>
|
||||||
|
<div className={classes["modal-content"]}>
|
||||||
|
<Typography typo={ITypo.P_16} className={classes["text"]}>
|
||||||
|
Votre document a été refusé pour la raison suivante :
|
||||||
|
</Typography>
|
||||||
|
<InputField textarea fakeplaceholder={"Description"} defaultValue={this.state.refusedReason} readOnly />
|
||||||
|
</div>
|
||||||
|
</Confirm>
|
||||||
|
</div>
|
||||||
|
{this.props.document.document_status === EDocumentStatus.REFUSED && (
|
||||||
|
<Typography typo={ITypo.CAPTION_14} className={classes["error-message"]}>
|
||||||
|
Ce document n’est pas conforme. Veuillez le déposer à nouveau.
|
||||||
|
</Typography>
|
||||||
)}
|
)}
|
||||||
<Confirm
|
|
||||||
isOpen={this.state.isShowRefusedReasonModalVisible}
|
|
||||||
onClose={this.onCloseModalShowRefusedReason}
|
|
||||||
showCancelButton={false}
|
|
||||||
onAccept={this.onCloseModalShowRefusedReason}
|
|
||||||
closeBtn
|
|
||||||
header={"Motif du refus"}
|
|
||||||
confirmText={"J'ai compris"}>
|
|
||||||
<div className={classes["modal-content"]}>
|
|
||||||
<Typography typo={ITypo.P_16} className={classes["text"]}>
|
|
||||||
Votre document a été refusé pour la raison suivante :
|
|
||||||
</Typography>
|
|
||||||
<InputField textarea fakeplaceholder={"Description"} defaultValue={this.state.refusedReason} readOnly />
|
|
||||||
</div>
|
|
||||||
</Confirm>
|
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
@ -2,7 +2,11 @@
|
|||||||
|
|
||||||
.root {
|
.root {
|
||||||
height: calc(100vh - 290px);
|
height: calc(100vh - 290px);
|
||||||
overflow: scroll;
|
overflow-y: scroll;
|
||||||
|
|
||||||
|
&.archived{
|
||||||
|
height: calc(100vh - 220px);
|
||||||
|
}
|
||||||
|
|
||||||
.active {
|
.active {
|
||||||
background-color: var(--grey-medium);
|
background-color: var(--grey-medium);
|
||||||
|
@ -7,6 +7,7 @@ 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: IDashBoardFolder[];
|
||||||
@ -26,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={classes["root"]}>{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[] {
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
import { IDashBoardFolder } from "@Front/Components/LayoutTemplates/DefaultNotaryDashboard";
|
import { IDashBoardFolder } from "@Front/Components/LayoutTemplates/DefaultNotaryDashboard";
|
||||||
|
import Module from "@Front/Config/Module";
|
||||||
import Link from "next/link";
|
import Link from "next/link";
|
||||||
import React from "react";
|
import React from "react";
|
||||||
|
|
||||||
@ -6,7 +7,6 @@ import Button from "../Button";
|
|||||||
import FolderList from "../FolderList";
|
import FolderList from "../FolderList";
|
||||||
import SearchBar from "../SearchBar";
|
import SearchBar from "../SearchBar";
|
||||||
import classes from "./classes.module.scss";
|
import classes from "./classes.module.scss";
|
||||||
import Module from "@Front/Config/Module";
|
|
||||||
|
|
||||||
type IProps = {
|
type IProps = {
|
||||||
folders: IDashBoardFolder[];
|
folders: IDashBoardFolder[];
|
||||||
@ -44,13 +44,13 @@ export default class FolderListContainer extends React.Component<IProps, IState>
|
|||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div>
|
{!this.props.isArchived && (
|
||||||
{!this.props.isArchived && (
|
<div>
|
||||||
<Link href={navigatePath}>
|
<Link href={navigatePath}>
|
||||||
<Button fullwidth={true}>Créer un dossier</Button>
|
<Button fullwidth={true}>Créer un dossier</Button>
|
||||||
</Link>
|
</Link>
|
||||||
)}
|
</div>
|
||||||
</div>
|
)}
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
@ -49,7 +49,10 @@ export default class UserFolder extends React.Component<IProps, IState> {
|
|||||||
this.deleteAskedDocument = this.deleteAskedDocument.bind(this);
|
this.deleteAskedDocument = this.deleteAskedDocument.bind(this);
|
||||||
}
|
}
|
||||||
public override render(): JSX.Element {
|
public override render(): JSX.Element {
|
||||||
const documentsAsked: Document[] | null = this.getDocumentsByStatus("ASKED");
|
const documentsAsked: Document[] | null = [
|
||||||
|
...(this.getDocumentsByStatus("ASKED") ?? []),
|
||||||
|
...(this.getDocumentsByStatus("REFUSED") ?? []),
|
||||||
|
];
|
||||||
const otherDocuments: Document[] | null = this.getValidatedAndPendindDocuments();
|
const otherDocuments: Document[] | null = this.getValidatedAndPendindDocuments();
|
||||||
const redirectPath = Module.getInstance()
|
const redirectPath = Module.getInstance()
|
||||||
.get()
|
.get()
|
||||||
@ -111,9 +114,7 @@ export default class UserFolder extends React.Component<IProps, IState> {
|
|||||||
Demander un autre document{" "}
|
Demander un autre document{" "}
|
||||||
</Button>
|
</Button>
|
||||||
</Link>
|
</Link>
|
||||||
<Button disabled={documentsAsked ? false : true}>
|
<Button disabled={documentsAsked ? false : true}>Envoyer un mail de demande</Button>
|
||||||
Envoyer un mail de demande
|
|
||||||
</Button>
|
|
||||||
</div>
|
</div>
|
||||||
)}
|
)}
|
||||||
</div>
|
</div>
|
||||||
|
@ -1,4 +1,7 @@
|
|||||||
import PlusIcon from "@Assets/Icons/plus.svg";
|
import PlusIcon from "@Assets/Icons/plus.svg";
|
||||||
|
import Deeds from "@Front/Api/LeCoffreApi/SuperAdmin/Deeds/Deeds";
|
||||||
|
import Documents from "@Front/Api/LeCoffreApi/SuperAdmin/Documents/Documents";
|
||||||
|
import DocumentTypes from "@Front/Api/LeCoffreApi/SuperAdmin/DocumentTypes/DocumentTypes";
|
||||||
import Folders from "@Front/Api/LeCoffreApi/SuperAdmin/Folders/Folders";
|
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";
|
||||||
@ -9,16 +12,13 @@ import { IOption } from "@Front/Components/DesignSystem/Select";
|
|||||||
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 { OfficeFolder } from "le-coffre-resources/dist/Customer";
|
||||||
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 Documents from "@Front/Api/LeCoffreApi/SuperAdmin/Documents/Documents";
|
|
||||||
import Module from "@Front/Config/Module";
|
|
||||||
import { OfficeFolder } from "le-coffre-resources/dist/Customer";
|
|
||||||
import Deeds from "@Front/Api/LeCoffreApi/SuperAdmin/Deeds/Deeds";
|
|
||||||
import DocumentTypes from "@Front/Api/LeCoffreApi/SuperAdmin/DocumentTypes/DocumentTypes";
|
|
||||||
|
|
||||||
type IProps = {};
|
type IProps = {};
|
||||||
type IPropsClass = IProps & {
|
type IPropsClass = IProps & {
|
||||||
@ -57,10 +57,13 @@ class AskDocumentsClass extends BasePage<IPropsClass, IState> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public override render(): JSX.Element {
|
public override render(): JSX.Element {
|
||||||
|
const backUrl = Module.getInstance()
|
||||||
|
.get()
|
||||||
|
.modules.pages.Folder.pages.FolderInformation.props.path.replace("[folderUid]", this.props.folderUid);
|
||||||
return (
|
return (
|
||||||
<DefaultNotaryDashboard title={"Demander des documents"} onSelectedFolder={() => {}}>
|
<DefaultNotaryDashboard title={"Demander des documents"} onSelectedFolder={() => {}}>
|
||||||
<div className={classes["root"]}>
|
<div className={classes["root"]}>
|
||||||
<BackArrow />
|
<BackArrow url={backUrl} />
|
||||||
<Typography typo={ITypo.H1} color={ITypoColor.BLACK} className={classes["title"]}>
|
<Typography typo={ITypo.H1} color={ITypoColor.BLACK} className={classes["title"]}>
|
||||||
Demander des documents
|
Demander des documents
|
||||||
</Typography>
|
</Typography>
|
||||||
@ -87,9 +90,11 @@ class AskDocumentsClass extends BasePage<IPropsClass, IState> {
|
|||||||
</Button>
|
</Button>
|
||||||
</div>
|
</div>
|
||||||
<div className={classes["buttons-container"]}>
|
<div className={classes["buttons-container"]}>
|
||||||
<Button variant={EButtonVariant.GHOST} onClick={this.cancel}>
|
<a href={backUrl}>
|
||||||
Annuler
|
<Button variant={EButtonVariant.GHOST} onClick={this.cancel}>
|
||||||
</Button>
|
Annuler
|
||||||
|
</Button>
|
||||||
|
</a>
|
||||||
<Button type="submit">Valider</Button>
|
<Button type="submit">Valider</Button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@ -142,6 +147,12 @@ class AskDocumentsClass extends BasePage<IPropsClass, IState> {
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
office: true,
|
office: true,
|
||||||
|
documents: {
|
||||||
|
include: {
|
||||||
|
depositor: true,
|
||||||
|
document_type: true,
|
||||||
|
},
|
||||||
|
},
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
if (!folder) return;
|
if (!folder) return;
|
||||||
@ -155,25 +166,29 @@ class AskDocumentsClass extends BasePage<IPropsClass, IState> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private async getAvailableDocuments(folder: OfficeFolder): Promise<IOption[]> {
|
private async getAvailableDocuments(folder: OfficeFolder): Promise<IOption[]> {
|
||||||
const documentTypes = await Deeds.getInstance().getByUid(folder.deed!.uid!, {
|
const userDocumentTypesUids = folder
|
||||||
q: {
|
.documents!.filter((document) => document.depositor!.uid! === this.props.customerUid!)
|
||||||
deed_has_document_types: {
|
.map((document) => {
|
||||||
include: {
|
return document.document_type!.uid!;
|
||||||
document_type: true,
|
});
|
||||||
},
|
const documentTypes = folder.deed!.deed_has_document_types!.filter((documentType) => {
|
||||||
},
|
if (userDocumentTypesUids.includes(documentType.document_type!.uid!)) return false;
|
||||||
},
|
return true;
|
||||||
});
|
});
|
||||||
|
|
||||||
if (!documentTypes) return [];
|
if (!documentTypes) return [];
|
||||||
|
|
||||||
const documentTypesOptions: IOption[] = documentTypes.deed_has_document_types!.map((documentType) => {
|
const documentTypesOptions: IOption[] = documentTypes
|
||||||
return {
|
.filter((documentType) => {
|
||||||
label: documentType.document_type!.name!,
|
return true;
|
||||||
value: documentType.document_type!.uid!,
|
})
|
||||||
description: documentType.document_type!.private_description!,
|
.map((documentType) => {
|
||||||
};
|
return {
|
||||||
});
|
label: documentType.document_type!.name!,
|
||||||
|
value: documentType.document_type!.uid!,
|
||||||
|
description: documentType.document_type!.private_description!,
|
||||||
|
};
|
||||||
|
});
|
||||||
|
|
||||||
return documentTypesOptions;
|
return documentTypesOptions;
|
||||||
}
|
}
|
||||||
|
Binary file not shown.
After Width: | Height: | Size: 4.7 MiB |
@ -1,4 +1,3 @@
|
|||||||
import RightImage from "@Front/Assets/images/create-folder/right-image.png";
|
|
||||||
import Button from "@Front/Components/DesignSystem/Button";
|
import Button from "@Front/Components/DesignSystem/Button";
|
||||||
import Form from "@Front/Components/DesignSystem/Form";
|
import Form from "@Front/Components/DesignSystem/Form";
|
||||||
import InputField from "@Front/Components/DesignSystem/Form/Elements/InputField";
|
import InputField from "@Front/Components/DesignSystem/Form/Elements/InputField";
|
||||||
@ -19,6 +18,7 @@ import Users from "@Front/Api/LeCoffreApi/SuperAdmin/Users/Users";
|
|||||||
import User from "le-coffre-resources/dist/Notary";
|
import User from "le-coffre-resources/dist/Notary";
|
||||||
import Folders, { IPostFoldersParams } from "@Front/Api/LeCoffreApi/SuperAdmin/Folders/Folders";
|
import Folders, { IPostFoldersParams } from "@Front/Api/LeCoffreApi/SuperAdmin/Folders/Folders";
|
||||||
import { NextRouter, useRouter } from "next/router";
|
import { NextRouter, useRouter } from "next/router";
|
||||||
|
import BackgroundImage from "./background-image.jpeg";
|
||||||
|
|
||||||
type IFormValues = {
|
type IFormValues = {
|
||||||
folder_number: string;
|
folder_number: string;
|
||||||
@ -73,7 +73,7 @@ class CreateFolderClass extends BasePage<IPropsClass, IState> {
|
|||||||
|
|
||||||
public override render(): JSX.Element {
|
public override render(): JSX.Element {
|
||||||
return (
|
return (
|
||||||
<DefaultDoubleSidePage title={"Dossier"} image={RightImage} type="image" showHeader={true}>
|
<DefaultDoubleSidePage title={"Dossier"} image={BackgroundImage} type="background" showHeader={true}>
|
||||||
<div className={classes["root"]}>
|
<div className={classes["root"]}>
|
||||||
<BackArrow />
|
<BackArrow />
|
||||||
<Typography typo={ITypo.H1} color={ITypoColor.BLACK} className={classes["title"]}>
|
<Typography typo={ITypo.H1} color={ITypoColor.BLACK} className={classes["title"]}>
|
||||||
@ -137,11 +137,13 @@ class CreateFolderClass extends BasePage<IPropsClass, IState> {
|
|||||||
const deedTypes = await DeedTypes.getInstance().get({ q: {} });
|
const deedTypes = await DeedTypes.getInstance().get({ q: {} });
|
||||||
|
|
||||||
// TODO SETUP userStore and get the user's office membership -> Replace IwJ70M471c by the user's office membership uid
|
// TODO SETUP userStore and get the user's office membership -> Replace IwJ70M471c by the user's office membership uid
|
||||||
const usersMock = await Users.getInstance().get( { include: { office_membership: true } });
|
const usersMock = await Users.getInstance().get({ include: { office_membership: true } });
|
||||||
const userMock = usersMock[0];
|
const userMock = usersMock[0];
|
||||||
// -------------------
|
// -------------------
|
||||||
const collaborators = await Users.getInstance().get( { where: { office_membership: { uid: userMock?.office_membership?.uid } }, include: { contact: true } },
|
const collaborators = await Users.getInstance().get({
|
||||||
);
|
where: { office_membership: { uid: userMock?.office_membership?.uid } },
|
||||||
|
include: { contact: true },
|
||||||
|
});
|
||||||
this.setState({
|
this.setState({
|
||||||
deedTypes,
|
deedTypes,
|
||||||
deedTypesOptions: this.mapDeedOptions(deedTypes),
|
deedTypesOptions: this.mapDeedOptions(deedTypes),
|
||||||
@ -222,7 +224,7 @@ class CreateFolderClass extends BasePage<IPropsClass, IState> {
|
|||||||
/**
|
/**
|
||||||
* MOCK DATA
|
* MOCK DATA
|
||||||
*/
|
*/
|
||||||
const usersMock = await Users.getInstance().get( { include: { office_membership: true }});
|
const usersMock = await Users.getInstance().get({ include: { office_membership: true } });
|
||||||
const userMock = usersMock[0];
|
const userMock = usersMock[0];
|
||||||
// -----
|
// -----
|
||||||
if (!selectedDeedTypeUid) return;
|
if (!selectedDeedTypeUid) return;
|
||||||
|
@ -123,7 +123,7 @@ class FolderInformationClass extends BasePage<IPropsClass, IState> {
|
|||||||
<Typography typo={ITypo.H1Bis}>Informations du dossier</Typography>
|
<Typography typo={ITypo.H1Bis}>Informations du dossier</Typography>
|
||||||
<div className={classes["choose-a-folder"]}>
|
<div className={classes["choose-a-folder"]}>
|
||||||
<Typography typo={ITypo.P_18} color={ITypoColor.GREY}>
|
<Typography typo={ITypo.P_18} color={ITypoColor.GREY}>
|
||||||
Vous n'avez aucun dossier archivés
|
Sélectionnez un dossier
|
||||||
</Typography>
|
</Typography>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -104,7 +104,7 @@ class ViewDocumentsClass extends BasePage<IPropsClass, IState> {
|
|||||||
)}
|
)}
|
||||||
</div>
|
</div>
|
||||||
<div className={classes["footer"]}>
|
<div className={classes["footer"]}>
|
||||||
{this.state.document?.document_type?.name === "Carte d'identité" && (
|
{this.state.document?.document_type?.name === "Document d'identité" && (
|
||||||
<div className={classes["ocr-container"]}>
|
<div className={classes["ocr-container"]}>
|
||||||
<OcrResult percentage={this.state.validatedPercentage} />
|
<OcrResult percentage={this.state.validatedPercentage} />
|
||||||
</div>
|
</div>
|
||||||
@ -148,7 +148,7 @@ class ViewDocumentsClass extends BasePage<IPropsClass, IState> {
|
|||||||
</Typography>
|
</Typography>
|
||||||
<Image src={ValidateAnchoringGif} alt="Anchoring animation" className={classes["validate-gif"]} />
|
<Image src={ValidateAnchoringGif} alt="Anchoring animation" className={classes["validate-gif"]} />
|
||||||
<div className={classes["dont-show-again"]}>
|
<div className={classes["dont-show-again"]}>
|
||||||
<CheckBox option={{ label: "Ne plus afficher ce message", value: false }} toolTip={"Test"} />
|
<CheckBox option={{ label: "Ne plus afficher ce message", value: false }} />
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
)}
|
)}
|
||||||
|
@ -28,7 +28,7 @@ export default class Folder extends BasePage<IProps, IState> {
|
|||||||
<Typography typo={ITypo.H1Bis}>Informations du dossier</Typography>
|
<Typography typo={ITypo.H1Bis}>Informations du dossier</Typography>
|
||||||
<div className={classes["choose-a-folder"]}>
|
<div className={classes["choose-a-folder"]}>
|
||||||
<Typography typo={ITypo.P_18} color={ITypoColor.GREY}>
|
<Typography typo={ITypo.P_18} color={ITypoColor.GREY}>
|
||||||
Vous n'avez aucun dossier archivés
|
Sélectionnez un dossier
|
||||||
</Typography>
|
</Typography>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -93,7 +93,7 @@ class FolderInformationClass extends BasePage<IPropsClass, IState> {
|
|||||||
<Typography typo={ITypo.H1Bis}>Informations du dossier</Typography>
|
<Typography typo={ITypo.H1Bis}>Informations du dossier</Typography>
|
||||||
<div className={classes["choose-a-folder"]}>
|
<div className={classes["choose-a-folder"]}>
|
||||||
<Typography typo={ITypo.P_18} color={ITypoColor.GREY}>
|
<Typography typo={ITypo.P_18} color={ITypoColor.GREY}>
|
||||||
Vous n'avez aucun dossier archivés
|
Vous n'avez aucun dossier archivé
|
||||||
</Typography>
|
</Typography>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -31,7 +31,7 @@ export default class Folder extends BasePage<IProps, IState> {
|
|||||||
<Typography typo={ITypo.H1Bis}>Informations du dossier</Typography>
|
<Typography typo={ITypo.H1Bis}>Informations du dossier</Typography>
|
||||||
<div className={classes["choose-a-folder"]}>
|
<div className={classes["choose-a-folder"]}>
|
||||||
<Typography typo={ITypo.P_18} color={ITypoColor.GREY}>
|
<Typography typo={ITypo.P_18} color={ITypoColor.GREY}>
|
||||||
Vous n'avez aucun dossier archivés
|
Vous n'avez aucun dossier archivé
|
||||||
</Typography>
|
</Typography>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -3,7 +3,7 @@ import Typography, { ITypo } from "@Front/Components/DesignSystem/Typography";
|
|||||||
import BasePage from "../Base";
|
import BasePage from "../Base";
|
||||||
import classes from "./classes.module.scss";
|
import classes from "./classes.module.scss";
|
||||||
import CoffreIcon from "@Assets/Icons/coffre.svg";
|
import CoffreIcon from "@Assets/Icons/coffre.svg";
|
||||||
import LandingImage from "./landing-connect.png";
|
import LandingImage from "./landing-connect.jpeg";
|
||||||
import Image from "next/image";
|
import Image from "next/image";
|
||||||
import DefaultDoubleSidePage from "@Front/Components/LayoutTemplates/DefaultDoubleSidePage";
|
import DefaultDoubleSidePage from "@Front/Components/LayoutTemplates/DefaultDoubleSidePage";
|
||||||
import { FrontendVariables } from "@Front/Config/VariablesFront";
|
import { FrontendVariables } from "@Front/Config/VariablesFront";
|
||||||
|
BIN
src/front/Components/Layouts/Login/landing-connect.jpeg
Normal file
BIN
src/front/Components/Layouts/Login/landing-connect.jpeg
Normal file
Binary file not shown.
After Width: | Height: | Size: 2.5 MiB |
Binary file not shown.
Before Width: | Height: | Size: 734 KiB |
@ -1,7 +1,7 @@
|
|||||||
import Typography, { ITypo } from "@Front/Components/DesignSystem/Typography";
|
import Typography, { ITypo } from "@Front/Components/DesignSystem/Typography";
|
||||||
import BasePage from "../Base";
|
import BasePage from "../Base";
|
||||||
import classes from "./classes.module.scss";
|
import classes from "./classes.module.scss";
|
||||||
import LandingImage from "./landing-connect.png";
|
import LandingImage from "../Login/landing-connect.jpeg";
|
||||||
import Image from "next/image";
|
import Image from "next/image";
|
||||||
import DefaultDoubleSidePage from "@Front/Components/LayoutTemplates/DefaultDoubleSidePage";
|
import DefaultDoubleSidePage from "@Front/Components/LayoutTemplates/DefaultDoubleSidePage";
|
||||||
import FranceConnectIcon from "./france-connect.svg";
|
import FranceConnectIcon from "./france-connect.svg";
|
||||||
@ -42,7 +42,9 @@ export default class LoginCustomer extends BasePage {
|
|||||||
// variables.BACK_API_PROTOCOL + variables.FRONT_APP_HOST + (variables.FRONT_APP_PORT ? ":" + variables.FRONT_APP_PORT : "");
|
// variables.BACK_API_PROTOCOL + variables.FRONT_APP_HOST + (variables.FRONT_APP_PORT ? ":" + variables.FRONT_APP_PORT : "");
|
||||||
const authorizeEndPoint = variables.FC_AUTHORIZE_ENDPOINT;
|
const authorizeEndPoint = variables.FC_AUTHORIZE_ENDPOINT;
|
||||||
const clientId = variables.FC_CLIENT_ID;
|
const clientId = variables.FC_CLIENT_ID;
|
||||||
const url = `${authorizeEndPoint}?client_id=${clientId}&redirect_uri=http://localhost:8080/login-callback&scope=openid&response_type=code&state=${cryptoRandomString({length: 64})}&nonce=${cryptoRandomString({length: 64})}&acr_values=eidas1`;
|
const url = `${authorizeEndPoint}?client_id=${clientId}&redirect_uri=http://localhost:8080/login-callback&scope=openid&response_type=code&state=${cryptoRandomString(
|
||||||
|
{ length: 64 },
|
||||||
|
)}&nonce=${cryptoRandomString({ length: 64 })}&acr_values=eidas1`;
|
||||||
window.location.assign(url);
|
window.location.assign(url);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Binary file not shown.
Before Width: | Height: | Size: 734 KiB |
@ -2,15 +2,15 @@ import Button from "@Front/Components/DesignSystem/Button";
|
|||||||
import Typography, { ITypo } from "@Front/Components/DesignSystem/Typography";
|
import Typography, { ITypo } from "@Front/Components/DesignSystem/Typography";
|
||||||
import Module from "@Front/Config/Module";
|
import Module from "@Front/Config/Module";
|
||||||
import Link from "next/link";
|
import Link from "next/link";
|
||||||
import RightImage from "@Assets/images/create-folder/right-image.png";
|
|
||||||
import BasePage from "../Base";
|
import BasePage from "../Base";
|
||||||
import classes from "./classes.module.scss";
|
import classes from "./classes.module.scss";
|
||||||
import DefaultDoubleSidePage from "@Front/Components/LayoutTemplates/DefaultDoubleSidePage";
|
import DefaultDoubleSidePage from "@Front/Components/LayoutTemplates/DefaultDoubleSidePage";
|
||||||
|
|
||||||
|
import backgroundImage from "../Folder/CreateFolder/background-image.jpeg";
|
||||||
export default class PageNotFound extends BasePage {
|
export default class PageNotFound extends BasePage {
|
||||||
public override render(): JSX.Element {
|
public override render(): JSX.Element {
|
||||||
return (
|
return (
|
||||||
<DefaultDoubleSidePage title={"Project Not Found"} image={RightImage} type="image" showHeader>
|
<DefaultDoubleSidePage title={"Project Not Found"} image={backgroundImage} type="background" showHeader>
|
||||||
<div className={classes["root"]}>
|
<div className={classes["root"]}>
|
||||||
<div className={classes["content"]}>
|
<div className={classes["content"]}>
|
||||||
<Typography typo={ITypo.H1}>Erreur 404</Typography>
|
<Typography typo={ITypo.H1}>Erreur 404</Typography>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user