import React, { useCallback } from 'react'; import { FormGroup, InputGroup, Position, ControlGroup, } from '@blueprintjs/core'; import { DateInput } from '@blueprintjs/datetime'; import { FormattedMessage as T } from 'components'; import classNames from 'classnames'; import { FastField, ErrorMessage } from 'formik'; import { CLASSES } from 'common/classes'; import styled from 'styled-components'; import { AccountsSelectList, CustomerSelectField, FieldRequiredHint, Icon, If, InputPrependButton, ExchangeRateInputGroup, } from 'components'; import withSettings from 'containers/Settings/withSettings'; import withDialogActions from 'containers/Dialog/withDialogActions'; import { ACCOUNT_TYPE } from 'common/accountTypes'; import { momentFormatter, compose, tansformDateValue, handleDateChange, inputIntent, } from 'utils'; import ReceiptFormCurrencyTag from './ReceiptFormCurrencyTag'; import { useReceiptFormContext } from './ReceiptFormProvider'; import { accountsFieldShouldUpdate, customersFieldShouldUpdate, useObserveReceiptNoSettings, } from './utils'; /** * Receipt form header fields. */ function ReceiptFormHeader({ //#withDialogActions openDialog, // #ownProps onReceiptNumberChanged, // #withSettings receiptAutoIncrement, receiptNextNumber, receiptNumberPrefix, }) { const { accounts, customers, isForeignCustomer, baseCurrency, selectCustomer, setSelectCustomer, } = useReceiptFormContext(); const handleReceiptNumberChange = useCallback(() => { openDialog('receipt-number-form', {}); }, [openDialog]); const handleReceiptNoBlur = (form, field) => (event) => { const newValue = event.target.value; if (field.value !== newValue && receiptAutoIncrement) { openDialog('receipt-number-form', { initialFormValues: { manualTransactionNo: newValue, incrementMode: 'manual-transaction', }, }); } }; // Synsc receipt number settings with the form. useObserveReceiptNoSettings(receiptNumberPrefix, receiptNextNumber); return (
{/* ----------- Customer name ----------- */} {({ form, field: { value }, meta: { error, touched } }) => ( } inline={true} className={classNames(CLASSES.FILL, 'form-group--customer')} labelInfo={} intent={inputIntent({ error, touched })} helperText={} > } onContactSelected={(customer) => { form.setFieldValue('customer_id', customer.id); form.setFieldValue('currency_code', customer?.currency_code); setSelectCustomer(customer); }} popoverFill={true} allowCreate={true} /> )} {/* ----------- Exchange rate ----------- */} {/* ----------- Deposit account ----------- */} {({ form, field: { value }, meta: { error, touched } }) => ( } className={classNames('form-group--deposit-account', CLASSES.FILL)} inline={true} labelInfo={} intent={inputIntent({ error, touched })} helperText={} > { form.setFieldValue('deposit_account_id', account.id); }} defaultSelectText={} selectedAccountId={value} popoverFill={true} filterByTypes={[ ACCOUNT_TYPE.CASH, ACCOUNT_TYPE.BANK, ACCOUNT_TYPE.OTHER_CURRENT_ASSET, ]} allowCreate={true} /> )} {/* ----------- Receipt date ----------- */} {({ form, field: { value }, meta: { error, touched } }) => ( } inline={true} className={classNames(CLASSES.FILL)} intent={inputIntent({ error, touched })} helperText={} > { form.setFieldValue('receipt_date', formattedDate); })} popoverProps={{ position: Position.BOTTOM, minimal: true }} inputProps={{ leftIcon: , }} /> )} {/* ----------- Receipt number ----------- */} {({ form, field, meta: { error, touched } }) => ( } inline={true} className={('form-group--receipt_number', CLASSES.FILL)} labelInfo={} intent={inputIntent({ error, touched })} helperText={} > , }} tooltip={true} tooltipProps={{ content: ( ), position: Position.BOTTOM_LEFT, }} inputProps={{ leftIcon: , }} /> )} {/* ----------- Reference ----------- */} {({ field, meta: { error, touched } }) => ( } inline={true} className={classNames('form-group--reference', CLASSES.FILL)} intent={inputIntent({ error, touched })} helperText={} > )}
); } export default compose( withDialogActions, withSettings(({ receiptSettings }) => ({ receiptAutoIncrement: receiptSettings?.autoIncrement, receiptNextNumber: receiptSettings?.nextNumber, receiptNumberPrefix: receiptSettings?.numberPrefix, })), )(ReceiptFormHeader); const ControlCustomerGroup = styled(ControlGroup)` display: flex; align-items: center; transform: none; `;