@elliemae/ds-data-table 3.21.0-next.1 → 3.21.0-next.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/dist/cjs/addons/Filters/Components/SelectFilter/BaseSelectFilter.js +12 -4
- package/dist/cjs/addons/Filters/Components/SelectFilter/BaseSelectFilter.js.map +2 -2
- package/dist/cjs/configs/constants.js +2 -0
- package/dist/cjs/configs/constants.js.map +2 -2
- package/dist/cjs/exported-related/Filters/multiSelectFilterFn.js +9 -1
- package/dist/cjs/exported-related/Filters/multiSelectFilterFn.js.map +2 -2
- package/dist/cjs/exported-related/Filters/singleSelectFilterFn.js +7 -1
- package/dist/cjs/exported-related/Filters/singleSelectFilterFn.js.map +2 -2
- package/dist/cjs/helpers/addCellData.js +6 -1
- package/dist/cjs/helpers/addCellData.js.map +2 -2
- package/dist/esm/addons/Filters/Components/SelectFilter/BaseSelectFilter.js +13 -5
- package/dist/esm/addons/Filters/Components/SelectFilter/BaseSelectFilter.js.map +2 -2
- package/dist/esm/configs/constants.js +2 -0
- package/dist/esm/configs/constants.js.map +2 -2
- package/dist/esm/exported-related/Filters/multiSelectFilterFn.js +9 -1
- package/dist/esm/exported-related/Filters/multiSelectFilterFn.js.map +2 -2
- package/dist/esm/exported-related/Filters/singleSelectFilterFn.js +7 -1
- package/dist/esm/exported-related/Filters/singleSelectFilterFn.js.map +2 -2
- package/dist/esm/helpers/addCellData.js +6 -1
- package/dist/esm/helpers/addCellData.js.map +2 -2
- package/dist/types/DataTable.d.ts +0 -1
- package/dist/types/configs/constants.d.ts +1 -0
- package/dist/types/exported-related/Filters/multiSelectFilterFn.d.ts +1 -0
- package/dist/types/exported-related/Filters/singleSelectFilterFn.d.ts +1 -0
- package/dist/types/parts/SortableHeaderCell.d.ts +0 -1
- package/package.json +25 -25
|
@@ -61,15 +61,23 @@ const BaseSelectFilter = (props) => {
|
|
|
61
61
|
const shouldFocus = (0, import_react.useRef)(true);
|
|
62
62
|
const filterOptions = (0, import_react.useMemo)(() => {
|
|
63
63
|
if (!userFilterOptions) {
|
|
64
|
-
const automaticFilters = [
|
|
65
|
-
|
|
66
|
-
|
|
64
|
+
const automaticFilters = [...new Set(data.map((datum) => getValue(datum?.[id])))];
|
|
65
|
+
const hasEmptyValue = automaticFilters.some((item) => item === null || item === void 0 || item === "");
|
|
66
|
+
const finalAutomaticFilters = automaticFilters.filter((item) => item !== null && item !== void 0 && item !== "").map((item) => ({
|
|
67
67
|
type: "option",
|
|
68
68
|
dsId: item,
|
|
69
69
|
value: item,
|
|
70
70
|
label: item
|
|
71
71
|
}));
|
|
72
|
-
|
|
72
|
+
if (hasEmptyValue) {
|
|
73
|
+
finalAutomaticFilters.push({
|
|
74
|
+
type: "option",
|
|
75
|
+
dsId: import_configs.EMPTY_FILTER,
|
|
76
|
+
value: import_configs.EMPTY_FILTER,
|
|
77
|
+
label: "(Empty)"
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
return finalAutomaticFilters;
|
|
73
81
|
}
|
|
74
82
|
if (Array.isArray(userFilterOptions))
|
|
75
83
|
return userFilterOptions;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../../src/addons/Filters/Components/SelectFilter/BaseSelectFilter.tsx", "../../../../../../../../scripts/build/transpile/react-shim.js"],
|
|
4
|
-
"sourcesContent": ["import React, { useState, useRef, useCallback, useEffect, useMemo } from 'react';\nimport { Grid } from '@elliemae/ds-grid';\nimport type { DSComboboxT } from '@elliemae/ds-form-combobox';\nimport { DSComboBox } from '@elliemae/ds-form-combobox';\nimport { SearchXsmall } from '@elliemae/ds-icons';\nimport { uid } from 'uid';\nimport { FilterPopover } from '../../../../exported-related/index.js';\nimport type { DSDataTableT } from '../../../../react-desc-prop-types.js';\nimport { DATA_TESTID } from '../../../../configs/index.js';\n\ninterface BaseSelectProps {\n isMulti?: boolean;\n creatable?: boolean;\n type: string;\n}\n\ntype MaybeToStringable =\n | string\n | number\n | boolean\n | Date\n | RegExp\n | Array<unknown>\n | Record<string, unknown>\n | null\n | undefined;\n\nconst getValue = (datum: unknown) => (datum as MaybeToStringable)?.toString();\n\ntype BaseSelectFilterValue = DSComboboxT.SelectedOptionsT;\n\nexport const BaseSelectFilter: React.ComponentType<\n DSDataTableT.FilterProps<BaseSelectFilterValue> & BaseSelectProps\n> = (props) => {\n const {\n isMulti = false,\n filterValue: selectedItems = null,\n creatable = false,\n column,\n type,\n column: { id, filterOptions: userFilterOptions, filterMinWidth },\n ctx: {\n tableProps: { data },\n },\n reduxHeader,\n patchHeaderFilterButtonAndMenu,\n innerRef,\n onValueChange,\n } = props;\n\n const ref = useRef<HTMLInputElement | null>(null);\n const shouldFocus = useRef(true);\n const filterOptions = useMemo(() => {\n // If the user didn't provide options, use the available ones\n if (!userFilterOptions) {\n const automaticFilters
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;ACAA,YAAuB;
|
|
4
|
+
"sourcesContent": ["import React, { useState, useRef, useCallback, useEffect, useMemo } from 'react';\nimport { Grid } from '@elliemae/ds-grid';\nimport type { DSComboboxT } from '@elliemae/ds-form-combobox';\nimport { DSComboBox } from '@elliemae/ds-form-combobox';\nimport { SearchXsmall } from '@elliemae/ds-icons';\nimport { uid } from 'uid';\nimport { FilterPopover } from '../../../../exported-related/index.js';\nimport type { DSDataTableT } from '../../../../react-desc-prop-types.js';\nimport { DATA_TESTID, EMPTY_FILTER } from '../../../../configs/index.js';\n\ninterface BaseSelectProps {\n isMulti?: boolean;\n creatable?: boolean;\n type: string;\n}\n\ntype MaybeToStringable =\n | string\n | number\n | boolean\n | Date\n | RegExp\n | Array<unknown>\n | Record<string, unknown>\n | null\n | undefined;\n\nconst getValue = (datum: unknown) => (datum as MaybeToStringable)?.toString();\n\ntype BaseSelectFilterValue = DSComboboxT.SelectedOptionsT;\n\nexport const BaseSelectFilter: React.ComponentType<\n DSDataTableT.FilterProps<BaseSelectFilterValue> & BaseSelectProps\n> = (props) => {\n const {\n isMulti = false,\n filterValue: selectedItems = null,\n creatable = false,\n column,\n type,\n column: { id, filterOptions: userFilterOptions, filterMinWidth },\n ctx: {\n tableProps: { data },\n },\n reduxHeader,\n patchHeaderFilterButtonAndMenu,\n innerRef,\n onValueChange,\n } = props;\n\n const ref = useRef<HTMLInputElement | null>(null);\n const shouldFocus = useRef(true);\n const filterOptions = useMemo(() => {\n // If the user didn't provide options, use the available ones\n if (!userFilterOptions) {\n const automaticFilters = [...new Set(data.map((datum) => getValue(datum?.[id])))];\n\n const hasEmptyValue = automaticFilters.some((item) => item === null || item === undefined || item === '');\n\n const finalAutomaticFilters: DSDataTableT.FilterOptionT[] = automaticFilters\n .filter((item) => item !== null && item !== undefined && item !== '')\n .map((item) => ({\n type: 'option',\n dsId: item as string,\n value: item as string,\n label: item as string,\n }));\n\n if (hasEmptyValue) {\n finalAutomaticFilters.push({\n type: 'option',\n dsId: EMPTY_FILTER,\n value: EMPTY_FILTER,\n label: '(Empty)',\n });\n }\n\n return finalAutomaticFilters;\n }\n\n // If user provided the array itself, use it\n if (Array.isArray(userFilterOptions)) return userFilterOptions;\n // Otherwise, it is a function\n return userFilterOptions();\n }, [data, id, userFilterOptions]);\n\n const [filters, setFilteredOptions] = useState(filterOptions);\n\n useEffect(() => setFilteredOptions(filterOptions), [filterOptions]);\n\n const handleOnChange = useCallback(\n (value: BaseSelectFilterValue) => {\n if (isMulti && Array.isArray(value)) {\n onValueChange(type, value.length !== 0 ? value : undefined);\n } else {\n onValueChange(type, value !== null ? value : undefined);\n patchHeaderFilterButtonAndMenu(column.id, true);\n }\n },\n [column.id, isMulti, onValueChange, patchHeaderFilterButtonAndMenu, type],\n );\n\n const handleOnCreate = useCallback(\n (label: string) => {\n if (label.trim() === '') {\n return;\n }\n if (filterOptions.some((item) => 'label' in item && item.label === label)) {\n return;\n }\n const newId = uid();\n const newItem: DSDataTableT.FilterOptionT = {\n dsId: newId,\n value: newId,\n label,\n type: 'option',\n };\n filterOptions.unshift(newItem);\n handleOnChange(Array.isArray(selectedItems) ? [...selectedItems, newItem] : newItem);\n setFilteredOptions([...filterOptions]);\n },\n [filterOptions, handleOnChange, selectedItems],\n );\n\n const handleRef = useCallback((newRef: HTMLInputElement | null) => {\n ref.current = newRef;\n if (shouldFocus.current) {\n setTimeout(() => {\n ref.current?.focus();\n shouldFocus.current = false;\n });\n }\n }, []);\n\n useEffect(() => {\n if (reduxHeader?.hideFilterMenu) {\n shouldFocus.current = true;\n }\n }, [reduxHeader?.hideFilterMenu]);\n\n const Select = useMemo(\n () => (\n <Grid\n data-testid={\n isMulti ? DATA_TESTID.DATA_TABLE_MULTISELECT_CONTROLLER : DATA_TESTID.DATA_TABLE_SINGLESELECT_CONTROLLER\n }\n >\n <DSComboBox\n inline\n innerRef={handleRef}\n allOptions={filters}\n onCreate={creatable ? handleOnCreate : undefined}\n onChange={handleOnChange}\n selectedValues={selectedItems}\n menuMaxHeight={300}\n />\n </Grid>\n ),\n [creatable, filters, handleOnChange, handleOnCreate, handleRef, isMulti, selectedItems],\n );\n\n const handleOnClickOutside = useCallback(() => {\n setFilteredOptions(filterOptions);\n }, [filterOptions]);\n\n return (\n <FilterPopover\n reduxHeader={reduxHeader}\n column={column}\n columnId={column.id}\n menuContent={Select}\n triggerIcon={<SearchXsmall />}\n innerRef={innerRef}\n ariaLabel=\"Open Selection Filter\"\n onClickOutsideMenu={handleOnClickOutside}\n customStyles={{\n backgroundColor: '#fff',\n width: filterMinWidth ?? column.ref?.current?.offsetWidth,\n }}\n />\n );\n};\n", "import * as React from 'react';\nexport { React };\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -31,6 +31,7 @@ __export(constants_exports, {
|
|
|
31
31
|
ColsLayoutStyle: () => ColsLayoutStyle,
|
|
32
32
|
DATA_TESTID: () => DATA_TESTID,
|
|
33
33
|
DropIndicatorPosition: () => DropIndicatorPosition,
|
|
34
|
+
EMPTY_FILTER: () => EMPTY_FILTER,
|
|
34
35
|
momentFormat: () => momentFormat
|
|
35
36
|
});
|
|
36
37
|
module.exports = __toCommonJS(constants_exports);
|
|
@@ -81,4 +82,5 @@ const DATA_TESTID = {
|
|
|
81
82
|
DATA_TABLE_HEADER_CELL_TITLE: "header-cell-title",
|
|
82
83
|
DATA_TABLE_FILTER_BAR_DD_MENU_BUTTON: "filter-bar-ddmenu-button"
|
|
83
84
|
};
|
|
85
|
+
const EMPTY_FILTER = "ds-empty-filter";
|
|
84
86
|
//# sourceMappingURL=constants.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/configs/constants.tsx", "../../../../../scripts/build/transpile/react-shim.js"],
|
|
4
|
-
"sourcesContent": ["export const momentFormat = 'MM/DD/YYYY';\nexport const ColsLayoutStyle = {\n Fixed: 'fixed',\n Auto: 'auto',\n} as const;\n\nexport const DropIndicatorPosition = {\n None: 'none',\n Before: 'before',\n After: 'after',\n Inside: 'inside',\n} as const;\n\nexport const DATA_TESTID = {\n DATA_TABLE_WRAPPER: 'data-table-wrapper',\n DATA_TABLE_GLOBAL_EXPAND_CELL: 'data-table-global-expand-cell',\n DATA_TABLE_ICON_ARROW_DOWN: 'ic-arrow-head-down',\n DATA_TABLE_ICON_ARROW_RIGHT: 'ic-arrow-head-right',\n DATA_TABLE_ICON_ARROW_MIXED: 'ic-arrow-head-mixed',\n DATA_TABLE_ICON_CHILD: 'ic-arrow-child',\n DATA_TABLE_GLOBAL_CHECKBOX: 'data-table-global-checkbox',\n DATA_TABLE_CHECKBOX: 'data-table-checkbox',\n DATA_TABLE_RADIO: 'data-table-radio',\n DATA_TABLE_DATE_RANGE_CONTROLLER: 'data-table-date-range',\n DATA_TABLE_DATE_RANGE_CONTROLLER_CHECKBOX_SWITCHER: 'data-table-date-range-checkbox-switcher-container',\n DATA_TABLE_SINGLE_DATE_CONTROLLER: 'data-table-single-date',\n DATA_TABLE_NUMBER_RANGE_CONTROLLER: 'data-table-number-range',\n DATA_TABLE_CURRENCY_RANGE_CONTROLLER: 'data-table-currency-range',\n DATA_TABLE_SELECT_MENU_ITEM: 'data-table-filter-menu-list-item',\n DATA_TABLE_MULTISELECT_CONTROLLER: 'data-table-multi-select',\n DATA_TABLE_SINGLESELECT_CONTROLLER: 'data-table-single-select',\n DATA_TABLE_FILTER_BUTTON: 'data-table-filter-menu-button',\n DATA_TABLE_FILTER_MENU_CONTENT: 'data-table-filter-menu-content',\n DATA_TABLE_ROW_CONTENT: 'data-table-row-content',\n DATA_TABLE_ROW: 'data-table-row',\n DATA_TABLE_TOOLBAR_TRIGGER: 'data-table-toolbar-trigger',\n DATA_TABLE_CELL: 'data-table-cell',\n DATA_TABLE_DRAG_HANDLE: 'data-table-drag-handle',\n DATA_TABLE_CONTENT_WRAPPER: 'data-table-content-wrapper',\n DATA_TABLE_TABLE: 'data-table-table',\n DATA_TABLE_SCROLLABLE_CONTAINER: 'data-table-scrollable-container',\n DATA_TABLE_HEADER: 'data-table-header',\n DATA_TABLE_ROW_HEADER_CONTENT: 'data-table-row-header-content',\n DATA_TABLE_ROW_GROUP_HEADER: 'data-table-row-group-header',\n DATA_TABLE_COLUMN_DRAG_OVERLAY: 'data-table-drag-column-drag-overlay',\n DATA_TABLE_HEADER_CELL_TITLE: 'header-cell-title',\n DATA_TABLE_FILTER_BAR_DD_MENU_BUTTON: 'filter-bar-ddmenu-button',\n};\n", "import * as React from 'react';\nexport { React };\n"],
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACAA,YAAuB;ADAhB,MAAM,eAAe;AACrB,MAAM,kBAAkB;AAAA,EAC7B,OAAO;AAAA,EACP,MAAM;AACR;AAEO,MAAM,wBAAwB;AAAA,EACnC,MAAM;AAAA,EACN,QAAQ;AAAA,EACR,OAAO;AAAA,EACP,QAAQ;AACV;AAEO,MAAM,cAAc;AAAA,EACzB,oBAAoB;AAAA,EACpB,+BAA+B;AAAA,EAC/B,4BAA4B;AAAA,EAC5B,6BAA6B;AAAA,EAC7B,6BAA6B;AAAA,EAC7B,uBAAuB;AAAA,EACvB,4BAA4B;AAAA,EAC5B,qBAAqB;AAAA,EACrB,kBAAkB;AAAA,EAClB,kCAAkC;AAAA,EAClC,oDAAoD;AAAA,EACpD,mCAAmC;AAAA,EACnC,oCAAoC;AAAA,EACpC,sCAAsC;AAAA,EACtC,6BAA6B;AAAA,EAC7B,mCAAmC;AAAA,EACnC,oCAAoC;AAAA,EACpC,0BAA0B;AAAA,EAC1B,gCAAgC;AAAA,EAChC,wBAAwB;AAAA,EACxB,gBAAgB;AAAA,EAChB,4BAA4B;AAAA,EAC5B,iBAAiB;AAAA,EACjB,wBAAwB;AAAA,EACxB,4BAA4B;AAAA,EAC5B,kBAAkB;AAAA,EAClB,iCAAiC;AAAA,EACjC,mBAAmB;AAAA,EACnB,+BAA+B;AAAA,EAC/B,6BAA6B;AAAA,EAC7B,gCAAgC;AAAA,EAChC,8BAA8B;AAAA,EAC9B,sCAAsC;AACxC;",
|
|
4
|
+
"sourcesContent": ["export const momentFormat = 'MM/DD/YYYY';\nexport const ColsLayoutStyle = {\n Fixed: 'fixed',\n Auto: 'auto',\n} as const;\n\nexport const DropIndicatorPosition = {\n None: 'none',\n Before: 'before',\n After: 'after',\n Inside: 'inside',\n} as const;\n\nexport const DATA_TESTID = {\n DATA_TABLE_WRAPPER: 'data-table-wrapper',\n DATA_TABLE_GLOBAL_EXPAND_CELL: 'data-table-global-expand-cell',\n DATA_TABLE_ICON_ARROW_DOWN: 'ic-arrow-head-down',\n DATA_TABLE_ICON_ARROW_RIGHT: 'ic-arrow-head-right',\n DATA_TABLE_ICON_ARROW_MIXED: 'ic-arrow-head-mixed',\n DATA_TABLE_ICON_CHILD: 'ic-arrow-child',\n DATA_TABLE_GLOBAL_CHECKBOX: 'data-table-global-checkbox',\n DATA_TABLE_CHECKBOX: 'data-table-checkbox',\n DATA_TABLE_RADIO: 'data-table-radio',\n DATA_TABLE_DATE_RANGE_CONTROLLER: 'data-table-date-range',\n DATA_TABLE_DATE_RANGE_CONTROLLER_CHECKBOX_SWITCHER: 'data-table-date-range-checkbox-switcher-container',\n DATA_TABLE_SINGLE_DATE_CONTROLLER: 'data-table-single-date',\n DATA_TABLE_NUMBER_RANGE_CONTROLLER: 'data-table-number-range',\n DATA_TABLE_CURRENCY_RANGE_CONTROLLER: 'data-table-currency-range',\n DATA_TABLE_SELECT_MENU_ITEM: 'data-table-filter-menu-list-item',\n DATA_TABLE_MULTISELECT_CONTROLLER: 'data-table-multi-select',\n DATA_TABLE_SINGLESELECT_CONTROLLER: 'data-table-single-select',\n DATA_TABLE_FILTER_BUTTON: 'data-table-filter-menu-button',\n DATA_TABLE_FILTER_MENU_CONTENT: 'data-table-filter-menu-content',\n DATA_TABLE_ROW_CONTENT: 'data-table-row-content',\n DATA_TABLE_ROW: 'data-table-row',\n DATA_TABLE_TOOLBAR_TRIGGER: 'data-table-toolbar-trigger',\n DATA_TABLE_CELL: 'data-table-cell',\n DATA_TABLE_DRAG_HANDLE: 'data-table-drag-handle',\n DATA_TABLE_CONTENT_WRAPPER: 'data-table-content-wrapper',\n DATA_TABLE_TABLE: 'data-table-table',\n DATA_TABLE_SCROLLABLE_CONTAINER: 'data-table-scrollable-container',\n DATA_TABLE_HEADER: 'data-table-header',\n DATA_TABLE_ROW_HEADER_CONTENT: 'data-table-row-header-content',\n DATA_TABLE_ROW_GROUP_HEADER: 'data-table-row-group-header',\n DATA_TABLE_COLUMN_DRAG_OVERLAY: 'data-table-drag-column-drag-overlay',\n DATA_TABLE_HEADER_CELL_TITLE: 'header-cell-title',\n DATA_TABLE_FILTER_BAR_DD_MENU_BUTTON: 'filter-bar-ddmenu-button',\n};\n\nexport const EMPTY_FILTER = 'ds-empty-filter';\n", "import * as React from 'react';\nexport { React };\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACAA,YAAuB;ADAhB,MAAM,eAAe;AACrB,MAAM,kBAAkB;AAAA,EAC7B,OAAO;AAAA,EACP,MAAM;AACR;AAEO,MAAM,wBAAwB;AAAA,EACnC,MAAM;AAAA,EACN,QAAQ;AAAA,EACR,OAAO;AAAA,EACP,QAAQ;AACV;AAEO,MAAM,cAAc;AAAA,EACzB,oBAAoB;AAAA,EACpB,+BAA+B;AAAA,EAC/B,4BAA4B;AAAA,EAC5B,6BAA6B;AAAA,EAC7B,6BAA6B;AAAA,EAC7B,uBAAuB;AAAA,EACvB,4BAA4B;AAAA,EAC5B,qBAAqB;AAAA,EACrB,kBAAkB;AAAA,EAClB,kCAAkC;AAAA,EAClC,oDAAoD;AAAA,EACpD,mCAAmC;AAAA,EACnC,oCAAoC;AAAA,EACpC,sCAAsC;AAAA,EACtC,6BAA6B;AAAA,EAC7B,mCAAmC;AAAA,EACnC,oCAAoC;AAAA,EACpC,0BAA0B;AAAA,EAC1B,gCAAgC;AAAA,EAChC,wBAAwB;AAAA,EACxB,gBAAgB;AAAA,EAChB,4BAA4B;AAAA,EAC5B,iBAAiB;AAAA,EACjB,wBAAwB;AAAA,EACxB,4BAA4B;AAAA,EAC5B,kBAAkB;AAAA,EAClB,iCAAiC;AAAA,EACjC,mBAAmB;AAAA,EACnB,+BAA+B;AAAA,EAC/B,6BAA6B;AAAA,EAC7B,gCAAgC;AAAA,EAChC,8BAA8B;AAAA,EAC9B,sCAAsC;AACxC;AAEO,MAAM,eAAe;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -32,9 +32,17 @@ __export(multiSelectFilterFn_exports, {
|
|
|
32
32
|
});
|
|
33
33
|
module.exports = __toCommonJS(multiSelectFilterFn_exports);
|
|
34
34
|
var React = __toESM(require("react"));
|
|
35
|
+
var import_constants = require("../../configs/constants.js");
|
|
35
36
|
const multiSelectFilterFn = (unfilteredData, filterKey, filterValue) => {
|
|
36
37
|
if (filterValue.length > 0) {
|
|
37
|
-
return unfilteredData.filter(
|
|
38
|
+
return unfilteredData.filter(
|
|
39
|
+
(datum) => filterValue.some((item) => {
|
|
40
|
+
if (item.value === import_constants.EMPTY_FILTER) {
|
|
41
|
+
return datum[filterKey] === null || datum[filterKey] === void 0 || datum[filterKey] === "";
|
|
42
|
+
}
|
|
43
|
+
return item.label === String(datum[filterKey]);
|
|
44
|
+
})
|
|
45
|
+
);
|
|
38
46
|
}
|
|
39
47
|
return unfilteredData;
|
|
40
48
|
};
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../src/exported-related/Filters/multiSelectFilterFn.tsx", "../../../../../../scripts/build/transpile/react-shim.js"],
|
|
4
|
-
"sourcesContent": ["import type { FilterFn } from './types.js';\n\nexport const multiSelectFilterFn: FilterFn<{ label: string }[]> = (unfilteredData
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;ACAA,YAAuB;
|
|
4
|
+
"sourcesContent": ["import { EMPTY_FILTER } from '../../configs/constants.js';\nimport type { FilterFn } from './types.js';\n\nexport const multiSelectFilterFn: FilterFn<{ label: string; value: string }[]> = (\n unfilteredData,\n filterKey,\n filterValue,\n) => {\n if (filterValue.length > 0) {\n return unfilteredData.filter((datum) =>\n filterValue.some((item) => {\n if (item.value === EMPTY_FILTER) {\n return datum[filterKey] === null || datum[filterKey] === undefined || datum[filterKey] === '';\n }\n return item.label === String(datum[filterKey]);\n }),\n );\n }\n return unfilteredData;\n};\n", "import * as React from 'react';\nexport { React };\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;ACAA,YAAuB;ADAvB,uBAA6B;AAGtB,MAAM,sBAAoE,CAC/E,gBACA,WACA,gBACG;AACH,MAAI,YAAY,SAAS,GAAG;AAC1B,WAAO,eAAe;AAAA,MAAO,CAAC,UAC5B,YAAY,KAAK,CAAC,SAAS;AACzB,YAAI,KAAK,UAAU,+BAAc;AAC/B,iBAAO,MAAM,SAAS,MAAM,QAAQ,MAAM,SAAS,MAAM,UAAa,MAAM,SAAS,MAAM;AAAA,QAC7F;AACA,eAAO,KAAK,UAAU,OAAO,MAAM,SAAS,CAAC;AAAA,MAC/C,CAAC;AAAA,IACH;AAAA,EACF;AACA,SAAO;AACT;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -32,9 +32,15 @@ __export(singleSelectFilterFn_exports, {
|
|
|
32
32
|
});
|
|
33
33
|
module.exports = __toCommonJS(singleSelectFilterFn_exports);
|
|
34
34
|
var React = __toESM(require("react"));
|
|
35
|
+
var import_constants = require("../../configs/constants.js");
|
|
35
36
|
const singleSelectFilterFn = (unfilteredData, filterKey, filterValue) => {
|
|
36
37
|
if (filterValue) {
|
|
37
|
-
return unfilteredData.filter((datum) =>
|
|
38
|
+
return unfilteredData.filter((datum) => {
|
|
39
|
+
if (filterValue.value === import_constants.EMPTY_FILTER) {
|
|
40
|
+
return datum[filterKey] === null || datum[filterKey] === void 0 || datum[filterKey] === "";
|
|
41
|
+
}
|
|
42
|
+
return String(datum[filterKey]) === filterValue.label;
|
|
43
|
+
});
|
|
38
44
|
}
|
|
39
45
|
return unfilteredData;
|
|
40
46
|
};
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../src/exported-related/Filters/singleSelectFilterFn.tsx", "../../../../../../scripts/build/transpile/react-shim.js"],
|
|
4
|
-
"sourcesContent": ["import type { FilterFn } from './types.js';\n\nexport const singleSelectFilterFn: FilterFn<{ label: string }> = (unfilteredData
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;ACAA,YAAuB;
|
|
4
|
+
"sourcesContent": ["import { EMPTY_FILTER } from '../../configs/constants.js';\nimport type { FilterFn } from './types.js';\n\nexport const singleSelectFilterFn: FilterFn<{ label: string; value: string }> = (\n unfilteredData,\n filterKey,\n filterValue,\n) => {\n if (filterValue) {\n return unfilteredData.filter((datum) => {\n if (filterValue.value === EMPTY_FILTER) {\n return datum[filterKey] === null || datum[filterKey] === undefined || datum[filterKey] === '';\n }\n return String(datum[filterKey]) === filterValue.label;\n });\n }\n return unfilteredData;\n};\n", "import * as React from 'react';\nexport { React };\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;ACAA,YAAuB;ADAvB,uBAA6B;AAGtB,MAAM,uBAAmE,CAC9E,gBACA,WACA,gBACG;AACH,MAAI,aAAa;AACf,WAAO,eAAe,OAAO,CAAC,UAAU;AACtC,UAAI,YAAY,UAAU,+BAAc;AACtC,eAAO,MAAM,SAAS,MAAM,QAAQ,MAAM,SAAS,MAAM,UAAa,MAAM,SAAS,MAAM;AAAA,MAC7F;AACA,aAAO,OAAO,MAAM,SAAS,CAAC,MAAM,YAAY;AAAA,IAClD,CAAC;AAAA,EACH;AACA,SAAO;AACT;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -32,8 +32,13 @@ __export(addCellData_exports, {
|
|
|
32
32
|
});
|
|
33
33
|
module.exports = __toCommonJS(addCellData_exports);
|
|
34
34
|
var React = __toESM(require("react"));
|
|
35
|
+
var import_jsx_runtime = require("react/jsx-runtime");
|
|
35
36
|
var import_react = __toESM(require("react"));
|
|
36
|
-
const BasicCell = ({ cell }) =>
|
|
37
|
+
const BasicCell = ({ cell }) => {
|
|
38
|
+
if (cell.value === null || cell.value === void 0 || cell.value === "")
|
|
39
|
+
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("p", { "aria-label": "Empty cell" });
|
|
40
|
+
return cell.value;
|
|
41
|
+
};
|
|
37
42
|
const getCellValue = (row, accessor) => {
|
|
38
43
|
if (accessor === void 0)
|
|
39
44
|
return null;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/helpers/addCellData.tsx", "../../../../../scripts/build/transpile/react-shim.js"],
|
|
4
|
-
"sourcesContent": ["import React from 'react';\nimport type { DSDataTableT } from '../react-desc-prop-types.js';\n\nconst BasicCell: React.ComponentType<{ cell: DSDataTableT.Cell }> = ({ cell }) => cell.value as JSX.Element;\n\nconst getCellValue = (row: DSDataTableT.InternalRow, accessor: string | undefined): unknown => {\n if (accessor === undefined) return null;\n return row.original[accessor] ?? null;\n};\n\nconst addColumnData = (datum: DSDataTableT.InternalRow, column: DSDataTableT.InternalColumn) => {\n datum.cells.push({\n column,\n value: getCellValue(datum, column.accessor),\n render: column.Cell ?? BasicCell,\n row: datum,\n ref: React.createRef(),\n id: `${datum.uid}__${column.id}`,\n });\n};\n\nexport const addCellData = (datum: DSDataTableT.InternalRow, columns: DSDataTableT.InternalColumn[]): void => {\n datum.cells = [];\n columns.forEach((column) => {\n if (column.columns) column.columns.forEach((col) => addColumnData(datum, col));\n else addColumnData(datum, column);\n });\n};\n", "import * as React from 'react';\nexport { React };\n"],
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;ACAA,YAAuB;
|
|
4
|
+
"sourcesContent": ["import React from 'react';\nimport type { DSDataTableT } from '../react-desc-prop-types.js';\n\nconst BasicCell: React.ComponentType<{ cell: DSDataTableT.Cell }> = ({ cell }) => {\n if (cell.value === null || cell.value === undefined || cell.value === '') return <p aria-label=\"Empty cell\"></p>;\n return cell.value as JSX.Element;\n};\n\nconst getCellValue = (row: DSDataTableT.InternalRow, accessor: string | undefined): unknown => {\n if (accessor === undefined) return null;\n return row.original[accessor] ?? null;\n};\n\nconst addColumnData = (datum: DSDataTableT.InternalRow, column: DSDataTableT.InternalColumn) => {\n datum.cells.push({\n column,\n value: getCellValue(datum, column.accessor),\n render: column.Cell ?? BasicCell,\n row: datum,\n ref: React.createRef(),\n id: `${datum.uid}__${column.id}`,\n });\n};\n\nexport const addCellData = (datum: DSDataTableT.InternalRow, columns: DSDataTableT.InternalColumn[]): void => {\n datum.cells = [];\n columns.forEach((column) => {\n if (column.columns) column.columns.forEach((col) => addColumnData(datum, col));\n else addColumnData(datum, column);\n });\n};\n", "import * as React from 'react';\nexport { React };\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;ACAA,YAAuB;ADI4D;AAJnF,mBAAkB;AAGlB,MAAM,YAA8D,CAAC,EAAE,KAAK,MAAM;AAChF,MAAI,KAAK,UAAU,QAAQ,KAAK,UAAU,UAAa,KAAK,UAAU;AAAI,WAAO,4CAAC,OAAE,cAAW,cAAa;AAC5G,SAAO,KAAK;AACd;AAEA,MAAM,eAAe,CAAC,KAA+B,aAA0C;AAC7F,MAAI,aAAa;AAAW,WAAO;AACnC,SAAO,IAAI,SAAS,QAAQ,KAAK;AACnC;AAEA,MAAM,gBAAgB,CAAC,OAAiC,WAAwC;AAC9F,QAAM,MAAM,KAAK;AAAA,IACf;AAAA,IACA,OAAO,aAAa,OAAO,OAAO,QAAQ;AAAA,IAC1C,QAAQ,OAAO,QAAQ;AAAA,IACvB,KAAK;AAAA,IACL,KAAK,aAAAA,QAAM,UAAU;AAAA,IACrB,IAAI,GAAG,MAAM,QAAQ,OAAO;AAAA,EAC9B,CAAC;AACH;AAEO,MAAM,cAAc,CAAC,OAAiC,YAAiD;AAC5G,QAAM,QAAQ,CAAC;AACf,UAAQ,QAAQ,CAAC,WAAW;AAC1B,QAAI,OAAO;AAAS,aAAO,QAAQ,QAAQ,CAAC,QAAQ,cAAc,OAAO,GAAG,CAAC;AAAA;AACxE,oBAAc,OAAO,MAAM;AAAA,EAClC,CAAC;AACH;",
|
|
6
6
|
"names": ["React"]
|
|
7
7
|
}
|
|
@@ -6,7 +6,7 @@ import { DSComboBox } from "@elliemae/ds-form-combobox";
|
|
|
6
6
|
import { SearchXsmall } from "@elliemae/ds-icons";
|
|
7
7
|
import { uid } from "uid";
|
|
8
8
|
import { FilterPopover } from "../../../../exported-related/index.js";
|
|
9
|
-
import { DATA_TESTID } from "../../../../configs/index.js";
|
|
9
|
+
import { DATA_TESTID, EMPTY_FILTER } from "../../../../configs/index.js";
|
|
10
10
|
const getValue = (datum) => datum?.toString();
|
|
11
11
|
const BaseSelectFilter = (props) => {
|
|
12
12
|
const {
|
|
@@ -28,15 +28,23 @@ const BaseSelectFilter = (props) => {
|
|
|
28
28
|
const shouldFocus = useRef(true);
|
|
29
29
|
const filterOptions = useMemo(() => {
|
|
30
30
|
if (!userFilterOptions) {
|
|
31
|
-
const automaticFilters = [
|
|
32
|
-
|
|
33
|
-
|
|
31
|
+
const automaticFilters = [...new Set(data.map((datum) => getValue(datum?.[id])))];
|
|
32
|
+
const hasEmptyValue = automaticFilters.some((item) => item === null || item === void 0 || item === "");
|
|
33
|
+
const finalAutomaticFilters = automaticFilters.filter((item) => item !== null && item !== void 0 && item !== "").map((item) => ({
|
|
34
34
|
type: "option",
|
|
35
35
|
dsId: item,
|
|
36
36
|
value: item,
|
|
37
37
|
label: item
|
|
38
38
|
}));
|
|
39
|
-
|
|
39
|
+
if (hasEmptyValue) {
|
|
40
|
+
finalAutomaticFilters.push({
|
|
41
|
+
type: "option",
|
|
42
|
+
dsId: EMPTY_FILTER,
|
|
43
|
+
value: EMPTY_FILTER,
|
|
44
|
+
label: "(Empty)"
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
return finalAutomaticFilters;
|
|
40
48
|
}
|
|
41
49
|
if (Array.isArray(userFilterOptions))
|
|
42
50
|
return userFilterOptions;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../../../../scripts/build/transpile/react-shim.js", "../../../../../../src/addons/Filters/Components/SelectFilter/BaseSelectFilter.tsx"],
|
|
4
|
-
"sourcesContent": ["import * as React from 'react';\nexport { React };\n", "import React, { useState, useRef, useCallback, useEffect, useMemo } from 'react';\nimport { Grid } from '@elliemae/ds-grid';\nimport type { DSComboboxT } from '@elliemae/ds-form-combobox';\nimport { DSComboBox } from '@elliemae/ds-form-combobox';\nimport { SearchXsmall } from '@elliemae/ds-icons';\nimport { uid } from 'uid';\nimport { FilterPopover } from '../../../../exported-related/index.js';\nimport type { DSDataTableT } from '../../../../react-desc-prop-types.js';\nimport { DATA_TESTID } from '../../../../configs/index.js';\n\ninterface BaseSelectProps {\n isMulti?: boolean;\n creatable?: boolean;\n type: string;\n}\n\ntype MaybeToStringable =\n | string\n | number\n | boolean\n | Date\n | RegExp\n | Array<unknown>\n | Record<string, unknown>\n | null\n | undefined;\n\nconst getValue = (datum: unknown) => (datum as MaybeToStringable)?.toString();\n\ntype BaseSelectFilterValue = DSComboboxT.SelectedOptionsT;\n\nexport const BaseSelectFilter: React.ComponentType<\n DSDataTableT.FilterProps<BaseSelectFilterValue> & BaseSelectProps\n> = (props) => {\n const {\n isMulti = false,\n filterValue: selectedItems = null,\n creatable = false,\n column,\n type,\n column: { id, filterOptions: userFilterOptions, filterMinWidth },\n ctx: {\n tableProps: { data },\n },\n reduxHeader,\n patchHeaderFilterButtonAndMenu,\n innerRef,\n onValueChange,\n } = props;\n\n const ref = useRef<HTMLInputElement | null>(null);\n const shouldFocus = useRef(true);\n const filterOptions = useMemo(() => {\n // If the user didn't provide options, use the available ones\n if (!userFilterOptions) {\n const automaticFilters
|
|
5
|
-
"mappings": "AAAA,YAAY,WAAW;
|
|
4
|
+
"sourcesContent": ["import * as React from 'react';\nexport { React };\n", "import React, { useState, useRef, useCallback, useEffect, useMemo } from 'react';\nimport { Grid } from '@elliemae/ds-grid';\nimport type { DSComboboxT } from '@elliemae/ds-form-combobox';\nimport { DSComboBox } from '@elliemae/ds-form-combobox';\nimport { SearchXsmall } from '@elliemae/ds-icons';\nimport { uid } from 'uid';\nimport { FilterPopover } from '../../../../exported-related/index.js';\nimport type { DSDataTableT } from '../../../../react-desc-prop-types.js';\nimport { DATA_TESTID, EMPTY_FILTER } from '../../../../configs/index.js';\n\ninterface BaseSelectProps {\n isMulti?: boolean;\n creatable?: boolean;\n type: string;\n}\n\ntype MaybeToStringable =\n | string\n | number\n | boolean\n | Date\n | RegExp\n | Array<unknown>\n | Record<string, unknown>\n | null\n | undefined;\n\nconst getValue = (datum: unknown) => (datum as MaybeToStringable)?.toString();\n\ntype BaseSelectFilterValue = DSComboboxT.SelectedOptionsT;\n\nexport const BaseSelectFilter: React.ComponentType<\n DSDataTableT.FilterProps<BaseSelectFilterValue> & BaseSelectProps\n> = (props) => {\n const {\n isMulti = false,\n filterValue: selectedItems = null,\n creatable = false,\n column,\n type,\n column: { id, filterOptions: userFilterOptions, filterMinWidth },\n ctx: {\n tableProps: { data },\n },\n reduxHeader,\n patchHeaderFilterButtonAndMenu,\n innerRef,\n onValueChange,\n } = props;\n\n const ref = useRef<HTMLInputElement | null>(null);\n const shouldFocus = useRef(true);\n const filterOptions = useMemo(() => {\n // If the user didn't provide options, use the available ones\n if (!userFilterOptions) {\n const automaticFilters = [...new Set(data.map((datum) => getValue(datum?.[id])))];\n\n const hasEmptyValue = automaticFilters.some((item) => item === null || item === undefined || item === '');\n\n const finalAutomaticFilters: DSDataTableT.FilterOptionT[] = automaticFilters\n .filter((item) => item !== null && item !== undefined && item !== '')\n .map((item) => ({\n type: 'option',\n dsId: item as string,\n value: item as string,\n label: item as string,\n }));\n\n if (hasEmptyValue) {\n finalAutomaticFilters.push({\n type: 'option',\n dsId: EMPTY_FILTER,\n value: EMPTY_FILTER,\n label: '(Empty)',\n });\n }\n\n return finalAutomaticFilters;\n }\n\n // If user provided the array itself, use it\n if (Array.isArray(userFilterOptions)) return userFilterOptions;\n // Otherwise, it is a function\n return userFilterOptions();\n }, [data, id, userFilterOptions]);\n\n const [filters, setFilteredOptions] = useState(filterOptions);\n\n useEffect(() => setFilteredOptions(filterOptions), [filterOptions]);\n\n const handleOnChange = useCallback(\n (value: BaseSelectFilterValue) => {\n if (isMulti && Array.isArray(value)) {\n onValueChange(type, value.length !== 0 ? value : undefined);\n } else {\n onValueChange(type, value !== null ? value : undefined);\n patchHeaderFilterButtonAndMenu(column.id, true);\n }\n },\n [column.id, isMulti, onValueChange, patchHeaderFilterButtonAndMenu, type],\n );\n\n const handleOnCreate = useCallback(\n (label: string) => {\n if (label.trim() === '') {\n return;\n }\n if (filterOptions.some((item) => 'label' in item && item.label === label)) {\n return;\n }\n const newId = uid();\n const newItem: DSDataTableT.FilterOptionT = {\n dsId: newId,\n value: newId,\n label,\n type: 'option',\n };\n filterOptions.unshift(newItem);\n handleOnChange(Array.isArray(selectedItems) ? [...selectedItems, newItem] : newItem);\n setFilteredOptions([...filterOptions]);\n },\n [filterOptions, handleOnChange, selectedItems],\n );\n\n const handleRef = useCallback((newRef: HTMLInputElement | null) => {\n ref.current = newRef;\n if (shouldFocus.current) {\n setTimeout(() => {\n ref.current?.focus();\n shouldFocus.current = false;\n });\n }\n }, []);\n\n useEffect(() => {\n if (reduxHeader?.hideFilterMenu) {\n shouldFocus.current = true;\n }\n }, [reduxHeader?.hideFilterMenu]);\n\n const Select = useMemo(\n () => (\n <Grid\n data-testid={\n isMulti ? DATA_TESTID.DATA_TABLE_MULTISELECT_CONTROLLER : DATA_TESTID.DATA_TABLE_SINGLESELECT_CONTROLLER\n }\n >\n <DSComboBox\n inline\n innerRef={handleRef}\n allOptions={filters}\n onCreate={creatable ? handleOnCreate : undefined}\n onChange={handleOnChange}\n selectedValues={selectedItems}\n menuMaxHeight={300}\n />\n </Grid>\n ),\n [creatable, filters, handleOnChange, handleOnCreate, handleRef, isMulti, selectedItems],\n );\n\n const handleOnClickOutside = useCallback(() => {\n setFilteredOptions(filterOptions);\n }, [filterOptions]);\n\n return (\n <FilterPopover\n reduxHeader={reduxHeader}\n column={column}\n columnId={column.id}\n menuContent={Select}\n triggerIcon={<SearchXsmall />}\n innerRef={innerRef}\n ariaLabel=\"Open Selection Filter\"\n onClickOutsideMenu={handleOnClickOutside}\n customStyles={{\n backgroundColor: '#fff',\n width: filterMinWidth ?? column.ref?.current?.offsetWidth,\n }}\n />\n );\n};\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -45,10 +45,12 @@ const DATA_TESTID = {
|
|
|
45
45
|
DATA_TABLE_HEADER_CELL_TITLE: "header-cell-title",
|
|
46
46
|
DATA_TABLE_FILTER_BAR_DD_MENU_BUTTON: "filter-bar-ddmenu-button"
|
|
47
47
|
};
|
|
48
|
+
const EMPTY_FILTER = "ds-empty-filter";
|
|
48
49
|
export {
|
|
49
50
|
ColsLayoutStyle,
|
|
50
51
|
DATA_TESTID,
|
|
51
52
|
DropIndicatorPosition,
|
|
53
|
+
EMPTY_FILTER,
|
|
52
54
|
momentFormat
|
|
53
55
|
};
|
|
54
56
|
//# sourceMappingURL=constants.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../scripts/build/transpile/react-shim.js", "../../../src/configs/constants.tsx"],
|
|
4
|
-
"sourcesContent": ["import * as React from 'react';\nexport { React };\n", "export const momentFormat = 'MM/DD/YYYY';\nexport const ColsLayoutStyle = {\n Fixed: 'fixed',\n Auto: 'auto',\n} as const;\n\nexport const DropIndicatorPosition = {\n None: 'none',\n Before: 'before',\n After: 'after',\n Inside: 'inside',\n} as const;\n\nexport const DATA_TESTID = {\n DATA_TABLE_WRAPPER: 'data-table-wrapper',\n DATA_TABLE_GLOBAL_EXPAND_CELL: 'data-table-global-expand-cell',\n DATA_TABLE_ICON_ARROW_DOWN: 'ic-arrow-head-down',\n DATA_TABLE_ICON_ARROW_RIGHT: 'ic-arrow-head-right',\n DATA_TABLE_ICON_ARROW_MIXED: 'ic-arrow-head-mixed',\n DATA_TABLE_ICON_CHILD: 'ic-arrow-child',\n DATA_TABLE_GLOBAL_CHECKBOX: 'data-table-global-checkbox',\n DATA_TABLE_CHECKBOX: 'data-table-checkbox',\n DATA_TABLE_RADIO: 'data-table-radio',\n DATA_TABLE_DATE_RANGE_CONTROLLER: 'data-table-date-range',\n DATA_TABLE_DATE_RANGE_CONTROLLER_CHECKBOX_SWITCHER: 'data-table-date-range-checkbox-switcher-container',\n DATA_TABLE_SINGLE_DATE_CONTROLLER: 'data-table-single-date',\n DATA_TABLE_NUMBER_RANGE_CONTROLLER: 'data-table-number-range',\n DATA_TABLE_CURRENCY_RANGE_CONTROLLER: 'data-table-currency-range',\n DATA_TABLE_SELECT_MENU_ITEM: 'data-table-filter-menu-list-item',\n DATA_TABLE_MULTISELECT_CONTROLLER: 'data-table-multi-select',\n DATA_TABLE_SINGLESELECT_CONTROLLER: 'data-table-single-select',\n DATA_TABLE_FILTER_BUTTON: 'data-table-filter-menu-button',\n DATA_TABLE_FILTER_MENU_CONTENT: 'data-table-filter-menu-content',\n DATA_TABLE_ROW_CONTENT: 'data-table-row-content',\n DATA_TABLE_ROW: 'data-table-row',\n DATA_TABLE_TOOLBAR_TRIGGER: 'data-table-toolbar-trigger',\n DATA_TABLE_CELL: 'data-table-cell',\n DATA_TABLE_DRAG_HANDLE: 'data-table-drag-handle',\n DATA_TABLE_CONTENT_WRAPPER: 'data-table-content-wrapper',\n DATA_TABLE_TABLE: 'data-table-table',\n DATA_TABLE_SCROLLABLE_CONTAINER: 'data-table-scrollable-container',\n DATA_TABLE_HEADER: 'data-table-header',\n DATA_TABLE_ROW_HEADER_CONTENT: 'data-table-row-header-content',\n DATA_TABLE_ROW_GROUP_HEADER: 'data-table-row-group-header',\n DATA_TABLE_COLUMN_DRAG_OVERLAY: 'data-table-drag-column-drag-overlay',\n DATA_TABLE_HEADER_CELL_TITLE: 'header-cell-title',\n DATA_TABLE_FILTER_BAR_DD_MENU_BUTTON: 'filter-bar-ddmenu-button',\n};\n"],
|
|
5
|
-
"mappings": "AAAA,YAAY,WAAW;ACAhB,MAAM,eAAe;AACrB,MAAM,kBAAkB;AAAA,EAC7B,OAAO;AAAA,EACP,MAAM;AACR;AAEO,MAAM,wBAAwB;AAAA,EACnC,MAAM;AAAA,EACN,QAAQ;AAAA,EACR,OAAO;AAAA,EACP,QAAQ;AACV;AAEO,MAAM,cAAc;AAAA,EACzB,oBAAoB;AAAA,EACpB,+BAA+B;AAAA,EAC/B,4BAA4B;AAAA,EAC5B,6BAA6B;AAAA,EAC7B,6BAA6B;AAAA,EAC7B,uBAAuB;AAAA,EACvB,4BAA4B;AAAA,EAC5B,qBAAqB;AAAA,EACrB,kBAAkB;AAAA,EAClB,kCAAkC;AAAA,EAClC,oDAAoD;AAAA,EACpD,mCAAmC;AAAA,EACnC,oCAAoC;AAAA,EACpC,sCAAsC;AAAA,EACtC,6BAA6B;AAAA,EAC7B,mCAAmC;AAAA,EACnC,oCAAoC;AAAA,EACpC,0BAA0B;AAAA,EAC1B,gCAAgC;AAAA,EAChC,wBAAwB;AAAA,EACxB,gBAAgB;AAAA,EAChB,4BAA4B;AAAA,EAC5B,iBAAiB;AAAA,EACjB,wBAAwB;AAAA,EACxB,4BAA4B;AAAA,EAC5B,kBAAkB;AAAA,EAClB,iCAAiC;AAAA,EACjC,mBAAmB;AAAA,EACnB,+BAA+B;AAAA,EAC/B,6BAA6B;AAAA,EAC7B,gCAAgC;AAAA,EAChC,8BAA8B;AAAA,EAC9B,sCAAsC;AACxC;",
|
|
4
|
+
"sourcesContent": ["import * as React from 'react';\nexport { React };\n", "export const momentFormat = 'MM/DD/YYYY';\nexport const ColsLayoutStyle = {\n Fixed: 'fixed',\n Auto: 'auto',\n} as const;\n\nexport const DropIndicatorPosition = {\n None: 'none',\n Before: 'before',\n After: 'after',\n Inside: 'inside',\n} as const;\n\nexport const DATA_TESTID = {\n DATA_TABLE_WRAPPER: 'data-table-wrapper',\n DATA_TABLE_GLOBAL_EXPAND_CELL: 'data-table-global-expand-cell',\n DATA_TABLE_ICON_ARROW_DOWN: 'ic-arrow-head-down',\n DATA_TABLE_ICON_ARROW_RIGHT: 'ic-arrow-head-right',\n DATA_TABLE_ICON_ARROW_MIXED: 'ic-arrow-head-mixed',\n DATA_TABLE_ICON_CHILD: 'ic-arrow-child',\n DATA_TABLE_GLOBAL_CHECKBOX: 'data-table-global-checkbox',\n DATA_TABLE_CHECKBOX: 'data-table-checkbox',\n DATA_TABLE_RADIO: 'data-table-radio',\n DATA_TABLE_DATE_RANGE_CONTROLLER: 'data-table-date-range',\n DATA_TABLE_DATE_RANGE_CONTROLLER_CHECKBOX_SWITCHER: 'data-table-date-range-checkbox-switcher-container',\n DATA_TABLE_SINGLE_DATE_CONTROLLER: 'data-table-single-date',\n DATA_TABLE_NUMBER_RANGE_CONTROLLER: 'data-table-number-range',\n DATA_TABLE_CURRENCY_RANGE_CONTROLLER: 'data-table-currency-range',\n DATA_TABLE_SELECT_MENU_ITEM: 'data-table-filter-menu-list-item',\n DATA_TABLE_MULTISELECT_CONTROLLER: 'data-table-multi-select',\n DATA_TABLE_SINGLESELECT_CONTROLLER: 'data-table-single-select',\n DATA_TABLE_FILTER_BUTTON: 'data-table-filter-menu-button',\n DATA_TABLE_FILTER_MENU_CONTENT: 'data-table-filter-menu-content',\n DATA_TABLE_ROW_CONTENT: 'data-table-row-content',\n DATA_TABLE_ROW: 'data-table-row',\n DATA_TABLE_TOOLBAR_TRIGGER: 'data-table-toolbar-trigger',\n DATA_TABLE_CELL: 'data-table-cell',\n DATA_TABLE_DRAG_HANDLE: 'data-table-drag-handle',\n DATA_TABLE_CONTENT_WRAPPER: 'data-table-content-wrapper',\n DATA_TABLE_TABLE: 'data-table-table',\n DATA_TABLE_SCROLLABLE_CONTAINER: 'data-table-scrollable-container',\n DATA_TABLE_HEADER: 'data-table-header',\n DATA_TABLE_ROW_HEADER_CONTENT: 'data-table-row-header-content',\n DATA_TABLE_ROW_GROUP_HEADER: 'data-table-row-group-header',\n DATA_TABLE_COLUMN_DRAG_OVERLAY: 'data-table-drag-column-drag-overlay',\n DATA_TABLE_HEADER_CELL_TITLE: 'header-cell-title',\n DATA_TABLE_FILTER_BAR_DD_MENU_BUTTON: 'filter-bar-ddmenu-button',\n};\n\nexport const EMPTY_FILTER = 'ds-empty-filter';\n"],
|
|
5
|
+
"mappings": "AAAA,YAAY,WAAW;ACAhB,MAAM,eAAe;AACrB,MAAM,kBAAkB;AAAA,EAC7B,OAAO;AAAA,EACP,MAAM;AACR;AAEO,MAAM,wBAAwB;AAAA,EACnC,MAAM;AAAA,EACN,QAAQ;AAAA,EACR,OAAO;AAAA,EACP,QAAQ;AACV;AAEO,MAAM,cAAc;AAAA,EACzB,oBAAoB;AAAA,EACpB,+BAA+B;AAAA,EAC/B,4BAA4B;AAAA,EAC5B,6BAA6B;AAAA,EAC7B,6BAA6B;AAAA,EAC7B,uBAAuB;AAAA,EACvB,4BAA4B;AAAA,EAC5B,qBAAqB;AAAA,EACrB,kBAAkB;AAAA,EAClB,kCAAkC;AAAA,EAClC,oDAAoD;AAAA,EACpD,mCAAmC;AAAA,EACnC,oCAAoC;AAAA,EACpC,sCAAsC;AAAA,EACtC,6BAA6B;AAAA,EAC7B,mCAAmC;AAAA,EACnC,oCAAoC;AAAA,EACpC,0BAA0B;AAAA,EAC1B,gCAAgC;AAAA,EAChC,wBAAwB;AAAA,EACxB,gBAAgB;AAAA,EAChB,4BAA4B;AAAA,EAC5B,iBAAiB;AAAA,EACjB,wBAAwB;AAAA,EACxB,4BAA4B;AAAA,EAC5B,kBAAkB;AAAA,EAClB,iCAAiC;AAAA,EACjC,mBAAmB;AAAA,EACnB,+BAA+B;AAAA,EAC/B,6BAA6B;AAAA,EAC7B,gCAAgC;AAAA,EAChC,8BAA8B;AAAA,EAC9B,sCAAsC;AACxC;AAEO,MAAM,eAAe;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -1,7 +1,15 @@
|
|
|
1
1
|
import * as React from "react";
|
|
2
|
+
import { EMPTY_FILTER } from "../../configs/constants.js";
|
|
2
3
|
const multiSelectFilterFn = (unfilteredData, filterKey, filterValue) => {
|
|
3
4
|
if (filterValue.length > 0) {
|
|
4
|
-
return unfilteredData.filter(
|
|
5
|
+
return unfilteredData.filter(
|
|
6
|
+
(datum) => filterValue.some((item) => {
|
|
7
|
+
if (item.value === EMPTY_FILTER) {
|
|
8
|
+
return datum[filterKey] === null || datum[filterKey] === void 0 || datum[filterKey] === "";
|
|
9
|
+
}
|
|
10
|
+
return item.label === String(datum[filterKey]);
|
|
11
|
+
})
|
|
12
|
+
);
|
|
5
13
|
}
|
|
6
14
|
return unfilteredData;
|
|
7
15
|
};
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../../scripts/build/transpile/react-shim.js", "../../../../src/exported-related/Filters/multiSelectFilterFn.tsx"],
|
|
4
|
-
"sourcesContent": ["import * as React from 'react';\nexport { React };\n", "import type { FilterFn } from './types.js';\n\nexport const multiSelectFilterFn: FilterFn<{ label: string }[]> = (unfilteredData
|
|
5
|
-
"mappings": "AAAA,YAAY,WAAW;
|
|
4
|
+
"sourcesContent": ["import * as React from 'react';\nexport { React };\n", "import { EMPTY_FILTER } from '../../configs/constants.js';\nimport type { FilterFn } from './types.js';\n\nexport const multiSelectFilterFn: FilterFn<{ label: string; value: string }[]> = (\n unfilteredData,\n filterKey,\n filterValue,\n) => {\n if (filterValue.length > 0) {\n return unfilteredData.filter((datum) =>\n filterValue.some((item) => {\n if (item.value === EMPTY_FILTER) {\n return datum[filterKey] === null || datum[filterKey] === undefined || datum[filterKey] === '';\n }\n return item.label === String(datum[filterKey]);\n }),\n );\n }\n return unfilteredData;\n};\n"],
|
|
5
|
+
"mappings": "AAAA,YAAY,WAAW;ACAvB,SAAS,oBAAoB;AAGtB,MAAM,sBAAoE,CAC/E,gBACA,WACA,gBACG;AACH,MAAI,YAAY,SAAS,GAAG;AAC1B,WAAO,eAAe;AAAA,MAAO,CAAC,UAC5B,YAAY,KAAK,CAAC,SAAS;AACzB,YAAI,KAAK,UAAU,cAAc;AAC/B,iBAAO,MAAM,SAAS,MAAM,QAAQ,MAAM,SAAS,MAAM,UAAa,MAAM,SAAS,MAAM;AAAA,QAC7F;AACA,eAAO,KAAK,UAAU,OAAO,MAAM,SAAS,CAAC;AAAA,MAC/C,CAAC;AAAA,IACH;AAAA,EACF;AACA,SAAO;AACT;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -1,7 +1,13 @@
|
|
|
1
1
|
import * as React from "react";
|
|
2
|
+
import { EMPTY_FILTER } from "../../configs/constants.js";
|
|
2
3
|
const singleSelectFilterFn = (unfilteredData, filterKey, filterValue) => {
|
|
3
4
|
if (filterValue) {
|
|
4
|
-
return unfilteredData.filter((datum) =>
|
|
5
|
+
return unfilteredData.filter((datum) => {
|
|
6
|
+
if (filterValue.value === EMPTY_FILTER) {
|
|
7
|
+
return datum[filterKey] === null || datum[filterKey] === void 0 || datum[filterKey] === "";
|
|
8
|
+
}
|
|
9
|
+
return String(datum[filterKey]) === filterValue.label;
|
|
10
|
+
});
|
|
5
11
|
}
|
|
6
12
|
return unfilteredData;
|
|
7
13
|
};
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../../scripts/build/transpile/react-shim.js", "../../../../src/exported-related/Filters/singleSelectFilterFn.tsx"],
|
|
4
|
-
"sourcesContent": ["import * as React from 'react';\nexport { React };\n", "import type { FilterFn } from './types.js';\n\nexport const singleSelectFilterFn: FilterFn<{ label: string }> = (unfilteredData
|
|
5
|
-
"mappings": "AAAA,YAAY,WAAW;
|
|
4
|
+
"sourcesContent": ["import * as React from 'react';\nexport { React };\n", "import { EMPTY_FILTER } from '../../configs/constants.js';\nimport type { FilterFn } from './types.js';\n\nexport const singleSelectFilterFn: FilterFn<{ label: string; value: string }> = (\n unfilteredData,\n filterKey,\n filterValue,\n) => {\n if (filterValue) {\n return unfilteredData.filter((datum) => {\n if (filterValue.value === EMPTY_FILTER) {\n return datum[filterKey] === null || datum[filterKey] === undefined || datum[filterKey] === '';\n }\n return String(datum[filterKey]) === filterValue.label;\n });\n }\n return unfilteredData;\n};\n"],
|
|
5
|
+
"mappings": "AAAA,YAAY,WAAW;ACAvB,SAAS,oBAAoB;AAGtB,MAAM,uBAAmE,CAC9E,gBACA,WACA,gBACG;AACH,MAAI,aAAa;AACf,WAAO,eAAe,OAAO,CAAC,UAAU;AACtC,UAAI,YAAY,UAAU,cAAc;AACtC,eAAO,MAAM,SAAS,MAAM,QAAQ,MAAM,SAAS,MAAM,UAAa,MAAM,SAAS,MAAM;AAAA,MAC7F;AACA,aAAO,OAAO,MAAM,SAAS,CAAC,MAAM,YAAY;AAAA,IAClD,CAAC;AAAA,EACH;AACA,SAAO;AACT;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -1,6 +1,11 @@
|
|
|
1
1
|
import * as React from "react";
|
|
2
|
+
import { jsx } from "react/jsx-runtime";
|
|
2
3
|
import React2 from "react";
|
|
3
|
-
const BasicCell = ({ cell }) =>
|
|
4
|
+
const BasicCell = ({ cell }) => {
|
|
5
|
+
if (cell.value === null || cell.value === void 0 || cell.value === "")
|
|
6
|
+
return /* @__PURE__ */ jsx("p", { "aria-label": "Empty cell" });
|
|
7
|
+
return cell.value;
|
|
8
|
+
};
|
|
4
9
|
const getCellValue = (row, accessor) => {
|
|
5
10
|
if (accessor === void 0)
|
|
6
11
|
return null;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../scripts/build/transpile/react-shim.js", "../../../src/helpers/addCellData.tsx"],
|
|
4
|
-
"sourcesContent": ["import * as React from 'react';\nexport { React };\n", "import React from 'react';\nimport type { DSDataTableT } from '../react-desc-prop-types.js';\n\nconst BasicCell: React.ComponentType<{ cell: DSDataTableT.Cell }> = ({ cell }) => cell.value as JSX.Element;\n\nconst getCellValue = (row: DSDataTableT.InternalRow, accessor: string | undefined): unknown => {\n if (accessor === undefined) return null;\n return row.original[accessor] ?? null;\n};\n\nconst addColumnData = (datum: DSDataTableT.InternalRow, column: DSDataTableT.InternalColumn) => {\n datum.cells.push({\n column,\n value: getCellValue(datum, column.accessor),\n render: column.Cell ?? BasicCell,\n row: datum,\n ref: React.createRef(),\n id: `${datum.uid}__${column.id}`,\n });\n};\n\nexport const addCellData = (datum: DSDataTableT.InternalRow, columns: DSDataTableT.InternalColumn[]): void => {\n datum.cells = [];\n columns.forEach((column) => {\n if (column.columns) column.columns.forEach((col) => addColumnData(datum, col));\n else addColumnData(datum, column);\n });\n};\n"],
|
|
5
|
-
"mappings": "AAAA,YAAY,WAAW;
|
|
4
|
+
"sourcesContent": ["import * as React from 'react';\nexport { React };\n", "import React from 'react';\nimport type { DSDataTableT } from '../react-desc-prop-types.js';\n\nconst BasicCell: React.ComponentType<{ cell: DSDataTableT.Cell }> = ({ cell }) => {\n if (cell.value === null || cell.value === undefined || cell.value === '') return <p aria-label=\"Empty cell\"></p>;\n return cell.value as JSX.Element;\n};\n\nconst getCellValue = (row: DSDataTableT.InternalRow, accessor: string | undefined): unknown => {\n if (accessor === undefined) return null;\n return row.original[accessor] ?? null;\n};\n\nconst addColumnData = (datum: DSDataTableT.InternalRow, column: DSDataTableT.InternalColumn) => {\n datum.cells.push({\n column,\n value: getCellValue(datum, column.accessor),\n render: column.Cell ?? BasicCell,\n row: datum,\n ref: React.createRef(),\n id: `${datum.uid}__${column.id}`,\n });\n};\n\nexport const addCellData = (datum: DSDataTableT.InternalRow, columns: DSDataTableT.InternalColumn[]): void => {\n datum.cells = [];\n columns.forEach((column) => {\n if (column.columns) column.columns.forEach((col) => addColumnData(datum, col));\n else addColumnData(datum, column);\n });\n};\n"],
|
|
5
|
+
"mappings": "AAAA,YAAY,WAAW;ACI4D;AAJnF,OAAOA,YAAW;AAGlB,MAAM,YAA8D,CAAC,EAAE,KAAK,MAAM;AAChF,MAAI,KAAK,UAAU,QAAQ,KAAK,UAAU,UAAa,KAAK,UAAU;AAAI,WAAO,oBAAC,OAAE,cAAW,cAAa;AAC5G,SAAO,KAAK;AACd;AAEA,MAAM,eAAe,CAAC,KAA+B,aAA0C;AAC7F,MAAI,aAAa;AAAW,WAAO;AACnC,SAAO,IAAI,SAAS,QAAQ,KAAK;AACnC;AAEA,MAAM,gBAAgB,CAAC,OAAiC,WAAwC;AAC9F,QAAM,MAAM,KAAK;AAAA,IACf;AAAA,IACA,OAAO,aAAa,OAAO,OAAO,QAAQ;AAAA,IAC1C,QAAQ,OAAO,QAAQ;AAAA,IACvB,KAAK;AAAA,IACL,KAAKA,OAAM,UAAU;AAAA,IACrB,IAAI,GAAG,MAAM,QAAQ,OAAO;AAAA,EAC9B,CAAC;AACH;AAEO,MAAM,cAAc,CAAC,OAAiC,YAAiD;AAC5G,QAAM,QAAQ,CAAC;AACf,UAAQ,QAAQ,CAAC,WAAW;AAC1B,QAAI,OAAO;AAAS,aAAO,QAAQ,QAAQ,CAAC,QAAQ,cAAc,OAAO,GAAG,CAAC;AAAA;AACxE,oBAAc,OAAO,MAAM;AAAA,EAClC,CAAC;AACH;",
|
|
6
6
|
"names": ["React"]
|
|
7
7
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@elliemae/ds-data-table",
|
|
3
|
-
"version": "3.21.0-next.
|
|
3
|
+
"version": "3.21.0-next.2",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"description": "ICE MT - Dimsum - Data Table",
|
|
6
6
|
"files": [
|
|
@@ -573,30 +573,30 @@
|
|
|
573
573
|
"dependencies": {
|
|
574
574
|
"react-virtual": "~2.10.4",
|
|
575
575
|
"uid": "~2.0.1",
|
|
576
|
-
"@elliemae/ds-button": "3.21.0-next.
|
|
577
|
-
"@elliemae/ds-button-v2": "3.21.0-next.
|
|
578
|
-
"@elliemae/ds-circular-progress-indicator": "3.21.0-next.
|
|
579
|
-
"@elliemae/ds-drag-and-drop": "3.21.0-next.
|
|
580
|
-
"@elliemae/ds-dropdownmenu": "3.21.0-next.
|
|
581
|
-
"@elliemae/ds-form-checkbox": "3.21.0-next.
|
|
582
|
-
"@elliemae/ds-form-combobox": "3.21.0-next.
|
|
583
|
-
"@elliemae/ds-form-
|
|
584
|
-
"@elliemae/ds-form-
|
|
585
|
-
"@elliemae/ds-form-
|
|
586
|
-
"@elliemae/ds-
|
|
587
|
-
"@elliemae/ds-
|
|
588
|
-
"@elliemae/ds-
|
|
589
|
-
"@elliemae/ds-
|
|
590
|
-
"@elliemae/ds-
|
|
591
|
-
"@elliemae/ds-
|
|
592
|
-
"@elliemae/ds-
|
|
593
|
-
"@elliemae/ds-
|
|
594
|
-
"@elliemae/ds-
|
|
595
|
-
"@elliemae/ds-
|
|
596
|
-
"@elliemae/ds-
|
|
597
|
-
"@elliemae/ds-
|
|
598
|
-
"@elliemae/ds-
|
|
599
|
-
"@elliemae/ds-
|
|
576
|
+
"@elliemae/ds-button": "3.21.0-next.2",
|
|
577
|
+
"@elliemae/ds-button-v2": "3.21.0-next.2",
|
|
578
|
+
"@elliemae/ds-circular-progress-indicator": "3.21.0-next.2",
|
|
579
|
+
"@elliemae/ds-drag-and-drop": "3.21.0-next.2",
|
|
580
|
+
"@elliemae/ds-dropdownmenu": "3.21.0-next.2",
|
|
581
|
+
"@elliemae/ds-form-checkbox": "3.21.0-next.2",
|
|
582
|
+
"@elliemae/ds-form-combobox": "3.21.0-next.2",
|
|
583
|
+
"@elliemae/ds-form-input-text": "3.21.0-next.2",
|
|
584
|
+
"@elliemae/ds-form-helpers-mask-hooks": "3.21.0-next.2",
|
|
585
|
+
"@elliemae/ds-form-layout-blocks": "3.21.0-next.2",
|
|
586
|
+
"@elliemae/ds-grid": "3.21.0-next.2",
|
|
587
|
+
"@elliemae/ds-pagination": "3.21.0-next.2",
|
|
588
|
+
"@elliemae/ds-pills": "3.21.0-next.2",
|
|
589
|
+
"@elliemae/ds-icons": "3.21.0-next.2",
|
|
590
|
+
"@elliemae/ds-popperjs": "3.21.0-next.2",
|
|
591
|
+
"@elliemae/ds-props-helpers": "3.21.0-next.2",
|
|
592
|
+
"@elliemae/ds-skeleton": "3.21.0-next.2",
|
|
593
|
+
"@elliemae/ds-system": "3.21.0-next.2",
|
|
594
|
+
"@elliemae/ds-toolbar": "3.21.0-next.2",
|
|
595
|
+
"@elliemae/ds-truncated-tooltip-text": "3.21.0-next.2",
|
|
596
|
+
"@elliemae/ds-form-date-range-picker": "3.21.0-next.2",
|
|
597
|
+
"@elliemae/ds-utilities": "3.21.0-next.2",
|
|
598
|
+
"@elliemae/ds-form-radio": "3.21.0-next.2",
|
|
599
|
+
"@elliemae/ds-form-date-time-picker": "3.21.0-next.2"
|
|
600
600
|
},
|
|
601
601
|
"devDependencies": {
|
|
602
602
|
"@testing-library/react": "~12.1.3",
|