Skip to content

Commit acd5cf0

Browse files
added DeleteDraftIncorporationDialog
1 parent 12bed20 commit acd5cf0

File tree

7 files changed

+141
-8
lines changed

7 files changed

+141
-8
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
.title {
2+
padding-bottom: 16px;
3+
width: 100%;
4+
font-size: var(--size-medium-l);
5+
font-weight: var(--weight-bold);
6+
line-height: 24px;
7+
color: var(--dark);
8+
letter-spacing: var(--spacing-medium);
9+
}
10+
11+
.heading {
12+
display: block;
13+
padding: 3px 0 20px;
14+
font-size: var(--size-normal);
15+
font-weight: var(--weight-normal);
16+
line-height: 18px;
17+
color: var(--temp-grey-blue-7);
18+
letter-spacing: 0.1px;
19+
}
20+
21+
.button {
22+
composes: themeDanger from '~core/Button/Button.css';
23+
height: 44px;
24+
width: 160px;
25+
border-color: var(--pink);
26+
background-color: var(--pink);
27+
font-size: var(--size-normal);
28+
line-height: 18px;
29+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
export const title: string;
2+
export const heading: string;
3+
export const button: string;
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
import React, { useCallback } from 'react';
2+
import { defineMessages, FormattedMessage } from 'react-intl';
3+
4+
import Dialog, { DialogSection } from '~core/Dialog';
5+
import Heading from '~core/Heading';
6+
import Button from '~core/Button';
7+
8+
import styles from './DeleteDraftIncorporationDialog.css';
9+
10+
const MSG = defineMessages({
11+
header: {
12+
id: 'dashboard.DeleteDraftIncorporationDialog.header',
13+
defaultMessage: 'Delete draft Incorporation',
14+
},
15+
description: {
16+
id: 'dashboard.DeleteDraftIncorporationDialog.description',
17+
defaultMessage: `Are you sure you want to delete this draft incorporation?`,
18+
},
19+
deleteText: {
20+
id: 'dashboard.DeleteDraftIncorporationDialog.deleteText',
21+
defaultMessage: 'Yes, delete',
22+
},
23+
});
24+
25+
const displayName = 'dashboard.DeleteDraftIncorporationDialog';
26+
27+
interface Props {
28+
cancel: () => void;
29+
close: () => void;
30+
onClick?: () => void;
31+
}
32+
33+
const DeleteDraftIncorporationDialog = ({ cancel, onClick, close }: Props) => {
34+
const handleSubmit = useCallback(() => {
35+
onClick?.();
36+
close();
37+
}, [onClick, close]);
38+
39+
return (
40+
<Dialog cancel={cancel}>
41+
<DialogSection appearance={{ theme: 'heading' }}>
42+
<div className={styles.heading}>
43+
<Heading
44+
appearance={{ size: 'medium', margin: 'none' }}
45+
className={styles.title}
46+
>
47+
<FormattedMessage {...MSG.header} />
48+
</Heading>
49+
<FormattedMessage {...MSG.description} />
50+
</div>
51+
</DialogSection>
52+
<DialogSection appearance={{ align: 'right', theme: 'footer' }}>
53+
<Button
54+
autoFocus
55+
onClick={handleSubmit}
56+
text={MSG.deleteText}
57+
className={styles.button}
58+
/>
59+
</DialogSection>
60+
</Dialog>
61+
);
62+
};
63+
64+
DeleteDraftIncorporationDialog.displayName = displayName;
65+
66+
export default DeleteDraftIncorporationDialog;
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
export { default } from './DeleteDraftIncorporationDialog';

src/modules/dashboard/components/Incorporation/Stages/FormStages.tsx

Lines changed: 24 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@ import { flattenObject } from '~dashboard/ExpenditurePage/Stages/utils';
66
import { FIX_TRIGGER_EVENT_NAME } from '~pages/ExpenditurePage/constants';
77
import { StageObject, ValuesType } from '~pages/IncorporationPage/types';
88
import { Stages as StagesEnum } from '~pages/IncorporationPage/constants';
9+
import { useDialog } from '~core/Dialog';
10+
import DeleteDraftIncorporationDialog from '~dashboard/Dialogs/DeleteDraftIncorporationDialog';
911

1012
import Stages from './Stages';
1113
import styles from './Stages.css';
@@ -30,11 +32,20 @@ const MSG = defineMessages({
3032
export interface Props {
3133
stages: StageObject[];
3234
activeStageId: StagesEnum;
35+
setFormValues: React.Dispatch<React.SetStateAction<ValuesType | undefined>>;
3336
}
3437

35-
const FormStages = ({ stages, activeStageId }: Props) => {
36-
const { values, handleSubmit, validateForm, setTouched, errors: formikErr } =
37-
useFormikContext<ValuesType>() || {};
38+
const FormStages = ({ stages, activeStageId, setFormValues }: Props) => {
39+
const {
40+
values,
41+
handleSubmit,
42+
validateForm,
43+
setTouched,
44+
errors: formikErr,
45+
resetForm,
46+
} = useFormikContext<ValuesType>() || {};
47+
48+
const openDeleteDraftDialog = useDialog(DeleteDraftIncorporationDialog);
3849

3950
const formikErrors = useMemo(() => {
4051
const errorsFlat = flattenObject(formikErr);
@@ -49,6 +60,15 @@ const FormStages = ({ stages, activeStageId }: Props) => {
4960
return !errorsLength && handleSubmit(values as any);
5061
}, [handleSubmit, setTouched, validateForm, values]);
5162

63+
const handleDeleteDraft = () =>
64+
openDeleteDraftDialog({
65+
onClick: () => {
66+
resetForm();
67+
// add logic to delete the draft from database
68+
setFormValues(undefined);
69+
},
70+
});
71+
5272
const handleFixButtonClick = useCallback(() => {
5373
setTouched(
5474
setNestedObjectValues<FormikTouched<ValuesType>>(formikErr, true),
@@ -96,6 +116,7 @@ const FormStages = ({ stages, activeStageId }: Props) => {
96116
stages={stages}
97117
activeStageId={activeStageId}
98118
buttonAction={handleSaveDraft}
119+
handleDeleteDraft={handleDeleteDraft}
99120
/>
100121
</div>
101122
);

src/modules/dashboard/components/Incorporation/Stages/Stages.tsx

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,14 +33,16 @@ export interface Props {
3333
stages: StageObject[];
3434
activeStageId: StagesEnum;
3535
buttonDisabled?: boolean;
36-
buttonAction?: VoidFunction;
36+
buttonAction?: (values?: ValuesType) => void;
37+
handleDeleteDraft?: VoidFunction;
3738
}
3839

3940
const Stages = ({
4041
stages,
4142
activeStageId,
4243
buttonDisabled,
4344
buttonAction,
45+
handleDeleteDraft,
4446
}: Props) => {
4547
const [valueIsCopied, setValueIsCopied] = useState(false);
4648
const userFeedbackTimer = useRef<any>(null);
@@ -82,7 +84,14 @@ const Stages = ({
8284
/>
8385
</div>
8486
</Button>
85-
<Button className={styles.iconButton}>
87+
<Button
88+
className={styles.iconButton}
89+
onClick={
90+
activeStageId === StagesEnum.Draft
91+
? handleDeleteDraft
92+
: () => {}
93+
}
94+
>
8695
<div className={styles.iconWrapper}>
8796
<Icon
8897
name="trash"

src/modules/pages/components/IncorporationPage/IncorporationPage.tsx

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,16 +7,16 @@ import { getMainClasses } from '~utils/css';
77
import { SpinnerLoader } from '~core/Preloaders';
88
import Stages, { FormStages } from '~dashboard/Incorporation/Stages';
99
import IncorporationForm from '~dashboard/Incorporation/IncorporationForm';
10+
import LockedIncorporationForm from '~dashboard/Incorporation/IncorporationForm/LockedIncorporationForm';
1011

1112
import {
1213
initialValues,
1314
stages,
1415
validationSchema,
1516
Stages as StagesEnum,
1617
} from './constants';
17-
import styles from './IncorporationPage.css';
1818
import { ValuesType } from './types';
19-
import LockedIncorporationForm from '~dashboard/Incorporation/IncorporationForm/LockedIncorporationForm';
19+
import styles from './IncorporationPage.css';
2020

2121
const displayName = 'pages.IncorporationPage';
2222

@@ -102,7 +102,11 @@ const IncorporationPage = () => {
102102
<main className={styles.mainContent}>
103103
<div />
104104
{activeStageId === StagesEnum.Draft ? (
105-
<FormStages activeStageId={activeStageId} stages={stages} />
105+
<FormStages
106+
activeStageId={activeStageId}
107+
stages={stages}
108+
setFormValues={setFormValues}
109+
/>
106110
) : (
107111
<Stages
108112
activeStageId={activeStageId}

0 commit comments

Comments
 (0)