From 28ac9b2d9041f978fa54969593ddd6bfab04ad57 Mon Sep 17 00:00:00 2001 From: Ahmed Bouhuolia Date: Sun, 13 Oct 2024 18:01:43 +0200 Subject: [PATCH] refactor: invoice, estimate, receipt, credit note and payment received date input fields --- .../CreditNoteFormHeaderFields.tsx | 51 ++++---- .../EstimateForm/EstimateFormHeaderFields.tsx | 104 +++++++--------- .../InvoiceForm/InvoiceFormHeaderFields.tsx | 117 ++++++++---------- .../PaymentReceiveHeaderFields.tsx | 60 ++++----- .../ReceiptForm/ReceiptFormHeaderFields.tsx | 55 ++++---- 5 files changed, 160 insertions(+), 227 deletions(-) diff --git a/packages/webapp/src/containers/Sales/CreditNotes/CreditNoteForm/CreditNoteFormHeaderFields.tsx b/packages/webapp/src/containers/Sales/CreditNotes/CreditNoteForm/CreditNoteFormHeaderFields.tsx index ad5bca1df..174af3231 100644 --- a/packages/webapp/src/containers/Sales/CreditNotes/CreditNoteForm/CreditNoteFormHeaderFields.tsx +++ b/packages/webapp/src/containers/Sales/CreditNotes/CreditNoteForm/CreditNoteFormHeaderFields.tsx @@ -17,18 +17,13 @@ import { FFormGroup, CustomersSelect, Stack, + FDateInput, } from '@/components'; import { customerNameFieldShouldUpdate } from './utils'; import { useCreditNoteFormContext } from './CreditNoteFormProvider'; import { CreditNoteExchangeRateInputField } from './components'; import { CreditNoteTransactionNoField } from './CreditNoteTransactionNoField'; -import { - momentFormatter, - tansformDateValue, - inputIntent, - handleDateChange, -} from '@/utils'; import { useCustomerUpdateExRate } from '@/containers/Entries/withExRateItemEntriesPriceRecalc'; const getCreditNoteFieldsStyle = (theme: Theme) => css` @@ -63,30 +58,26 @@ export default function CreditNoteFormHeaderFields() { {/* ----------- Credit note date ----------- */} - - {({ form, field: { value }, meta: { error, touched } }) => ( - } - inline={true} - labelInfo={} - className={classNames('form-group--credit_note_date', CLASSES.FILL)} - intent={inputIntent({ error, touched })} - helperText={} - > - { - form.setFieldValue('credit_note_date', formattedDate); - })} - popoverProps={{ position: Position.BOTTOM_LEFT, minimal: true }} - inputProps={{ - leftIcon: , - }} - /> - - )} - + } + labelInfo={} + inline + fastField + > + date.toLocaleDateString()} + parseDate={(str) => new Date(str)} + popoverProps={{ position: Position.BOTTOM_LEFT, minimal: true }} + inputProps={{ + leftIcon: , + fill: true + }} + fill + fastField + /> + {/* ----------- Credit note # ----------- */} diff --git a/packages/webapp/src/containers/Sales/Estimates/EstimateForm/EstimateFormHeaderFields.tsx b/packages/webapp/src/containers/Sales/Estimates/EstimateForm/EstimateFormHeaderFields.tsx index fb04e904f..26fc58c08 100644 --- a/packages/webapp/src/containers/Sales/Estimates/EstimateForm/EstimateFormHeaderFields.tsx +++ b/packages/webapp/src/containers/Sales/Estimates/EstimateForm/EstimateFormHeaderFields.tsx @@ -1,9 +1,8 @@ // @ts-nocheck import styled from 'styled-components'; import classNames from 'classnames'; -import { FormGroup, Position, Classes } from '@blueprintjs/core'; -import { DateInput } from '@blueprintjs/datetime'; -import { FastField, ErrorMessage, useFormikContext } from 'formik'; +import { Position, Classes } from '@blueprintjs/core'; +import { useFormikContext } from 'formik'; import { css } from '@emotion/css'; import { FeatureCan, @@ -15,15 +14,9 @@ import { CustomersSelect, FInputGroup, Stack, + FDateInput, } from '@/components'; -import { - momentFormatter, - tansformDateValue, - inputIntent, - handleDateChange, -} from '@/utils'; import { customersFieldShouldUpdate } from './utils'; -import { CLASSES } from '@/constants/classes'; import { Features } from '@/constants'; import { ProjectsSelect } from '@/containers/Projects/components'; import { @@ -70,60 +63,47 @@ export default function EstimateFormHeader() { {/* ----------- Estimate Date ----------- */} - - {({ form, field: { value }, meta: { error, touched } }) => ( - } - inline={true} - labelInfo={} - className={classNames(CLASSES.FILL, 'form-group--estimate-date')} - intent={inputIntent({ error, touched })} - helperText={} - > - { - form.setFieldValue('estimate_date', formattedDate); - })} - popoverProps={{ position: Position.BOTTOM, minimal: true }} - inputProps={{ - leftIcon: , - }} - /> - - )} - + } + labelInfo={} + inline + fastField + > + date.toLocaleDateString()} + parseDate={(str) => new Date(str)} + popoverProps={{ position: Position.BOTTOM_LEFT, minimal: true }} + inputProps={{ + leftIcon: , + fill: true, + }} + fill + fastField + /> + {/* ----------- Expiration date ----------- */} - - {({ form, field: { value }, meta: { error, touched } }) => ( - } - labelInfo={} - inline={true} - className={classNames( - CLASSES.FORM_GROUP_LIST_SELECT, - CLASSES.FILL, - 'form-group--expiration-date', - )} - intent={inputIntent({ error, touched })} - helperText={} - > - { - form.setFieldValue('expiration_date', formattedDate); - })} - popoverProps={{ position: Position.BOTTOM, minimal: true }} - inputProps={{ - leftIcon: , - }} - /> - - )} - + } + inline + fastField + > + date.toLocaleDateString()} + parseDate={(str) => new Date(str)} + popoverProps={{ position: Position.BOTTOM_LEFT, minimal: true }} + inputProps={{ + leftIcon: , + fill: true, + }} + fill + fastField + /> + {/* ----------- Estimate number ----------- */} diff --git a/packages/webapp/src/containers/Sales/Invoices/InvoiceForm/InvoiceFormHeaderFields.tsx b/packages/webapp/src/containers/Sales/Invoices/InvoiceForm/InvoiceFormHeaderFields.tsx index 8facf34e8..32bb66afd 100644 --- a/packages/webapp/src/containers/Sales/Invoices/InvoiceForm/InvoiceFormHeaderFields.tsx +++ b/packages/webapp/src/containers/Sales/Invoices/InvoiceForm/InvoiceFormHeaderFields.tsx @@ -2,9 +2,8 @@ import React from 'react'; import styled from 'styled-components'; import classNames from 'classnames'; -import { FormGroup, Position, Classes } from '@blueprintjs/core'; -import { DateInput } from '@blueprintjs/datetime'; -import { FastField, ErrorMessage, useFormikContext } from 'formik'; +import { Position, Classes } from '@blueprintjs/core'; +import { useFormikContext } from 'formik'; import { css } from '@emotion/css'; import { Theme, useTheme } from '@emotion/react'; @@ -16,20 +15,14 @@ import { FeatureCan, CustomersSelect, Stack, - Group, FInputGroup, Icon, + FDateInput, } from '@/components'; -import { - momentFormatter, - tansformDateValue, - inputIntent, - handleDateChange, -} from '@/utils'; -import { CLASSES } from '@/constants/classes'; import { customerNameFieldShouldUpdate } from './utils'; import { useInvoiceFormContext } from './InvoiceFormProvider'; +import { useCustomerUpdateExRate } from '@/containers/Entries/withExRateItemEntriesPriceRecalc'; import { InvoiceExchangeRateInputField, InvoiceProjectSelectButton, @@ -40,7 +33,6 @@ import { ProjectBillableEntriesLink, } from '@/containers/Projects/components'; import { Features } from '@/constants'; -import { useCustomerUpdateExRate } from '@/containers/Entries/withExRateItemEntriesPriceRecalc'; const getInvoiceFieldsStyle = (theme: Theme) => css` .${theme.bpPrefix}-form-group { @@ -77,62 +69,55 @@ export default function InvoiceFormHeaderFields() { {/* ----------- Invoice date ----------- */} - - {({ form, field: { value }, meta: { error, touched } }) => ( - } - inline={true} - labelInfo={} - className={classNames(CLASSES.FILL)} - intent={inputIntent({ error, touched })} - helperText={} - > - { - form.setFieldValue('invoice_date', formattedDate); - })} - popoverProps={{ - position: Position.BOTTOM_LEFT, - minimal: true, - }} - inputProps={{ - leftIcon: , - }} - /> - - )} - + } + labelInfo={} + inline + fastField + > + date.toLocaleDateString()} + parseDate={(str) => new Date(str)} + popoverProps={{ + position: Position.BOTTOM_LEFT, + minimal: true, + fill: true, + }} + inputProps={{ + leftIcon: , + }} + fill + fastField + /> + {/* ----------- Due date ----------- */} - - {({ form, field: { value }, meta: { error, touched } }) => ( - } - labelInfo={} - inline={true} - className={classNames(CLASSES.FILL)} - intent={inputIntent({ error, touched })} - helperText={} - > - { - form.setFieldValue('due_date', formattedDate); - })} - popoverProps={{ - position: Position.BOTTOM_LEFT, - minimal: true, - }} - inputProps={{ - leftIcon: , - }} - /> - - )} - + } + labelInfo={} + inline + fastField + > + date.toLocaleDateString()} + parseDate={(str) => new Date(str)} + popoverProps={{ + position: Position.BOTTOM_LEFT, + minimal: true, + fill: true, + }} + inputProps={{ + leftIcon: , + fill: true, + }} + fill + fastField + /> + {/* ----------- Invoice number ----------- */} diff --git a/packages/webapp/src/containers/Sales/PaymentsReceived/PaymentReceiveForm/PaymentReceiveHeaderFields.tsx b/packages/webapp/src/containers/Sales/PaymentsReceived/PaymentReceiveForm/PaymentReceiveHeaderFields.tsx index 42f956aa7..6115c6289 100644 --- a/packages/webapp/src/containers/Sales/PaymentsReceived/PaymentReceiveForm/PaymentReceiveHeaderFields.tsx +++ b/packages/webapp/src/containers/Sales/PaymentsReceived/PaymentReceiveForm/PaymentReceiveHeaderFields.tsx @@ -3,16 +3,14 @@ import React, { useMemo } from 'react'; import classNames from 'classnames'; import styled from 'styled-components'; import { - FormGroup, InputGroup, Position, Classes, ControlGroup, Button, } from '@blueprintjs/core'; -import { DateInput } from '@blueprintjs/datetime'; import { isEmpty, toSafeInteger } from 'lodash'; -import { FastField, useFormikContext, ErrorMessage } from 'formik'; +import { useFormikContext } from 'formik'; import { css } from '@emotion/css'; import { Theme, useTheme } from '@emotion/react'; @@ -22,15 +20,9 @@ import { FormattedMessage as T, FMoneyInputGroup, Stack, + FDateInput, } from '@/components'; -import { CLASSES } from '@/constants/classes'; -import { - safeSumBy, - momentFormatter, - tansformDateValue, - handleDateChange, - inputIntent, -} from '@/utils'; +import { safeSumBy } from '@/utils'; import { FFormGroup, AccountsSelect, @@ -58,7 +50,6 @@ import { import { Features } from '@/constants'; import { PaymentReceivePaymentNoField } from './PaymentReceivePaymentNoField'; - const getHeaderFieldsStyle = (theme: Theme) => css` .${theme.bpPrefix}-form-group { margin-bottom: 0; @@ -120,31 +111,28 @@ export default function PaymentReceiveHeaderFields() { name={'exchange_rate'} formGroupProps={{ label: ' ', inline: true }} /> + {/* ------------- Payment date ------------- */} - - {({ form, field: { value }, meta: { error, touched } }) => ( - } - inline={true} - labelInfo={} - className={classNames('form-group--select-list', CLASSES.FILL)} - intent={inputIntent({ error, touched })} - helperText={} - > - { - form.setFieldValue('payment_date', formattedDate); - })} - popoverProps={{ position: Position.BOTTOM, minimal: true }} - inputProps={{ - leftIcon: , - }} - /> - - )} - + } + labelInfo={} + inline + fastField + > + date.toLocaleDateString()} + parseDate={(str) => new Date(str)} + popoverProps={{ position: Position.BOTTOM_LEFT, minimal: true }} + inputProps={{ + leftIcon: , + fill: true, + }} + fill + fastField + /> + {/* ------------ Full amount ------------ */} {/* ----------- 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: , - }} - /> - - )} - + } + inline + fastField + > + date.toLocaleDateString()} + parseDate={(str) => new Date(str)} + popoverProps={{ position: Position.BOTTOM_LEFT, minimal: true }} + inputProps={{ + leftIcon: , + fill: true, + }} + fill + fastField + /> + {/* ----------- Receipt number ----------- */}