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

@@ -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 (
<MenuItem
active={modifiers.active}
disabled={modifiers.disabled}
icon={isSelected ? 'tick' : 'blank'}
text={warehouse.name.toString()}
label={warehouse.code.toString()}
key={warehouse.id}
onClick={handleClick}
/>
);
};
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 (
<FMultiSelect
items={warehouses}
placeholder={intl.get('warehouses_multi_select.placeholder')}
popoverProps={{ minimal: true, usePortal: false }}
{...warehouseSelectProps}
{...rest}
/>
);
}

View File

@@ -1 +1,2 @@
export * from './WarehouseSelect';
export * from './WarehouseSelect';
export * from './WarehouseMultiSelect';