Skip to content

Commit

Permalink
feat(webapp): showing up mail popup once saving invoice, receipt and …
Browse files Browse the repository at this point in the history
…estimate
  • Loading branch information
abouolia committed Jan 25, 2024
1 parent 760dbc6 commit 63708ae
Show file tree
Hide file tree
Showing 29 changed files with 482 additions and 138 deletions.
4 changes: 4 additions & 0 deletions packages/webapp/src/constants/dialogs.ts
Original file line number Diff line number Diff line change
Expand Up @@ -53,4 +53,8 @@ export enum DialogsName {
EstimateMail = 'estimate-mail',
ReceiptMail = 'receipt-mail',
PaymentMail = 'payment-mail',

InvoiceFormMailDeliver = 'InvoiceFormMailDeliver',
EstimateFormMailDeliver = 'EstimateFormMailDeliver',
ReceiptFormMailDeliver = 'ReceiptFormMailDeliver',
}
Original file line number Diff line number Diff line change
@@ -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 (
<Dialog
name={dialogName}
title={'Estimate Mail'}
isOpen={isOpen}
canEscapeJeyClose={false}
isCloseButtonShown={false}
autoFocus={true}
style={{ width: 600 }}
>
<DialogSuspense>
<EstimateFormMailDeliverDialogContent
dialogName={dialogName}
estimateId={estimateId}
/>
</DialogSuspense>
</Dialog>
);
}

export default compose(withDialogRedux())(EstimateFormMailDeliverDialog);
Original file line number Diff line number Diff line change
@@ -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 (
<EstimateMailDialogContent
estimateId={estimateId}
onFormSubmit={handleSubmit}
onCancelClick={handleCancel}
/>
);
}

export default R.compose(withDialogActions)(
EstimateFormDeliverDialogContentRoot,
);
Original file line number Diff line number Diff line change
Expand Up @@ -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();
};

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down Expand Up @@ -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
Expand All @@ -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 = ({
Expand Down Expand Up @@ -180,6 +190,7 @@ function EstimateForm({
}

export default compose(
withDialogActions,
withSettings(({ estimatesSettings }) => ({
estimateNextNumber: estimatesSettings?.nextNumber,
estimateNumberPrefix: estimatesSettings?.numberPrefix,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand All @@ -25,6 +27,9 @@ export default function EstimateFormDialogs() {
dialogName={'estimate-number-form'}
onConfirm={handleEstimateNumberFormConfirm}
/>
<EstimateFormMailDeliverDialog
dialogName={DialogsName.EstimateFormMailDeliver}
/>
</>
);
}
Original file line number Diff line number Diff line change
Expand Up @@ -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 (
Expand All @@ -31,11 +26,7 @@ function EstimateMailDialog({
style={{ width: 600 }}
>
<DialogSuspense>
<EstimateMailDialogContent
dialogName={dialogName}
estimateId={estimateId}
redirectToEstimatesList={redirectToEstimatesList}
/>
<EstimateMailDialogBody estimateId={estimateId} />
</DialogSuspense>
</Dialog>
);
Expand Down
Original file line number Diff line number Diff line change
@@ -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 (
<EstimateMailDialogContent
estimateId={estimateId}
onFormSubmit={handleSubmit}
onCancelClick={handleCancelClick}
/>
);
}

export default R.compose(withDialogActions)(EstimateMailDialogBodyRoot);
Original file line number Diff line number Diff line change
Expand Up @@ -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 (
<EstimateMailDialogBoot
estimateId={estimateId}
redirectToEstimatesList={redirectToEstimatesList}
>
<EstimateMailDialogForm />
<EstimateMailDialogBoot estimateId={estimateId}>
<EstimateMailDialogForm
onFormSubmit={onFormSubmit}
onCancelClick={onCancelClick}
/>
</EstimateMailDialogBoot>
);
}
Original file line number Diff line number Diff line change
Expand Up @@ -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';
Expand All @@ -26,15 +25,16 @@ interface EstimateMailFormValues extends MailNotificationFormValues {
}

function EstimateMailDialogFormRoot({
onFormSubmit,
onCancelClick,

// #withDialogClose
closeDialog,
}) {
const { mutateAsync: sendEstimateMail } = useSendSaleEstimateMail();
const { mailOptions, saleEstimateId, redirectToEstimatesList } =
useEstimateMailDialogBoot();

const history = useHistory();

const initialValues = transformMailFormToInitialValues(
mailOptions,
initialFormValues,
Expand All @@ -52,10 +52,7 @@ function EstimateMailDialogFormRoot({
});
closeDialog(DialogsName.EstimateMail);
setSubmitting(false);

if (redirectToEstimatesList) {
history.push('/estimates');
}
onFormSubmit && onFormSubmit();
})
.catch(() => {
setSubmitting(false);
Expand All @@ -64,6 +61,7 @@ function EstimateMailDialogFormRoot({
message: 'Something went wrong.',
intent: Intent.DANGER,
});
onCancelClick && onCancelClick();
});
};

Expand Down
Original file line number Diff line number Diff line change
@@ -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 (
<Dialog
name={dialogName}
title={'Invoice Mail'}
isOpen={isOpen}
canEscapeJeyClose={false}
isCloseButtonShown={false}
autoFocus={true}
style={{ width: 600 }}
>
<DialogSuspense>
<InvoiceFormMailDeliverDialogContent
dialogName={dialogName}
invoiceId={invoiceId}
/>
</DialogSuspense>
</Dialog>
);
}

export default compose(withDialogRedux())(InvoiceFormMailDeliverDialog);
Original file line number Diff line number Diff line change
@@ -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 (
<InvoiceMailDialogContent
invoiceId={invoiceId}
onFormSubmit={handleSubmit}
onCancelClick={handleCancel}
/>
);
}

export default R.compose(withDialogActions)(
InvoiceFormDeliverDialogContentRoot,
);
Loading

0 comments on commit 63708ae

Please sign in to comment.