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);