diff --git a/packages/webapp/src/constants/dialogs.ts b/packages/webapp/src/constants/dialogs.ts
index c9bb52a0e..e7aa4d324 100644
--- a/packages/webapp/src/constants/dialogs.ts
+++ b/packages/webapp/src/constants/dialogs.ts
@@ -53,4 +53,8 @@ export enum DialogsName {
EstimateMail = 'estimate-mail',
ReceiptMail = 'receipt-mail',
PaymentMail = 'payment-mail',
+
+ InvoiceFormMailDeliver = 'InvoiceFormMailDeliver',
+ EstimateFormMailDeliver = 'EstimateFormMailDeliver',
+ ReceiptFormMailDeliver = 'ReceiptFormMailDeliver',
}
diff --git a/packages/webapp/src/containers/Sales/Estimates/EstimateForm/Dialogs/EstimateFormMailDeliverDialog.tsx b/packages/webapp/src/containers/Sales/Estimates/EstimateForm/Dialogs/EstimateFormMailDeliverDialog.tsx
new file mode 100644
index 000000000..6a0b832c3
--- /dev/null
+++ b/packages/webapp/src/containers/Sales/Estimates/EstimateForm/Dialogs/EstimateFormMailDeliverDialog.tsx
@@ -0,0 +1,39 @@
+// @ts-nocheck
+import React from 'react';
+import { Dialog, DialogSuspense } from '@/components';
+import withDialogRedux from '@/components/DialogReduxConnect';
+import { compose } from '@/utils';
+
+const EstimateFormMailDeliverDialogContent = React.lazy(
+ () => import('./EstimateFormMailDeliverDialogContent'),
+);
+
+/**
+ * Estimate mail dialog.
+ */
+function EstimateFormMailDeliverDialog({
+ dialogName,
+ payload: { estimateId = null },
+ isOpen,
+}) {
+ return (
+
+ );
+}
+
+export default compose(withDialogRedux())(EstimateFormMailDeliverDialog);
diff --git a/packages/webapp/src/containers/Sales/Estimates/EstimateForm/Dialogs/EstimateFormMailDeliverDialogContent.tsx b/packages/webapp/src/containers/Sales/Estimates/EstimateForm/Dialogs/EstimateFormMailDeliverDialogContent.tsx
new file mode 100644
index 000000000..e77e3ee99
--- /dev/null
+++ b/packages/webapp/src/containers/Sales/Estimates/EstimateForm/Dialogs/EstimateFormMailDeliverDialogContent.tsx
@@ -0,0 +1,40 @@
+// @ts-nocheck
+import * as R from 'ramda';
+import withDialogActions from '@/containers/Dialog/withDialogActions';
+import { useHistory } from 'react-router-dom';
+import EstimateMailDialogContent from '../../EstimateMailDialog/EstimateMailDialogContent';
+import { DialogsName } from '@/constants/dialogs';
+
+interface EstimateFormDeliverDialogContent {
+ estimateId: number;
+}
+
+function EstimateFormDeliverDialogContentRoot({
+ estimateId,
+
+ // #withDialogActions
+ closeDialog,
+}: EstimateFormDeliverDialogContent) {
+ const history = useHistory();
+
+ const handleSubmit = () => {
+ closeDialog(DialogsName.EstimateFormMailDeliver);
+ history.push('/estimates');
+ };
+ const handleCancel = () => {
+ closeDialog(DialogsName.EstimateFormMailDeliver);
+ history.push('/estimates');
+ };
+
+ return (
+
+ );
+}
+
+export default R.compose(withDialogActions)(
+ EstimateFormDeliverDialogContentRoot,
+);
diff --git a/packages/webapp/src/containers/Sales/Estimates/EstimateForm/EstimateFloatingActions.tsx b/packages/webapp/src/containers/Sales/Estimates/EstimateForm/EstimateFloatingActions.tsx
index df212c38c..474730d93 100644
--- a/packages/webapp/src/containers/Sales/Estimates/EstimateForm/EstimateFloatingActions.tsx
+++ b/packages/webapp/src/containers/Sales/Estimates/EstimateForm/EstimateFloatingActions.tsx
@@ -29,7 +29,7 @@ export default function EstimateFloatingActions() {
// Handle submit & deliver button click.
const handleSubmitDeliverBtnClick = (event) => {
- setSubmitPayload({ redirect: true, deliver: true });
+ setSubmitPayload({ redirect: false, deliverViaMail: true });
submitForm();
};
diff --git a/packages/webapp/src/containers/Sales/Estimates/EstimateForm/EstimateForm.tsx b/packages/webapp/src/containers/Sales/Estimates/EstimateForm/EstimateForm.tsx
index aff0888d6..b1e665d3d 100644
--- a/packages/webapp/src/containers/Sales/Estimates/EstimateForm/EstimateForm.tsx
+++ b/packages/webapp/src/containers/Sales/Estimates/EstimateForm/EstimateForm.tsx
@@ -36,11 +36,16 @@ import {
handleErrors,
resetFormState,
} from './utils';
+import { DialogsName } from '@/constants/dialogs';
+import withDialogActions from '@/containers/Dialog/withDialogActions';
/**
* Estimate form.
*/
function EstimateForm({
+ // #withDialogActions
+ openDialog,
+
// #withSettings
estimateNextNumber,
estimateNumberPrefix,
@@ -108,7 +113,7 @@ function EstimateForm({
delivered: submitPayload.deliver,
};
// Handle the request success.
- const onSuccess = (response) => {
+ const onSuccess = (res) => {
AppToaster.show({
message: intl.get(
isNewMode
@@ -126,6 +131,11 @@ function EstimateForm({
if (submitPayload.resetForm) {
resetFormState({ resetForm, initialValues, values });
}
+ if (submitPayload.deliverViaMail) {
+ openDialog(DialogsName.EstimateFormMailDeliver, {
+ estimateId: res.data.id,
+ });
+ }
};
// Handle the request error.
const onError = ({
@@ -180,6 +190,7 @@ function EstimateForm({
}
export default compose(
+ withDialogActions,
withSettings(({ estimatesSettings }) => ({
estimateNextNumber: estimatesSettings?.nextNumber,
estimateNumberPrefix: estimatesSettings?.numberPrefix,
diff --git a/packages/webapp/src/containers/Sales/Estimates/EstimateForm/EstimateFormDialogs.tsx b/packages/webapp/src/containers/Sales/Estimates/EstimateForm/EstimateFormDialogs.tsx
index aa1c165a1..a50326486 100644
--- a/packages/webapp/src/containers/Sales/Estimates/EstimateForm/EstimateFormDialogs.tsx
+++ b/packages/webapp/src/containers/Sales/Estimates/EstimateForm/EstimateFormDialogs.tsx
@@ -2,6 +2,8 @@
import React from 'react';
import { useFormikContext } from 'formik';
import EstimateNumberDialog from '@/containers/Dialogs/EstimateNumberDialog';
+import EstimateFormMailDeliverDialog from './Dialogs/EstimateFormMailDeliverDialog';
+import { DialogsName } from '@/constants/dialogs';
/**
* Estimate form dialogs.
@@ -25,6 +27,9 @@ export default function EstimateFormDialogs() {
dialogName={'estimate-number-form'}
onConfirm={handleEstimateNumberFormConfirm}
/>
+
>
);
}
diff --git a/packages/webapp/src/containers/Sales/Estimates/EstimateMailDialog/EstimateMailDialog.tsx b/packages/webapp/src/containers/Sales/Estimates/EstimateMailDialog/EstimateMailDialog.tsx
index a90f0e94a..0d13e07fb 100644
--- a/packages/webapp/src/containers/Sales/Estimates/EstimateMailDialog/EstimateMailDialog.tsx
+++ b/packages/webapp/src/containers/Sales/Estimates/EstimateMailDialog/EstimateMailDialog.tsx
@@ -4,21 +4,16 @@ import { Dialog, DialogSuspense } from '@/components';
import withDialogRedux from '@/components/DialogReduxConnect';
import { compose } from '@/utils';
-const EstimateMailDialogContent = React.lazy(
- () => import('./EstimateMailDialogContent'),
+const EstimateMailDialogBody = React.lazy(
+ () => import('./EstimateMailDialogBody'),
);
/**
- * Invoice mail dialog.
+ * Estimate mail dialog.
*/
function EstimateMailDialog({
dialogName,
- payload: {
- estimateId = null,
-
- // Redirect to the estimates list after mail submitting.
- redirectToEstimatesList = false,
- },
+ payload: { estimateId = null },
isOpen,
}) {
return (
@@ -31,11 +26,7 @@ function EstimateMailDialog({
style={{ width: 600 }}
>
-
+
);
diff --git a/packages/webapp/src/containers/Sales/Estimates/EstimateMailDialog/EstimateMailDialogBody.tsx b/packages/webapp/src/containers/Sales/Estimates/EstimateMailDialog/EstimateMailDialogBody.tsx
new file mode 100644
index 000000000..2fa1c0472
--- /dev/null
+++ b/packages/webapp/src/containers/Sales/Estimates/EstimateMailDialog/EstimateMailDialogBody.tsx
@@ -0,0 +1,33 @@
+// @ts-nocheck
+import * as R from 'ramda';
+import withDialogActions from '@/containers/Dialog/withDialogActions';
+import EstimateMailDialogContent from './EstimateMailDialogContent';
+import { DialogsName } from '@/constants/dialogs';
+
+interface EstimateMailDialogBodyProps {
+ estimateId: number;
+}
+
+function EstimateMailDialogBodyRoot({
+ estimateId,
+
+ // #withDialogActions
+ closeDialog,
+}: EstimateMailDialogBodyProps) {
+ const handleSubmit = () => {
+ closeDialog(DialogsName.EstimateMail);
+ };
+ const handleCancelClick = () => {
+ closeDialog(DialogsName.EstimateMail);
+ };
+
+ return (
+
+ );
+}
+
+export default R.compose(withDialogActions)(EstimateMailDialogBodyRoot);
diff --git a/packages/webapp/src/containers/Sales/Estimates/EstimateMailDialog/EstimateMailDialogContent.tsx b/packages/webapp/src/containers/Sales/Estimates/EstimateMailDialog/EstimateMailDialogContent.tsx
index 3eb0af76d..c673f71c6 100644
--- a/packages/webapp/src/containers/Sales/Estimates/EstimateMailDialog/EstimateMailDialogContent.tsx
+++ b/packages/webapp/src/containers/Sales/Estimates/EstimateMailDialog/EstimateMailDialogContent.tsx
@@ -2,21 +2,21 @@ import { EstimateMailDialogBoot } from './EstimateMailDialogBoot';
import { EstimateMailDialogForm } from './EstimateMailDialogForm';
interface EstimateMailDialogContentProps {
- dialogName: string;
estimateId: number;
- redirectToEstimatesList?: boolean;
+ onFormSubmit?: () => void;
+ onCancelClick?: () => void;
}
export default function EstimateMailDialogContent({
- dialogName,
estimateId,
- redirectToEstimatesList,
+ onFormSubmit,
+ onCancelClick,
}: EstimateMailDialogContentProps) {
return (
-
-
+
+
);
}
diff --git a/packages/webapp/src/containers/Sales/Estimates/EstimateMailDialog/EstimateMailDialogForm.tsx b/packages/webapp/src/containers/Sales/Estimates/EstimateMailDialog/EstimateMailDialogForm.tsx
index 4c6e7e943..8f51add43 100644
--- a/packages/webapp/src/containers/Sales/Estimates/EstimateMailDialog/EstimateMailDialogForm.tsx
+++ b/packages/webapp/src/containers/Sales/Estimates/EstimateMailDialog/EstimateMailDialogForm.tsx
@@ -2,7 +2,6 @@
import { Formik } from 'formik';
import * as R from 'ramda';
import { Intent } from '@blueprintjs/core';
-import { useHistory } from 'react-router-dom';
import { useEstimateMailDialogBoot } from './EstimateMailDialogBoot';
import { DialogsName } from '@/constants/dialogs';
import withDialogActions from '@/containers/Dialog/withDialogActions';
@@ -26,6 +25,9 @@ interface EstimateMailFormValues extends MailNotificationFormValues {
}
function EstimateMailDialogFormRoot({
+ onFormSubmit,
+ onCancelClick,
+
// #withDialogClose
closeDialog,
}) {
@@ -33,8 +35,6 @@ function EstimateMailDialogFormRoot({
const { mailOptions, saleEstimateId, redirectToEstimatesList } =
useEstimateMailDialogBoot();
- const history = useHistory();
-
const initialValues = transformMailFormToInitialValues(
mailOptions,
initialFormValues,
@@ -52,10 +52,7 @@ function EstimateMailDialogFormRoot({
});
closeDialog(DialogsName.EstimateMail);
setSubmitting(false);
-
- if (redirectToEstimatesList) {
- history.push('/estimates');
- }
+ onFormSubmit && onFormSubmit();
})
.catch(() => {
setSubmitting(false);
@@ -64,6 +61,7 @@ function EstimateMailDialogFormRoot({
message: 'Something went wrong.',
intent: Intent.DANGER,
});
+ onCancelClick && onCancelClick();
});
};
diff --git a/packages/webapp/src/containers/Sales/Invoices/InvoiceForm/Dialogs/InvoiceFormMailDeliverDialog/InvoiceFormMailDeliverDialog.tsx b/packages/webapp/src/containers/Sales/Invoices/InvoiceForm/Dialogs/InvoiceFormMailDeliverDialog/InvoiceFormMailDeliverDialog.tsx
new file mode 100644
index 000000000..f6ceb38f8
--- /dev/null
+++ b/packages/webapp/src/containers/Sales/Invoices/InvoiceForm/Dialogs/InvoiceFormMailDeliverDialog/InvoiceFormMailDeliverDialog.tsx
@@ -0,0 +1,39 @@
+// @ts-nocheck
+import React from 'react';
+import { Dialog, DialogSuspense } from '@/components';
+import withDialogRedux from '@/components/DialogReduxConnect';
+import { compose } from '@/utils';
+
+const InvoiceFormMailDeliverDialogContent = React.lazy(
+ () => import('./InvoiceFormMailDeliverDialogContent'),
+);
+
+/**
+ * Invoice mail dialog.
+ */
+function InvoiceFormMailDeliverDialog({
+ dialogName,
+ payload: { invoiceId = null },
+ isOpen,
+}) {
+ return (
+
+ );
+}
+
+export default compose(withDialogRedux())(InvoiceFormMailDeliverDialog);
diff --git a/packages/webapp/src/containers/Sales/Invoices/InvoiceForm/Dialogs/InvoiceFormMailDeliverDialog/InvoiceFormMailDeliverDialogContent.tsx b/packages/webapp/src/containers/Sales/Invoices/InvoiceForm/Dialogs/InvoiceFormMailDeliverDialog/InvoiceFormMailDeliverDialogContent.tsx
new file mode 100644
index 000000000..8ce5e7c12
--- /dev/null
+++ b/packages/webapp/src/containers/Sales/Invoices/InvoiceForm/Dialogs/InvoiceFormMailDeliverDialog/InvoiceFormMailDeliverDialogContent.tsx
@@ -0,0 +1,40 @@
+// @ts-nocheck
+import * as R from 'ramda';
+import { useHistory } from 'react-router-dom';
+import InvoiceMailDialogContent from '../../../InvoiceMailDialog/InvoiceMailDialogContent';
+import withDialogActions from '@/containers/Dialog/withDialogActions';
+import { DialogsName } from '@/constants/dialogs';
+
+interface InvoiceFormDeliverDialogContent {
+ invoiceId: number;
+}
+
+function InvoiceFormDeliverDialogContentRoot({
+ invoiceId,
+
+ // #withDialogActions
+ closeDialog,
+}: InvoiceFormDeliverDialogContent) {
+ const history = useHistory();
+
+ const handleSubmit = () => {
+ history.push('/invoices');
+ closeDialog(DialogsName.InvoiceFormMailDeliver);
+ };
+ const handleCancel = () => {
+ history.push('/invoices');
+ closeDialog(DialogsName.InvoiceFormMailDeliver);
+ };
+
+ return (
+
+ );
+}
+
+export default R.compose(withDialogActions)(
+ InvoiceFormDeliverDialogContentRoot,
+);
diff --git a/packages/webapp/src/containers/Sales/Invoices/InvoiceForm/InvoiceFloatingActions.tsx b/packages/webapp/src/containers/Sales/Invoices/InvoiceForm/InvoiceFloatingActions.tsx
index e212c8b7d..0a9a72913 100644
--- a/packages/webapp/src/containers/Sales/Invoices/InvoiceForm/InvoiceFloatingActions.tsx
+++ b/packages/webapp/src/containers/Sales/Invoices/InvoiceForm/InvoiceFloatingActions.tsx
@@ -30,19 +30,19 @@ export default function InvoiceFloatingActions() {
const { setSubmitPayload, invoice } = useInvoiceFormContext();
// Handle submit & deliver button click.
- const handleSubmitDeliverBtnClick = (event) => {
- setSubmitPayload({ redirect: true, deliver: true });
+ const handleSubmitDeliverBtnClick = () => {
+ setSubmitPayload({ redirectToEdit: true, deliverViaMail: true });
submitForm();
};
// Handle submit, deliver & new button click.
- const handleSubmitDeliverAndNewBtnClick = (event) => {
+ const handleSubmitDeliverAndNewBtnClick = () => {
setSubmitPayload({ redirect: false, deliver: true, resetForm: true });
submitForm();
};
// Handle submit, deliver & continue editing button click.
- const handleSubmitDeliverContinueEditingBtnClick = (event) => {
+ const handleSubmitDeliverContinueEditingBtnClick = () => {
setSubmitPayload({ redirect: false, deliver: true });
submitForm();
};
diff --git a/packages/webapp/src/containers/Sales/Invoices/InvoiceForm/InvoiceForm.tsx b/packages/webapp/src/containers/Sales/Invoices/InvoiceForm/InvoiceForm.tsx
index 6b9f234ac..c47f7bc53 100644
--- a/packages/webapp/src/containers/Sales/Invoices/InvoiceForm/InvoiceForm.tsx
+++ b/packages/webapp/src/containers/Sales/Invoices/InvoiceForm/InvoiceForm.tsx
@@ -34,12 +34,20 @@ import {
transformValueToRequest,
resetFormState,
} from './utils';
-import { InvoiceExchangeRateSync, InvoiceNoSyncSettingsToForm } from './components';
+import {
+ InvoiceExchangeRateSync,
+ InvoiceNoSyncSettingsToForm,
+} from './components';
+import { DialogsName } from '@/constants/dialogs';
+import withDialogActions from '@/containers/Dialog/withDialogActions';
/**
* Invoice form.
*/
function InvoiceForm({
+ // #withDialogActions
+ openDialog,
+
// #withSettings
invoiceNextNumber,
invoiceNumberPrefix,
@@ -111,7 +119,7 @@ function InvoiceForm({
from_estimate_id: estimateId,
};
// Handle the request success.
- const onSuccess = () => {
+ const onSuccess = (res) => {
AppToaster.show({
message: intl.get(
isNewMode
@@ -123,6 +131,11 @@ function InvoiceForm({
});
setSubmitting(false);
+ if (submitPayload.deliverViaMail) {
+ openDialog(DialogsName.InvoiceFormMailDeliver, {
+ invoiceId: res.data.id,
+ });
+ }
if (submitPayload.redirect) {
history.push('/invoices');
}
@@ -201,4 +214,5 @@ export default compose(
invoiceTermsConditions: invoiceSettings?.termsConditions,
})),
withCurrentOrganization(),
+ withDialogActions,
)(InvoiceForm);
diff --git a/packages/webapp/src/containers/Sales/Invoices/InvoiceForm/InvoiceFormDialogs.tsx b/packages/webapp/src/containers/Sales/Invoices/InvoiceForm/InvoiceFormDialogs.tsx
index eb0e3e0ba..fca6a8bcb 100644
--- a/packages/webapp/src/containers/Sales/Invoices/InvoiceForm/InvoiceFormDialogs.tsx
+++ b/packages/webapp/src/containers/Sales/Invoices/InvoiceForm/InvoiceFormDialogs.tsx
@@ -1,8 +1,8 @@
// @ts-nocheck
-import React from 'react';
import { useFormikContext } from 'formik';
import InvoiceNumberDialog from '@/containers/Dialogs/InvoiceNumberDialog';
import { DialogsName } from '@/constants/dialogs';
+import InvoiceFormMailDeliverDialog from './Dialogs/InvoiceFormMailDeliverDialog/InvoiceFormMailDeliverDialog';
/**
* Invoice form dialogs.
@@ -23,9 +23,14 @@ export default function InvoiceFormDialogs() {
};
return (
-
+ <>
+
+
+ >
);
}
diff --git a/packages/webapp/src/containers/Sales/Invoices/InvoiceMailDialog/InvoiceMailDialog.tsx b/packages/webapp/src/containers/Sales/Invoices/InvoiceMailDialog/InvoiceMailDialog.tsx
index 1b385b83f..02c629e7c 100644
--- a/packages/webapp/src/containers/Sales/Invoices/InvoiceMailDialog/InvoiceMailDialog.tsx
+++ b/packages/webapp/src/containers/Sales/Invoices/InvoiceMailDialog/InvoiceMailDialog.tsx
@@ -4,8 +4,8 @@ import { Dialog, DialogSuspense } from '@/components';
import withDialogRedux from '@/components/DialogReduxConnect';
import { compose } from '@/utils';
-const InvoiceMailDialogContent = React.lazy(
- () => import('./InvoiceMailDialogContent'),
+const InvoiceMailDialogBody = React.lazy(
+ () => import('./InvoiceMailDialogBody'),
);
/**
@@ -13,12 +13,7 @@ const InvoiceMailDialogContent = React.lazy(
*/
function InvoiceMailDialog({
dialogName,
- payload: {
- invoiceId = null,
-
- // Redirects to the invoices list.
- redirectToInvoicesList = false,
- },
+ payload: { invoiceId = null },
isOpen,
}) {
return (
@@ -26,16 +21,13 @@ function InvoiceMailDialog({
name={dialogName}
title={'Invoice Mail'}
isOpen={isOpen}
- canEscapeJeyClose={true}
+ canEscapeJeyClose={false}
+ isCloseButtonShown={false}
autoFocus={true}
style={{ width: 600 }}
>
-
+
);
diff --git a/packages/webapp/src/containers/Sales/Invoices/InvoiceMailDialog/InvoiceMailDialogBody.tsx b/packages/webapp/src/containers/Sales/Invoices/InvoiceMailDialog/InvoiceMailDialogBody.tsx
new file mode 100644
index 000000000..3728c60ce
--- /dev/null
+++ b/packages/webapp/src/containers/Sales/Invoices/InvoiceMailDialog/InvoiceMailDialogBody.tsx
@@ -0,0 +1,36 @@
+// @ts-nocheck
+import * as R from 'ramda';
+import withDialogActions from '@/containers/Dialog/withDialogActions';
+import InvoiceMailDialogContent, {
+ InvoiceMailDialogContentProps,
+} from './InvoiceMailDialogContent';
+import { DialogsName } from '@/constants/dialogs';
+
+export interface InvoiceMailDialogBodyProps
+ extends InvoiceMailDialogContentProps {}
+
+function InvoiceMailDialogBodyRoot({
+ invoiceId,
+ onCancelClick,
+ onFormSubmit,
+
+ // #withDialogActions
+ closeDialog,
+}: InvoiceMailDialogBodyProps) {
+ const handleCancelClick = () => {
+ closeDialog(DialogsName.InvoiceMail);
+ };
+ const handleSubmitClick = () => {
+ closeDialog(DialogsName.InvoiceMail);
+ };
+
+ return (
+
+ );
+}
+
+export default R.compose(withDialogActions)(InvoiceMailDialogBodyRoot);
diff --git a/packages/webapp/src/containers/Sales/Invoices/InvoiceMailDialog/InvoiceMailDialogContent.tsx b/packages/webapp/src/containers/Sales/Invoices/InvoiceMailDialog/InvoiceMailDialogContent.tsx
index 769a722b6..dbecb34fc 100644
--- a/packages/webapp/src/containers/Sales/Invoices/InvoiceMailDialog/InvoiceMailDialogContent.tsx
+++ b/packages/webapp/src/containers/Sales/Invoices/InvoiceMailDialog/InvoiceMailDialogContent.tsx
@@ -1,24 +1,22 @@
import { InvoiceMailDialogBoot } from './InvoiceMailDialogBoot';
import { InvoiceMailDialogForm } from './InvoiceMailDialogForm';
-interface InvoiceMailDialogContentProps {
- dialogName: string;
+export interface InvoiceMailDialogContentProps {
invoiceId: number;
-
- // Redirect to invoices list after submitting the message.
- redirectToInvoicesList?: boolean;
+ onFormSubmit?: () => void;
+ onCancelClick?: () => void;
}
export default function InvoiceMailDialogContent({
- dialogName,
invoiceId,
- redirectToInvoicesList,
+ onFormSubmit,
+ onCancelClick,
}: InvoiceMailDialogContentProps) {
return (
-
-
+
+
);
}
diff --git a/packages/webapp/src/containers/Sales/Invoices/InvoiceMailDialog/InvoiceMailDialogForm.tsx b/packages/webapp/src/containers/Sales/Invoices/InvoiceMailDialog/InvoiceMailDialogForm.tsx
index 697e8e9a1..a91c03466 100644
--- a/packages/webapp/src/containers/Sales/Invoices/InvoiceMailDialog/InvoiceMailDialogForm.tsx
+++ b/packages/webapp/src/containers/Sales/Invoices/InvoiceMailDialog/InvoiceMailDialogForm.tsx
@@ -1,12 +1,9 @@
// @ts-nocheck
import { Formik } from 'formik';
-import * as R from 'ramda';
import { Intent } from '@blueprintjs/core';
import { useInvoiceMailDialogBoot } from './InvoiceMailDialogBoot';
-import { DialogsName } from '@/constants/dialogs';
import { AppToaster } from '@/components';
import { useSendSaleInvoiceMail } from '@/hooks/query';
-import withDialogActions from '@/containers/Dialog/withDialogActions';
import { InvoiceMailDialogFormContent } from './InvoiceMailDialogFormContent';
import { InvoiceMailFormSchema } from './InvoiceMailDialogForm.schema';
import {
@@ -15,7 +12,6 @@ import {
transformMailFormToRequest,
transformMailFormToInitialValues,
} from '@/containers/SendMailNotification/utils';
-import { useHistory } from 'react-router-dom';
const initialFormValues = {
...initialMailNotificationValues,
@@ -26,13 +22,8 @@ interface InvoiceMailFormValues extends MailNotificationFormValues {
attachInvoice: boolean;
}
-function InvoiceMailDialogFormRoot({
- // #withDialogActions
- closeDialog,
-}) {
- const history = useHistory();
- const { mailOptions, saleInvoiceId, redirectToInvoicesList } =
- useInvoiceMailDialogBoot();
+export function InvoiceMailDialogForm({ onFormSubmit, onCancelClick }) {
+ const { mailOptions, saleInvoiceId } = useInvoiceMailDialogBoot();
const { mutateAsync: sendInvoiceMail } = useSendSaleInvoiceMail();
const initialValues = transformMailFormToInitialValues(
@@ -50,13 +41,8 @@ function InvoiceMailDialogFormRoot({
message: 'The mail notification has been sent successfully.',
intent: Intent.SUCCESS,
});
- closeDialog(DialogsName.InvoiceMail);
setSubmitting(false);
-
- // Redirect to the dashboard if the option was enabled.
- if (redirectToInvoicesList) {
- history.push('/invoices');
- }
+ onFormSubmit && onFormSubmit(values);
})
.catch(() => {
AppToaster.show({
@@ -68,7 +54,7 @@ function InvoiceMailDialogFormRoot({
};
// Handle the close button click.
const handleClose = () => {
- closeDialog(DialogsName.InvoiceMail);
+ onCancelClick && onCancelClick();
};
return (
@@ -81,7 +67,3 @@ function InvoiceMailDialogFormRoot({
);
}
-
-export const InvoiceMailDialogForm = R.compose(withDialogActions)(
- InvoiceMailDialogFormRoot,
-);
diff --git a/packages/webapp/src/containers/Sales/Invoices/InvoiceMailDialog/index.ts b/packages/webapp/src/containers/Sales/Invoices/InvoiceMailDialog/index.ts
index b64dcaaf3..b40bce27b 100644
--- a/packages/webapp/src/containers/Sales/Invoices/InvoiceMailDialog/index.ts
+++ b/packages/webapp/src/containers/Sales/Invoices/InvoiceMailDialog/index.ts
@@ -1 +1,2 @@
-export * from './InvoiceMailDialog';
\ No newline at end of file
+export * from './InvoiceMailDialog';
+export * from './InvoiceMailDialogContent';
\ No newline at end of file
diff --git a/packages/webapp/src/containers/Sales/Receipts/ReceiptForm/Dialogs/ReceiptFormMailDeliverDialog.tsx b/packages/webapp/src/containers/Sales/Receipts/ReceiptForm/Dialogs/ReceiptFormMailDeliverDialog.tsx
new file mode 100644
index 000000000..60f2758ff
--- /dev/null
+++ b/packages/webapp/src/containers/Sales/Receipts/ReceiptForm/Dialogs/ReceiptFormMailDeliverDialog.tsx
@@ -0,0 +1,39 @@
+// @ts-nocheck
+import React from 'react';
+import { Dialog, DialogSuspense } from '@/components';
+import withDialogRedux from '@/components/DialogReduxConnect';
+import { compose } from '@/utils';
+
+const ReceiptFormMailDeliverDialogContent = React.lazy(
+ () => import('./ReceiptFormMailDeliverDialogContent'),
+);
+
+/**
+ * Receipt mail dialog.
+ */
+function ReceiptFormMailDeliverDialog({
+ dialogName,
+ payload: { receiptId = null },
+ isOpen,
+}) {
+ return (
+
+ );
+}
+
+export default compose(withDialogRedux())(ReceiptFormMailDeliverDialog);
diff --git a/packages/webapp/src/containers/Sales/Receipts/ReceiptForm/Dialogs/ReceiptFormMailDeliverDialogContent.tsx b/packages/webapp/src/containers/Sales/Receipts/ReceiptForm/Dialogs/ReceiptFormMailDeliverDialogContent.tsx
new file mode 100644
index 000000000..4b5d31e40
--- /dev/null
+++ b/packages/webapp/src/containers/Sales/Receipts/ReceiptForm/Dialogs/ReceiptFormMailDeliverDialogContent.tsx
@@ -0,0 +1,40 @@
+// @ts-nocheck
+import * as R from 'ramda';
+import { useHistory } from 'react-router-dom';
+import withDialogActions from '@/containers/Dialog/withDialogActions';
+import ReceiptMailDialogContent from '../../ReceiptMailDialog/ReceiptMailDialogContent';
+import { DialogsName } from '@/constants/dialogs';
+
+interface ReceiptFormDeliverDialogContent {
+ receiptId: number;
+}
+
+function ReceiptFormDeliverDialogContentRoot({
+ receiptId,
+
+ // #withDialogActions
+ closeDialog,
+}: ReceiptFormDeliverDialogContent) {
+ const history = useHistory();
+
+ const handleSubmit = () => {
+ history.push('/receipts');
+ closeDialog(DialogsName.ReceiptFormMailDeliver);
+ };
+ const handleCancel = () => {
+ history.push('/receipts');
+ closeDialog(DialogsName.ReceiptFormMailDeliver);
+ };
+
+ return (
+
+ );
+}
+
+export default R.compose(withDialogActions)(
+ ReceiptFormDeliverDialogContentRoot,
+);
diff --git a/packages/webapp/src/containers/Sales/Receipts/ReceiptForm/ReceiptForm.tsx b/packages/webapp/src/containers/Sales/Receipts/ReceiptForm/ReceiptForm.tsx
index 62206bdbf..d7010d2ae 100644
--- a/packages/webapp/src/containers/Sales/Receipts/ReceiptForm/ReceiptForm.tsx
+++ b/packages/webapp/src/containers/Sales/Receipts/ReceiptForm/ReceiptForm.tsx
@@ -34,12 +34,20 @@ import {
transformFormValuesToRequest,
resetFormState,
} from './utils';
-import { ReceiptSyncAutoExRateToForm, ReceiptSyncIncrementSettingsToForm } from './components';
+import {
+ ReceiptSyncAutoExRateToForm,
+ ReceiptSyncIncrementSettingsToForm,
+} from './components';
+import withDialogActions from '@/containers/Dialog/withDialogActions';
+import { DialogsName } from '@/constants/dialogs';
/**
* Receipt form.
*/
function ReceiptForm({
+ // #withDialogActions
+ openDialog,
+
// #withSettings
receiptNextNumber,
receiptNumberPrefix,
@@ -84,10 +92,7 @@ function ReceiptForm({
}),
};
// Handle the form submit.
- const handleFormSubmit = (
- values,
- { setErrors, setSubmitting, resetForm },
- ) => {
+ const handleFormSubmit = (values, { setErrors, setSubmitting }) => {
const entries = values.entries.filter(
(item) => item.item_id && item.quantity,
);
@@ -124,6 +129,11 @@ function ReceiptForm({
if (submitPayload.resetForm) {
resetFormState();
}
+ if (submitPayload.deliverMail) {
+ openDialog(DialogsName.ReceiptFormMailDeliver, {
+ receiptId: response.data.id,
+ });
+ }
};
// Handle the request error.
@@ -179,6 +189,7 @@ function ReceiptForm({
}
export default compose(
+ withDialogActions,
withDashboardActions,
withSettings(({ receiptSettings }) => ({
receiptNextNumber: receiptSettings?.nextNumber,
diff --git a/packages/webapp/src/containers/Sales/Receipts/ReceiptForm/ReceiptFormDialogs.tsx b/packages/webapp/src/containers/Sales/Receipts/ReceiptForm/ReceiptFormDialogs.tsx
index 4fe2cb947..30477aee6 100644
--- a/packages/webapp/src/containers/Sales/Receipts/ReceiptForm/ReceiptFormDialogs.tsx
+++ b/packages/webapp/src/containers/Sales/Receipts/ReceiptForm/ReceiptFormDialogs.tsx
@@ -2,6 +2,8 @@
import React from 'react';
import { useFormikContext } from 'formik';
import ReceiptNumberDialog from '@/containers/Dialogs/ReceiptNumberDialog';
+import ReceiptFormMailDeliverDialog from './Dialogs/ReceiptFormMailDeliverDialog';
+import { DialogsName } from '@/constants/dialogs';
/**
* Receipt form dialogs.
@@ -27,6 +29,9 @@ export default function ReceiptFormDialogs() {
dialogName={'receipt-number-form'}
onConfirm={handleReceiptNumberFormConfirm}
/>
+
>
);
}
diff --git a/packages/webapp/src/containers/Sales/Receipts/ReceiptForm/ReceiptFormFloatingActions.tsx b/packages/webapp/src/containers/Sales/Receipts/ReceiptForm/ReceiptFormFloatingActions.tsx
index d8d83dfb5..4db00c3ae 100644
--- a/packages/webapp/src/containers/Sales/Receipts/ReceiptForm/ReceiptFormFloatingActions.tsx
+++ b/packages/webapp/src/containers/Sales/Receipts/ReceiptForm/ReceiptFormFloatingActions.tsx
@@ -33,7 +33,7 @@ export default function ReceiptFormFloatingActions() {
// Handle submit & close button click.
const handleSubmitCloseBtnClick = (event) => {
- setSubmitPayload({ redirect: true, status: true });
+ setSubmitPayload({ redirect: false, deliverMail: true, status: true });
submitForm();
};
diff --git a/packages/webapp/src/containers/Sales/Receipts/ReceiptMailDialog/ReceiptMailDialog.tsx b/packages/webapp/src/containers/Sales/Receipts/ReceiptMailDialog/ReceiptMailDialog.tsx
index eb68d7d37..69a0e64a9 100644
--- a/packages/webapp/src/containers/Sales/Receipts/ReceiptMailDialog/ReceiptMailDialog.tsx
+++ b/packages/webapp/src/containers/Sales/Receipts/ReceiptMailDialog/ReceiptMailDialog.tsx
@@ -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 }}
>
-
+
);
diff --git a/packages/webapp/src/containers/Sales/Receipts/ReceiptMailDialog/ReceiptMailDialogBody.tsx b/packages/webapp/src/containers/Sales/Receipts/ReceiptMailDialog/ReceiptMailDialogBody.tsx
new file mode 100644
index 000000000..fbd379b84
--- /dev/null
+++ b/packages/webapp/src/containers/Sales/Receipts/ReceiptMailDialog/ReceiptMailDialogBody.tsx
@@ -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 (
+
+ );
+}
+
+export default R.compose(withDialogActions)(ReceiptMailDialogBodyRoot);
diff --git a/packages/webapp/src/containers/Sales/Receipts/ReceiptMailDialog/ReceiptMailDialogContent.tsx b/packages/webapp/src/containers/Sales/Receipts/ReceiptMailDialog/ReceiptMailDialogContent.tsx
index 586de745c..a02966a1c 100644
--- a/packages/webapp/src/containers/Sales/Receipts/ReceiptMailDialog/ReceiptMailDialogContent.tsx
+++ b/packages/webapp/src/containers/Sales/Receipts/ReceiptMailDialog/ReceiptMailDialogContent.tsx
@@ -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 (
-
-
+
+
);
}
diff --git a/packages/webapp/src/containers/Sales/Receipts/ReceiptMailDialog/ReceiptMailDialogForm.tsx b/packages/webapp/src/containers/Sales/Receipts/ReceiptMailDialog/ReceiptMailDialogForm.tsx
index d46ea7eb0..db2808f4c 100644
--- a/packages/webapp/src/containers/Sales/Receipts/ReceiptMailDialog/ReceiptMailDialogForm.tsx
+++ b/packages/webapp/src/containers/Sales/Receipts/ReceiptMailDialog/ReceiptMailDialogForm.tsx
@@ -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 }) {
);
}
-
-export const ReceiptMailDialogForm = R.compose(withDialogActions)(
- ReceiptMailDialogFormRoot,
-);