From 7a27ea9a650688b99b06231fec16267bff44ca56 Mon Sep 17 00:00:00 2001 From: elforjani13 <39470382+elforjani13@users.noreply.github.com> Date: Thu, 17 Feb 2022 20:30:16 +0200 Subject: [PATCH] feat(inventory item & valuation): warehouse multi select. --- .../Warehouses/WarehouseMultiSelect.js | 74 +++++++++++++++++++ src/components/Warehouses/index.js | 3 +- .../BalanceSheetHeaderDimensionsProvider.js | 14 +++- .../InventoryItemDetailsHeader.js | 33 ++++++--- ...ventoryItemDetailsHeaderDimensionsPanel.js | 44 +++++++++++ ...temDetailsHeaderDimensionsPanelProvider.js | 38 ++++++++++ .../InventoryValuationHeader.js | 21 ++++-- ...InventoryValuationHeaderDimensionsPanel.js | 44 +++++++++++ ...yValuationHeaderDimensionsPanelProvider.js | 38 ++++++++++ ...ProfitLossSheetHeaderDimensionsProvider.js | 6 +- src/lang/en/index.json | 4 +- src/style/App.scss | 48 ++++++------ .../FinancialStatements/DrawerHeader.scss | 10 +++ 13 files changed, 324 insertions(+), 53 deletions(-) create mode 100644 src/components/Warehouses/WarehouseMultiSelect.js create mode 100644 src/containers/FinancialStatements/InventoryItemDetails/InventoryItemDetailsHeaderDimensionsPanel.js create mode 100644 src/containers/FinancialStatements/InventoryItemDetails/InventoryItemDetailsHeaderDimensionsPanelProvider.js create mode 100644 src/containers/FinancialStatements/InventoryValuation/InventoryValuationHeaderDimensionsPanel.js create mode 100644 src/containers/FinancialStatements/InventoryValuation/InventoryValuationHeaderDimensionsPanelProvider.js diff --git a/src/components/Warehouses/WarehouseMultiSelect.js b/src/components/Warehouses/WarehouseMultiSelect.js new file mode 100644 index 000000000..e39651e94 --- /dev/null +++ b/src/components/Warehouses/WarehouseMultiSelect.js @@ -0,0 +1,74 @@ +import React from 'react'; +import intl from 'react-intl-universal'; +import { MenuItem } from '@blueprintjs/core'; +import { FMultiSelect } from '../Forms'; + +/** + * + * @param {*} query + * @param {*} warehouse + * @param {*} _index + * @param {*} exactMatch + * @returns + */ +const warehouseItemPredicate = (query, warehouse, _index, exactMatch) => { + const normalizedTitle = warehouse.name.toLowerCase(); + const normalizedQuery = query.toLowerCase(); + + if (exactMatch) { + return normalizedTitle === normalizedQuery; + } else { + return ( + `${warehouse.code}. ${normalizedTitle}`.indexOf(normalizedQuery) >= 0 + ); + } +}; + +/** + * + * @param {*} branch + * @param {*} param1 + * @returns + */ +const warehouseItemRenderer = ( + warehouse, + { handleClick, modifiers, query }, + { isSelected }, +) => { + return ( + + ); +}; + +const warehouseSelectProps = { + itemPredicate: warehouseItemPredicate, + itemRenderer: warehouseItemRenderer, + valueAccessor: (item) => item.id, + labelAccessor: (item) => item.label, + tagRenderer: (item) => item.name, +}; + +/** + * warehouses mulit select. + * @param {*} param0 + * @returns + */ +export function WarehouseMultiSelect({ warehouses, ...rest }) { + return ( + + ); +} diff --git a/src/components/Warehouses/index.js b/src/components/Warehouses/index.js index 3b38eb9e6..6975b2230 100644 --- a/src/components/Warehouses/index.js +++ b/src/components/Warehouses/index.js @@ -1 +1,2 @@ -export * from './WarehouseSelect'; \ No newline at end of file +export * from './WarehouseSelect'; +export * from './WarehouseMultiSelect'; diff --git a/src/containers/FinancialStatements/BalanceSheet/BalanceSheetHeaderDimensionsProvider.js b/src/containers/FinancialStatements/BalanceSheet/BalanceSheetHeaderDimensionsProvider.js index a3ea4de19..183f22fdf 100644 --- a/src/containers/FinancialStatements/BalanceSheet/BalanceSheetHeaderDimensionsProvider.js +++ b/src/containers/FinancialStatements/BalanceSheet/BalanceSheetHeaderDimensionsProvider.js @@ -3,7 +3,7 @@ import React from 'react'; import { useBranches } from 'hooks/query'; import { FinancialHeaderLoadingSkeleton } from '../FinancialHeaderLoadingSkeleton'; -const BalanceSheetHeaderDimensionsPanelConext = React.createContext(); +const BalanceSheetHeaderDimensionsPanelContext = React.createContext(); /** * BL sheet header provider. @@ -22,11 +22,17 @@ function BalanceSheetHeaderDimensionsProvider({ ...props }) { return isBranchesLoading ? ( ) : ( - + ); } const useBalanceSheetHeaderDimensionsPanelContext = () => - React.useContext(BalanceSheetHeaderDimensionsPanelConext); + React.useContext(BalanceSheetHeaderDimensionsPanelContext); -export { BalanceSheetHeaderDimensionsProvider, useBalanceSheetHeaderDimensionsPanelContext }; +export { + BalanceSheetHeaderDimensionsProvider, + useBalanceSheetHeaderDimensionsPanelContext, +}; diff --git a/src/containers/FinancialStatements/InventoryItemDetails/InventoryItemDetailsHeader.js b/src/containers/FinancialStatements/InventoryItemDetails/InventoryItemDetailsHeader.js index 5f7a2d2a2..0e3db74d5 100644 --- a/src/containers/FinancialStatements/InventoryItemDetails/InventoryItemDetailsHeader.js +++ b/src/containers/FinancialStatements/InventoryItemDetails/InventoryItemDetailsHeader.js @@ -8,6 +8,7 @@ import intl from 'react-intl-universal'; import FinancialStatementHeader from 'containers/FinancialStatements/FinancialStatementHeader'; import InventoryItemDetailsHeaderGeneralPanel from './InventoryItemDetailsHeaderGeneralPanel'; +import InventoryItemDetailsHeaderDimensionsPanel from './InventoryItemDetailsHeaderDimensionsPanel'; import withInventoryItemDetails from './withInventoryItemDetails'; import withInventoryItemDetailsActions from './withInventoryItemDetailsActions'; @@ -32,27 +33,28 @@ function InventoryItemDetailsHeader({ fromDate: moment().toDate(), toDate: moment().toDate(), itemsIds: [], + warehousesIds: [], }; // Filter form initial values. - const initialValues = transformToForm({ - ...pageFilter, - fromDate: moment(pageFilter.fromDate).toDate(), - toDate: moment(pageFilter.toDate).toDate(), - }, defaultValues); + const initialValues = transformToForm( + { + ...pageFilter, + fromDate: moment(pageFilter.fromDate).toDate(), + toDate: moment(pageFilter.toDate).toDate(), + warehousesIds: [], + }, + defaultValues, + ); // Validation schema. const validationSchema = Yup.object().shape({ - fromDate: Yup.date() - .required() - .label(intl.get('fromDate')), + fromDate: Yup.date().required().label(intl.get('fromDate')), toDate: Yup.date() .min(Yup.ref('fromDate')) .required() .label(intl.get('toDate')), }); -; - // Handle form submit. const handleSubmit = (values, { setSubmitting }) => { onSubmitFilter(values); @@ -61,8 +63,10 @@ function InventoryItemDetailsHeader({ }; // Handle drawer close action. - const handleDrawerClose = () => { toggleFilterDrawer(false); }; - + const handleDrawerClose = () => { + toggleFilterDrawer(false); + }; + return ( } panel={} /> + } + />