diff --git a/client/src/containers/Expenses/ExpenseFloatingActions.js b/client/src/containers/Expenses/ExpenseFloatingActions.js index eda49ee81..eda5ff0a9 100644 --- a/client/src/containers/Expenses/ExpenseFloatingActions.js +++ b/client/src/containers/Expenses/ExpenseFloatingActions.js @@ -1,10 +1,20 @@ import React from 'react'; -import { Intent, Button } from '@blueprintjs/core'; +import { + Intent, + Button, + ButtonGroup, + Popover, + PopoverInteractionKind, + Position, + Menu, + MenuItem, +} from '@blueprintjs/core'; import { useFormikContext } from 'formik'; import { FormattedMessage as T } from 'react-intl'; import { CLASSES } from 'common/classes'; import classNames from 'classnames'; import { saveInvoke } from 'utils'; +import { Icon } from 'components'; /** * Expense form floating actions. @@ -14,56 +24,142 @@ export default function ExpenseFloatingFooter({ onSubmitClick, onCancelClick, onDraftClick, + onClearClick, onSubmitAndNewClick, + onSubmitForm, + onResetForm, expense, }) { - const handleSubmitBtnClick = (event) => { - saveInvoke(onSubmitClick, event); + const handleSubmitPublishAndNewBtnClick = (event) => { + onSubmitForm(); + saveInvoke(onSubmitClick, event, { + redirect: false, + publish: true, + resetForm: true, + }); }; - const handleCancelBtnClick = (event) => { - saveInvoke(onCancelClick, event); + const handleSubmitPublishContinueEditingBtnClick = (event) => { + onSubmitForm(); + saveInvoke(onSubmitClick, event, { + redirect: false, + publish: true, + }); }; - const handleSubmitAndDraftBtnClick = (event) => { - saveInvoke(onDraftClick, event); + const handleSubmitDraftAndNewBtnClick = (event) => { + onSubmitForm(); + saveInvoke(onSubmitClick, event, { + redirect: false, + publish: false, + resetForm: true, + }); }; - const handleSubmitAndNewBtnClick = (event) => { - saveInvoke(onSubmitAndNewClick, event); + const handleSubmitDraftContinueEditingBtnClick = (event) => { + onSubmitForm(); + saveInvoke(onSubmitClick, event, { + redirect: false, + publish: true, + }); }; return (
- + + {/* ----------- Save And Publish ----------- */} + - - - - + {/* ----------- Save As Draft ----------- */} +
); } diff --git a/client/src/containers/Expenses/ExpenseForm.js b/client/src/containers/Expenses/ExpenseForm.js index 4fcf0c080..943df21a9 100644 --- a/client/src/containers/Expenses/ExpenseForm.js +++ b/client/src/containers/Expenses/ExpenseForm.js @@ -66,9 +66,9 @@ function ExpenseForm({ onFormSubmit, onCancelForm, }) { - const [payload, setPayload] = useState({}); + const [submitPayload, setSubmitPayload] = useState({}); const history = useHistory(); - + const isNewMode = !expenseId; const { formatMessage } = useIntl(); @@ -199,6 +199,8 @@ function ExpenseForm({ setFieldValue, handleSubmit, getFieldProps, + submitForm, + resetForm, } = useFormik({ enableReinitialize: true, validationSchema, @@ -228,7 +230,7 @@ function ExpenseForm({ const form = { ...values, - publish: payload.publish, + publish: submitPayload.publish, categories, }; const saveExpense = (mdeiaIds) => @@ -246,7 +248,7 @@ function ExpenseForm({ intent: Intent.SUCCESS, }); setSubmitting(false); - saveInvokeSubmit({ action: 'update', ...payload }); + saveInvokeSubmit({ action: 'update', ...submitPayload }); clearSavedMediaIds([]); resetForm(); }) @@ -265,8 +267,11 @@ function ExpenseForm({ intent: Intent.SUCCESS, }); setSubmitting(false); - resetForm(); - saveInvokeSubmit({ action: 'new', ...payload }); + + if (submitPayload.resetForm) { + resetForm(); + } + saveInvokeSubmit({ action: 'new', ...submitPayload }); clearSavedMediaIds(); }) .catch((errors) => { @@ -288,20 +293,17 @@ function ExpenseForm({ }, }); - const handleSubmitClick = useCallback(() => { - setPayload({ publish: true, redirect: true }); - }, [setPayload]); + const handleSubmitClick = useCallback( + (event, payload) => { + setSubmitPayload({ ...payload }); + }, + [setSubmitPayload], + ); const handleCancelClick = useCallback(() => { history.goBack(); - }, []); + }, [history]); - const handleSubmitAndNewClick = useCallback(() => { - setPayload({ publish: true, redirect: false }); - }); - const handleSubmitAndDraftClick = useCallback(() => { - setPayload({ publish: false, redirect: false }); - }); const handleDeleteFile = useCallback( (_deletedFiles) => { @@ -370,8 +372,8 @@ function ExpenseForm({ isSubmitting={isSubmitting} onSubmitClick={handleSubmitClick} onCancelClick={handleCancelClick} - onDraftClick={handleSubmitAndDraftClick} - onSubmitAndNewClick={handleSubmitAndNewClick} + onSubmitForm={submitForm} + onResetForm={resetForm} expense={expense} /> diff --git a/client/src/containers/Sales/PaymentReceive/PaymentReceiveFloatingActions.js b/client/src/containers/Sales/PaymentReceive/PaymentReceiveFloatingActions.js index 0dcf50020..2f02013c4 100644 --- a/client/src/containers/Sales/PaymentReceive/PaymentReceiveFloatingActions.js +++ b/client/src/containers/Sales/PaymentReceive/PaymentReceiveFloatingActions.js @@ -1,9 +1,20 @@ import React from 'react'; -import { Intent, Button } from '@blueprintjs/core'; +import { + Intent, + Button, + ButtonGroup, + Popover, + PopoverInteractionKind, + Position, + Menu, + MenuItem, +} from '@blueprintjs/core'; import { FormattedMessage as T } from 'react-intl'; import classNames from 'classnames'; - import { CLASSES } from 'common/classes'; +import { useFormikContext } from 'formik'; +import { saveInvoke } from 'utils'; +import { Icon } from 'components'; /** * Payment receive floating actions bar. @@ -13,53 +24,74 @@ export default function PaymentReceiveFormFloatingActions({ onSubmitClick, onCancelClick, onClearClick, + onSubmitForm, paymentReceiveId, }) { - const handleSubmitClick = (event) => { - onSubmitClick && onSubmitClick(event); + const handleSubmitBtnClick = (event) => { + saveInvoke(onSubmitClick, event, { + redirect: true, + }); }; const handleClearBtnClick = (event) => { onClearClick && onClearClick(event); }; - const handleCloseBtnClick = (event) => { + const handleCancelBtnClick = (event) => { onCancelClick && onCancelClick(event); + saveInvoke(onCancelClick, event); + }; + + const handleSubmitAndNewClick = (event) => { + onSubmitForm(); + saveInvoke(onSubmitClick, event, { + redirect: false, + }); }; return (
- - - - - - - + + {/* ----------- Save and New ----------- */} +
); } diff --git a/client/src/containers/Sales/PaymentReceive/PaymentReceiveForm.js b/client/src/containers/Sales/PaymentReceive/PaymentReceiveForm.js index dcc4e21be..89cbee70d 100644 --- a/client/src/containers/Sales/PaymentReceive/PaymentReceiveForm.js +++ b/client/src/containers/Sales/PaymentReceive/PaymentReceiveForm.js @@ -13,6 +13,7 @@ import { FormattedMessage as T, useIntl } from 'react-intl'; import { pick, sumBy, omit } from 'lodash'; import { Intent, Alert } from '@blueprintjs/core'; import classNames from 'classnames'; +import { useHistory } from 'react-router-dom'; import { CLASSES } from 'common/classes'; import PaymentReceiveHeader from './PaymentReceiveFormHeader'; @@ -66,8 +67,11 @@ function PaymentReceiveForm({ const [clearLinesAlert, setClearLinesAlert] = useState(false); const [fullAmount, setFullAmount] = useState(null); const [clearFormAlert, setClearFormAlert] = useState(false); + const [submitPayload, setSubmitPayload] = useState({}); const { formatMessage } = useIntl(); + const history = useHistory(); + const isNewMode = !paymentReceiveId; const [localPaymentEntries, setLocalPaymentEntries] = useState( paymentReceiveEntries, @@ -103,7 +107,7 @@ function PaymentReceiveForm({ const validationSchema = isNewMode ? CreatePaymentReceiveFormSchema : EditPaymentReceiveFormSchema; - + // Default payment receive entry. const defaultPaymentReceiveEntry = { id: '', @@ -187,6 +191,10 @@ function PaymentReceiveForm({ }); setSubmitting(false); resetForm(); + + if (submitPayload.redirect) { + history.push('/payment-receives'); + } }; // Handle request response errors. const onError = (errors) => { @@ -220,6 +228,7 @@ function PaymentReceiveForm({ isSubmitting, touched, resetForm, + submitForm, } = useFormik({ enableReinitialize: true, validationSchema, @@ -338,6 +347,17 @@ function PaymentReceiveForm({ [changePageSubtitle], ); + const handleSubmitClick = useCallback( + (event, payload) => { + setSubmitPayload({ ...payload }); + }, + [setSubmitPayload], + ); + + const handleCancelClick = useCallback(() => { + history.goBack(); + }, [history]); + return (
diff --git a/client/src/lang/en/index.js b/client/src/lang/en/index.js index fdd9c14f7..31e5f1783 100644 --- a/client/src/lang/en/index.js +++ b/client/src/lang/en/index.js @@ -844,12 +844,11 @@ export default { are_sure_to_publish_this_manual_journal: 'Are you sure you want to publish this manual journal?', - save_publish:'Save and Publish', - publish_and_new: 'Publish and new', - publish_continue_editing:'Publish (continue editing)', - save_and_new:'Save and new', - save_continue_editing:'Save (continue editing)', - reset:'Reset ', - - + save_publish: 'Save and Publish', + publish_and_new: 'Publish and new', + publish_continue_editing: 'Publish (continue editing)', + save_and_new: 'Save and new', + save_continue_editing: 'Save (continue editing)', + reset: 'Reset ', + save_and_send: 'Save and Send', };