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 ----------- */}
+
);
}
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 (
-
- {paymentReceiveId ? : }
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+ {/* ----------- Save and New ----------- */}
+ : }
+ />
+
+ }
+ onClick={handleSubmitAndNewClick}
+ />
+
+ }
+ minimal={true}
+ interactionKind={PopoverInteractionKind.CLICK}
+ position={Position.BOTTOM_LEFT}
+ >
+ }
+ />
+
+ {/* ----------- Clear & Reset----------- */}
+ : }
+ />
+ {/* ----------- Cancel ----------- */}
+ }
+ />
+
);
}
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',
};