@mailstep/design-system 0.8.0-beta.1 → 0.8.1

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.
Files changed (73) hide show
  1. package/package.json +14 -8
  2. package/ui/Blocks/CommonGrid/CommonGrid.js +2 -2
  3. package/ui/Blocks/CommonGrid/components/ColumnFilterCell.d.ts +1 -0
  4. package/ui/Blocks/CommonGrid/components/ColumnFilterCell.js +2 -2
  5. package/ui/Blocks/CommonGrid/components/FilterRow.d.ts +1 -0
  6. package/ui/Blocks/CommonGrid/components/FilterRow.js +2 -2
  7. package/ui/Blocks/CommonGrid/components/Filters/BooleanSelect/BooleanSelect.js +1 -1
  8. package/ui/Blocks/CommonGrid/components/Filters/GridSelect/GridSelect.d.ts +7 -3
  9. package/ui/Blocks/CommonGrid/components/Filters/GridSelect/GridSelect.js +74 -9
  10. package/ui/Blocks/CommonGrid/components/Filters/GridSelect/guards.d.ts +3 -0
  11. package/ui/Blocks/CommonGrid/components/Filters/GridSelect/guards.js +3 -0
  12. package/ui/Blocks/CommonGrid/storybook/stories/complexWithPaginationAndRedux.stories.js +2 -2
  13. package/ui/Blocks/CommonGrid/storybook/utils/columnDefinition.js +9 -0
  14. package/ui/Blocks/CommonGrid/storybook/utils/utils.d.ts +1 -0
  15. package/ui/Blocks/CommonGrid/storybook/utils/utils.js +19 -0
  16. package/ui/Blocks/CommonGrid/types.d.ts +2 -0
  17. package/ui/Blocks/CommonGrid/utils/index.d.ts +1 -4
  18. package/ui/Blocks/CommonGrid/utils/index.js +1 -1
  19. package/ui/Blocks/CornerDialog/stories/CornerDialog.stories.d.ts +1 -1
  20. package/ui/Blocks/ImageList/stories/ImageList.stories.d.ts +1 -1
  21. package/ui/Blocks/LanguageSwitch/stories/LanguageSwith.stories.d.ts +1 -1
  22. package/ui/Blocks/LightBox/stories/LightBox.stories.d.ts +1 -1
  23. package/ui/Blocks/Modal/stories/Modal.stories.d.ts +1 -1
  24. package/ui/Blocks/SideMenu/styles.js +2 -2
  25. package/ui/Blocks/Tabs/stories/Tabs.stories.d.ts +1 -1
  26. package/ui/Elements/Alert/stories/Alert.stories.d.ts +1 -1
  27. package/ui/Elements/AsyncSelect/stories/AsyncSelect.stories.d.ts +1 -1
  28. package/ui/Elements/Avatar/stories/Avatar.stories.d.ts +1 -1
  29. package/ui/Elements/Badge/stories/Badge.stories.d.ts +1 -1
  30. package/ui/Elements/BarChartSymbol/stories/BarChartSymbol.stories.d.ts +1 -1
  31. package/ui/Elements/BorderedBox/stories/BorderedBox.stories.d.ts +1 -1
  32. package/ui/Elements/Button/stories/Button.stories.d.ts +1 -1
  33. package/ui/Elements/Card/stories/Card.stories.d.ts +1 -1
  34. package/ui/Elements/CheckedCircle/storries/CheckedCircle.stories.d.ts +1 -1
  35. package/ui/Elements/Dropdown/stories/Dropdown.stories.d.ts +1 -1
  36. package/ui/Elements/ErrorMessage/stories/ErrorMessage.stories.d.ts +1 -1
  37. package/ui/Elements/Icon/stories/BadgeIcon.stories.d.ts +2 -2
  38. package/ui/Elements/Icon/stories/Icon.stories.d.ts +1 -1
  39. package/ui/Elements/Image/stories/Image.stories.d.ts +1 -1
  40. package/ui/Elements/Label/stories/Label.stories.d.ts +1 -1
  41. package/ui/Elements/Line/stories/Line.stories.d.ts +1 -1
  42. package/ui/Elements/Link/stories/Link.stories.d.ts +1 -1
  43. package/ui/Elements/Logo/stories/Logo.stories.d.ts +1 -1
  44. package/ui/Elements/Pagination/stories/Pagination.stories.d.ts +1 -1
  45. package/ui/Elements/ProgressBar/stories/ProgressBar.stories.d.ts +1 -1
  46. package/ui/Elements/Select/Select.js +4 -3
  47. package/ui/Elements/Select/components/ConnectedMenu.js +10 -3
  48. package/ui/Elements/Select/components/SelectAll.d.ts +5 -3
  49. package/ui/Elements/Select/components/SelectAll.js +8 -5
  50. package/ui/Elements/Select/themes/index.js +1 -1
  51. package/ui/Elements/Select/themes/selectStyles.js +4 -1
  52. package/ui/Elements/SingleSelect/SingleSelect.js +5 -6
  53. package/ui/Elements/SpaceAround/stories/SpaceAround.stories.d.ts +1 -1
  54. package/ui/Elements/Spinner/stories/Spinner.stories.d.ts +1 -1
  55. package/ui/Elements/Tag/stories/Tag.stories.d.ts +1 -1
  56. package/ui/Elements/Text/stories/Text.stories.d.ts +1 -1
  57. package/ui/Elements/Toast/stories/Toast.stories.d.ts +1 -1
  58. package/ui/Elements/Toggle/stories/Toggle.stories.d.ts +1 -1
  59. package/ui/Elements/Tooltip/stories/Tooltip.stories.d.ts +1 -1
  60. package/ui/Elements/Typography/stories/Typography.stories.d.ts +1 -1
  61. package/ui/Forms/Checkbox/stories/Checkbox.stories.d.ts +1 -1
  62. package/ui/Forms/Checkbox/styles.d.ts +1 -1
  63. package/ui/Forms/Input/stories/Input.stories.d.ts +1 -1
  64. package/ui/Forms/RadioButton/stories/RadioButton.stories.d.ts +1 -1
  65. package/ui/index.d.ts +1 -3
  66. package/ui/index.es.js +9944 -9865
  67. package/ui/index.js +1 -3
  68. package/ui/index.umd.js +369 -369
  69. package/ui/utils/KeyPress/KeyPress.stories.d.ts +1 -1
  70. package/ui/Elements/MultiSelect/MultiSelect.d.ts +0 -8
  71. package/ui/Elements/MultiSelect/MultiSelect.js +0 -29
  72. package/ui/Elements/MultiSelect/index.d.ts +0 -3
  73. package/ui/Elements/MultiSelect/index.js +0 -2
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mailstep/design-system",
3
- "version": "0.8.0-beta.1",
3
+ "version": "0.8.1",
4
4
  "license": "ISC",
5
5
  "type": "module",
6
6
  "main": "./ui/index.js",
@@ -39,9 +39,16 @@
39
39
  "@lingui/core": "3.17.2",
40
40
  "@lingui/react": "3.17.2",
41
41
  "@popperjs/core": "^2.11.8",
42
- "@storybook/addon-designs": "^11.1.2",
43
- "@storybook/addon-links": "10.2.8",
44
- "@storybook/react-webpack5": "10.2.8",
42
+ "@storybook/addon-controls": "^8.4.7",
43
+ "@storybook/addon-designs": "^8.0.4",
44
+ "@storybook/addon-essentials": "^8.4.7",
45
+ "@storybook/addon-interactions": "^8.4.7",
46
+ "@storybook/addon-links": "^8.4.7",
47
+ "@storybook/blocks": "^8.4.7",
48
+ "@storybook/react": "^8.4.7",
49
+ "@storybook/react-webpack5": "^8.4.7",
50
+ "@storybook/test": "^8.4.7",
51
+ "@storybook/types": "^8.4.7",
45
52
  "@svgr/rollup": "^8.0.1",
46
53
  "@trivago/prettier-plugin-sort-imports": "^4.3.0",
47
54
  "@types/faker": "^4.1.11",
@@ -72,7 +79,7 @@
72
79
  "eslint-plugin-react": "^7.35.0",
73
80
  "eslint-plugin-react-hooks": "^4.6.2",
74
81
  "eslint-plugin-react-perf": "^3.3.2",
75
- "eslint-plugin-storybook": "10.2.8",
82
+ "eslint-plugin-storybook": "^0.11.1",
76
83
  "faker": "^5.1.0",
77
84
  "immer": "9.0.7",
78
85
  "lodash": "^4.17.21",
@@ -93,7 +100,7 @@
93
100
  "react-use-draggable-scroll": "^0.4.7",
94
101
  "redux": ">=4.0.5",
95
102
  "reselect": "5.0.0-alpha.2",
96
- "storybook": "10.2.8",
103
+ "storybook": "^8.4.7",
97
104
  "string-width": "6.1.0",
98
105
  "styled-components": "^5.3.10",
99
106
  "swiper": "^11.0.3",
@@ -102,8 +109,7 @@
102
109
  "vite": "^5.0.10",
103
110
  "vite-plugin-dts": "^3.6.4",
104
111
  "vite-plugin-static-copy": "^1.0.0",
105
- "webpack": "^5.82.1",
106
- "@storybook/addon-docs": "10.2.8"
112
+ "webpack": "^5.82.1"
107
113
  },
108
114
  "peerDependencies": {
109
115
  "@dnd-kit/core": "^6.3.1",
@@ -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;
@@ -20,6 +20,6 @@ var getFlagOptions = function () { return [
20
20
  ]; };
21
21
  var SelectFilter = function (props) {
22
22
  var options = useMemo(function () { return getFlagOptions(); }, []);
23
- return _jsx(GridSelect, __assign({ options: options }, props));
23
+ return _jsx(GridSelect, __assign({ options: options }, props, { isClearable: false }));
24
24
  };
25
25
  export default SelectFilter;
@@ -1,12 +1,16 @@
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'];
8
- value?: string | string[];
9
+ options?: Option[];
10
+ value?: string | string[] | Option[];
9
11
  checkAllButton?: boolean;
12
+ asyncLoadKey?: string;
13
+ isClearable?: boolean;
10
14
  };
11
15
  declare const SelectFilter: FC<Props>;
12
16
  export default SelectFilter;
@@ -1,19 +1,84 @@
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
+ };
37
+ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
38
+ if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
39
+ if (ar || !(i in from)) {
40
+ if (!ar) ar = Array.prototype.slice.call(from, 0, i);
41
+ ar[i] = from[i];
42
+ }
43
+ }
44
+ return to.concat(ar || Array.prototype.slice.call(from));
45
+ };
1
46
  import { jsx as _jsx } from "react/jsx-runtime";
2
- import { useCallback } from 'react';
3
- import MultiSelect from '../../../../../Elements/MultiSelect';
47
+ import { useCallback, useState, useMemo } from 'react';
48
+ import Select from '../../../../../Elements/Select';
4
49
  import SingleSelect from '../../../../../Elements/SingleSelect';
50
+ import { i18n } from '@lingui/core';
5
51
  import isArray from 'lodash/isArray';
6
- var emptyValue = [];
52
+ import uniqBy from 'lodash/uniqBy';
53
+ import { isOptionArray } from './guards';
7
54
  var SelectFilter = function (_a) {
8
- var onChange = _a.onChange, isMulti = _a.isMulti, value = _a.value, options = _a.options, checkAllButton = _a.checkAllButton;
55
+ var onChange = _a.onChange, _b = _a.isClearable, isClearable = _b === void 0 ? true : _b, isMulti = _a.isMulti, value = _a.value, options = _a.options, checkAllButton = _a.checkAllButton, asyncLoadKey = _a.asyncLoadKey, onAsyncLoadFilterOptions = _a.onAsyncLoadFilterOptions;
56
+ var _c = useState([]), loadedOptions = _c[0], setLoadedOptions = _c[1];
9
57
  var handleOnMultiChange = useCallback(function (options) {
10
- 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; }));
58
+ onChange === null || onChange === void 0 ? void 0 : onChange(!isArray(options) || !(options === null || options === void 0 ? void 0 : options.length) ? null : options);
11
59
  }, [onChange]);
60
+ var isAsync = !!asyncLoadKey;
61
+ var handleLoadOptions = useCallback(function (fulltext) { return __awaiter(void 0, void 0, void 0, function () {
62
+ var data;
63
+ return __generator(this, function (_a) {
64
+ switch (_a.label) {
65
+ case 0:
66
+ data = [];
67
+ if (!asyncLoadKey) return [3 /*break*/, 2];
68
+ return [4 /*yield*/, (onAsyncLoadFilterOptions === null || onAsyncLoadFilterOptions === void 0 ? void 0 : onAsyncLoadFilterOptions(asyncLoadKey, fulltext))];
69
+ case 1:
70
+ data = (_a.sent()) || [];
71
+ _a.label = 2;
72
+ case 2:
73
+ setLoadedOptions(data);
74
+ return [2 /*return*/, data];
75
+ }
76
+ });
77
+ }); }, [asyncLoadKey, onAsyncLoadFilterOptions]);
78
+ var defaultOptions = useMemo(function () { return (isMulti && isAsync && isOptionArray(value) ? uniqBy(__spreadArray(__spreadArray([], loadedOptions, true), value, true), 'value') : undefined); }, [isAsync, value, loadedOptions]);
12
79
  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" });
80
+ return (_jsx(Select, { maxMenuHeight: 250, onChange: handleOnMultiChange, value: isOptionArray(value) ? value.map(function (option) { return String(option.value); }) : value, options: defaultOptions || options, showSelectAllButton: checkAllButton, style: "gridFilter", loadOptions: isAsync ? handleLoadOptions : undefined, defaultOptions: defaultOptions, placeholder: isAsync ? i18n._({ id: 'dataGrid.filterCell', message: 'Type to filter' }) : undefined, noOptionsMessage: function () { return null; }, containerVariant: isAsync ? 'search' : undefined, optionVariant: "checkbox", multiLabelVariant: "count", isMulti: true }));
17
81
  }
82
+ 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: isClearable }));
18
83
  };
19
84
  export default SelectFilter;
@@ -0,0 +1,3 @@
1
+ import { Option } from '../../../../../Elements/Select/types';
2
+
3
+ export declare const isOptionArray: (value: unknown) => value is Option[];
@@ -0,0 +1,3 @@
1
+ export var isOptionArray = function (value) {
2
+ return Array.isArray(value) && value.every(function (v) { return typeof v === 'object' && v !== null && 'label' in v && 'value' in v; });
3
+ };
@@ -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
  };
@@ -34,6 +34,15 @@ export var columnDefinitions = [
34
34
  sorting: true
35
35
  },
36
36
  enumColumn,
37
+ {
38
+ name: 'enumColumnAsync',
39
+ title: 'Enum Column Async',
40
+ flexBasis: 160,
41
+ filterExtraProps: { isMulti: true, checkAllButton: true },
42
+ filtering: true,
43
+ sorting: true,
44
+ asyncLoadKey: 'enumColumnAsync'
45
+ },
37
46
  {
38
47
  name: 'numberColumn',
39
48
  title: 'Number Column',
@@ -18,3 +18,4 @@ 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<unknown>;
@@ -72,3 +72,22 @@ 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 new Promise(function (resolve) {
77
+ setTimeout(function () {
78
+ resolve([
79
+ { label: 'Apple', value: 'apple' },
80
+ { label: 'Banana', value: 'banana' },
81
+ { label: 'Cherry', value: 'cherry' },
82
+ { label: 'Date', value: 'date' },
83
+ { label: 'Elderberry', value: 'elderberry' },
84
+ { label: 'Fig', value: 'fig' },
85
+ { label: 'Grape', value: 'grape' },
86
+ { label: 'Honeydew', value: 'honeydew' },
87
+ { label: 'Kiwi', value: 'kiwi' },
88
+ { label: 'Lemon', value: 'lemon' },
89
+ { label: 'Lime', value: 'lime' },
90
+ ]);
91
+ }, 1000);
92
+ });
93
+ };
@@ -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';
@@ -1,4 +1,4 @@
1
- import { StoryObj } from '@storybook/react-webpack5';
1
+ import { StoryObj } from '@storybook/react';
2
2
 
3
3
  declare const meta: {
4
4
  title: string;
@@ -1,4 +1,4 @@
1
- import { StoryObj } from '@storybook/react-webpack5';
1
+ import { StoryObj } from '@storybook/react';
2
2
 
3
3
  declare const meta: {
4
4
  title: string;
@@ -1,4 +1,4 @@
1
- import { StoryObj } from '@storybook/react-webpack5';
1
+ import { StoryObj } from '@storybook/react';
2
2
 
3
3
  declare const meta: {
4
4
  title: string;
@@ -1,4 +1,4 @@
1
- import { StoryObj } from '@storybook/react-webpack5';
1
+ import { StoryObj } from '@storybook/react';
2
2
 
3
3
  declare const meta: {
4
4
  title: string;
@@ -1,4 +1,4 @@
1
- import { StoryObj } from '@storybook/react-webpack5';
1
+ import { StoryObj } from '@storybook/react';
2
2
 
3
3
  declare const meta: {
4
4
  title: string;
@@ -140,7 +140,7 @@ export var TooltipWrap = styled.div(templateObject_16 || (templateObject_16 = __
140
140
  return ($lightMode ? th.color('red20') : th.color('blue2'));
141
141
  });
142
142
  export var OverflowWithEllipsis = styled.span(templateObject_17 || (templateObject_17 = __makeTemplateObject(["\n max-width: 140px;\n overflow: hidden;\n text-overflow: ellipsis;\n"], ["\n max-width: 140px;\n overflow: hidden;\n text-overflow: ellipsis;\n"])));
143
- export var TopLevelWrap = styled.div(templateObject_18 || (templateObject_18 = __makeTemplateObject(["\n background-color: ", ";\n border-right: 1px solid ", ";\n height: -webkit-fill-available;\n transition: width 0.5s ease;\n width: ", ";\n\n z-index: 7;\n position: absolute;\n top: ", ";\n height: ", ";\n\n display: flex;\n flex-direction: column;\n\n @media (min-width: 1024px) {\n top: inherit;\n z-index: 2;\n }\n"], ["\n background-color: ", ";\n border-right: 1px solid ", ";\n height: -webkit-fill-available;\n transition: width 0.5s ease;\n width: ", ";\n\n z-index: 7;\n position: absolute;\n top: ", ";\n height: ", ";\n\n display: flex;\n flex-direction: column;\n\n @media (min-width: 1024px) {\n top: inherit;\n z-index: 2;\n }\n"])), function (_a) {
143
+ export var TopLevelWrap = styled.div(templateObject_18 || (templateObject_18 = __makeTemplateObject(["\n background-color: ", ";\n border-right: 1px solid ", ";\n height: -webkit-fill-available;\n transition: width 0.5s ease;\n width: ", ";\n\n z-index: 5;\n position: absolute;\n top: ", ";\n height: ", ";\n\n display: flex;\n flex-direction: column;\n\n @media (min-width: 1024px) {\n top: inherit;\n z-index: 2;\n }\n"], ["\n background-color: ", ";\n border-right: 1px solid ", ";\n height: -webkit-fill-available;\n transition: width 0.5s ease;\n width: ", ";\n\n z-index: 5;\n position: absolute;\n top: ", ";\n height: ", ";\n\n display: flex;\n flex-direction: column;\n\n @media (min-width: 1024px) {\n top: inherit;\n z-index: 2;\n }\n"])), function (_a) {
144
144
  var lightMode = _a.lightMode;
145
145
  return (lightMode ? 'white' : th('colors.blue3'));
146
146
  }, th('colors.lightGray6'), function (_a) {
@@ -158,5 +158,5 @@ export var BodyWrap = styled.div(templateObject_20 || (templateObject_20 = __mak
158
158
  var isCompact = _a.isCompact;
159
159
  return (isCompact ? '24px 9px' : '24px 22px');
160
160
  });
161
- export var Overlay = styled.div(templateObject_21 || (templateObject_21 = __makeTemplateObject(["\n position: fixed;\n top: 0;\n z-index: 6;\n height: 100%;\n width: 100%;\n background-color: ", ";\n @media (min-width: 1024px) {\n display: none;\n }\n"], ["\n position: fixed;\n top: 0;\n z-index: 6;\n height: 100%;\n width: 100%;\n background-color: ", ";\n @media (min-width: 1024px) {\n display: none;\n }\n"])), createRgba('blue2', 0.6));
161
+ export var Overlay = styled.div(templateObject_21 || (templateObject_21 = __makeTemplateObject(["\n position: fixed;\n top: 0;\n z-index: 4;\n height: 100%;\n width: 100%;\n background-color: ", ";\n @media (min-width: 1024px) {\n display: none;\n }\n"], ["\n position: fixed;\n top: 0;\n z-index: 4;\n height: 100%;\n width: 100%;\n background-color: ", ";\n @media (min-width: 1024px) {\n display: none;\n }\n"])), createRgba('blue2', 0.6));
162
162
  var templateObject_1, templateObject_2, templateObject_3, templateObject_4, templateObject_5, templateObject_6, templateObject_7, templateObject_8, templateObject_9, templateObject_10, templateObject_11, templateObject_12, templateObject_13, templateObject_14, templateObject_15, templateObject_16, templateObject_17, templateObject_18, templateObject_19, templateObject_20, templateObject_21;
@@ -1,4 +1,4 @@
1
- import { StoryObj } from '@storybook/react-webpack5';
1
+ import { StoryObj } from '@storybook/react';
2
2
 
3
3
  declare const meta: {
4
4
  title: string;
@@ -1,4 +1,4 @@
1
- import { StoryObj } from '@storybook/react-webpack5';
1
+ import { StoryObj } from '@storybook/react';
2
2
 
3
3
  declare const meta: {
4
4
  title: string;
@@ -1,6 +1,6 @@
1
1
  declare const meta: {
2
2
  title: string;
3
- component: import('react').FC<import('..').AsyncSelectProps>;
3
+ component: import('react').FC<import('../AsyncSelect').AsyncSelectProps>;
4
4
  tags: string[];
5
5
  argTypes: {};
6
6
  };
@@ -1,4 +1,4 @@
1
- import { StoryObj } from '@storybook/react-webpack5';
1
+ import { StoryObj } from '@storybook/react';
2
2
 
3
3
  declare const meta: {
4
4
  title: string;
@@ -1,4 +1,4 @@
1
- import { StoryObj } from '@storybook/react-webpack5';
1
+ import { StoryObj } from '@storybook/react';
2
2
 
3
3
  declare const meta: {
4
4
  title: string;
@@ -1,4 +1,4 @@
1
- import { StoryObj } from '@storybook/react-webpack5';
1
+ import { StoryObj } from '@storybook/react';
2
2
 
3
3
  declare const meta: {
4
4
  title: string;
@@ -1,4 +1,4 @@
1
- import { StoryObj } from '@storybook/react-webpack5';
1
+ import { StoryObj } from '@storybook/react';
2
2
 
3
3
  declare const meta: {
4
4
  title: string;
@@ -1,4 +1,4 @@
1
- import { StoryObj } from '@storybook/react-webpack5';
1
+ import { StoryObj } from '@storybook/react';
2
2
 
3
3
  declare const meta: {
4
4
  title: string;
@@ -1,4 +1,4 @@
1
- import { StoryObj } from '@storybook/react-webpack5';
1
+ import { StoryObj } from '@storybook/react';
2
2
 
3
3
  declare const meta: {
4
4
  title: string;
@@ -1,4 +1,4 @@
1
- import { StoryObj } from '@storybook/react-webpack5';
1
+ import { StoryObj } from '@storybook/react';
2
2
 
3
3
  declare const meta: {
4
4
  title: string;
@@ -1,4 +1,4 @@
1
- import { StoryObj } from '@storybook/react-webpack5';
1
+ import { StoryObj } from '@storybook/react';
2
2
 
3
3
  declare const meta: {
4
4
  title: string;
@@ -1,4 +1,4 @@
1
- import { StoryObj } from '@storybook/react-webpack5';
1
+ import { StoryObj } from '@storybook/react';
2
2
 
3
3
  declare const meta: {
4
4
  title: string;
@@ -1,11 +1,11 @@
1
- import { StoryObj } from '@storybook/react-webpack5';
1
+ import { StoryObj } from '@storybook/react';
2
2
 
3
3
  declare const meta: {
4
4
  title: string;
5
5
  component: import('react').FC<{
6
6
  badge: "warning";
7
7
  } & import('..').IconProps>;
8
- decorators: ((Story: import('storybook/internal/csf').PartialStoryFn<import('@storybook/react').ReactRenderer, {
8
+ decorators: ((Story: import('@storybook/core/csf').PartialStoryFn<import('@storybook/react').ReactRenderer, {
9
9
  badge: "warning";
10
10
  icon: string;
11
11
  style?: "normal" | "light" | "solid" | undefined;
@@ -1,4 +1,4 @@
1
- import { StoryObj } from '@storybook/react-webpack5';
1
+ import { StoryObj } from '@storybook/react';
2
2
 
3
3
  declare const meta: {
4
4
  title: string;
@@ -1,4 +1,4 @@
1
- import { StoryObj } from '@storybook/react-webpack5';
1
+ import { StoryObj } from '@storybook/react';
2
2
 
3
3
  declare const meta: {
4
4
  title: string;
@@ -1,4 +1,4 @@
1
- import { StoryObj } from '@storybook/react-webpack5';
1
+ import { StoryObj } from '@storybook/react';
2
2
 
3
3
  declare const meta: {
4
4
  title: string;
@@ -1,4 +1,4 @@
1
- import { StoryObj } from '@storybook/react-webpack5';
1
+ import { StoryObj } from '@storybook/react';
2
2
 
3
3
  declare const meta: {
4
4
  title: string;
@@ -1,4 +1,4 @@
1
- import { StoryObj } from '@storybook/react-webpack5';
1
+ import { StoryObj } from '@storybook/react';
2
2
 
3
3
  declare const meta: {
4
4
  title: string;
@@ -1,4 +1,4 @@
1
- import { StoryObj } from '@storybook/react-webpack5';
1
+ import { StoryObj } from '@storybook/react';
2
2
 
3
3
  declare const meta: {
4
4
  title: string;
@@ -1,4 +1,4 @@
1
- import { StoryObj } from '@storybook/react-webpack5';
1
+ import { StoryObj } from '@storybook/react';
2
2
  import { PaginationProps } from '../';
3
3
 
4
4
  declare const meta: {
@@ -1,4 +1,4 @@
1
- import { StoryObj } from '@storybook/react-webpack5';
1
+ import { StoryObj } from '@storybook/react';
2
2
 
3
3
  declare const meta: {
4
4
  title: string;