diff --git a/package-lock.json b/package-lock.json index 202f4117..21bf7bf5 100644 --- a/package-lock.json +++ b/package-lock.json @@ -22,7 +22,7 @@ "eslint-config-next": "13.2.4", "form-data": "^4.0.0", "jwt-decode": "^3.1.2", - "le-coffre-resources": "git@github.com:smart-chain-fr/leCoffre-resources.git#v2.83", + "le-coffre-resources": "git@github.com:smart-chain-fr/leCoffre-resources.git#v2.84", "next": "13.2.4", "prettier": "^2.8.7", "react": "18.2.0", diff --git a/public/CGU_LeCoffre_io.pdf b/public/CGU_LeCoffre_io.pdf new file mode 100644 index 00000000..77933d15 Binary files /dev/null and b/public/CGU_LeCoffre_io.pdf differ diff --git a/src/front/Assets/Icons/check_white.svg b/src/front/Assets/Icons/check_white.svg new file mode 100644 index 00000000..1ca6eec4 --- /dev/null +++ b/src/front/Assets/Icons/check_white.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/front/Components/DesignSystem/CheckBox/classes.module.scss b/src/front/Components/DesignSystem/CheckBox/classes.module.scss index bb91348f..aa5931a3 100644 --- a/src/front/Components/DesignSystem/CheckBox/classes.module.scss +++ b/src/front/Components/DesignSystem/CheckBox/classes.module.scss @@ -18,7 +18,7 @@ } input[type="checkbox"]::before { - content: url("../../../Assets/Icons/check.svg"); + content: url("../../../Assets/Icons/check_white.svg"); place-content: flex-start; display: grid; width: 16px; diff --git a/src/front/Components/DesignSystem/DepositOtherDocument/classes.module.scss b/src/front/Components/DesignSystem/DepositOtherDocument/classes.module.scss index 7900df96..1fae05ec 100644 --- a/src/front/Components/DesignSystem/DepositOtherDocument/classes.module.scss +++ b/src/front/Components/DesignSystem/DepositOtherDocument/classes.module.scss @@ -5,6 +5,7 @@ border: 1px dashed #e7e7e7; height: fit-content; + margin-top: 16px; &[data-drag-over="true"] { border: 1px dashed var(--grey); diff --git a/src/front/Components/DesignSystem/DepositOtherDocument/index.tsx b/src/front/Components/DesignSystem/DepositOtherDocument/index.tsx index e8364ceb..7b9c165c 100644 --- a/src/front/Components/DesignSystem/DepositOtherDocument/index.tsx +++ b/src/front/Components/DesignSystem/DepositOtherDocument/index.tsx @@ -39,6 +39,7 @@ type IState = { refusedReason?: string; isShowRefusedReasonModalVisible: boolean; isAddDocumentModalVisible: boolean; + isLoading: boolean; }; export default class DepositOtherDocument extends React.Component { @@ -54,6 +55,7 @@ export default class DepositOtherDocument extends React.Component { - const formData = new FormData(); - formData.append("file", file.file, file.fileName); - const query = JSON.stringify({ document: { uid: documentCreated.uid } }); - formData.append("q", query); - - const newFile = await Files.getInstance().post(formData); - console.log(newFile); - }); - - this.props.onClose!(); - } - public override render(): JSX.Element { return ( {}} onAccept={this.onAccept} closeBtn header={"Ajouter un document"} cancelText={"Annuler"} - confirmText={"Déposer le document"}> + confirmText={this.state.isLoading ? "Chargement..." : "Déposer le document"} + canConfirm={!this.state.isLoading}>
@@ -140,7 +114,7 @@ export default class DepositOtherDocument extends React.Component - Sélectionnez des TEST documents .jpg, .pdf ou .png + Sélectionnez des documents .jpg, .pdf ou .png
@@ -187,6 +161,38 @@ export default class DepositOtherDocument extends React.Component maxLength) { diff --git a/src/front/Components/DesignSystem/Header/BurgerMenu/BurgerModal/index.tsx b/src/front/Components/DesignSystem/Header/BurgerMenu/BurgerModal/index.tsx index 25593986..a67c9523 100644 --- a/src/front/Components/DesignSystem/Header/BurgerMenu/BurgerModal/index.tsx +++ b/src/front/Components/DesignSystem/Header/BurgerMenu/BurgerModal/index.tsx @@ -92,8 +92,8 @@ export default class BurgerModal extends React.Component { mode={RulesMode.NECESSARY} rules={[ { - action: AppRuleActions.create, - name: AppRuleNames.officeRoles, + action: AppRuleActions.update, + name: AppRuleNames.offices, }, ]}> { /> - +
diff --git a/src/front/Components/DesignSystem/Header/NavigationLink/index.tsx b/src/front/Components/DesignSystem/Header/NavigationLink/index.tsx index 19634137..021f0f43 100644 --- a/src/front/Components/DesignSystem/Header/NavigationLink/index.tsx +++ b/src/front/Components/DesignSystem/Header/NavigationLink/index.tsx @@ -12,6 +12,7 @@ type IProps = { isEnabled?: boolean; isActive?: boolean; routesActive?: string[]; + target?: "blank" | "self" | "_blank"; }; type IPropsClass = IProps; @@ -25,7 +26,8 @@ class NavigationLinkClass extends React.Component { + onClick={this.props.onClick} + target={this.props.target}>
{this.props.text}
@@ -38,7 +40,7 @@ export default function NavigationLink(props: IProps) { const router = useRouter(); const { pathname } = router; let isActive = props.path === pathname; - if(props.routesActive){ + if (props.routesActive) { for (const routeActive of props.routesActive) { if (isActive) break; isActive = pathname.includes(routeActive); diff --git a/src/front/Components/DesignSystem/Header/Profile/ProfileModal/index.tsx b/src/front/Components/DesignSystem/Header/Profile/ProfileModal/index.tsx index 3314c522..8d34492d 100644 --- a/src/front/Components/DesignSystem/Header/Profile/ProfileModal/index.tsx +++ b/src/front/Components/DesignSystem/Header/Profile/ProfileModal/index.tsx @@ -66,8 +66,8 @@ export default class ProfileModal extends React.Component { mode={RulesMode.NECESSARY} rules={[ { - action: AppRuleActions.create, - name: AppRuleNames.officeRoles, + action: AppRuleActions.update, + name: AppRuleNames.offices, }, ]}> { ]} /> - +
diff --git a/src/front/Components/DesignSystem/Header/classes.module.scss b/src/front/Components/DesignSystem/Header/classes.module.scss index 3c51f7f6..0d83f71b 100644 --- a/src/front/Components/DesignSystem/Header/classes.module.scss +++ b/src/front/Components/DesignSystem/Header/classes.module.scss @@ -21,6 +21,9 @@ } .logo-container { + > a { + cursor: default !important; + } .logo { width: 174px; height: 39px; @@ -57,4 +60,4 @@ } } } -} \ No newline at end of file +} diff --git a/src/front/Components/DesignSystem/Header/index.tsx b/src/front/Components/DesignSystem/Header/index.tsx index d992c01e..e28eddb8 100644 --- a/src/front/Components/DesignSystem/Header/index.tsx +++ b/src/front/Components/DesignSystem/Header/index.tsx @@ -61,7 +61,7 @@ class HeaderClass extends React.Component {
- + logo
diff --git a/src/front/Components/Layouts/ClientDashboard/index.tsx b/src/front/Components/Layouts/ClientDashboard/index.tsx index f75de598..2985328c 100644 --- a/src/front/Components/Layouts/ClientDashboard/index.tsx +++ b/src/front/Components/Layouts/ClientDashboard/index.tsx @@ -24,48 +24,47 @@ export default function ClientDashboard(props: IProps) { const [folder, setFolder] = useState(null); const [isAddDocumentModalVisible, setIsAddDocumentModalVisible] = useState(false); - const onCloseModalAddDocument = useCallback(() => { - console.log("Closing"); + const getDocuments = useCallback(async () => { + let jwt; + if (typeof document !== "undefined") { + jwt = JwtService.getInstance().decodeJwt(); + } + if (!jwt || !jwt.email) return; + const customers = await Customers.getInstance().get({ + where: { contact: { email: jwt.email }, office_folders: { some: { uid: folderUid } } }, + }); + const actualCustomer: Customer = customers[0]!; + const query: IGetDocumentsparams = { + where: { depositor: { uid: actualCustomer.uid }, folder_uid: folderUid as string }, + include: { + files: true, + document_history: true, + document_type: true, + depositor: true, + }, + }; + + const documentList = await Documents.getInstance().get(query); + + const folder = await Folders.getInstance().getByUid(folderUid as string, { q: { office: true } }); + setFolder(folder); + setDocuments(documentList); + setCustomer(actualCustomer); + }, [folderUid]); + + const onCloseModalAddDocument = useCallback(() => { setIsAddDocumentModalVisible(false); - }, []); + getDocuments(); + }, [getDocuments]); const onOpenModalAddDocument = useCallback(() => { setIsAddDocumentModalVisible(true); }, []); useEffect(() => { - async function getDocuments() { - let jwt; - if (typeof document !== "undefined") { - jwt = JwtService.getInstance().decodeJwt(); - } - if (!jwt || !jwt.email) return; - const customers = await Customers.getInstance().get({ - where: { contact: { email: jwt.email }, office_folders: { some: { uid: folderUid } } }, - }); - const actualCustomer: Customer = customers[0]!; - - const query: IGetDocumentsparams = { - where: { depositor: { uid: actualCustomer.uid }, folder_uid: folderUid as string }, - include: { - files: true, - document_history: true, - document_type: true, - depositor: true, - }, - }; - - const documentList = await Documents.getInstance().get(query); - - const folder = await Folders.getInstance().getByUid(folderUid as string, { q: { office: true } }); - setFolder(folder); - setDocuments(documentList); - setCustomer(actualCustomer); - } - getDocuments(); - }, [folderUid]); + }, [folderUid, getDocuments]); const renderHeader = useCallback(() => { console.log("Dossier : ", customer); @@ -101,11 +100,9 @@ export default function ClientDashboard(props: IProps) { ); - }, [customer]); + }, [customer, folder?.folder_number, folder?.name, folder?.office?.name]); const renderBox = useCallback(() => { - console.log(isAddDocumentModalVisible); - return ( ({ document_type: DocumentType.hydrate({ - name: "Document annexe", + name: "Autres documents", }), })} /> diff --git a/src/front/Components/Layouts/ClientDashboard/index2.tsx b/src/front/Components/Layouts/ClientDashboard/index2.tsx index 506e9249..ee472c3e 100644 --- a/src/front/Components/Layouts/ClientDashboard/index2.tsx +++ b/src/front/Components/Layouts/ClientDashboard/index2.tsx @@ -71,7 +71,7 @@ export default class ClientDashboard extends Base { ({ document_type: DocumentType.hydrate({ - name: "Document annexe", + name: "Autres documents", }), })} /> diff --git a/src/front/Components/Layouts/DocumentTypes/DocumentTypesCreate/index.tsx b/src/front/Components/Layouts/DocumentTypes/DocumentTypesCreate/index.tsx index f6dfa2a5..e1b62143 100644 --- a/src/front/Components/Layouts/DocumentTypes/DocumentTypesCreate/index.tsx +++ b/src/front/Components/Layouts/DocumentTypes/DocumentTypesCreate/index.tsx @@ -29,13 +29,15 @@ export default function DocumentTypesCreate(props: IProps) { }); const documentToCreate = DocumentType.hydrate({ ...values, - office: office + office: office, }); await validateOrReject(documentToCreate, { groups: ["createDocumentType"] }); const documentTypeCreated = await DocumentTypes.getInstance().post(documentToCreate); router.push( - Module.getInstance().get().modules.pages.DocumentTypes.pages.Edit.props.path.replace("[uid]", documentTypeCreated.uid!), + Module.getInstance() + .get() + .modules.pages.DocumentTypes.pages.DocumentTypesInformations.props.path.replace("[uid]", documentTypeCreated.uid!), ); } catch (e) { if (e instanceof Array) { diff --git a/src/front/Components/Layouts/Folder/FolderInformation/classes.module.scss b/src/front/Components/Layouts/Folder/FolderInformation/classes.module.scss index 8d16dc82..ce30f22f 100644 --- a/src/front/Components/Layouts/Folder/FolderInformation/classes.module.scss +++ b/src/front/Components/Layouts/Folder/FolderInformation/classes.module.scss @@ -67,7 +67,8 @@ } @media (max-width: $screen-m) { - display: block; + display: flex; + flex-direction: column; .delete-folder { margin-left: 0; diff --git a/src/front/Components/Layouts/Folder/ViewDocuments/index.tsx b/src/front/Components/Layouts/Folder/ViewDocuments/index.tsx index caeb2c21..e7827e19 100644 --- a/src/front/Components/Layouts/Folder/ViewDocuments/index.tsx +++ b/src/front/Components/Layouts/Folder/ViewDocuments/index.tsx @@ -103,11 +103,11 @@ class ViewDocumentsClass extends BasePage { )}
- {this.state.document?.document_type?.name === "Document d'identité" && ( + {/* {this.state.document?.document_type?.name === "Document d'identité" && (
- )} + )} */}
{this.state.document?.document_status === EDocumentStatus.DEPOSITED && ( @@ -235,20 +235,32 @@ class ViewDocumentsClass extends BasePage { private goToPrevious() { const index = this.state.selectedFileIndex - 1; if (this.hasPrevious()) { - this.setState({ - selectedFile: this.state.document!.files![index]!, - selectedFileIndex: index, - }); + this.setState( + { + selectedFile: this.state.document!.files![index]!, + selectedFileIndex: index, + fileBlob: null, + }, + () => { + this.getFilePreview(); + }, + ); } } private goToNext() { if (this.hasNext()) { const index = this.state.selectedFileIndex + 1; - this.setState({ - selectedFile: this.state.document!.files![index]!, - selectedFileIndex: index, - }); + this.setState( + { + selectedFile: this.state.document!.files![index]!, + selectedFileIndex: index, + fileBlob: null, + }, + () => { + this.getFilePreview(); + }, + ); } } diff --git a/src/front/Components/Layouts/Login/index.tsx b/src/front/Components/Layouts/Login/index.tsx index 64702a90..e6e60bd7 100644 --- a/src/front/Components/Layouts/Login/index.tsx +++ b/src/front/Components/Layouts/Login/index.tsx @@ -10,6 +10,7 @@ import { useCallback } from "react"; import classes from "./classes.module.scss"; import LandingImage from "./landing-connect.jpeg"; import { FrontendVariables } from "@Front/Config/VariablesFront"; +import Link from "next/link"; export default function Login() { const router = useRouter(); @@ -36,7 +37,9 @@ export default function Login() {
Vous n'arrivez pas à vous connecter ?
- + + +
); diff --git a/src/front/Components/Layouts/LoginCallback/index.tsx b/src/front/Components/Layouts/LoginCallback/index.tsx index cf320165..12d2293c 100644 --- a/src/front/Components/Layouts/LoginCallback/index.tsx +++ b/src/front/Components/Layouts/LoginCallback/index.tsx @@ -11,6 +11,7 @@ import Typography, { ITypo } from "@Front/Components/DesignSystem/Typography"; import Button, { EButtonVariant } from "@Front/Components/DesignSystem/Button"; import Loader from "@Front/Components/DesignSystem/Loader"; import UserStore from "@Front/Stores/UserStore"; +import Link from "next/link"; export default function LoginCallBack() { const router = useRouter(); @@ -45,7 +46,9 @@ export default function LoginCallBack() {
Vous n'arrivez pas à vous connecter ?
- + + +
); diff --git a/src/front/Components/Layouts/LoginCallbackCustomer/index.tsx b/src/front/Components/Layouts/LoginCallbackCustomer/index.tsx index bd78a01c..7ec5bf15 100644 --- a/src/front/Components/Layouts/LoginCallbackCustomer/index.tsx +++ b/src/front/Components/Layouts/LoginCallbackCustomer/index.tsx @@ -15,13 +15,13 @@ import Loader from "@Front/Components/DesignSystem/Loader"; import Customers from "@Front/Api/LeCoffreApi/Id360/Customers/Customers"; import CustomerStore from "@Front/Stores/CustomerStore"; import Module from "@Front/Config/Module"; - +import Link from "next/link"; export default function LoginCallBack() { const router = useRouter(); useEffect(() => { - const getReport = async() => { + const getReport = async () => { const tokenid360 = router.query["token"]; if (!tokenid360) return; // const variables = FrontendVariables.getInstance(); @@ -31,9 +31,10 @@ export default function LoginCallBack() { const token = await Customers.getInstance().loginCallback(tokenid360); CustomerStore.instance.connect(token.accessToken, token.refreshToken); router.push(Module.getInstance().get().modules.pages.Folder.pages.Select.props.path); - } + }; getReport(); - }),[router]; + }), + [router]; return ( @@ -48,7 +49,9 @@ export default function LoginCallBack() {
Vous n'arrivez pas à vous connecter ?
- + + +
); diff --git a/src/front/Components/Layouts/LoginCustomer/index.tsx b/src/front/Components/Layouts/LoginCustomer/index.tsx index 6adfa56c..7968e55c 100644 --- a/src/front/Components/Layouts/LoginCustomer/index.tsx +++ b/src/front/Components/Layouts/LoginCustomer/index.tsx @@ -9,6 +9,7 @@ import { useCallback } from "react"; import Customers from "@Front/Api/LeCoffreApi/Id360/Customers/Customers"; import classes from "./classes.module.scss"; import LandingImage from "./landing-connect.jpeg"; +import Link from "next/link"; export default function Login() { const router = useRouter(); @@ -36,7 +37,9 @@ export default function Login() {
Vous n'arrivez pas à vous connecter ?
- + + + ); diff --git a/src/front/Components/Layouts/MyAccount/index.tsx b/src/front/Components/Layouts/MyAccount/index.tsx index 7b0d4798..43863b7b 100644 --- a/src/front/Components/Layouts/MyAccount/index.tsx +++ b/src/front/Components/Layouts/MyAccount/index.tsx @@ -90,7 +90,7 @@ export default class MyAccount extends Base { /> (null); + const [adminUsers, setAdminUsers] = useState([]); + const [collaboratorUsers, setCollaboratorUsers] = useState([]); useEffect(() => { async function getOffice() { @@ -31,54 +33,87 @@ export default function OfficeInformations(props: IProps) { }); if (!office) return; setOfficeSelected(office); + + const adminUsers = office.users?.filter((user) => { + if (user.office_role && user.office_role.name === "admin") { + return true; + } + if (!user.office_role && user.role?.name === "admin") { + return true; + } + if (!user.office_role && user.role?.name === "super-admin") { + return true; + } + return false; + }); + + const collaboratorUsers = office.users?.filter((user) => { + if (user.office_role && user.office_role.name === "admin") { + return false; + } + if (!user.office_role && user.role?.name === "admin") { + return false; + } + if (!user.office_role && user.role?.name === "super-admin") { + return false; + } + return true; + }); + + setAdminUsers(adminUsers!); + setCollaboratorUsers(collaboratorUsers!); } getOffice(); }, [officeUid]); - const renderUser = (user: User) => ( - <> -
- {user.contact?.last_name} - {user.contact?.first_name} - {user.contact?.email} - {user.contact?.phone_number} - {user.office_role ? user.office_role?.name : user.role?.name} -
-
-
- - Nom - + const renderUser = useCallback( + (user: User) => ( + <> +
{user.contact?.last_name} -
-
- - Prénom - {user.contact?.first_name} -
-
- - E-mail - {user.contact?.email} -
-
- - Téléphone - {user.contact?.phone_number} + {user.office_role ? user.office_role?.name : "Utilisateur restreint"}
-
- - Rôle - - {user.office_role ? user.office_role?.name : user.role?.name} +
+
+ + Nom + + {user.contact?.last_name} +
+
+ + Prénom + + {user.contact?.first_name} +
+
+ + E-mail + + {user.contact?.email} +
+
+ + Téléphone + + {user.contact?.phone_number} +
+
+ + Rôle + + {user.office_role ? user.office_role?.name : user.role?.name} +
-
- + + ), + [officeUid], ); + return (
@@ -134,22 +169,9 @@ export default function OfficeInformations(props: IProps) { Rôle
- {officeSelected?.users - ?.filter((user) => { - if (user.office_role && user.office_role.name === "admin") { - return true; - } - if (!user.office_role && user.role?.name === "admin") { - return true; - } - if (!user.office_role && user.role?.name === "super-admin") { - return true; - } - return false; - }) - .map((user) => { - return renderUser(user); - })} + {adminUsers.map((user) => { + return renderUser(user); + })}
@@ -174,22 +196,9 @@ export default function OfficeInformations(props: IProps) { Rôle
- {officeSelected?.users - ?.filter((user) => { - if (user.office_role && user.office_role.name === "admin") { - return false; - } - if (!user.office_role && user.role?.name === "admin") { - return false; - } - if (!user.office_role && user.role?.name === "super-admin") { - return false; - } - return true; - }) - .map((user) => { - return renderUser(user); - })} + {collaboratorUsers.map((user) => { + return renderUser(user); + })} diff --git a/src/front/Components/Layouts/Users/UserInformations/index.tsx b/src/front/Components/Layouts/Users/UserInformations/index.tsx index 990b3de6..f38761f9 100644 --- a/src/front/Components/Layouts/Users/UserInformations/index.tsx +++ b/src/front/Components/Layouts/Users/UserInformations/index.tsx @@ -285,7 +285,10 @@ export default function UserInformations(props: IProps) { Attribuer un titre
- + {!isSuperAdminChecked && ( + + )} +