diff --git a/client/src/components/AccountsSelectList.js b/client/src/components/AccountsSelectList.js index cddbcbe81..75a7d3e09 100644 --- a/client/src/components/AccountsSelectList.js +++ b/client/src/components/AccountsSelectList.js @@ -1,9 +1,10 @@ import React, { useCallback, useState, useEffect, useMemo } from 'react'; import { MenuItem, Button } from '@blueprintjs/core'; import { Select } from '@blueprintjs/select'; -import { FormattedMessage as T } from 'components'; +import { MenuItemNestedText, FormattedMessage as T } from 'components'; import classNames from 'classnames'; import { filterAccountsByQuery } from './utils'; +import { nestedArrayToflatten } from 'utils'; import { CLASSES } from 'common/classes'; export default function AccountsSelectList({ @@ -22,9 +23,14 @@ export default function AccountsSelectList({ buttonProps = {}, }) { + const flattenAccounts = useMemo( + () => nestedArrayToflatten(accounts), + [accounts], + ); + // Filters accounts based on filter props. const filteredAccounts = useMemo(() => { - let filteredAccounts = filterAccountsByQuery(accounts, { + let filteredAccounts = filterAccountsByQuery(flattenAccounts, { filterByRootTypes, filterByParentTypes, filterByTypes, @@ -32,7 +38,7 @@ export default function AccountsSelectList({ }); return filteredAccounts; }, [ - accounts, + flattenAccounts, filterByRootTypes, filterByParentTypes, filterByTypes, @@ -62,7 +68,7 @@ export default function AccountsSelectList({ const accountItem = useCallback((item, { handleClick, modifiers, query }) => { return ( } label={item.code} key={item.id} onClick={handleClick} diff --git a/client/src/components/AccountsSuggestField.js b/client/src/components/AccountsSuggestField.js index 177aecc60..62cd34737 100644 --- a/client/src/components/AccountsSuggestField.js +++ b/client/src/components/AccountsSuggestField.js @@ -6,8 +6,9 @@ import intl from 'react-intl-universal'; import classNames from 'classnames'; import { CLASSES } from 'common/classes'; -import { FormattedMessage as T } from 'components'; +import { MenuItemNestedText, FormattedMessage as T } from 'components'; import { filterAccountsByQuery } from './utils'; +import { nestedArrayToflatten } from 'utils'; /** * Accounts suggest field. @@ -27,9 +28,14 @@ export default function AccountsSuggestField({ ...suggestProps }) { + const flattenAccounts = useMemo( + () => nestedArrayToflatten(accounts), + [accounts], + ); + // Filters accounts based on filter props. const filteredAccounts = useMemo(() => { - let filteredAccounts = filterAccountsByQuery(accounts, { + let filteredAccounts = filterAccountsByQuery(flattenAccounts, { filterByRootTypes, filterByParentTypes, filterByTypes, @@ -37,7 +43,7 @@ export default function AccountsSuggestField({ }); return filteredAccounts; }, [ - accounts, + flattenAccounts, filterByRootTypes, filterByParentTypes, filterByTypes, @@ -84,7 +90,7 @@ export default function AccountsSuggestField({ const accountItem = useCallback((item, { handleClick, modifiers, query }) => { return ( } label={item.code} key={item.id} onClick={handleClick} diff --git a/client/src/components/Menu/index.js b/client/src/components/Menu/index.js new file mode 100644 index 000000000..387725329 --- /dev/null +++ b/client/src/components/Menu/index.js @@ -0,0 +1,16 @@ +import React from 'react'; + +/** + * Menu item nested text. + */ +export function MenuItemNestedText({ level, text }) { + const whitespaces = [...Array(level - 1)].map((e, i) => ( + + )); + + return ( + <> + {whitespaces} {text} + > + ); +} diff --git a/client/src/components/index.js b/client/src/components/index.js index c2d234be1..ae78a3382 100644 --- a/client/src/components/index.js +++ b/client/src/components/index.js @@ -61,6 +61,8 @@ import Card from './Card'; import { ItemsMultiSelect } from './Items'; +export * from './Menu'; + const Hint = FieldHint; const T = FormattedMessage; diff --git a/client/src/containers/Dialogs/AccountDialog/AccountDialogFormContent.js b/client/src/containers/Dialogs/AccountDialog/AccountDialogFormContent.js index f00a20a88..aa5044f7c 100644 --- a/client/src/containers/Dialogs/AccountDialog/AccountDialogFormContent.js +++ b/client/src/containers/Dialogs/AccountDialog/AccountDialogFormContent.js @@ -172,13 +172,13 @@ function AccountFormDialogFields({