feat(payment receive & made): handle error.

This commit is contained in:
elforjani13
2022-03-17 14:34:24 +02:00
parent 7f3a494c8d
commit b0407168a0
10 changed files with 105 additions and 30 deletions

View File

@@ -33,6 +33,7 @@ import {
defaultPaymentReceive,
transformToEditForm,
transformFormToRequest,
transformErrors,
} from './utils';
/**
@@ -135,19 +136,8 @@ function PaymentReceiveForm({
data: { errors },
},
}) => {
const getError = (errorType) => errors.find((e) => e.type === errorType);
if (getError('PAYMENT_RECEIVE_NO_EXISTS')) {
setFieldError(
'payment_receive_no',
intl.get('payment_number_is_not_unique'),
);
}
if (getError('PAYMENT_RECEIVE_NO_REQUIRED')) {
setFieldError(
'payment_receive_no',
intl.get('payment_receive.field.error.payment_receive_no_required'),
);
if (errors) {
transformErrors(errors, { setFieldError });
}
setSubmitting(false);
};

View File

@@ -1,6 +1,7 @@
import React, { createContext, useContext } from 'react';
import { isEmpty, pick, isEqual, isUndefined } from 'lodash';
import {isEqual, isUndefined } from 'lodash';
import { Features } from 'common';
import { useFeatureCan } from 'hooks/state';
import { DashboardInsider } from 'components';
import {
useSettingsPaymentReceives,
@@ -19,6 +20,7 @@ const PaymentReceiveFormContext = createContext();
* Payment receive form provider.
*/
function PaymentReceiveFormProvider({
query,
paymentReceiveId,
baseCurrency,
...props
@@ -28,6 +30,10 @@ function PaymentReceiveFormProvider({
const [selectCustomer, setSelectCustomer] = React.useState(null);
// Features guard.
const { featureCan } = useFeatureCan();
const isBranchFeatureCan = featureCan(Features.Branches);
// Fetches payment recevie details.
const {
data: {
@@ -56,7 +62,7 @@ function PaymentReceiveFormProvider({
data: branches,
isLoading: isBranchesLoading,
isSuccess: isBranchesSuccess,
} = useBranches();
} = useBranches(query, { enabled: isBranchFeatureCan });
// Detarmines whether the new mode.
const isNewMode = !paymentReceiveId;

View File

@@ -1,7 +1,10 @@
import React from 'react';
import { useFormikContext } from 'formik';
import moment from 'moment';
import intl from 'react-intl-universal';
import { omit, pick, first } from 'lodash';
import { useFormikContext } from 'formik';
import { Intent } from '@blueprintjs/core';
import { AppToaster } from 'components';
import { usePaymentReceiveFormContext } from './PaymentReceiveFormProvider';
import {
defaultFastFieldShouldUpdate,
@@ -182,3 +185,31 @@ export const useSetPrimaryBranchToForm = () => {
}
}, [isBranchesSuccess, setFieldValue, branches]);
};
/**
* Transformes the response errors types.
*/
export const transformErrors = (errors, { setFieldError }) => {
const getError = (errorType) => errors.find((e) => e.type === errorType);
if (getError('PAYMENT_RECEIVE_NO_EXISTS')) {
setFieldError(
'payment_receive_no',
intl.get('payment_number_is_not_unique'),
);
}
if (getError('PAYMENT_RECEIVE_NO_REQUIRED')) {
setFieldError(
'payment_receive_no',
intl.get('payment_receive.field.error.payment_receive_no_required'),
);
}
if (getError('PAYMENT_ACCOUNT_CURRENCY_INVALID')) {
AppToaster.show({
message: intl.get(
'payment_Receive.error.payment_account_currency_invalid',
),
intent: Intent.DANGER,
});
}
};