import React from 'react'; import { FormGroup, InputGroup, Position, ControlGroup, } from '@blueprintjs/core'; import { DateInput } from '@blueprintjs/datetime'; import { FastField, Field, ErrorMessage } from 'formik'; import styled from 'styled-components'; import classNames from 'classnames'; import { FFormGroup, FormattedMessage as T, Col, Row, CustomerDrawerLink, } from 'components'; import { momentFormatter, compose, tansformDateValue } from 'utils'; import { useObserveInvoiceNoSettings, customerNameFieldShouldUpdate, } from './utils'; import { CLASSES } from 'common/classes'; import { CustomerSelectField, FieldRequiredHint, Icon, InputPrependButton, } from 'components'; import { useInvoiceFormContext } from './InvoiceFormProvider'; import { InvoiceExchangeRateInputField } from './components'; import withSettings from 'containers/Settings/withSettings'; import withDialogActions from 'containers/Dialog/withDialogActions'; import { inputIntent, handleDateChange } from 'utils'; /** * Invoice form header fields. */ function InvoiceFormHeaderFields({ // #withDialogActions openDialog, // #withSettings invoiceAutoIncrement, invoiceNumberPrefix, invoiceNextNumber, }) { // Invoice form context. const { customers } = useInvoiceFormContext(); // Handle invoice number changing. const handleInvoiceNumberChange = () => { openDialog('invoice-number-form'); }; // Handle invoice no. field blur. const handleInvoiceNoBlur = (form, field) => (event) => { const newValue = event.target.value; if (field.value !== newValue && invoiceAutoIncrement) { openDialog('invoice-number-form', { initialFormValues: { manualTransactionNo: newValue, incrementMode: 'manual-transaction', }, }); } }; // Syncs invoice number settings with form. useObserveInvoiceNoSettings(invoiceNumberPrefix, invoiceNextNumber); return (
{/* ----------- Customer name ----------- */} {({ form, field: { value }, meta: { error, touched } }) => ( } inline={true} className={classNames( 'form-group--customer-name', 'form-group--select-list', CLASSES.FILL, )} labelInfo={} > } onContactSelected={(customer) => { form.setFieldValue('customer_id', customer.id); form.setFieldValue('currency_code', customer?.currency_code); }} popoverFill={true} allowCreate={true} /> {value && ( )} )} {/* ----------- Exchange rate ----------- */} {/* ----------- Invoice date ----------- */} {({ form, field: { value }, meta: { error, touched } }) => ( } inline={true} labelInfo={} className={classNames('form-group--invoice-date', CLASSES.FILL)} intent={inputIntent({ error, touched })} helperText={} > { form.setFieldValue('invoice_date', formattedDate); })} popoverProps={{ position: Position.BOTTOM_LEFT, minimal: true, }} /> )} {/* ----------- Due date ----------- */} {({ form, field: { value }, meta: { error, touched } }) => ( } labelInfo={} inline={true} className={classNames('form-group--due-date', CLASSES.FILL)} intent={inputIntent({ error, touched })} helperText={} > { form.setFieldValue('due_date', formattedDate); })} popoverProps={{ position: Position.BOTTOM_LEFT, minimal: true, }} /> )} {/* ----------- Invoice number ----------- */} {({ form, field, meta: { error, touched } }) => ( } labelInfo={} inline={true} className={classNames('form-group--invoice-no', CLASSES.FILL)} intent={inputIntent({ error, touched })} helperText={} > , }} tooltip={true} tooltipProps={{ content: ( ), position: Position.BOTTOM_LEFT, }} /> )} {/* ----------- Reference ----------- */} {({ field, meta: { error, touched } }) => ( } inline={true} className={classNames('form-group--reference', CLASSES.FILL)} intent={inputIntent({ error, touched })} helperText={} > )}
); } export default compose( withDialogActions, withSettings(({ invoiceSettings }) => ({ invoiceAutoIncrement: invoiceSettings?.autoIncrement, invoiceNextNumber: invoiceSettings?.nextNumber, invoiceNumberPrefix: invoiceSettings?.numberPrefix, })), )(InvoiceFormHeaderFields); const CustomerButtonLink = styled(CustomerDrawerLink)` font-size: 11px; margin-top: 6px; `;