import React, { useMemo, useCallback, useState } from 'react';
import {
FormGroup,
InputGroup,
Intent,
Position,
MenuItem,
Classes,
} from '@blueprintjs/core';
import { DateInput } from '@blueprintjs/datetime';
import { FormattedMessage as T } from 'react-intl';
import { useParams, useHistory } from 'react-router-dom';
import { useQuery } from 'react-query';
import moment from 'moment';
import { momentFormatter, compose, tansformDateValue } from 'utils';
import classNames from 'classnames';
import {
AccountsSelectList,
ListSelect,
ErrorMessage,
FieldRequiredHint,
} from 'components';
import withCustomers from 'containers/Customers/withCustomers';
import withAccounts from 'containers/Accounts/withAccounts';
function PaymentReceiveFormHeader({
formik: { errors, touched, setFieldValue, getFieldProps, values },
//#withCustomers
customers,
//#withAccouts
accountsList,
}) {
const handleDateChange = useCallback(
(date_filed) => (date) => {
const formatted = moment(date).format('YYYY-MM-DD');
setFieldValue(date_filed, formatted);
},
[setFieldValue],
);
const handleCusomterRenderer = useCallback(
(custom, { handleClick }) => (
),
[],
);
const handleFilterCustomer = (query, customer, index, exactMatch) => {
const normalizedTitle = customer.display_name.toLowerCase();
const normalizedQuery = query.toLowerCase();
if (exactMatch) {
return normalizedTitle === normalizedQuery;
} else {
return (
`${customer.display_name} ${normalizedTitle}`.indexOf(
normalizedQuery,
) >= 0
);
}
};
const onChangeSelect = useCallback(
(filedName) => {
return (item) => {
setFieldValue(filedName, item.id);
};
},
[setFieldValue],
);
// Filter deposit accounts.
const depositAccounts = useMemo(
() => accountsList.filter((a) => a?.type?.key === 'current_asset'),
[accountsList],
);
return (
{/* Customer name */}
}
inline={true}
className={classNames('form-group--select-list', Classes.FILL)}
labelInfo={
}
intent={errors.customer_id && touched.customer_id && Intent.DANGER}
helperText={
}
>
}
itemRenderer={handleCusomterRenderer}
itemPredicate={handleFilterCustomer}
popoverProps={{ minimal: true }}
onItemSelect={onChangeSelect('customer_id')}
selectedItem={values.customer_id}
selectedItemProp={'id'}
defaultText={
}
labelProp={'display_name'}
/>
{/* Payment date */}
}
inline={true}
labelInfo={
}
className={classNames('form-group--select-list', Classes.FILL)}
intent={errors.payment_date && touched.payment_date && Intent.DANGER}
helperText={
}
>
{/* payment receive no */}
}
inline={true}
className={('form-group--payment_receive_no', Classes.FILL)}
labelInfo={
}
intent={
errors.payment_receive_no &&
touched.payment_receive_no &&
Intent.DANGER
}
helperText={
}
>
{/* deposit account */}
}
className={classNames(
'form-group--deposit_account_id',
'form-group--select-list',
Classes.FILL,
)}
inline={true}
labelInfo={
}
intent={
errors.deposit_account_id &&
touched.deposit_account_id &&
Intent.DANGER
}
helperText={
}
>
}
onAccountSelected={onChangeSelect('deposit_account_id')}
defaultSelectText={
}
selectedAccountId={values.deposit_account_id}
/>
{/* Receive amount */}
{/*
}
inline={true}
labelInfo={
}
className={classNames('form-group--', Classes.FILL)}
intent={
errors.receive_amount && touched.receive_amount && Intent.DANGER
}
helperText={
}
>
*/}
{/* reference_no */}
}
inline={true}
className={classNames('form-group--reference', Classes.FILL)}
intent={errors.reference_no && touched.reference_no && Intent.DANGER}
helperText={
}
>
);
}
export default compose(
withCustomers(({ customers }) => ({
customers,
})),
withAccounts(({ accountsList }) => ({
accountsList,
})),
)(PaymentReceiveFormHeader);