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={}
/>
+ }
+ />