@mailstep/design-system 0.7.78 → 0.7.79-beta.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mailstep/design-system",
3
- "version": "0.7.78",
3
+ "version": "0.7.79-beta.2",
4
4
  "license": "ISC",
5
5
  "type": "module",
6
6
  "main": "./ui/index.js",
@@ -39,7 +39,7 @@ var CommonGrid = function (_a) {
39
39
  // redux props
40
40
  gridSelectors = _a.gridSelectors, gridActions = _a.gridActions,
41
41
  // input props
42
- isLoading = _a.isLoading, rowsData = _a.rowsData, hasColouredRows = _a.hasColouredRows, actionColumnDefinition = _a.actionColumnDefinition, allowRowSelect = _a.allowRowSelect, allowRowSelectOnAction = _a.allowRowSelectOnAction, onRowAction = _a.onRowAction, onRowClick = _a.onRowClick, _b = _a.columnLayout, columnLayout = _b === void 0 ? 'normal' : _b, displayColumnsDefinitions = _a.displayColumnsDefinitions, className = _a.className, minColumnWidth = _a.minColumnWidth, errorMessage = _a.errorMessage, floatingButtonProps = _a.floatingButtonProps, hasGroups = _a.hasGroups, hasFilters = _a.hasFilters, isSortTerminated = _a.isSortTerminated;
42
+ isLoading = _a.isLoading, rowsData = _a.rowsData, hasColouredRows = _a.hasColouredRows, actionColumnDefinition = _a.actionColumnDefinition, allowRowSelect = _a.allowRowSelect, allowRowSelectOnAction = _a.allowRowSelectOnAction, onRowAction = _a.onRowAction, onRowClick = _a.onRowClick, onAsyncLoadFilterOptions = _a.onAsyncLoadFilterOptions, _b = _a.columnLayout, columnLayout = _b === void 0 ? 'normal' : _b, displayColumnsDefinitions = _a.displayColumnsDefinitions, className = _a.className, minColumnWidth = _a.minColumnWidth, errorMessage = _a.errorMessage, floatingButtonProps = _a.floatingButtonProps, hasGroups = _a.hasGroups, hasFilters = _a.hasFilters, isSortTerminated = _a.isSortTerminated;
43
43
  var _c = gridSelectors.uxState, uxState = _c === void 0 ? defaultUxState : _c, _d = gridSelectors.columnsWidth, columnsWidth = _d === void 0 ? defaultColumnsWidth : _d, columnsWidthVariant = gridSelectors.columnsWidthVariant, _e = gridSelectors.page, page = _e === void 0 ? 1 : _e, filter = gridSelectors.filter, sorting = gridSelectors.sorting, _f = gridSelectors.rowsPerPage, rowsPerPage = _f === void 0 ? 10 : _f;
44
44
  var clearUxState = gridActions.clearUxState, handleUxChange = gridActions.handleUxChange, _g = gridActions.addFilter, addFilter = _g === void 0 ? defaultVoidFunction : _g, _h = gridActions.addSorting, addSorting = _h === void 0 ? defaultVoidFunction : _h, _j = gridActions.setColumnWidth, setColumnWidth = _j === void 0 ? defaultVoidFunction : _j;
45
45
  var handleRowsKeyDown = useRowsKeyControls(rowsData, uxState, handleUxChange);
@@ -53,7 +53,7 @@ var CommonGrid = function (_a) {
53
53
  }, []);
54
54
  var isEmpty = !isLoading && !errorMessage && (!rowsData || rowsData.length < 1);
55
55
  var hasFloatingChildren = isLoading || errorMessage || isEmpty;
56
- return (_jsxs(_Fragment, { children: [_jsx(x.div, { className: className || '', children: _jsxs(OversizedScroll, { columnLayout: columnLayout, totalColumnsWidth: totalColumnsWidth, floatingChildren: hasFloatingChildren && _jsx(GridStatus, { isLoading: isLoading, isEmpty: isEmpty, errorMessage: errorMessage }), ref: commonGridRef, children: [_jsxs("div", { className: "gridHead", children: [hasGroups && (_jsx(GroupRow, { actionColumn: actionColumnDefinition, columns: displayColumnsDefinitions, displayColumnsWidth: displayColumnsWidth, groups: groups })), _jsx(HeadRow, { columns: displayColumnsDefinitions, onAddSort: addSorting, columnLayout: columnLayout, sortingValues: sorting, displayColumnsWidth: displayColumnsWidth, handleResizeDrag: handleResizeDrag, groups: groups, handleDragEnd: handleDragEnd, isSortTerminated: isSortTerminated }), hasFilters && (_jsx(FilterRow, { filters: filters, comparators: comparators, columns: displayColumnsDefinitions, actionColumn: actionColumnDefinition, onChange: addFilter, filterValues: filter, displayColumnsWidth: displayColumnsWidth, groups: groups, rowsData: rowsData, uxState: uxState, handleUxChange: handleUxChange }))] }), _jsx("div", { className: "body flx_1", style: rowsStyles, tabIndex: -1, onKeyDown: handleRowsKeyDown, children: !isLoading &&
56
+ return (_jsxs(_Fragment, { children: [_jsx(x.div, { className: className || '', children: _jsxs(OversizedScroll, { columnLayout: columnLayout, totalColumnsWidth: totalColumnsWidth, floatingChildren: hasFloatingChildren && _jsx(GridStatus, { isLoading: isLoading, isEmpty: isEmpty, errorMessage: errorMessage }), ref: commonGridRef, children: [_jsxs("div", { className: "gridHead", children: [hasGroups && (_jsx(GroupRow, { actionColumn: actionColumnDefinition, columns: displayColumnsDefinitions, displayColumnsWidth: displayColumnsWidth, groups: groups })), _jsx(HeadRow, { columns: displayColumnsDefinitions, onAddSort: addSorting, columnLayout: columnLayout, sortingValues: sorting, displayColumnsWidth: displayColumnsWidth, handleResizeDrag: handleResizeDrag, groups: groups, handleDragEnd: handleDragEnd, isSortTerminated: isSortTerminated }), hasFilters && (_jsx(FilterRow, { filters: filters, comparators: comparators, columns: displayColumnsDefinitions, actionColumn: actionColumnDefinition, onChange: addFilter, filterValues: filter, displayColumnsWidth: displayColumnsWidth, groups: groups, rowsData: rowsData, uxState: uxState, handleUxChange: handleUxChange, onAsyncLoadFilterOptions: onAsyncLoadFilterOptions }))] }), _jsx("div", { className: "body flx_1", style: rowsStyles, tabIndex: -1, onKeyDown: handleRowsKeyDown, children: !isLoading &&
57
57
  rowsData &&
58
58
  displayColumnsDefinitions &&
59
59
  rowsData.map(function (row, index) {
@@ -14,6 +14,7 @@ type Props = {
14
14
  rowsData: RowProps[];
15
15
  uxState: UxState;
16
16
  handleUxChange: GridActionsType['handleUxChange'];
17
+ onAsyncLoadFilterOptions?: (key: string, value: string) => void;
17
18
  };
18
19
  declare const ColumnFilterCell: FC<Props>;
19
20
  export default ColumnFilterCell;
@@ -17,7 +17,7 @@ import { x } from '@xstyled/styled-components';
17
17
  import OverlayComponent from './FilterDropdown';
18
18
  import { Cell } from './Table';
19
19
  var ColumnFilterCell = function (_a) {
20
- var onChange = _a.onChange, value = _a.value, others = _a.others, displayColumnWidth = _a.displayColumnWidth, filters = _a.filters, columnDefinition = _a.column, group = _a.group, comparators = _a.comparators, actionColumn = _a.actionColumn, rowsData = _a.rowsData, uxState = _a.uxState, handleUxChange = _a.handleUxChange;
20
+ var onChange = _a.onChange, value = _a.value, others = _a.others, displayColumnWidth = _a.displayColumnWidth, filters = _a.filters, columnDefinition = _a.column, group = _a.group, comparators = _a.comparators, actionColumn = _a.actionColumn, rowsData = _a.rowsData, uxState = _a.uxState, handleUxChange = _a.handleUxChange, onAsyncLoadFilterOptions = _a.onAsyncLoadFilterOptions;
21
21
  var cellSizeProps = getCellSizeProps(columnDefinition, displayColumnWidth);
22
22
  var handleAddFilter = useAddFilter(onChange);
23
23
  var handleChange = React.useCallback(function (event, others) {
@@ -35,6 +35,6 @@ var ColumnFilterCell = function (_a) {
35
35
  console.error("ERROR, using unknown filter type ".concat(filterType));
36
36
  return (_jsx(x.div, { children: _jsx("span", { children: "".concat(filterType, " filter") }) }));
37
37
  }
38
- return (_jsx(Cell, __assign({ className: cellClassName }, cellSizeProps, { children: _jsx(x.div, { children: _jsx(RenderComponent, __assign({ "data-test": columnDefinition.name, name: columnDefinition.name, onChange: handleChange, value: value, others: others, OverlayComponent: OverlayComponent, comparators: defaultComparators, actionColumn: actionColumn, rowsData: rowsData, uxState: uxState, handleUxChange: handleUxChange }, filterConfig === null || filterConfig === void 0 ? void 0 : filterConfig.defaultExtraProps, columnDefinition.filterExtraProps, (filterType == 'options' && { options: columnDefinition.filterOptions }))) }) })));
38
+ return (_jsx(Cell, __assign({ className: cellClassName }, cellSizeProps, { children: _jsx(x.div, { children: _jsx(RenderComponent, __assign({ asyncLoadKey: columnDefinition.asyncLoadKey, "data-test": columnDefinition.name, name: columnDefinition.name, onChange: handleChange, value: value, others: others, OverlayComponent: OverlayComponent, comparators: defaultComparators, actionColumn: actionColumn, rowsData: rowsData, uxState: uxState, handleUxChange: handleUxChange, onAsyncLoadFilterOptions: onAsyncLoadFilterOptions }, filterConfig === null || filterConfig === void 0 ? void 0 : filterConfig.defaultExtraProps, columnDefinition.filterExtraProps, (filterType == 'options' && { options: columnDefinition.filterOptions }))) }) })));
39
39
  };
40
40
  export default ColumnFilterCell;
@@ -11,6 +11,7 @@ type Props = {
11
11
  comparators?: CustomComparators;
12
12
  groups?: Group[];
13
13
  handleUxChange?: GridActionsType['handleUxChange'];
14
+ onAsyncLoadFilterOptions?: (key: string, value: string) => void;
14
15
  rowsData: RowProps[];
15
16
  uxState: UxState;
16
17
  };
@@ -5,8 +5,8 @@ import throttle from 'lodash/throttle';
5
5
  import ColumnFilterCell from './ColumnFilterCell';
6
6
  import { Row } from './Table';
7
7
  var FilterRow = function (_a) {
8
- var columns = _a.columns, groups = _a.groups, actionColumn = _a.actionColumn, onChange = _a.onChange, _b = _a.filterValues, filterValues = _b === void 0 ? {} : _b, displayColumnsWidth = _a.displayColumnsWidth, filters = _a.filters, comparators = _a.comparators, handleUxChange = _a.handleUxChange, rowsData = _a.rowsData, uxState = _a.uxState;
8
+ var columns = _a.columns, groups = _a.groups, actionColumn = _a.actionColumn, onChange = _a.onChange, _b = _a.filterValues, filterValues = _b === void 0 ? {} : _b, displayColumnsWidth = _a.displayColumnsWidth, filters = _a.filters, comparators = _a.comparators, handleUxChange = _a.handleUxChange, onAsyncLoadFilterOptions = _a.onAsyncLoadFilterOptions, rowsData = _a.rowsData, uxState = _a.uxState;
9
9
  var handleOnChange = throttle(onChange, 500);
10
- return (_jsx(Row, { className: "filterRow", children: columns.map(function (column, index) { return (_jsx(ColumnFilterCell, { column: column, actionColumn: actionColumn, rowsData: rowsData, uxState: uxState, handleUxChange: handleUxChange, onChange: handleOnChange, value: get([getFilterName(column), 'value'], filterValues), others: get([getFilterName(column), 'others'], filterValues), displayColumnWidth: displayColumnsWidth[column.name], filters: filters, comparators: comparators, group: groups === null || groups === void 0 ? void 0 : groups[index] }, index)); }) }));
10
+ return (_jsx(Row, { className: "filterRow", children: columns.map(function (column, index) { return (_jsx(ColumnFilterCell, { column: column, actionColumn: actionColumn, rowsData: rowsData, uxState: uxState, handleUxChange: handleUxChange, onChange: handleOnChange, value: get([getFilterName(column), 'value'], filterValues), others: get([getFilterName(column), 'others'], filterValues), displayColumnWidth: displayColumnsWidth[column.name], filters: filters, comparators: comparators, group: groups === null || groups === void 0 ? void 0 : groups[index], onAsyncLoadFilterOptions: onAsyncLoadFilterOptions }, index)); }) }));
11
11
  };
12
12
  export default FilterRow;
@@ -1,12 +1,15 @@
1
1
  import { FC } from 'react';
2
- import { ColumnDefinition } from '../../../types';
2
+ import { Option } from '../../../../../Elements/Select/types';
3
+ import { CommonGridProps } from '../../../types';
3
4
 
4
5
  type Props = {
5
6
  onChange: (data: any) => void;
7
+ onAsyncLoadFilterOptions?: CommonGridProps['onAsyncLoadFilterOptions'];
6
8
  isMulti?: boolean;
7
- options?: ColumnDefinition['filterOptions'];
9
+ options?: Option[];
8
10
  value?: string | string[];
9
11
  checkAllButton?: boolean;
12
+ asyncLoadKey?: string;
10
13
  };
11
14
  declare const SelectFilter: FC<Props>;
12
15
  export default SelectFilter;
@@ -1,19 +1,74 @@
1
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
+ return new (P || (P = Promise))(function (resolve, reject) {
4
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
8
+ });
9
+ };
10
+ var __generator = (this && this.__generator) || function (thisArg, body) {
11
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype);
12
+ return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
13
+ function verb(n) { return function (v) { return step([n, v]); }; }
14
+ function step(op) {
15
+ if (f) throw new TypeError("Generator is already executing.");
16
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
17
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
18
+ if (y = 0, t) op = [op[0] & 2, t.value];
19
+ switch (op[0]) {
20
+ case 0: case 1: t = op; break;
21
+ case 4: _.label++; return { value: op[1], done: false };
22
+ case 5: _.label++; y = op[1]; op = [0]; continue;
23
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
24
+ default:
25
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
26
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
27
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
28
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
29
+ if (t[2]) _.ops.pop();
30
+ _.trys.pop(); continue;
31
+ }
32
+ op = body.call(thisArg, _);
33
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
34
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
35
+ }
36
+ };
1
37
  import { jsx as _jsx } from "react/jsx-runtime";
2
- import { useCallback } from 'react';
3
- import MultiSelect from '../../../../../Elements/MultiSelect';
38
+ import { useCallback, useState } from 'react';
39
+ import Select from '../../../../../Elements/Select';
4
40
  import SingleSelect from '../../../../../Elements/SingleSelect';
41
+ import { i18n } from '@lingui/core';
5
42
  import isArray from 'lodash/isArray';
6
43
  var emptyValue = [];
7
44
  var SelectFilter = function (_a) {
8
- var onChange = _a.onChange, isMulti = _a.isMulti, value = _a.value, options = _a.options, checkAllButton = _a.checkAllButton;
45
+ var onChange = _a.onChange, isMulti = _a.isMulti, value = _a.value, options = _a.options, checkAllButton = _a.checkAllButton, asyncLoadKey = _a.asyncLoadKey, onAsyncLoadFilterOptions = _a.onAsyncLoadFilterOptions;
46
+ var _b = useState([]), asyncOptions = _b[0], setAsyncOptions = _b[1];
9
47
  var handleOnMultiChange = useCallback(function (options) {
48
+ console.log('options', options);
10
49
  onChange === null || onChange === void 0 ? void 0 : onChange(!isArray(options) || !(options === null || options === void 0 ? void 0 : options.length) ? null : options.map(function (option) { return option.value; }));
11
50
  }, [onChange]);
51
+ var isAsync = !!asyncLoadKey;
52
+ var handleLoadOptions = useCallback(function (fulltext) { return __awaiter(void 0, void 0, void 0, function () {
53
+ var data;
54
+ return __generator(this, function (_a) {
55
+ switch (_a.label) {
56
+ case 0:
57
+ data = [];
58
+ if (!asyncLoadKey) return [3 /*break*/, 2];
59
+ return [4 /*yield*/, (onAsyncLoadFilterOptions === null || onAsyncLoadFilterOptions === void 0 ? void 0 : onAsyncLoadFilterOptions(asyncLoadKey, fulltext))];
60
+ case 1:
61
+ data = (_a.sent()) || [];
62
+ _a.label = 2;
63
+ case 2:
64
+ setAsyncOptions(data);
65
+ return [2 /*return*/, data];
66
+ }
67
+ });
68
+ }); }, [options]);
12
69
  if (isMulti) {
13
- return (_jsx(MultiSelect, { maxMenuHeight: 250, onChange: handleOnMultiChange, value: value || emptyValue, options: options, checkAllButton: checkAllButton, style: "gridFilter" }));
14
- }
15
- else {
16
- return _jsx(SingleSelect, { maxMenuHeight: 250, onChange: onChange, value: value, options: options, style: "gridFilter" });
70
+ return (_jsx(Select, { maxMenuHeight: 250, onChange: handleOnMultiChange, value: value || emptyValue, options: isAsync ? asyncOptions : options, showSelectAllButton: !isAsync && checkAllButton, style: "gridFilter", loadOptions: isAsync ? handleLoadOptions : undefined, placeholder: isAsync ? i18n._({ id: 'dataGrid.filterCell', message: 'Type to filter' }) : undefined, noOptionsMessage: function () { return i18n._({ id: 'dataGrid.filterCell', message: 'Type to filter' }); }, optionVariant: "checkbox", multiLabelVariant: "count", isMulti: true }));
17
71
  }
72
+ return (_jsx(SingleSelect, { maxMenuHeight: 250, onChange: onChange, value: value, options: options, style: "gridFilter", loadOptions: isAsync ? handleLoadOptions : undefined, placeholder: isAsync ? i18n._({ id: 'dataGrid.filterCell', message: 'Type to filter' }) : undefined, isClearable: true }));
18
73
  };
19
74
  export default SelectFilter;
@@ -6,7 +6,7 @@ import { useAddFilter } from '../../hooks/useAddFilter';
6
6
  import { ExtraControlButtonPosition } from '../../types';
7
7
  import { onRowEditClick, onRowReadClick, onRowAction, onRowClick, onBatchAction } from '../utils/actions';
8
8
  import { columnDefinitions, enumColumn } from '../utils/columnDefinition';
9
- import { ReduxGrid, createRandomData, enumValues, gridDummyActions } from '../utils/utils';
9
+ import { ReduxGrid, createRandomData, enumValues, gridDummyActions, onAsyncLoadFilterOptions } from '../utils/utils';
10
10
  import withRedux from '../utils/withRedux';
11
11
  var ActionColumnButtons = {
12
12
  flexBasis: 80,
@@ -47,7 +47,7 @@ export default {
47
47
  title: 'Blocks/CommonGrid',
48
48
  decorators: [withRedux]
49
49
  };
50
- export var ComplexWithPaginationAndRedux = function () { return (_jsxs(LinguiContainer, { children: [_jsx(ConnectedFilterSetter, { gridActions: gridDummyActions }), _jsx(ReduxGrid, { columnsDefinitions: columnDefinitions, actionColumnDefinition: ActionColumnButtons, rowsData: createRandomData(10), onRowAction: onRowAction, onRowClick: onRowClick, onRowReadClick: onRowReadClick, onRowEditClick: onRowEditClick, totalRowsCount: 200, onBatchAction: onBatchAction, getRowsPerPage: getRowsPerPage, quickFilter: "textColumn", extraControlButtons: extraControlButtons, comparators: comparators, gridName: "gridName" })] })); };
50
+ export var ComplexWithPaginationAndRedux = function () { return (_jsxs(LinguiContainer, { children: [_jsx(ConnectedFilterSetter, { gridActions: gridDummyActions }), _jsx(ReduxGrid, { columnsDefinitions: columnDefinitions, actionColumnDefinition: ActionColumnButtons, rowsData: createRandomData(10), onRowAction: onRowAction, onRowClick: onRowClick, onRowReadClick: onRowReadClick, onRowEditClick: onRowEditClick, totalRowsCount: 200, onBatchAction: onBatchAction, getRowsPerPage: getRowsPerPage, onAsyncLoadFilterOptions: onAsyncLoadFilterOptions, quickFilter: "textColumn", extraControlButtons: extraControlButtons, comparators: comparators, gridName: "gridName" })] })); };
51
51
  ComplexWithPaginationAndRedux.story = {
52
52
  name: 'Complex, with pagination and redux'
53
53
  };
@@ -1,4 +1,3 @@
1
- import { ComplexCell } from '../components/ComplexCell';
2
1
  import { EnumCellExample } from '../components/EnumCellExample';
3
2
  import { enumValues } from './utils';
4
3
  export var oversizedArrayColumns = 25;
@@ -18,86 +17,99 @@ export var enumColumn = {
18
17
  cellComponent: EnumCellExample
19
18
  };
20
19
  export var columnDefinitions = [
20
+ /*
21
21
  {
22
- name: 'hiddenColumn',
23
- title: 'Hidden column',
24
- flexBasis: 160,
25
- filtering: true,
26
- sorting: true,
27
- defaultHidden: true
22
+ name: 'hiddenColumn',
23
+ title: 'Hidden column',
24
+ flexBasis: 160,
25
+ filtering: true,
26
+ sorting: true,
27
+ defaultHidden: true
28
28
  },
29
29
  {
30
- name: 'textColumn',
31
- title: 'Text column',
32
- flexBasis: 160,
33
- filtering: true,
34
- sorting: true
30
+ name: 'textColumn',
31
+ title: 'Text column',
32
+ flexBasis: 160,
33
+ filtering: true,
34
+ sorting: true
35
35
  },
36
36
  enumColumn,
37
+ */
37
38
  {
38
- name: 'numberColumn',
39
- title: 'Number Column',
39
+ name: 'enumColumnAsync',
40
+ title: 'Enum Column Async',
40
41
  flexBasis: 160,
42
+ filterExtraProps: { isMulti: false },
41
43
  filtering: true,
42
- filteringType: 'number',
43
- filterExtraProps: {
44
- decimals: 2
45
- },
46
- sorting: true
44
+ sorting: true,
45
+ asyncLoadKey: 'enumColumnAsync'
47
46
  },
47
+ /*
48
48
  {
49
- name: 'numberFloatColumn',
50
- title: 'Number Float Column',
51
- flexBasis: 160,
52
- filtering: true,
53
- filteringType: 'number',
54
- sorting: true,
55
- filterExtraProps: {
56
- isFloat: true
57
- }
49
+ name: 'numberColumn',
50
+ title: 'Number Column',
51
+ flexBasis: 160,
52
+ filtering: true,
53
+ filteringType: 'number',
54
+ filterExtraProps: {
55
+ decimals: 2
56
+ },
57
+ sorting: true
58
58
  },
59
59
  {
60
- name: 'dateColumn',
61
- title: 'Date Column',
62
- flexBasis: 160,
63
- filtering: true,
64
- filteringType: 'date',
65
- sorting: true,
66
- filterExtraProps: {
67
- filterTime: true
68
- }
60
+ name: 'numberFloatColumn',
61
+ title: 'Number Float Column',
62
+ flexBasis: 160,
63
+ filtering: true,
64
+ filteringType: 'number',
65
+ sorting: true,
66
+ filterExtraProps: {
67
+ isFloat: true
68
+ }
69
69
  },
70
70
  {
71
- name: 'boolColumn',
72
- title: 'Bool Column',
73
- flexBasis: 160,
74
- filtering: true,
75
- filteringType: 'flag',
76
- sorting: true,
77
- formatRowValue: function (row) {
78
- return row.boolColumn ? 'Yes' : 'No';
79
- }
71
+ name: 'dateColumn',
72
+ title: 'Date Column',
73
+ flexBasis: 160,
74
+ filtering: true,
75
+ filteringType: 'date',
76
+ sorting: true,
77
+ filterExtraProps: {
78
+ filterTime: true
79
+ }
80
80
  },
81
81
  {
82
- name: 'advancedColumn',
83
- title: 'Advanced Column',
84
- flexBasis: 160,
85
- formatRowValue: function (row) {
86
- return "".concat((row.numberColumn / 4) * row.textColumn.length);
87
- }
82
+ name: 'boolColumn',
83
+ title: 'Bool Column',
84
+ flexBasis: 160,
85
+ filtering: true,
86
+ filteringType: 'flag',
87
+ sorting: true,
88
+ formatRowValue: (row: { boolColumn: boolean }): RowValueType => {
89
+ return row.boolColumn ? 'Yes' : 'No'
90
+ }
88
91
  },
89
92
  {
90
- name: 'complexColumn',
91
- title: 'Complex Column',
92
- flexBasis: 350,
93
- cellComponent: ComplexCell
93
+ name: 'advancedColumn',
94
+ title: 'Advanced Column',
95
+ flexBasis: 160,
96
+ formatRowValue: (row: { numberColumn: number; textColumn: string }): RowValueType => {
97
+ return `${(row.numberColumn / 4) * row.textColumn.length}`
98
+ }
94
99
  },
95
100
  {
96
- name: 'stickyColumn',
97
- title: 'Sticky Column',
98
- flexBasis: 160,
99
- alwaysOn: true,
100
- sticky: true,
101
- stickTo: 'right'
101
+ name: 'complexColumn',
102
+ title: 'Complex Column',
103
+ flexBasis: 350,
104
+ cellComponent: ComplexCell
105
+ },
106
+ {
107
+ name: 'stickyColumn',
108
+ title: 'Sticky Column',
109
+ flexBasis: 160,
110
+ alwaysOn: true,
111
+ sticky: true,
112
+ stickTo: 'right'
102
113
  }
114
+ */
103
115
  ];
@@ -18,3 +18,7 @@ export declare const gridDummyActions: Required<GridActionsType>;
18
18
  export declare const createOversizedRandomData: (count: number) => any[];
19
19
  export declare const ReduxGrid: FC<any>;
20
20
  export declare const extraControlButtons: ExtraControlButton[];
21
+ export declare const onAsyncLoadFilterOptions: (key: string, value: string) => Promise<{
22
+ label: string;
23
+ value: string;
24
+ }[]>;
@@ -72,3 +72,11 @@ export var extraControlButtons = [
72
72
  { label: 'Reload', position: ExtraControlButtonPosition.TopLeft },
73
73
  { label: 'Export all', position: ExtraControlButtonPosition.TopRight }
74
74
  ];
75
+ export var onAsyncLoadFilterOptions = function (key, value) {
76
+ return Promise.resolve([
77
+ { label: 'test1', value: 'test1' },
78
+ { label: 'test2', value: 'test2' },
79
+ { label: 'test3', value: 'test3' },
80
+ { label: 'test4', value: 'test4' },
81
+ ]);
82
+ };
@@ -92,6 +92,7 @@ type ColumnBaseProps = {
92
92
  };
93
93
  export type RowValueType = string | React.ReactNode | number | void;
94
94
  export type ColumnDefinition<ColumnName extends string = string> = ColumnBaseProps & {
95
+ asyncLoadKey?: string;
95
96
  name: ColumnName;
96
97
  group?: Group['name'];
97
98
  systemName?: string;
@@ -248,6 +249,7 @@ export type CommonGridProps<TData extends RowProps = RowProps> = {
248
249
  onRowReadClick?: (id: string, props: TData) => void;
249
250
  onRowClick?: (id: string, props: TData) => void;
250
251
  onBatchAction?: OnBatchActionFn;
252
+ onAsyncLoadFilterOptions?: (key: string, value: string) => Promise<Option[]>;
251
253
  columnLayout?: ColumnLayout;
252
254
  quickFilter?: string;
253
255
  confirmOnReset?: () => boolean;
@@ -8,10 +8,7 @@ export declare const calculatePaginator: (page: number, rowsPerPage: number) =>
8
8
  offset: number;
9
9
  limit: number;
10
10
  };
11
- export declare const createFilterType: (columnDefinition: {
12
- filterOptions?: ColumnDefinition["filterOptions"];
13
- filteringType?: ColumnDefinition["filteringType"];
14
- }) => FilterProps["type"];
11
+ export declare const createFilterType: (columnDefinition: ColumnDefinition) => FilterProps["type"];
15
12
  export declare const getGroups: (columns: ColumnDefinition[]) => Group[];
16
13
  export declare const getGroupClassNames: (group?: Group) => string;
17
14
  export declare const getStickyCollClassNames: (sticky: boolean, stickTo?: StickTo) => string;
@@ -39,7 +39,7 @@ export var calculatePaginator = function (page, rowsPerPage) { return ({
39
39
  limit: rowsPerPage
40
40
  }); };
41
41
  export var createFilterType = function (columnDefinition) {
42
- if (columnDefinition.filterOptions)
42
+ if (columnDefinition.filterOptions || columnDefinition.asyncLoadKey)
43
43
  return 'options';
44
44
  else
45
45
  return columnDefinition.filteringType || 'text';
@@ -105,6 +105,6 @@ var Select = function (_a) {
105
105
  }
106
106
  }); }); } : undefined;
107
107
  }, [loadOptions]);
108
- return (_jsxs(SpaceAroundWrap, { spaceAround: spaceAround, className: className, children: [_jsxs(Wrapper, { children: [label && _jsx(FieldLabel, { htmlFor: name, children: label }), _jsx(RenderComponent, __assign({ id: name, name: name, options: options, loadOptions: handleLoadOptions, defaultOptions: defaultOptions, value: selectedOption, onChange: onChange, onBlur: onBlur, isDisabled: disabled || isLoading, isLoading: isLoading, isInvalid: isInvalid !== undefined ? isInvalid : !!error, isDarkPlaceholderText: isDarkPlaceholderText, placeholder: placeholder || i18n._({ id: 'components.dropdown.placeholder', message: 'Select...' }), styles: customStyles, theme: customTheme, icon: icon, hideSelectedOptions: !!(isMulti && multiLabelVariant != 'count'), onInputChange: onInputChange, isSearchable: isAsync || isSearchable, isMulti: isMulti, classNamePrefix: "react-select", components: customComponents, closeMenuOnSelect: isMulti ? false : undefined }, passTroughProps, { ref: innerRef, tabIndex: null, systemTheme: theme, resetGrid: resetGrid, onCustomSelectAll: setAllOptions, onCustomDeselectAll: unsetAllOptions, selectAllButton: showSelectAllButton, resetGridButton: showResetGridButton, maxMenuHeight: modifiedMaxMenuHeight, getOptionValue: getOptionValue, noOptionsMessage: noOptionsMessage, loadingMessage: loadingMessage, shortValues: shortValues }))] }), error && _jsx(ErrorMessage, { children: error })] }));
108
+ return (_jsxs(SpaceAroundWrap, { spaceAround: spaceAround, className: className, children: [_jsxs(Wrapper, { children: [label && _jsx(FieldLabel, { htmlFor: name, children: label }), _jsx(RenderComponent, __assign({ id: name, name: name, options: options, loadOptions: handleLoadOptions, defaultOptions: defaultOptions, value: selectedOption, onChange: onChange, onBlur: onBlur, isDisabled: disabled || isLoading, isLoading: isLoading, isInvalid: isInvalid !== undefined ? isInvalid : !!error, isDarkPlaceholderText: isDarkPlaceholderText, placeholder: placeholder || i18n._({ id: 'components.dropdown.placeholder', message: 'Select...' }), styles: customStyles, theme: customTheme, icon: icon, hideSelectedOptions: !!(isMulti && multiLabelVariant != 'count'), onInputChange: onInputChange, isSearchable: isAsync || isSearchable, isMulti: isMulti, classNamePrefix: "react-select", components: customComponents, closeMenuOnSelect: isMulti ? false : undefined, noOptionsMessage: noOptionsMessage }, passTroughProps, { ref: innerRef, tabIndex: null, systemTheme: theme, resetGrid: resetGrid, onCustomSelectAll: setAllOptions, onCustomDeselectAll: unsetAllOptions, selectAllButton: showSelectAllButton, resetGridButton: showResetGridButton, maxMenuHeight: modifiedMaxMenuHeight, getOptionValue: getOptionValue, loadingMessage: loadingMessage, shortValues: shortValues }))] }), error && _jsx(ErrorMessage, { children: error })] }));
109
109
  };
110
110
  export default Select;
@@ -85,12 +85,11 @@ var SingleSelect = function (props) {
85
85
  var _e = useState(false), isCreating = _e[0], setIsCreating = _e[1];
86
86
  var asAsync = !!loadOptions || !!onCreateOption;
87
87
  var noOptionsMessage = useCallback(function (inputValue) {
88
- return loadOptions && inputValue.length < asyncLoadMinChars
89
- ? i18n._({
90
- id: 'components.dropdown.writeMoreChars',
91
- message: 'Write at least ${asyncLoadMinChars} characters.'
92
- })
93
- : i18n._({ id: 'components.dropdown.noOptions', message: 'No options' });
88
+ if (!loadOptions)
89
+ return i18n._({ id: 'components.dropdown.noOptions', message: 'No options' });
90
+ if (inputValue.length < asyncLoadMinChars)
91
+ return i18n._({ id: 'components.dropdown.writeMoreChars', message: 'Write at least ${asyncLoadMinChars} characters.' });
92
+ return i18n._({ id: 'dataGrid.filterCell', message: 'Type to filter' });
94
93
  }, [loadOptions, asyncLoadMinChars]);
95
94
  var handleLoadOptions = useCallback(function (inputValue) { return __awaiter(void 0, void 0, void 0, function () {
96
95
  return __generator(this, function (_a) {
package/ui/index.d.ts CHANGED
@@ -27,7 +27,6 @@ import { default as Label } from './Elements/Label';
27
27
  import { default as Line } from './Elements/Line';
28
28
  import { default as Link } from './Elements/Link';
29
29
  import { default as Logo } from './Elements/Logo';
30
- import { default as MultiSelect } from './Elements/MultiSelect';
31
30
  import { default as Pagination } from './Elements/Pagination';
32
31
  import { default as Portal } from './Elements/Portal';
33
32
  import { default as ProgressBar } from './Elements/ProgressBar';
@@ -47,7 +46,7 @@ import { default as TextArea } from './Forms/TextArea';
47
46
  import { default as ThemeProvider } from './ThemeProvider';
48
47
  import { default as utils } from './utils';
49
48
 
50
- export { DropdownSelect, DatePicker, CommonGrid, Popover, SingleSelect, MultiSelect, Select, Card, CornerDialog, ImageList, LightBox, Modal, Tabs, Alert, Avatar, AsyncSelect, Badge, BorderedBox, Button, Dropdown, ErrorMessage, Icon, Image, Label, Line, Link, Logo, Pagination, Portal, ProgressBar, SimpleLink, SpaceAround, Spinner, Tag, Toast, Toggle, Typography, Checkbox, Input, RadioButton, ThemeProvider, utils, TextArea, LoginPage, LanguageSwitch, SideMenu, Stepper, Scheduler };
49
+ export { DropdownSelect, DatePicker, CommonGrid, Popover, SingleSelect, Select, Card, CornerDialog, ImageList, LightBox, Modal, Tabs, Alert, Avatar, AsyncSelect, Badge, BorderedBox, Button, Dropdown, ErrorMessage, Icon, Image, Label, Line, Link, Logo, Pagination, Portal, ProgressBar, SimpleLink, SpaceAround, Spinner, Tag, Toast, Toggle, Typography, Checkbox, Input, RadioButton, ThemeProvider, utils, TextArea, LoginPage, LanguageSwitch, SideMenu, Stepper, Scheduler };
51
50
  export * from './Blocks/CornerDialog';
52
51
  export * from './Blocks/ImageList';
53
52
  export * from './Blocks/LightBox';
@@ -87,7 +86,6 @@ export * from './Elements/DatePicker';
87
86
  export * from './Blocks/CommonGrid';
88
87
  export * from './Blocks/Popover';
89
88
  export * from './Elements/SingleSelect';
90
- export * from './Elements/MultiSelect';
91
89
  export * from './Elements/Select';
92
90
  export * from './Elements/DropdownSelect';
93
91
  export * from './Forms/TextArea';