feat(webapp): showing up mail popup once saving invoice, receipt and estimate

This commit is contained in:
Ahmed Bouhuolia
2024-01-25 21:56:18 +02:00
parent 760dbc6cfc
commit 63708ae839
29 changed files with 482 additions and 138 deletions

View File

@@ -4,21 +4,16 @@ import { Dialog, DialogSuspense } from '@/components';
import withDialogRedux from '@/components/DialogReduxConnect';
import { compose } from '@/utils';
const ReceiptMailDialogContent = React.lazy(
() => import('./ReceiptMailDialogContent'),
const ReceiptMailDialogBody = React.lazy(
() => import('./ReceiptMailDialogBody'),
);
/**
* Invoice mail dialog.
* Receipt mail dialog.
*/
function ReceiptMailDialog({
dialogName,
payload: {
receiptId = null,
// Redirects to receipts list after mail submitting.
redirectToReceiptsList = false,
},
payload: { receiptId = null },
isOpen,
}) {
return (
@@ -31,11 +26,7 @@ function ReceiptMailDialog({
style={{ width: 600 }}
>
<DialogSuspense>
<ReceiptMailDialogContent
dialogName={dialogName}
receiptId={receiptId}
redirectToReceiptsList={redirectToReceiptsList}
/>
<ReceiptMailDialogBody receiptId={receiptId} />
</DialogSuspense>
</Dialog>
);

View File

@@ -0,0 +1,33 @@
// @ts-nocheck
import * as R from 'ramda';
import withDialogActions from '@/containers/Dialog/withDialogActions';
import ReceiptMailDialogContent, {
ReceiptMailDialogContentProps,
} from './ReceiptMailDialogContent';
import { DialogsName } from '@/constants/dialogs';
interface ReceiptMailDialogBodyProps extends ReceiptMailDialogContentProps {}
function ReceiptMailDialogBodyRoot({
receiptId,
// #withDialogActions
closeDialog,
}: ReceiptMailDialogBodyProps) {
const handleCancelClick = () => {
closeDialog(DialogsName.ReceiptMail);
};
const handleSubmitClick = () => {
closeDialog(DialogsName.ReceiptMail);
};
return (
<ReceiptMailDialogContent
receiptId={receiptId}
onFormSubmit={handleSubmitClick}
onCancelClick={handleCancelClick}
/>
);
}
export default R.compose(withDialogActions)(ReceiptMailDialogBodyRoot);

View File

@@ -2,22 +2,22 @@ import React from 'react';
import { ReceiptMailDialogBoot } from './ReceiptMailDialogBoot';
import { ReceiptMailDialogForm } from './ReceiptMailDialogForm';
interface ReceiptMailDialogContentProps {
dialogName: string;
export interface ReceiptMailDialogContentProps {
receiptId: number;
redirectToReceiptsList?: boolean;
onFormSubmit?: () => void;
onCancelClick?: () => void;
}
export default function ReceiptMailDialogContent({
dialogName,
receiptId,
redirectToReceiptsList = false,
onFormSubmit,
onCancelClick
}: ReceiptMailDialogContentProps) {
return (
<ReceiptMailDialogBoot
receiptId={receiptId}
redirectToReceiptsList={redirectToReceiptsList}
>
<ReceiptMailDialogForm />
<ReceiptMailDialogBoot receiptId={receiptId}>
<ReceiptMailDialogForm
onFormSubmit={onFormSubmit}
onCancelClick={onCancelClick}
/>
</ReceiptMailDialogBoot>
);
}

View File

@@ -2,7 +2,6 @@
import { Formik, FormikBag } from 'formik';
import * as R from 'ramda';
import { Intent } from '@blueprintjs/core';
import { useHistory } from 'react-router-dom';
import { useReceiptMailDialogBoot } from './ReceiptMailDialogBoot';
import withDialogActions from '@/containers/Dialog/withDialogActions';
import { DialogsName } from '@/constants/dialogs';
@@ -24,12 +23,18 @@ interface ReceiptMailFormValues extends MailNotificationFormValues {
attachReceipt: boolean;
}
function ReceiptMailDialogFormRoot({ closeDialog }) {
const { mailOptions, saleReceiptId, redirectToReceiptsList } =
useReceiptMailDialogBoot();
const { mutateAsync: sendReceiptMail } = useSendSaleReceiptMail();
interface ReceiptMailDialogFormProps {
onFormSubmit?: () => void;
onCancelClick?: () => void;
}
const history = useHistory();
export function ReceiptMailDialogForm({
// #props
onFormSubmit,
onCancelClick,
}: ReceiptMailDialogFormProps) {
const { mailOptions, saleReceiptId } = useReceiptMailDialogBoot();
const { mutateAsync: sendReceiptMail } = useSendSaleReceiptMail();
// Transformes mail options to initial form values.
const initialValues = transformMailFormToInitialValues(
@@ -50,12 +55,8 @@ function ReceiptMailDialogFormRoot({ closeDialog }) {
message: 'The mail notification has been sent successfully.',
intent: Intent.SUCCESS,
});
closeDialog(DialogsName.ReceiptMail);
setSubmitting(false);
if (redirectToReceiptsList) {
history.push('/receipts');
}
onFormSubmit && onFormSubmit(values);
})
.catch(() => {
AppToaster.show({
@@ -67,7 +68,7 @@ function ReceiptMailDialogFormRoot({ closeDialog }) {
};
// Handle the close button click.
const handleClose = () => {
closeDialog(DialogsName.ReceiptMail);
onCancelClick && onCancelClick();
};
return (
@@ -76,7 +77,3 @@ function ReceiptMailDialogFormRoot({ closeDialog }) {
</Formik>
);
}
export const ReceiptMailDialogForm = R.compose(withDialogActions)(
ReceiptMailDialogFormRoot,
);