From ec6424599fcb3b28f74b268b997d9cf9fcc81e16 Mon Sep 17 00:00:00 2001 From: Maxime Lalo Date: Mon, 31 Jul 2023 13:01:59 +0200 Subject: [PATCH] :sparkles: Quitter sans enregistrer --- .../DeedTypes/DeedTypesCreate/index.tsx | 48 +++++++++++++++++-- .../Layouts/DeedTypes/DeedTypesEdit/index.tsx | 48 ++++++++++++++++++- 2 files changed, 91 insertions(+), 5 deletions(-) diff --git a/src/front/Components/Layouts/DeedTypes/DeedTypesCreate/index.tsx b/src/front/Components/Layouts/DeedTypes/DeedTypesCreate/index.tsx index 39d22720..a7220d15 100644 --- a/src/front/Components/Layouts/DeedTypes/DeedTypesCreate/index.tsx +++ b/src/front/Components/Layouts/DeedTypes/DeedTypesCreate/index.tsx @@ -3,18 +3,22 @@ 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 Confirm from "@Front/Components/DesignSystem/Modal/Confirm"; 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 { useCallback, useState } from "react"; import classes from "./classes.module.scss"; type IProps = {}; export default function DeedTypesCreate(props: IProps) { + const [hasChanged, setHasChanged] = useState(false); + const [isConfirmModalVisible, setIsConfirmModalVisible] = useState(false); + const router = useRouter(); const onSubmitHandler = useCallback( async (e: React.FormEvent | null, values: { [key: string]: string }) => { @@ -42,20 +46,58 @@ export default function DeedTypesCreate(props: IProps) { [router], ); + const closeConfirmModal = useCallback(() => { + setIsConfirmModalVisible(false); + }, []); + + const onFieldChange = useCallback((name: string, field: any) => { + setHasChanged(true); + }, []); + + const redirect = useCallback(() => { + router.push( + Module.getInstance() + .get() + .modules.pages.DeedTypes.props.path + ); + }, [router]); + + const onCancel = useCallback(() => { + if (hasChanged) { + setIsConfirmModalVisible(true); + } else { + redirect(); + } + }, [hasChanged, redirect]); + return (
Créer un type d'acte
-
+
- +
+ +
+ + Si vous quittez, toutes les modifications que vous avez effectuées ne seront pas enregistrées. + +
+
); diff --git a/src/front/Components/Layouts/DeedTypes/DeedTypesEdit/index.tsx b/src/front/Components/Layouts/DeedTypes/DeedTypesEdit/index.tsx index 5838bffc..3b5c8f24 100644 --- a/src/front/Components/Layouts/DeedTypes/DeedTypesEdit/index.tsx +++ b/src/front/Components/Layouts/DeedTypes/DeedTypesEdit/index.tsx @@ -3,6 +3,7 @@ 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 Confirm from "@Front/Components/DesignSystem/Modal/Confirm"; import Typography, { ITypo } from "@Front/Components/DesignSystem/Typography"; import DefaultDeedTypesDashboard from "@Front/Components/LayoutTemplates/DefaultDeedTypeDashboard"; import Module from "@Front/Config/Module"; @@ -17,8 +18,11 @@ export default function DeedTypesEdit() { let { deedTypeUid } = router.query; const [deedTypeSelected, setDeedTypeSelected] = useState(null); + const [hasChanged, setHasChanged] = useState(false); + const [isConfirmModalVisible, setIsConfirmModalVisible] = useState(false); useEffect(() => { + setHasChanged(false); async function getDeedType() { if (!deedTypeUid) return; const deedType = await DeedTypes.getInstance().getByUid(deedTypeUid as string, { @@ -32,6 +36,10 @@ export default function DeedTypesEdit() { getDeedType(); }, [deedTypeUid]); + const closeConfirmModal = useCallback(() => { + setIsConfirmModalVisible(false); + }, []); + const onSubmitHandler = useCallback( async (e: React.FormEvent | null, values: { [key: string]: string }) => { try { @@ -55,20 +63,56 @@ export default function DeedTypesEdit() { [deedTypeUid, router], ); + const onFieldChange = useCallback((name: string, field: any) => { + setHasChanged(true); + }, []); + + const redirect = useCallback(() => { + router.push( + Module.getInstance() + .get() + .modules.pages.DeedTypes.pages.DeedTypesInformations.props.path.replace("[uid]", deedTypeUid as string), + ); + }, [deedTypeUid, router]); + + const onCancel = useCallback(() => { + if (hasChanged) { + setIsConfirmModalVisible(true); + } else { + redirect(); + } + }, [hasChanged, redirect]); + return (
Modifier les informations de l'acte
-
+
- +
+ +
+ + Si vous quittez, toutes les modifications que vous avez effectuées ne seront pas enregistrées. + +
+
);