import React, { useMemo, useCallback } from 'react'; import { FormGroup, InputGroup, Intent, Position, MenuItem, Classes, } from '@blueprintjs/core'; import { sumBy } from 'lodash'; import { DateInput } from '@blueprintjs/datetime'; import { FormattedMessage as T } from 'react-intl'; import moment from 'moment'; import classNames from 'classnames'; import { CLASSES } from 'common/classes'; import { momentFormatter, compose, tansformDateValue } from 'utils'; import { AccountsSelectList, ListSelect, ErrorMessage, FieldRequiredHint, Money, Hint, } from 'components'; import withBills from '../Bill/withBills'; import withVender from 'containers/Vendors/withVendors'; import withAccounts from 'containers/Accounts/withAccounts'; /** * Payment made header form. */ function PaymentMadeFormHeader({ paymentMadeId, vendorId, // #useFormik errors, touched, setFieldValue, getFieldProps, values, onFullAmountChanged, //#withVender vendorsCurrentPage, vendorItems, //#withAccouts accountsList, // #withBills vendorPayableBills, }) { const isNewMode = !paymentMadeId; const payableFullAmount = useMemo( () => sumBy(vendorPayableBills, 'due_amount'), [vendorPayableBills], ); const handleDateChange = useCallback( (date_filed) => (date) => { const formatted = moment(date).format('YYYY-MM-DD'); setFieldValue(date_filed, formatted); }, [setFieldValue], ); const handleVenderRenderer = useCallback( (vender, { handleClick }) => ( ), [], ); const triggerFullAmountChanged = (value) => { onFullAmountChanged && onFullAmountChanged(value); } const handleFullAmountBlur = (event) => { triggerFullAmountChanged(event.currentTarget.value); }; const handleFilterVender = (query, vender, index, exactMatch) => { const normalizedTitle = vender.display_name.toLowerCase(); const normalizedQuery = query.toLowerCase(); if (exactMatch) { return normalizedTitle === normalizedQuery; } else { return ( `${vender.display_name} ${normalizedTitle}`.indexOf(normalizedQuery) >= 0 ); } }; const onChangeSelect = useCallback( (filedName) => { return (item) => { setFieldValue(filedName, item.id); }; }, [setFieldValue], ); // Filter Payment accounts. const paymentAccounts = useMemo( () => accountsList.filter((a) => a?.type?.key === 'current_asset'), [accountsList], ); const handleReceiveFullAmountClick = () => { setFieldValue('full_amount', payableFullAmount); triggerFullAmountChanged(payableFullAmount); }; return (
{/* ------------ Vendor name ------------ */} } inline={true} className={classNames('form-group--select-list', Classes.FILL)} labelInfo={} intent={errors.vendor_id && touched.vendor_id && Intent.DANGER} helperText={ } > } itemRenderer={handleVenderRenderer} itemPredicate={handleFilterVender} popoverProps={{ minimal: true }} onItemSelect={onChangeSelect('vendor_id')} selectedItem={values.vendor_id} selectedItemProp={'id'} defaultText={} labelProp={'display_name'} buttonProps={{ disabled: !isNewMode }} disabled={!isNewMode} /> {/* ------------ Payment date ------------ */} } inline={true} labelInfo={} className={classNames('form-group--select-list', Classes.FILL)} intent={errors.payment_date && touched.payment_date && Intent.DANGER} helperText={ } > {/* ------------ Full amount ------------ */} } inline={true} className={('form-group--full-amount', Classes.FILL)} intent={ errors.full_amount && touched.full_amount && Intent.DANGER } labelInfo={} helperText={ } > Receive full amount () {/* ------------ Payment number ------------ */} } inline={true} className={('form-group--payment_number', Classes.FILL)} labelInfo={} intent={ errors.payment_number && touched.payment_number && Intent.DANGER } helperText={ } > {/* ------------ Payment account ------------ */} } className={classNames( 'form-group--payment_account_id', 'form-group--select-list', Classes.FILL, )} inline={true} labelInfo={} intent={ errors.payment_account_id && touched.payment_account_id && Intent.DANGER } helperText={ } > } onAccountSelected={onChangeSelect('payment_account_id')} defaultSelectText={} selectedAccountId={values.payment_account_id} /> {/* ------------ Reference ------------ */} } inline={true} className={classNames('form-group--reference', Classes.FILL)} intent={errors.reference && touched.reference && Intent.DANGER} helperText={} >
); } export default compose( withVender(({ vendorsCurrentPage, vendorItems }) => ({ vendorsCurrentPage, vendorItems, })), withAccounts(({ accountsList }) => ({ accountsList, })), withBills(({ vendorPayableBills }) => ({ vendorPayableBills, })), )(PaymentMadeFormHeader);