feat(inventory item & valuation): warehouse multi select.

This commit is contained in:
elforjani13
2022-02-17 20:30:16 +02:00
parent cd663d99b7
commit 7a27ea9a65
13 changed files with 324 additions and 53 deletions

View File

@@ -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 (
<FinancialStatementHeader
isOpen={isFilterDrawerOpen}
@@ -80,6 +84,11 @@ function InventoryItemDetailsHeader({
title={<T id={'general'} />}
panel={<InventoryItemDetailsHeaderGeneralPanel />}
/>
<Tab
id="dimensions"
title={'Dimensions'}
panel={<InventoryItemDetailsHeaderDimensionsPanel />}
/>
</Tabs>
<div class="financial-header-drawer__footer">
<Button className={'mr1'} intent={Intent.PRIMARY} type={'submit'}>

View File

@@ -0,0 +1,44 @@
import React from 'react';
import intl from 'react-intl-universal';
import { FormGroup, Classes } from '@blueprintjs/core';
import { WarehouseMultiSelect, Row, Col } from 'components';
import {
InventoryItemDetailsHeaderDimensionsProvider,
useInventoryItemDetailsHeaderDimensionsPanelContext,
} from './InventoryItemDetailsHeaderDimensionsPanelProvider';
/**
* Inventory Item deatil header dismension panel.
* @returns
*/
export default function InventoryItemDetailsHeaderDimensionsPanel() {
return (
<InventoryItemDetailsHeaderDimensionsProvider>
<InventoryItemDetailsHeaderDimensionsPanelContent />
</InventoryItemDetailsHeaderDimensionsProvider>
);
}
/**
* Inventory Valuation header dismension panel content.
* @returns
*/
function InventoryItemDetailsHeaderDimensionsPanelContent() {
const { warehouses } = useInventoryItemDetailsHeaderDimensionsPanelContext();
return (
<Row>
<Col xs={4}>
<FormGroup
label={intl.get('warehouses_multi_select.label')}
className={Classes.FILL}
>
<WarehouseMultiSelect
name={'warehousesIds'}
warehouses={warehouses}
/>
</FormGroup>
</Col>
</Row>
);
}

View File

@@ -0,0 +1,38 @@
import React from 'react';
import { useWarehouses } from 'hooks/query';
import { FinancialHeaderLoadingSkeleton } from '../FinancialHeaderLoadingSkeleton';
const InventoryItemDetailsHeaderDimensionsPanelContext = React.createContext();
/**
* Inventory Item details header provider.
* @returns
*/
function InventoryItemDetailsHeaderDimensionsProvider({ ...props }) {
// Fetch warehouses list.
const { data: warehouses, isLoading: isWarehouesLoading } = useWarehouses();
// Provider
const provider = {
warehouses,
isWarehouesLoading,
};
return isWarehouesLoading ? (
<FinancialHeaderLoadingSkeleton />
) : (
<InventoryItemDetailsHeaderDimensionsPanelContext.Provider
value={provider}
{...props}
/>
);
}
const useInventoryItemDetailsHeaderDimensionsPanelContext = () =>
React.useContext(InventoryItemDetailsHeaderDimensionsPanelContext);
export {
InventoryItemDetailsHeaderDimensionsProvider,
useInventoryItemDetailsHeaderDimensionsPanelContext,
};