From 73fbb8ae9998c52912e66baafb7843b542d00645 Mon Sep 17 00:00:00 2001 From: "a.bouhuolia" Date: Wed, 27 Jan 2021 07:21:13 +0200 Subject: [PATCH 1/5] fix: inner content of table cell. --- client/src/components/Datatable/TableCell.js | 2 +- client/src/style/components/DataTable/DataTable.scss | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/client/src/components/Datatable/TableCell.js b/client/src/components/Datatable/TableCell.js index d8122a5c1..2636e5074 100644 --- a/client/src/components/Datatable/TableCell.js +++ b/client/src/components/Datatable/TableCell.js @@ -29,7 +29,7 @@ export default function TableCell({
Date: Wed, 27 Jan 2021 09:05:45 +0200 Subject: [PATCH 2/5] fix: settings reset the memorized metadata. --- .../core/20200810121809_seed_settings.js | 30 +++++++++---------- server/src/lib/Metable/MetableStore.ts | 7 +++++ server/src/lib/Metable/MetableStoreDB.ts | 4 ++- 3 files changed, 24 insertions(+), 17 deletions(-) diff --git a/server/src/database/seeds/core/20200810121809_seed_settings.js b/server/src/database/seeds/core/20200810121809_seed_settings.js index 65f0b0ce4..f6578ba9f 100644 --- a/server/src/database/seeds/core/20200810121809_seed_settings.js +++ b/server/src/database/seeds/core/20200810121809_seed_settings.js @@ -1,22 +1,20 @@ +import Container from 'typedi'; +import TenancyService from 'services/Tenancy/TenancyService'; exports.up = (knex) => { - // Inserts seed entries - return knex('settings').insert([ - { group: 'manual_journals', key: 'next_number', value: 1 }, + const tenancyService = Container.get(TenancyService); + const settings = tenancyService.settings(knex.userParams.tenantId); - { group: 'sales_invoices', key: 'next_number', value: 1}, - { group: 'sales_invoices', key: 'number_prefix', value: 'INV' }, + settings.set({ group: 'manual_journals', key: 'next_number', value: 1 }); + settings.set({ group: 'sales_invoices', key: 'next_number', value: 1 }); + settings.set({ group: 'sales_invoices', key: 'number_prefix', value: 'INV' }); + settings.set({ group: 'sales_receipts', key: 'next_number', value: 1 }); + settings.set({ group: 'sales_receipts', key: 'number_prefix', value: 'REC' }); + settings.set({ group: 'sales_estimates', key: 'next_number', value: 1 }); + settings.set({ group: 'sales_estimates', key: 'number_prefix', value: 'EST' }); + settings.set({ group: 'payment_receives', key: 'next_number', value: 1 }); - { group: 'sales_receipts', key: 'next_number', value: 1 }, - { group: 'sales_receipts', key: 'number_prefix', value: 'REC' }, - - { group: 'sales_estimates', key: 'next_number', value: 1 }, - { group: 'sales_estimates', key: 'number_prefix', value: 'EST' }, - - { group: 'payment_receives', key: 'next_number', value: 1 }, - ]); + return settings.save(); }; -exports.down = (knex) => { - -} \ No newline at end of file +exports.down = (knex) => {}; diff --git a/server/src/lib/Metable/MetableStore.ts b/server/src/lib/Metable/MetableStore.ts index ad1569797..ccf81a14d 100644 --- a/server/src/lib/Metable/MetableStore.ts +++ b/server/src/lib/Metable/MetableStore.ts @@ -201,4 +201,11 @@ export default class MetableStore implements IMetableStore{ return collection; } + + /** + * Reset the momerized metadata. + */ + resetMetadata() { + this.metadata = []; + } } diff --git a/server/src/lib/Metable/MetableStoreDB.ts b/server/src/lib/Metable/MetableStoreDB.ts index d7c303a07..830a07ca2 100644 --- a/server/src/lib/Metable/MetableStoreDB.ts +++ b/server/src/lib/Metable/MetableStoreDB.ts @@ -77,7 +77,7 @@ export default class MetableDBStore extends MetableStore implements IMetableStor this.saveInserted(this.metadata), ]); } - + /** * Saves the updated metadata. * @param {IMetadata[]} metadata - @@ -155,6 +155,8 @@ export default class MetableDBStore extends MetableStore implements IMetableStor const metadata = await this.repository.all(); const mappedMetadata = this.mapMetadataCollection(metadata); + this.resetMetadata(); + mappedMetadata.forEach((meta: IMetadata) => { this.metadata.push(meta); }); From f8ee455985de9c47989c403f02607a9d2022c5be Mon Sep 17 00:00:00 2001 From: "a.bouhuolia" Date: Wed, 27 Jan 2021 15:02:12 +0200 Subject: [PATCH 3/5] feat: make journal auto-adjustment for entries. feat: auto-focus cells inside the table. --- client/package.json | 2 +- .../DataTableCells/AccountsListFieldCell.js | 27 ++++++++---- .../DataTableCells/ItemsListCell.js | 17 +++++++- .../Accounting/MakeJournalEntriesTable.js | 15 ++++--- .../MakeJournalFormFloatingActions.js | 3 -- client/src/containers/Accounting/utils.js | 43 ++++++++++++++++++- .../containers/Entries/ItemsEntriesTable.js | 1 + client/src/hooks/index.js | 34 ++++++++++++++- client/src/hooks/useAutofocus.js | 6 +-- 9 files changed, 121 insertions(+), 27 deletions(-) diff --git a/client/package.json b/client/package.json index a73054c21..87266a85b 100644 --- a/client/package.json +++ b/client/package.json @@ -4,7 +4,7 @@ "private": true, "dependencies": { "@babel/core": "7.8.4", - "@blueprintjs/core": "^3.23.1", + "@blueprintjs/core": "^3.38.1", "@blueprintjs/datetime": "^3.15.2", "@blueprintjs/select": "^3.11.2", "@blueprintjs/table": "^3.8.3", diff --git a/client/src/components/DataTableCells/AccountsListFieldCell.js b/client/src/components/DataTableCells/AccountsListFieldCell.js index c5c2a6dcc..58fac50c1 100644 --- a/client/src/components/DataTableCells/AccountsListFieldCell.js +++ b/client/src/components/DataTableCells/AccountsListFieldCell.js @@ -1,11 +1,14 @@ -import React, { useCallback, useMemo } from 'react'; -import AccountsSuggestField from 'components/AccountsSuggestField'; -// import AccountsSelectList from 'components/AccountsSelectList'; +import React, { useRef, useCallback, useMemo } from 'react'; import classNames from 'classnames'; +import { useCellAutoFocus } from 'hooks'; + +import AccountsSuggestField from 'components/AccountsSuggestField'; + +// import AccountsSelectList from 'components/AccountsSelectList'; import { FormGroup, Classes, Intent } from '@blueprintjs/core'; // Account cell renderer. -const AccountCellRenderer = ({ +export default function AccountCellRenderer({ column: { id, accountsDataProp, @@ -18,9 +21,14 @@ const AccountCellRenderer = ({ accounts: defaultAccounts, updateData, errors, + autoFocus, ...restPayloadProps }, -}) => { +}) { + const accountRef = useRef(); + + useCellAutoFocus(accountRef, autoFocus, id, index); + const handleAccountSelected = useCallback( (account) => { updateData(index, id, account.id); @@ -49,9 +57,12 @@ const AccountCellRenderer = ({ selectedAccountId={initialValue} filterByRootTypes={filterAccountsByRootType} filterByTypes={filterAccountsByTypes} + inputProps={{ + inputRef: (ref) => (accountRef.current = ref), + }} + openOnKeyDown={true} + blurOnSelectClose={false} /> ); -}; - -export default AccountCellRenderer; +} diff --git a/client/src/components/DataTableCells/ItemsListCell.js b/client/src/components/DataTableCells/ItemsListCell.js index ba77db9c3..77e3970fc 100644 --- a/client/src/components/DataTableCells/ItemsListCell.js +++ b/client/src/components/DataTableCells/ItemsListCell.js @@ -1,15 +1,23 @@ -import React, { useCallback } from 'react'; +import React, { useCallback, useRef } from 'react'; // import ItemsListField from 'components/ItemsListField'; import ItemsSuggestField from 'components/ItemsSuggestField'; import classNames from 'classnames'; + import { FormGroup, Classes, Intent } from '@blueprintjs/core'; +import { useCellAutoFocus } from 'hooks'; + export default function ItemsListCell({ column: { id, filterSellable, filterPurchasable }, row: { index }, cell: { value: initialValue }, - payload: { items, updateData, errors }, + payload: { items, updateData, errors, autoFocus }, }) { + const fieldRef = useRef(); + + // Auto-focus the items list input field. + useCellAutoFocus(fieldRef, autoFocus, id, index); + const handleItemSelected = useCallback( (item) => { updateData(index, id, item.id); @@ -30,6 +38,11 @@ export default function ItemsListCell({ selectedItemId={initialValue} sellable={filterSellable} purchasable={filterPurchasable} + inputProps={{ + inputRef: (ref) => (fieldRef.current = ref), + }} + openOnKeyDown={true} + blurOnSelectClose={false} /> ); diff --git a/client/src/containers/Accounting/MakeJournalEntriesTable.js b/client/src/containers/Accounting/MakeJournalEntriesTable.js index f522a8f2a..d9ecba07c 100644 --- a/client/src/containers/Accounting/MakeJournalEntriesTable.js +++ b/client/src/containers/Accounting/MakeJournalEntriesTable.js @@ -2,11 +2,7 @@ import React, { useState, useMemo, useEffect, useCallback } from 'react'; import { Button } from '@blueprintjs/core'; import { FormattedMessage as T, useIntl } from 'react-intl'; import { omit } from 'lodash'; -import classNames from 'classnames'; - -import { CLASSES } from 'common/classes'; -import DataTable from 'components/DataTable'; -import { compose, transformUpdatedRows, saveInvoke } from 'utils'; +import { compose, saveInvoke } from 'utils'; import { AccountsListFieldCell, MoneyFieldCell, @@ -21,9 +17,12 @@ import { NoteCellRenderer, } from './components'; import { DataTableEditable } from 'components'; + import withAccounts from 'containers/Accounts/withAccounts'; import withCustomers from 'containers/Customers/withCustomers'; +import { updateDataReducer } from './utils'; + /** * Make journal entries table component. */ @@ -126,8 +125,9 @@ function MakeJournalEntriesTable({ }; // Handles update datatable data. - const handleUpdateData = (rowIndex, columnIdOrObj, value) => { - const newRows = transformUpdatedRows(rows, rowIndex, columnIdOrObj, value); + const handleUpdateData = (rowIndex, columnId, value) => { + const newRows = updateDataReducer(rows, rowIndex, columnId, value); + saveInvoke( onChange, newRows @@ -185,6 +185,7 @@ function MakeJournalEntriesTable({ contact_type: 'customer', })), ], + autoFocus: ['account_id', 0], }} actions={ <> diff --git a/client/src/containers/Accounting/MakeJournalFormFloatingActions.js b/client/src/containers/Accounting/MakeJournalFormFloatingActions.js index 2be8dfa2a..4df73ae9e 100644 --- a/client/src/containers/Accounting/MakeJournalFormFloatingActions.js +++ b/client/src/containers/Accounting/MakeJournalFormFloatingActions.js @@ -91,7 +91,6 @@ export default function MakeJournalFloatingAction({