✨ Quitter sans enregistrer
This commit is contained in:
parent
539373b99a
commit
ec6424599f
@ -3,18 +3,22 @@ import Button, { EButtonVariant } from "@Front/Components/DesignSystem/Button";
|
|||||||
import Form from "@Front/Components/DesignSystem/Form";
|
import Form from "@Front/Components/DesignSystem/Form";
|
||||||
import TextAreaField from "@Front/Components/DesignSystem/Form/TextareaField";
|
import TextAreaField from "@Front/Components/DesignSystem/Form/TextareaField";
|
||||||
import TextField from "@Front/Components/DesignSystem/Form/TextField";
|
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 Typography, { ITypo } from "@Front/Components/DesignSystem/Typography";
|
||||||
import DefaultDeedTypesDashboard from "@Front/Components/LayoutTemplates/DefaultDeedTypeDashboard";
|
import DefaultDeedTypesDashboard from "@Front/Components/LayoutTemplates/DefaultDeedTypeDashboard";
|
||||||
import Module from "@Front/Config/Module";
|
import Module from "@Front/Config/Module";
|
||||||
import JwtService from "@Front/Services/JwtService/JwtService";
|
import JwtService from "@Front/Services/JwtService/JwtService";
|
||||||
import { DeedType, Office } from "le-coffre-resources/dist/Admin";
|
import { DeedType, Office } from "le-coffre-resources/dist/Admin";
|
||||||
import { useRouter } from "next/router";
|
import { useRouter } from "next/router";
|
||||||
import { useCallback } from "react";
|
import { useCallback, useState } from "react";
|
||||||
|
|
||||||
import classes from "./classes.module.scss";
|
import classes from "./classes.module.scss";
|
||||||
|
|
||||||
type IProps = {};
|
type IProps = {};
|
||||||
export default function DeedTypesCreate(props: IProps) {
|
export default function DeedTypesCreate(props: IProps) {
|
||||||
|
const [hasChanged, setHasChanged] = useState<boolean>(false);
|
||||||
|
const [isConfirmModalVisible, setIsConfirmModalVisible] = useState<boolean>(false);
|
||||||
|
|
||||||
const router = useRouter();
|
const router = useRouter();
|
||||||
const onSubmitHandler = useCallback(
|
const onSubmitHandler = useCallback(
|
||||||
async (e: React.FormEvent<HTMLFormElement> | null, values: { [key: string]: string }) => {
|
async (e: React.FormEvent<HTMLFormElement> | null, values: { [key: string]: string }) => {
|
||||||
@ -42,20 +46,58 @@ export default function DeedTypesCreate(props: IProps) {
|
|||||||
[router],
|
[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 (
|
return (
|
||||||
<DefaultDeedTypesDashboard mobileBackText={"Liste des types d'actes"} hasBackArrow title="Créer un type d'acte">
|
<DefaultDeedTypesDashboard mobileBackText={"Liste des types d'actes"} hasBackArrow title="Créer un type d'acte">
|
||||||
<div className={classes["root"]}>
|
<div className={classes["root"]}>
|
||||||
<div className={classes["header"]}>
|
<div className={classes["header"]}>
|
||||||
<Typography typo={ITypo.H1Bis}>Créer un type d'acte</Typography>
|
<Typography typo={ITypo.H1Bis}>Créer un type d'acte</Typography>
|
||||||
</div>
|
</div>
|
||||||
<Form onSubmit={onSubmitHandler} className={classes["form-container"]}>
|
<Form onSubmit={onSubmitHandler} className={classes["form-container"]} onFieldChange={onFieldChange}>
|
||||||
<TextField name="name" placeholder="Nom de l'acte" />
|
<TextField name="name" placeholder="Nom de l'acte" />
|
||||||
<TextAreaField name="description" placeholder="Description" />
|
<TextAreaField name="description" placeholder="Description" />
|
||||||
<div className={classes["buttons-container"]}>
|
<div className={classes["buttons-container"]}>
|
||||||
<Button variant={EButtonVariant.GHOST}>Annuler</Button>
|
<Button variant={EButtonVariant.GHOST} onClick={onCancel}>Annuler</Button>
|
||||||
<Button type="submit">Créer le type d'acte</Button>
|
<Button type="submit">Créer le type d'acte</Button>
|
||||||
</div>
|
</div>
|
||||||
</Form>
|
</Form>
|
||||||
|
<Confirm
|
||||||
|
isOpen={isConfirmModalVisible}
|
||||||
|
onClose={closeConfirmModal}
|
||||||
|
onAccept={redirect}
|
||||||
|
closeBtn
|
||||||
|
header={"Êtes-vous sur de vouloir quitter sans enregistrer ?"}
|
||||||
|
cancelText={"Annuler"}
|
||||||
|
confirmText={"Quitter"}>
|
||||||
|
<div className={classes["modal-content"]}>
|
||||||
|
<Typography typo={ITypo.P_16} className={classes["text"]}>
|
||||||
|
Si vous quittez, toutes les modifications que vous avez effectuées ne seront pas enregistrées.
|
||||||
|
</Typography>
|
||||||
|
</div>
|
||||||
|
</Confirm>
|
||||||
</div>
|
</div>
|
||||||
</DefaultDeedTypesDashboard>
|
</DefaultDeedTypesDashboard>
|
||||||
);
|
);
|
||||||
|
@ -3,6 +3,7 @@ import Button, { EButtonVariant } from "@Front/Components/DesignSystem/Button";
|
|||||||
import Form from "@Front/Components/DesignSystem/Form";
|
import Form from "@Front/Components/DesignSystem/Form";
|
||||||
import TextAreaField from "@Front/Components/DesignSystem/Form/TextareaField";
|
import TextAreaField from "@Front/Components/DesignSystem/Form/TextareaField";
|
||||||
import TextField from "@Front/Components/DesignSystem/Form/TextField";
|
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 Typography, { ITypo } from "@Front/Components/DesignSystem/Typography";
|
||||||
import DefaultDeedTypesDashboard from "@Front/Components/LayoutTemplates/DefaultDeedTypeDashboard";
|
import DefaultDeedTypesDashboard from "@Front/Components/LayoutTemplates/DefaultDeedTypeDashboard";
|
||||||
import Module from "@Front/Config/Module";
|
import Module from "@Front/Config/Module";
|
||||||
@ -17,8 +18,11 @@ export default function DeedTypesEdit() {
|
|||||||
let { deedTypeUid } = router.query;
|
let { deedTypeUid } = router.query;
|
||||||
|
|
||||||
const [deedTypeSelected, setDeedTypeSelected] = useState<DeedType | null>(null);
|
const [deedTypeSelected, setDeedTypeSelected] = useState<DeedType | null>(null);
|
||||||
|
const [hasChanged, setHasChanged] = useState<boolean>(false);
|
||||||
|
const [isConfirmModalVisible, setIsConfirmModalVisible] = useState<boolean>(false);
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
|
setHasChanged(false);
|
||||||
async function getDeedType() {
|
async function getDeedType() {
|
||||||
if (!deedTypeUid) return;
|
if (!deedTypeUid) return;
|
||||||
const deedType = await DeedTypes.getInstance().getByUid(deedTypeUid as string, {
|
const deedType = await DeedTypes.getInstance().getByUid(deedTypeUid as string, {
|
||||||
@ -32,6 +36,10 @@ export default function DeedTypesEdit() {
|
|||||||
getDeedType();
|
getDeedType();
|
||||||
}, [deedTypeUid]);
|
}, [deedTypeUid]);
|
||||||
|
|
||||||
|
const closeConfirmModal = useCallback(() => {
|
||||||
|
setIsConfirmModalVisible(false);
|
||||||
|
}, []);
|
||||||
|
|
||||||
const onSubmitHandler = useCallback(
|
const onSubmitHandler = useCallback(
|
||||||
async (e: React.FormEvent<HTMLFormElement> | null, values: { [key: string]: string }) => {
|
async (e: React.FormEvent<HTMLFormElement> | null, values: { [key: string]: string }) => {
|
||||||
try {
|
try {
|
||||||
@ -55,20 +63,56 @@ export default function DeedTypesEdit() {
|
|||||||
[deedTypeUid, router],
|
[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 (
|
return (
|
||||||
<DefaultDeedTypesDashboard mobileBackText={"Liste des types d'actes"} hasBackArrow title="Modifier les informations d'un acte">
|
<DefaultDeedTypesDashboard mobileBackText={"Liste des types d'actes"} hasBackArrow title="Modifier les informations d'un acte">
|
||||||
<div className={classes["root"]}>
|
<div className={classes["root"]}>
|
||||||
<div className={classes["header"]}>
|
<div className={classes["header"]}>
|
||||||
<Typography typo={ITypo.H1Bis}>Modifier les informations de l'acte</Typography>
|
<Typography typo={ITypo.H1Bis}>Modifier les informations de l'acte</Typography>
|
||||||
</div>
|
</div>
|
||||||
<Form onSubmit={onSubmitHandler} className={classes["form-container"]}>
|
<Form onSubmit={onSubmitHandler} className={classes["form-container"]} onFieldChange={onFieldChange}>
|
||||||
<TextField name="name" placeholder="Nom de l'acte" defaultValue={deedTypeSelected?.name} />
|
<TextField name="name" placeholder="Nom de l'acte" defaultValue={deedTypeSelected?.name} />
|
||||||
<TextAreaField name="description" placeholder="Description" defaultValue={deedTypeSelected?.description} />
|
<TextAreaField name="description" placeholder="Description" defaultValue={deedTypeSelected?.description} />
|
||||||
<div className={classes["buttons-container"]}>
|
<div className={classes["buttons-container"]}>
|
||||||
<Button variant={EButtonVariant.GHOST}>Annuler</Button>
|
<Button variant={EButtonVariant.GHOST} onClick={onCancel}>
|
||||||
|
Annuler
|
||||||
|
</Button>
|
||||||
<Button type="submit">Enregistrer</Button>
|
<Button type="submit">Enregistrer</Button>
|
||||||
</div>
|
</div>
|
||||||
</Form>
|
</Form>
|
||||||
|
<Confirm
|
||||||
|
isOpen={isConfirmModalVisible}
|
||||||
|
onClose={closeConfirmModal}
|
||||||
|
onAccept={redirect}
|
||||||
|
closeBtn
|
||||||
|
header={"Êtes-vous sur de vouloir quitter sans enregistrer ?"}
|
||||||
|
cancelText={"Annuler"}
|
||||||
|
confirmText={"Quitter"}>
|
||||||
|
<div className={classes["modal-content"]}>
|
||||||
|
<Typography typo={ITypo.P_16} className={classes["text"]}>
|
||||||
|
Si vous quittez, toutes les modifications que vous avez effectuées ne seront pas enregistrées.
|
||||||
|
</Typography>
|
||||||
|
</div>
|
||||||
|
</Confirm>
|
||||||
</div>
|
</div>
|
||||||
</DefaultDeedTypesDashboard>
|
</DefaultDeedTypesDashboard>
|
||||||
);
|
);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user