From 7706d2992cb618f9d4b81f405726eb27bb28ea41 Mon Sep 17 00:00:00 2001 From: elforjani13 <39470382+elforjani13@users.noreply.github.com> Date: Sun, 7 Nov 2021 16:40:02 +0200 Subject: [PATCH] feat: add notify via SMS Form. --- src/components/DialogsContainer.js | 10 +++- .../NotifyContactViaSMSContent.js | 23 -------- .../NotifyContactViaSMSFormContent.js | 16 ------ .../NotifyContactViaSMSFormProvider.js | 47 ----------------- .../NotifyEstimateViaSMSDialogContent.js | 18 +++++++ .../NotifyEstimateViaSMSForm.js | 49 +++++++++++++++++ .../NotifyEstimateViaSMSFormProvider.js | 30 +++++++++++ .../NotifyEstimateViaSMSDialog/index.js | 36 +++++++++++++ .../NotifyInvoiceViaSMSDialogContent.js | 19 +++++++ .../NotifyInvoiceViaSMSForm.js} | 42 +++++---------- .../NotifyInvoiceViaSMSFormProvider.js | 35 +++++++++++++ .../index.js | 16 +++--- .../NotifyPaymentReceiveViaFormProvider.js | 33 ++++++++++++ .../NotifyPaymentReceiveViaSMSContent.js | 19 +++++++ .../NotifyPaymentReceiveViaSMSForm.js | 52 +++++++++++++++++++ .../NotifyPaymentReceiveViaSMSDialog/index.js | 34 ++++++++++++ .../NotifyReceiptViaSMSDialogContent.js | 19 +++++++ .../NotifyReceiptViaSMSForm.js | 52 +++++++++++++++++++ .../NotifyReceiptViaSMSFormProvider.js | 28 ++++++++++ .../NotifyReceiptViaSMSDialog/index.js | 35 +++++++++++++ .../EstimateDetailActionsBar.js | 12 ++++- .../InvoiceDetailActionsBar.js | 2 +- .../PaymentReceiveActionsBar.js | 16 +++++- .../ReceiptDetailActionBar.js | 13 ++++- .../NotifyViaSMS/NotifyViaSMSForm.js | 42 +++++++++++++++ .../NotifyViaSMSForm.schema.js} | 2 +- .../NotifyViaSMSFormFields.js} | 18 ++----- .../NotifyViaSMSFormFloatingActions.js} | 14 ++--- 28 files changed, 577 insertions(+), 155 deletions(-) delete mode 100644 src/containers/Dialogs/NotifyContactViaSMSDialog/NotifyContactViaSMSContent.js delete mode 100644 src/containers/Dialogs/NotifyContactViaSMSDialog/NotifyContactViaSMSFormContent.js delete mode 100644 src/containers/Dialogs/NotifyContactViaSMSDialog/NotifyContactViaSMSFormProvider.js create mode 100644 src/containers/Dialogs/NotifyEstimateViaSMSDialog/NotifyEstimateViaSMSDialogContent.js create mode 100644 src/containers/Dialogs/NotifyEstimateViaSMSDialog/NotifyEstimateViaSMSForm.js create mode 100644 src/containers/Dialogs/NotifyEstimateViaSMSDialog/NotifyEstimateViaSMSFormProvider.js create mode 100644 src/containers/Dialogs/NotifyEstimateViaSMSDialog/index.js create mode 100644 src/containers/Dialogs/NotifyInvoiceViaSMSDialog/NotifyInvoiceViaSMSDialogContent.js rename src/containers/Dialogs/{NotifyContactViaSMSDialog/NotifyContactViaSMSForm.js => NotifyInvoiceViaSMSDialog/NotifyInvoiceViaSMSForm.js} (55%) create mode 100644 src/containers/Dialogs/NotifyInvoiceViaSMSDialog/NotifyInvoiceViaSMSFormProvider.js rename src/containers/Dialogs/{NotifyContactViaSMSDialog => NotifyInvoiceViaSMSDialog}/index.js (67%) create mode 100644 src/containers/Dialogs/NotifyPaymentReceiveViaSMSDialog/NotifyPaymentReceiveViaFormProvider.js create mode 100644 src/containers/Dialogs/NotifyPaymentReceiveViaSMSDialog/NotifyPaymentReceiveViaSMSContent.js create mode 100644 src/containers/Dialogs/NotifyPaymentReceiveViaSMSDialog/NotifyPaymentReceiveViaSMSForm.js create mode 100644 src/containers/Dialogs/NotifyPaymentReceiveViaSMSDialog/index.js create mode 100644 src/containers/Dialogs/NotifyReceiptViaSMSDialog/NotifyReceiptViaSMSDialogContent.js create mode 100644 src/containers/Dialogs/NotifyReceiptViaSMSDialog/NotifyReceiptViaSMSForm.js create mode 100644 src/containers/Dialogs/NotifyReceiptViaSMSDialog/NotifyReceiptViaSMSFormProvider.js create mode 100644 src/containers/Dialogs/NotifyReceiptViaSMSDialog/index.js create mode 100644 src/containers/NotifyViaSMS/NotifyViaSMSForm.js rename src/containers/{Dialogs/NotifyContactViaSMSDialog/NotifyContactViaSMSForm.schema.js => NotifyViaSMS/NotifyViaSMSForm.schema.js} (84%) rename src/containers/{Dialogs/NotifyContactViaSMSDialog/NotifyContactViaSMSFormFields.js => NotifyViaSMS/NotifyViaSMSFormFields.js} (87%) rename src/containers/{Dialogs/NotifyContactViaSMSDialog/NotifyContactViaSMSFormFloatingActions.js => NotifyViaSMS/NotifyViaSMSFormFloatingActions.js} (77%) diff --git a/src/components/DialogsContainer.js b/src/components/DialogsContainer.js index 67172eba0..6f42dff69 100644 --- a/src/components/DialogsContainer.js +++ b/src/components/DialogsContainer.js @@ -20,7 +20,10 @@ import ReceiptPdfPreviewDialog from '../containers/Dialogs/ReceiptPdfPreviewDial import MoneyInDialog from '../containers/Dialogs/MoneyInDialog'; import MoneyOutDialog from '../containers/Dialogs/MoneyOutDialog'; import BadDebtDialog from '../containers/Dialogs/BadDebtDialog'; -import NotifyContactViaSMSDialog from '../containers/Dialogs/NotifyContactViaSMSDialog'; +import NotifyInvoiceViaSMSDialog from '../containers/Dialogs/NotifyInvoiceViaSMSDialog'; +import NotifyReceiptViaSMSDialog from '../containers/Dialogs/NotifyReceiptViaSMSDialog'; +import NotifyEstimateViaSMSDialog from '../containers/Dialogs/NotifyEstimateViaSMSDialog'; +import NotifyPaymentReceiveViaSMSDialog from '../containers/Dialogs/NotifyPaymentReceiveViaSMSDialog' import SMSMessageDialog from '../containers/Dialogs/SMSMessageDialog'; /** @@ -47,7 +50,10 @@ export default function DialogsContainer() { - + + + + diff --git a/src/containers/Dialogs/NotifyContactViaSMSDialog/NotifyContactViaSMSContent.js b/src/containers/Dialogs/NotifyContactViaSMSDialog/NotifyContactViaSMSContent.js deleted file mode 100644 index 669cb9527..000000000 --- a/src/containers/Dialogs/NotifyContactViaSMSDialog/NotifyContactViaSMSContent.js +++ /dev/null @@ -1,23 +0,0 @@ -import React from 'react'; - -import 'style/pages/NotifyConactViaSMS/NotifyConactViaSMSDialog.scss'; -import { NotifyContactViaSMSFormProvider } from './NotifyContactViaSMSFormProvider'; -import NotifyContactViaSMSForm from './NotifyContactViaSMSForm'; - -/** - * Notify contact via SMS. - */ -export default function NotifyContactViaSMSContent({ - // #ownProps - dialogName, - invoice, -}) { - return ( - - - - ); -} diff --git a/src/containers/Dialogs/NotifyContactViaSMSDialog/NotifyContactViaSMSFormContent.js b/src/containers/Dialogs/NotifyContactViaSMSDialog/NotifyContactViaSMSFormContent.js deleted file mode 100644 index 336306f34..000000000 --- a/src/containers/Dialogs/NotifyContactViaSMSDialog/NotifyContactViaSMSFormContent.js +++ /dev/null @@ -1,16 +0,0 @@ -import React from 'react'; -import { Form } from 'formik'; - -import NotifyContactViaSMSFormFields from './NotifyContactViaSMSFormFields'; -import NotifyContactViaSMSFormFloatingActions from './NotifyContactViaSMSFormFloatingActions'; -/** - * Nofity contact via SMS form content. - */ -export default function NotifyContactViaSMSFormContent() { - return ( -
- - - - ); -} diff --git a/src/containers/Dialogs/NotifyContactViaSMSDialog/NotifyContactViaSMSFormProvider.js b/src/containers/Dialogs/NotifyContactViaSMSDialog/NotifyContactViaSMSFormProvider.js deleted file mode 100644 index 962ac8921..000000000 --- a/src/containers/Dialogs/NotifyContactViaSMSDialog/NotifyContactViaSMSFormProvider.js +++ /dev/null @@ -1,47 +0,0 @@ -import React from 'react'; -import { DialogContent } from 'components'; -import { - useInvoice, - useCreateNotifyInvoiceBySMS, - useInvocieSMSDetails, -} from 'hooks/query'; - -const NotifyContactViaSMSContext = React.createContext(); - -/** - * Notify contact via SMS provider. - */ -function NotifyContactViaSMSFormProvider({ invoiceId, dialogName, ...props }) { - // Handle fetch invoice data. - const { data: invoice, isLoading: isInvoiceLoading } = useInvoice(invoiceId, { - enabled: !!invoiceId, - }); - - const { data: invoiceSMSDetail, isLoading: isInvoiceSMSDetailLoading } = - useInvocieSMSDetails(invoiceId, { - enabled: !!invoiceId, - }); - - // Create notfiy invoice by sms mutations. - const { mutateAsync: createNotifyInvoiceBySMSMutate } = - useCreateNotifyInvoiceBySMS(); - - // State provider. - const provider = { - invoiceId, - invoiceSMSDetail, - dialogName, - createNotifyInvoiceBySMSMutate, - }; - - return ( - - - - ); -} - -const useNotifyContactViaSMSContext = () => - React.useContext(NotifyContactViaSMSContext); - -export { NotifyContactViaSMSFormProvider, useNotifyContactViaSMSContext }; diff --git a/src/containers/Dialogs/NotifyEstimateViaSMSDialog/NotifyEstimateViaSMSDialogContent.js b/src/containers/Dialogs/NotifyEstimateViaSMSDialog/NotifyEstimateViaSMSDialogContent.js new file mode 100644 index 000000000..6384dcc1e --- /dev/null +++ b/src/containers/Dialogs/NotifyEstimateViaSMSDialog/NotifyEstimateViaSMSDialogContent.js @@ -0,0 +1,18 @@ +import React from 'react'; +import { NotifyEstimateViaSMSFormProvider } from './NotifyEstimateViaSMSFormProvider'; +import NotifyEstimateViaSMSForm from './NotifyEstimateViaSMSForm'; + +export default function NotifyEstimateViaSMSDialogContent({ + // #ownProps + dialogName, + estimate, +}) { + return ( + + + + ); +} diff --git a/src/containers/Dialogs/NotifyEstimateViaSMSDialog/NotifyEstimateViaSMSForm.js b/src/containers/Dialogs/NotifyEstimateViaSMSDialog/NotifyEstimateViaSMSForm.js new file mode 100644 index 000000000..5019bad7e --- /dev/null +++ b/src/containers/Dialogs/NotifyEstimateViaSMSDialog/NotifyEstimateViaSMSForm.js @@ -0,0 +1,49 @@ +import React from 'react'; +import intl from 'react-intl-universal'; + +import { Intent } from '@blueprintjs/core'; +import { AppToaster } from 'components'; + +import NotifyViaSMSForm from '../../NotifyViaSMS/NotifyViaSMSForm'; +import { useEstimateViaSMSContext } from './NotifyEstimateViaSMSFormProvider'; + +import withDialogActions from 'containers/Dialog/withDialogActions'; +import { compose } from 'utils'; + +function NotifyEstimateViaSMSForm({ + // #withDialogActions + closeDialog, +}) { + const { dialogName, estimateId } = useEstimateViaSMSContext(); + + // Handles the form submit. + const handleFormSubmit = (values, { setSubmitting, setErrors }) => { + // Handle request response success. + const onSuccess = (response) => { + AppToaster.show({ + message: intl.get('notify_via_sms.dialog.success_message'), + intent: Intent.SUCCESS, + }); + closeDialog(dialogName); + }; + + // Handle request response errors. + const onError = ({ + response: { + data: { errors }, + }, + }) => { + setSubmitting(false); + }; + }; + + return ( + + ); +} + +export default compose(withDialogActions)(NotifyEstimateViaSMSForm); diff --git a/src/containers/Dialogs/NotifyEstimateViaSMSDialog/NotifyEstimateViaSMSFormProvider.js b/src/containers/Dialogs/NotifyEstimateViaSMSDialog/NotifyEstimateViaSMSFormProvider.js new file mode 100644 index 000000000..5f3d8d38e --- /dev/null +++ b/src/containers/Dialogs/NotifyEstimateViaSMSDialog/NotifyEstimateViaSMSFormProvider.js @@ -0,0 +1,30 @@ +import React from 'react'; +import { DialogContent } from 'components'; +// import { } from 'hooks/query'; + +const NotifyEstimateViaSMSContext = React.createContext(); + +function NotifyEstimateViaSMSFormProvider({ + estimateId, + dialogName, + ...props +}) { + // State provider. + const provider = { + estimateId, + dialogName, + }; + + return ( + + + + ); +} + +const useEstimateViaSMSContext = () => + React.useContext(NotifyEstimateViaSMSContext); + +export { NotifyEstimateViaSMSFormProvider, useEstimateViaSMSContext }; diff --git a/src/containers/Dialogs/NotifyEstimateViaSMSDialog/index.js b/src/containers/Dialogs/NotifyEstimateViaSMSDialog/index.js new file mode 100644 index 000000000..a935e5852 --- /dev/null +++ b/src/containers/Dialogs/NotifyEstimateViaSMSDialog/index.js @@ -0,0 +1,36 @@ +import React from 'react'; + +import { FormattedMessage as T } from 'components'; +import { Dialog, DialogSuspense } from 'components'; +import withDialogRedux from 'components/DialogReduxConnect'; +import { compose } from 'utils'; + +const NotifyEstimateViaSMSDialogContent = React.lazy(() => + import('./NotifyEstimateViaSMSDialogContent'), +); + +function NotifyEstimateViaSMSDialog({ + dialogName, + payload: { estimateId }, + isOpen, +}) { + return ( + } + isOpen={isOpen} + canEscapeJeyClose={true} + autoFocus={true} + className={'dialog--notify-vis-sms'} + > + + + + + ); +} + +export default compose(withDialogRedux())(NotifyEstimateViaSMSDialog); diff --git a/src/containers/Dialogs/NotifyInvoiceViaSMSDialog/NotifyInvoiceViaSMSDialogContent.js b/src/containers/Dialogs/NotifyInvoiceViaSMSDialog/NotifyInvoiceViaSMSDialogContent.js new file mode 100644 index 000000000..88f75332d --- /dev/null +++ b/src/containers/Dialogs/NotifyInvoiceViaSMSDialog/NotifyInvoiceViaSMSDialogContent.js @@ -0,0 +1,19 @@ +import React from 'react'; + +import { NotifyInvoiceViaSMSFormProvider } from './NotifyInvoiceViaSMSFormProvider'; +import NotifyInvoiceViaSMSForm from './NotifyInvoiceViaSMSForm'; + +export default function NotifyInvoiceViaSMSDialogContent({ + // #ownProps + dialogName, + invoice, +}) { + return ( + + + + ); +} diff --git a/src/containers/Dialogs/NotifyContactViaSMSDialog/NotifyContactViaSMSForm.js b/src/containers/Dialogs/NotifyInvoiceViaSMSDialog/NotifyInvoiceViaSMSForm.js similarity index 55% rename from src/containers/Dialogs/NotifyContactViaSMSDialog/NotifyContactViaSMSForm.js rename to src/containers/Dialogs/NotifyInvoiceViaSMSDialog/NotifyInvoiceViaSMSForm.js index c411563c1..0f2ae70fc 100644 --- a/src/containers/Dialogs/NotifyContactViaSMSDialog/NotifyContactViaSMSForm.js +++ b/src/containers/Dialogs/NotifyInvoiceViaSMSDialog/NotifyInvoiceViaSMSForm.js @@ -1,42 +1,28 @@ import React from 'react'; import intl from 'react-intl-universal'; -import { Formik } from 'formik'; import { Intent } from '@blueprintjs/core'; - import { AppToaster } from 'components'; -import { CreateNotifyContactViaSMSFormSchema } from './NotifyContactViaSMSForm.schema'; -import NotifyContactViaSMSFormContent from './NotifyContactViaSMSFormContent'; +import NotifyViaSMSForm from '../../NotifyViaSMS/NotifyViaSMSForm'; +import { useNotifyInvoiceViaSMSContext } from './NotifyInvoiceViaSMSFormProvider'; import withDialogActions from 'containers/Dialog/withDialogActions'; +import { compose } from 'utils'; -import { useNotifyContactViaSMSContext } from './NotifyContactViaSMSFormProvider'; - -import { transformToForm, compose } from 'utils'; - -const defaultInitialValues = { - customer_name: '', - customer_personal_phone: '', - sms_message: '', -}; - -function NotifyContactViaSMSForm({ +/** + * Notify Invoice Via SMS Form. + */ +function NotifyInvoiceViaSMSForm({ // #withDialogActions closeDialog, }) { const { + createNotifyInvoiceBySMSMutate, invoiceId, invoiceSMSDetail, dialogName, - createNotifyInvoiceBySMSMutate, - } = useNotifyContactViaSMSContext(); - - // Initial form values - const initialValues = { - ...defaultInitialValues, - ...transformToForm(invoiceSMSDetail, defaultInitialValues), - }; + } = useNotifyInvoiceViaSMSContext(); // Handles the form submit. const handleFormSubmit = (values, { setSubmitting, setErrors }) => { @@ -63,12 +49,12 @@ function NotifyContactViaSMSForm({ }; return ( - ); } -export default compose(withDialogActions)(NotifyContactViaSMSForm); + +export default compose(withDialogActions)(NotifyInvoiceViaSMSForm); diff --git a/src/containers/Dialogs/NotifyInvoiceViaSMSDialog/NotifyInvoiceViaSMSFormProvider.js b/src/containers/Dialogs/NotifyInvoiceViaSMSDialog/NotifyInvoiceViaSMSFormProvider.js new file mode 100644 index 000000000..4793db09a --- /dev/null +++ b/src/containers/Dialogs/NotifyInvoiceViaSMSDialog/NotifyInvoiceViaSMSFormProvider.js @@ -0,0 +1,35 @@ +import React from 'react'; +import { DialogContent } from 'components'; +import { useCreateNotifyInvoiceBySMS, useInvocieSMSDetails } from 'hooks/query'; + +const NotifyInvoiceViaSMSContext = React.createContext(); + +function NotifyInvoiceViaSMSFormProvider({ invoiceId, dialogName, ...props }) { + const { data: invoiceSMSDetail, isLoading: isInvoiceSMSDetailLoading } = + useInvocieSMSDetails(invoiceId, { + enabled: !!invoiceId, + }); + + // Create notfiy invoice by sms mutations. + const { mutateAsync: createNotifyInvoiceBySMSMutate } = + useCreateNotifyInvoiceBySMS(); + + // State provider. + const provider = { + invoiceId, + invoiceSMSDetail, + dialogName, + createNotifyInvoiceBySMSMutate, + }; + + return ( + + + + ); +} + +const useNotifyInvoiceViaSMSContext = () => + React.useContext(NotifyInvoiceViaSMSContext); + +export { NotifyInvoiceViaSMSFormProvider, useNotifyInvoiceViaSMSContext }; diff --git a/src/containers/Dialogs/NotifyContactViaSMSDialog/index.js b/src/containers/Dialogs/NotifyInvoiceViaSMSDialog/index.js similarity index 67% rename from src/containers/Dialogs/NotifyContactViaSMSDialog/index.js rename to src/containers/Dialogs/NotifyInvoiceViaSMSDialog/index.js index 64240e927..19ae087b8 100644 --- a/src/containers/Dialogs/NotifyContactViaSMSDialog/index.js +++ b/src/containers/Dialogs/NotifyInvoiceViaSMSDialog/index.js @@ -3,16 +3,13 @@ import React from 'react'; import { FormattedMessage as T } from 'components'; import { Dialog, DialogSuspense } from 'components'; import withDialogRedux from 'components/DialogReduxConnect'; -import { compose } from 'redux'; +import { compose } from 'utils'; -const NotifyContactViaSMSDialogContent = React.lazy(() => - import('./NotifyContactViaSMSContent'), +const NotifyInvoiceViaSMSDialogContent = React.lazy(() => + import('./NotifyInvoiceViaSMSDialogContent'), ); -/** - * Notify contact via SMS. - */ -function NotifyContactViaSMSDialog({ +function NotifyInvoiceViaSMSDialog({ dialogName, payload: { invoiceId }, isOpen, @@ -27,7 +24,7 @@ function NotifyContactViaSMSDialog({ className={'dialog--notify-vis-sms'} > - @@ -35,5 +32,4 @@ function NotifyContactViaSMSDialog({ ); } - -export default compose(withDialogRedux())(NotifyContactViaSMSDialog); +export default compose(withDialogRedux())(NotifyInvoiceViaSMSDialog); diff --git a/src/containers/Dialogs/NotifyPaymentReceiveViaSMSDialog/NotifyPaymentReceiveViaFormProvider.js b/src/containers/Dialogs/NotifyPaymentReceiveViaSMSDialog/NotifyPaymentReceiveViaFormProvider.js new file mode 100644 index 000000000..9ee75ecf8 --- /dev/null +++ b/src/containers/Dialogs/NotifyPaymentReceiveViaSMSDialog/NotifyPaymentReceiveViaFormProvider.js @@ -0,0 +1,33 @@ +import React from 'react'; +import { DialogContent } from 'components'; +// import { useCreateNotifyInvoiceBySMS, useInvocieSMSDetails } from 'hooks/query'; + +const NotifyPaymentReceiveViaSMSContext = React.createContext(); + +function NotifyPaymentReceiveViaFormProvider({ + paymentReceiveId, + dialogName, + ...props +}) { + // State provider. + const provider = { + paymentReceiveId, + dialogName, + }; + + return ( + + + + ); +} + +const useNotifyPaymentReceiveViaSMSContext = () => + React.useContext(NotifyPaymentReceiveViaSMSContext); + +export { + NotifyPaymentReceiveViaFormProvider, + useNotifyPaymentReceiveViaSMSContext, +}; diff --git a/src/containers/Dialogs/NotifyPaymentReceiveViaSMSDialog/NotifyPaymentReceiveViaSMSContent.js b/src/containers/Dialogs/NotifyPaymentReceiveViaSMSDialog/NotifyPaymentReceiveViaSMSContent.js new file mode 100644 index 000000000..8b1f49934 --- /dev/null +++ b/src/containers/Dialogs/NotifyPaymentReceiveViaSMSDialog/NotifyPaymentReceiveViaSMSContent.js @@ -0,0 +1,19 @@ +import React from 'react'; + +import { NotifyPaymentReceiveViaFormProvider } from './NotifyPaymentReceiveViaFormProvider'; +import NotifyPaymentReceiveViaSMSForm from './NotifyPaymentReceiveViaSMSForm'; + +export default function NotifyPaymentReceiveViaSMSContent({ + // #ownProps + dialogName, + paymentReceive, +}) { + return ( + + + + ); +} diff --git a/src/containers/Dialogs/NotifyPaymentReceiveViaSMSDialog/NotifyPaymentReceiveViaSMSForm.js b/src/containers/Dialogs/NotifyPaymentReceiveViaSMSDialog/NotifyPaymentReceiveViaSMSForm.js new file mode 100644 index 000000000..0db3d6100 --- /dev/null +++ b/src/containers/Dialogs/NotifyPaymentReceiveViaSMSDialog/NotifyPaymentReceiveViaSMSForm.js @@ -0,0 +1,52 @@ +import React from 'react'; +import intl from 'react-intl-universal'; + +import { Intent } from '@blueprintjs/core'; +import { AppToaster } from 'components'; + +import NotifyViaSMSForm from '../../NotifyViaSMS/NotifyViaSMSForm'; +import { useNotifyPaymentReceiveViaSMSContext } from './NotifyPaymentReceiveViaFormProvider'; + +import withDialogActions from 'containers/Dialog/withDialogActions'; +import { compose } from 'utils'; + +/** + * Notify Payment Recive Via SMS Form. + */ +function NotifyPaymentReceiveViaSMSForm({ + // #withDialogActions + closeDialog, +}) { + const { dialogName, paymentReceiveId } = + useNotifyPaymentReceiveViaSMSContext(); + + // Handles the form submit. + const handleFormSubmit = (values, { setSubmitting, setErrors }) => { + // Handle request response success. + const onSuccess = (response) => { + AppToaster.show({ + message: intl.get('notify_via_sms.dialog.success_message'), + intent: Intent.SUCCESS, + }); + closeDialog(dialogName); + }; + + // Handle request response errors. + const onError = ({ + response: { + data: { errors }, + }, + }) => { + setSubmitting(false); + }; + }; + + return ( + + ); +} +export default compose(withDialogActions)(NotifyPaymentReceiveViaSMSForm); diff --git a/src/containers/Dialogs/NotifyPaymentReceiveViaSMSDialog/index.js b/src/containers/Dialogs/NotifyPaymentReceiveViaSMSDialog/index.js new file mode 100644 index 000000000..26f2a4df3 --- /dev/null +++ b/src/containers/Dialogs/NotifyPaymentReceiveViaSMSDialog/index.js @@ -0,0 +1,34 @@ +import React from 'react'; +import { FormattedMessage as T } from 'components'; +import { Dialog, DialogSuspense } from 'components'; +import withDialogRedux from 'components/DialogReduxConnect'; +import { compose } from 'utils'; + +const NotifyPaymentReceiveViaSMSDialogContent = React.lazy(() => + import('./NotifyPaymentReceiveViaSMSContent'), +); + +function NotifyPaymentReciveViaSMSDialog({ + dialogName, + payload: { paymentReceiveId }, + isOpen, +}) { + return ( + } + isOpen={isOpen} + canEscapeJeyClose={true} + autoFocus={true} + className={'dialog--notify-vis-sms'} + > + + + + + ); +} +export default compose(withDialogRedux())(NotifyPaymentReciveViaSMSDialog); diff --git a/src/containers/Dialogs/NotifyReceiptViaSMSDialog/NotifyReceiptViaSMSDialogContent.js b/src/containers/Dialogs/NotifyReceiptViaSMSDialog/NotifyReceiptViaSMSDialogContent.js new file mode 100644 index 000000000..7f4e40e04 --- /dev/null +++ b/src/containers/Dialogs/NotifyReceiptViaSMSDialog/NotifyReceiptViaSMSDialogContent.js @@ -0,0 +1,19 @@ +import React from 'react'; + +import { NotifyReceiptViaSMSFormProvider } from './NotifyReceiptViaSMSFormProvider'; +import NotifyReceiptViaSMSForm from './NotifyReceiptViaSMSForm'; + +export default function NotifyReceiptViaSMSDialogContent({ + // #ownProps + dialogName, + receipt, +}) { + return ( + + + + ); +} diff --git a/src/containers/Dialogs/NotifyReceiptViaSMSDialog/NotifyReceiptViaSMSForm.js b/src/containers/Dialogs/NotifyReceiptViaSMSDialog/NotifyReceiptViaSMSForm.js new file mode 100644 index 000000000..5ca513ce9 --- /dev/null +++ b/src/containers/Dialogs/NotifyReceiptViaSMSDialog/NotifyReceiptViaSMSForm.js @@ -0,0 +1,52 @@ +import React from 'react'; +import intl from 'react-intl-universal'; + +import { Intent } from '@blueprintjs/core'; +import { AppToaster } from 'components'; + +import NotifyViaSMSForm from '../../NotifyViaSMS/NotifyViaSMSForm'; +import { useNotifyReceiptViaSMSContext } from './NotifyReceiptViaSMSFormProvider'; + +import withDialogActions from 'containers/Dialog/withDialogActions'; +import { compose } from 'utils'; + +/** + * Notify Receipt Via SMS Form. + */ +function NotifyReceiptViaSMSForm({ + // #withDialogActions + closeDialog, +}) { + const { dialogName, receiptId } = useNotifyReceiptViaSMSContext(); + + // Handles the form submit. + const handleFormSubmit = (values, { setSubmitting, setErrors }) => { + // Handle request response success. + const onSuccess = (response) => { + AppToaster.show({ + message: intl.get('notify_via_sms.dialog.success_message'), + intent: Intent.SUCCESS, + }); + closeDialog(dialogName); + }; + + // Handle request response errors. + const onError = ({ + response: { + data: { errors }, + }, + }) => { + setSubmitting(false); + }; + }; + + return ( + + ); +} + +export default compose(withDialogActions)(NotifyReceiptViaSMSForm); diff --git a/src/containers/Dialogs/NotifyReceiptViaSMSDialog/NotifyReceiptViaSMSFormProvider.js b/src/containers/Dialogs/NotifyReceiptViaSMSDialog/NotifyReceiptViaSMSFormProvider.js new file mode 100644 index 000000000..fa8dce2b9 --- /dev/null +++ b/src/containers/Dialogs/NotifyReceiptViaSMSDialog/NotifyReceiptViaSMSFormProvider.js @@ -0,0 +1,28 @@ +import React from 'react'; +import { DialogContent } from 'components'; +// import { useCreateNotifyInvoiceBySMS, useInvocieSMSDetails } from 'hooks/query'; + +const NotifyReceiptViaSMSContext = React.createContext(); + +function NotifyReceiptViaSMSFormProvider({ receiptId, dialogName, ...props }) { + // Create notfiy receipt via sms mutations. + + // State provider. + const provider = { + receiptId, + dialogName, + }; + + return ( + + + + ); +} + +const useNotifyReceiptViaSMSContext = () => + React.useContext(NotifyReceiptViaSMSContext); + +export { NotifyReceiptViaSMSFormProvider, useNotifyReceiptViaSMSContext }; diff --git a/src/containers/Dialogs/NotifyReceiptViaSMSDialog/index.js b/src/containers/Dialogs/NotifyReceiptViaSMSDialog/index.js new file mode 100644 index 000000000..67ae48813 --- /dev/null +++ b/src/containers/Dialogs/NotifyReceiptViaSMSDialog/index.js @@ -0,0 +1,35 @@ +import React from 'react'; +import { FormattedMessage as T } from 'components'; +import { Dialog, DialogSuspense } from 'components'; +import withDialogRedux from 'components/DialogReduxConnect'; +import { compose } from 'utils'; + +const NotifyReceiptViaSMSDialogContent = React.lazy(() => + import('./NotifyReceiptViaSMSDialogContent'), +); + +function NotifyReceiptViaSMSDialog({ + dialogName, + payload: { receiptId }, + isOpen, +}) { + return ( + } + isOpen={isOpen} + canEscapeJeyClose={true} + autoFocus={true} + className={'dialog--notify-vis-sms'} + > + + + + + ); +} + +export default compose(withDialogRedux())(NotifyReceiptViaSMSDialog); diff --git a/src/containers/Drawers/EstimateDetailDrawer/EstimateDetailActionsBar.js b/src/containers/Drawers/EstimateDetailDrawer/EstimateDetailActionsBar.js index 0c468be41..1a7c3c051 100644 --- a/src/containers/Drawers/EstimateDetailDrawer/EstimateDetailActionsBar.js +++ b/src/containers/Drawers/EstimateDetailDrawer/EstimateDetailActionsBar.js @@ -15,7 +15,7 @@ import withDialogActions from 'containers/Dialog/withDialogActions'; import withAlertsActions from 'containers/Alert/withAlertActions'; import withDrawerActions from 'containers/Drawer/withDrawerActions'; -import { Icon, FormattedMessage as T } from 'components'; +import { Icon, FormattedMessage as T, MoreMenuItems } from 'components'; import { compose } from 'utils'; @@ -51,6 +51,10 @@ function EstimateDetailActionsBar({ const handlePrintEstimate = () => { openDialog('estimate-pdf-preview', { estimateId }); }; + // Handle notify via SMS. + const handleNotifyViaSMS = () => { + openDialog('notify-estimate-via-sms', { estimateId }); + }; return ( @@ -75,6 +79,12 @@ function EstimateDetailActionsBar({ intent={Intent.DANGER} onClick={handleDeleteEstimate} /> + + ); diff --git a/src/containers/Drawers/InvoiceDetailDrawer/InvoiceDetailActionsBar.js b/src/containers/Drawers/InvoiceDetailDrawer/InvoiceDetailActionsBar.js index 1aeba690e..b4fa903b7 100644 --- a/src/containers/Drawers/InvoiceDetailDrawer/InvoiceDetailActionsBar.js +++ b/src/containers/Drawers/InvoiceDetailDrawer/InvoiceDetailActionsBar.js @@ -67,7 +67,7 @@ function InvoiceDetailActionsBar({ }; // Handle notify via SMS. const handleNotifyViaSMS = () => { - openDialog('notify-via-sms', { invoiceId }); + openDialog('notify-invoice-via-sms', { invoiceId }); }; // Handle cancele write-off invoice. diff --git a/src/containers/Drawers/PaymentReceiveDetailDrawer/PaymentReceiveActionsBar.js b/src/containers/Drawers/PaymentReceiveDetailDrawer/PaymentReceiveActionsBar.js index 1f4939feb..94bb19c65 100644 --- a/src/containers/Drawers/PaymentReceiveDetailDrawer/PaymentReceiveActionsBar.js +++ b/src/containers/Drawers/PaymentReceiveDetailDrawer/PaymentReceiveActionsBar.js @@ -16,7 +16,7 @@ import withDialogActions from 'containers/Dialog/withDialogActions'; import withAlertsActions from 'containers/Alert/withAlertActions'; import withDrawerActions from 'containers/Drawer/withDrawerActions'; -import { Icon, FormattedMessage as T } from 'components'; +import { Icon, FormattedMessage as T, MoreMenuItems } from 'components'; import { compose } from 'utils'; @@ -29,6 +29,9 @@ function PaymentReceiveActionsBar({ // #withDrawerActions closeDrawer, + + // #withDialogActions + openDialog, }) { const history = useHistory(); @@ -46,6 +49,11 @@ function PaymentReceiveActionsBar({ openAlert('payment-receive-delete', { paymentReceiveId }); }; + // Handle notify via SMS. + const handleNotifyViaSMS = () => { + openDialog('notify-payment-via-sms', { paymentReceiveId }); + }; + return ( @@ -63,6 +71,12 @@ function PaymentReceiveActionsBar({ intent={Intent.DANGER} onClick={handleDeletePaymentReceive} /> + + ); diff --git a/src/containers/Drawers/ReceiptDetailDrawer/ReceiptDetailActionBar.js b/src/containers/Drawers/ReceiptDetailDrawer/ReceiptDetailActionBar.js index b6e17c191..608805a00 100644 --- a/src/containers/Drawers/ReceiptDetailDrawer/ReceiptDetailActionBar.js +++ b/src/containers/Drawers/ReceiptDetailDrawer/ReceiptDetailActionBar.js @@ -14,7 +14,7 @@ import withDialogActions from 'containers/Dialog/withDialogActions'; import withAlertsActions from 'containers/Alert/withAlertActions'; import withDrawerActions from 'containers/Drawer/withDrawerActions'; -import { Icon, FormattedMessage as T } from 'components'; +import { Icon, FormattedMessage as T, MoreMenuItems } from 'components'; import { useReceiptDetailDrawerContext } from './ReceiptDetailDrawerProvider'; import { safeCallback, compose } from 'utils'; @@ -46,6 +46,11 @@ function ReceiptDetailActionBar({ const onPrintReceipt = () => { openDialog('receipt-pdf-preview', { receiptId }); }; + + // Handle notify via SMS. + const handleNotifyViaSMS = () => { + openDialog('notify-receipt-via-sms', { receiptId }); + }; return ( @@ -69,6 +74,12 @@ function ReceiptDetailActionBar({ intent={Intent.DANGER} onClick={safeCallback(onDeleteReceipt)} /> + + ); diff --git a/src/containers/NotifyViaSMS/NotifyViaSMSForm.js b/src/containers/NotifyViaSMS/NotifyViaSMSForm.js new file mode 100644 index 000000000..021bd7724 --- /dev/null +++ b/src/containers/NotifyViaSMS/NotifyViaSMSForm.js @@ -0,0 +1,42 @@ +import React from 'react'; +import { Formik, Form } from 'formik'; + +import 'style/pages/NotifyConactViaSMS/NotifyConactViaSMSDialog.scss'; + +import { CreateNotifyViaSMSFormSchema } from './NotifyViaSMSForm.schema'; +import NotifyViaSMSFormFields from './NotifyViaSMSFormFields'; +import NotifyViaSMSFormFloatingActions from './NotifyViaSMSFormFloatingActions'; + +import { transformToForm, saveInvoke } from 'utils'; + +const defaultInitialValues = { + customer_name: '', + customer_personal_phone: '', + sms_message: '', +}; + +/** + * Notify Via SMS Form. + */ +function NotifyViaSMSForm({ onSubmit, NotificationDetail, NotificationName }) { + // Initial form values + const initialValues = { + ...defaultInitialValues, + ...transformToForm(NotificationDetail, defaultInitialValues), + }; + + return ( + +
+ + + +
+ ); +} + +export default NotifyViaSMSForm; diff --git a/src/containers/Dialogs/NotifyContactViaSMSDialog/NotifyContactViaSMSForm.schema.js b/src/containers/NotifyViaSMS/NotifyViaSMSForm.schema.js similarity index 84% rename from src/containers/Dialogs/NotifyContactViaSMSDialog/NotifyContactViaSMSForm.schema.js rename to src/containers/NotifyViaSMS/NotifyViaSMSForm.schema.js index b624980db..f32e4a3a2 100644 --- a/src/containers/Dialogs/NotifyContactViaSMSDialog/NotifyContactViaSMSForm.schema.js +++ b/src/containers/NotifyViaSMS/NotifyViaSMSForm.schema.js @@ -8,4 +8,4 @@ const Schema = Yup.object().shape({ sms_message: Yup.string().required().trim().max(DATATYPES_LENGTH.TEXT), }); -export const CreateNotifyContactViaSMSFormSchema = Schema; +export const CreateNotifyViaSMSFormSchema = Schema; diff --git a/src/containers/Dialogs/NotifyContactViaSMSDialog/NotifyContactViaSMSFormFields.js b/src/containers/NotifyViaSMS/NotifyViaSMSFormFields.js similarity index 87% rename from src/containers/Dialogs/NotifyContactViaSMSDialog/NotifyContactViaSMSFormFields.js rename to src/containers/NotifyViaSMS/NotifyViaSMSFormFields.js index baf1f7a04..59d79cca3 100644 --- a/src/containers/Dialogs/NotifyContactViaSMSDialog/NotifyContactViaSMSFormFields.js +++ b/src/containers/NotifyViaSMS/NotifyViaSMSFormFields.js @@ -2,25 +2,13 @@ import React from 'react'; import { FastField, ErrorMessage } from 'formik'; import { FormattedMessage as T } from 'components'; -import { useAutofocus } from 'hooks'; -import { - Classes, - FormGroup, - TextArea, - Intent, - InputGroup, -} from '@blueprintjs/core'; +import { Classes, FormGroup, TextArea, InputGroup } from '@blueprintjs/core'; import classNames from 'classnames'; import { CLASSES } from 'common/classes'; import { inputIntent } from 'utils'; import { FieldRequiredHint } from 'components'; -import { useNotifyContactViaSMSContext } from './NotifyContactViaSMSFormProvider'; - -/** - * Notify contact via SMS fields. - */ -function NotifyContactViaSMSFormFields() { +function NotifyViaSMSFormFields() { return (
{/* ----------- Send Notification to ----------- */} @@ -88,4 +76,4 @@ function NotifyContactViaSMSFormFields() { ); } -export default NotifyContactViaSMSFormFields; +export default NotifyViaSMSFormFields; diff --git a/src/containers/Dialogs/NotifyContactViaSMSDialog/NotifyContactViaSMSFormFloatingActions.js b/src/containers/NotifyViaSMS/NotifyViaSMSFormFloatingActions.js similarity index 77% rename from src/containers/Dialogs/NotifyContactViaSMSDialog/NotifyContactViaSMSFormFloatingActions.js rename to src/containers/NotifyViaSMS/NotifyViaSMSFormFloatingActions.js index 8b785bbf1..899125f5f 100644 --- a/src/containers/Dialogs/NotifyContactViaSMSDialog/NotifyContactViaSMSFormFloatingActions.js +++ b/src/containers/NotifyViaSMS/NotifyViaSMSFormFloatingActions.js @@ -1,21 +1,20 @@ import React from 'react'; -import { Intent, Button, Classes } from '@blueprintjs/core'; import { useFormikContext } from 'formik'; +import { Intent, Button, Classes } from '@blueprintjs/core'; + import { FormattedMessage as T } from 'components'; -import { useNotifyContactViaSMSContext } from './NotifyContactViaSMSFormProvider'; import withDialogActions from 'containers/Dialog/withDialogActions'; import { compose } from 'utils'; -function NotifyContactViaSMSFormFloatingActions({ +function NotifyViaSMSFormFloatingActions({ // #withDialogActions closeDialog, + dialogName, }) { // Formik context. const { isSubmitting } = useFormikContext(); - const { dialogName } = useNotifyContactViaSMSContext(); - // Handle close button click. const handleCancelBtnClick = () => { closeDialog(dialogName); @@ -39,7 +38,4 @@ function NotifyContactViaSMSFormFloatingActions({
); } - -export default compose(withDialogActions)( - NotifyContactViaSMSFormFloatingActions, -); +export default compose(withDialogActions)(NotifyViaSMSFormFloatingActions);