@elliemae/ds-data-table 2.4.3-rc.0 → 2.4.3-rc.11
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/cjs/DataTable.js +10 -1
- package/cjs/DataTableSchema.js +5 -0
- package/cjs/addons/Editables/ComboboxEditableCell/ComboboxEditableCell.js +1 -1
- package/cjs/addons/Editables/DateEditableCell/DateEditableCell.js +1 -1
- package/cjs/addons/Editables/TextEditableCell/TextEditableCell.js +1 -1
- package/cjs/addons/Filters/Components/SelectFilter/BaseSelectFilter.js +14 -6
- package/cjs/addons/Filters/Components/SelectFilter/MultiSelectFilter.js +1 -1
- package/cjs/addons/Filters/Components/SelectFilter/SingleSelectFilter.js +1 -1
- package/cjs/configs/useDatatableConfig.js +5 -1
- package/cjs/exported-related/EditableCell.js +1 -2
- package/cjs/exported-related/FilterPopover.js +29 -27
- package/cjs/exported-related/RowRenderer/DefaultRowContentRenderer.js +8 -1
- package/cjs/exported-related/RowRenderer/useRowRendererHandlers.js +25 -7
- package/cjs/parts/Cells/Cell.js +3 -2
- package/cjs/parts/FilterBar/FiltersBar.js +29 -2
- package/cjs/parts/Filters/index.js +1 -1
- package/cjs/parts/Headers/HeaderCellGroup.js +3 -2
- package/cjs/parts/Headers/HeaderResizer.js +1 -1
- package/cjs/parts/Row.js +17 -1
- package/cjs/parts/RowVariants/index.js +1 -1
- package/cjs/parts/TableContent.js +1 -1
- package/cjs/styled.js +36 -39
- package/esm/DataTable.js +10 -1
- package/esm/DataTableSchema.js +5 -0
- package/esm/addons/Editables/ComboboxEditableCell/ComboboxEditableCell.js +1 -1
- package/esm/addons/Editables/DateEditableCell/DateEditableCell.js +1 -1
- package/esm/addons/Editables/TextEditableCell/TextEditableCell.js +1 -1
- package/esm/addons/Filters/Components/SelectFilter/BaseSelectFilter.js +14 -6
- package/esm/addons/Filters/Components/SelectFilter/MultiSelectFilter.js +1 -1
- package/esm/addons/Filters/Components/SelectFilter/SingleSelectFilter.js +1 -1
- package/esm/configs/useDatatableConfig.js +5 -1
- package/esm/exported-related/EditableCell.js +1 -2
- package/esm/exported-related/FilterPopover.js +30 -28
- package/esm/exported-related/RowRenderer/DefaultRowContentRenderer.js +9 -2
- package/esm/exported-related/RowRenderer/useRowRendererHandlers.js +25 -7
- package/esm/parts/Cells/Cell.js +3 -2
- package/esm/parts/FilterBar/FiltersBar.js +30 -3
- package/esm/parts/Filters/index.js +1 -1
- package/esm/parts/Headers/HeaderCellGroup.js +3 -2
- package/esm/parts/Headers/HeaderResizer.js +1 -1
- package/esm/parts/Row.js +17 -1
- package/esm/parts/RowVariants/index.js +1 -1
- package/esm/parts/TableContent.js +2 -2
- package/esm/styled.js +36 -40
- package/package.json +19 -19
- package/types/styled.d.ts +2 -1
- package/types/types/props.d.ts +1 -0
package/cjs/DataTable.js
CHANGED
|
@@ -21,6 +21,7 @@ var useDatatableConfig = require('./configs/useDatatableConfig.js');
|
|
|
21
21
|
require('./configs/useRowFlattenization.js');
|
|
22
22
|
var FiltersBar = require('./parts/FilterBar/FiltersBar.js');
|
|
23
23
|
var DataTableSchema = require('./DataTableSchema.js');
|
|
24
|
+
var styled = require('./styled.js');
|
|
24
25
|
var jsxRuntime = require('react/jsx-runtime');
|
|
25
26
|
|
|
26
27
|
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
|
|
@@ -41,13 +42,21 @@ const DataTable = props => {
|
|
|
41
42
|
const tableWrapperRef = React.useRef();
|
|
42
43
|
const tableContentWrapperRef = React.useRef();
|
|
43
44
|
const ctx = useDatatableConfig.useDatatableConfig(props);
|
|
45
|
+
const {
|
|
46
|
+
tableProps: {
|
|
47
|
+
height,
|
|
48
|
+
width
|
|
49
|
+
}
|
|
50
|
+
} = ctx;
|
|
44
51
|
return /*#__PURE__*/_jsx__default["default"](reactRedux.Provider, {
|
|
45
52
|
store: reduxStore
|
|
46
53
|
}, void 0, /*#__PURE__*/_jsx__default["default"](DataTableContext["default"].Provider, {
|
|
47
54
|
value: ctx
|
|
48
|
-
}, void 0, /*#__PURE__*/jsxRuntime.jsxs(
|
|
55
|
+
}, void 0, /*#__PURE__*/jsxRuntime.jsxs(styled.StyledDataTableWrapper, {
|
|
49
56
|
ref: tableWrapperRef,
|
|
50
57
|
"data-testid": constants.DATA_TESTID.DATA_TABLE_WRAPPER,
|
|
58
|
+
height: height,
|
|
59
|
+
width: width,
|
|
51
60
|
children: [withFilterBar ? _FiltersBar || (_FiltersBar = /*#__PURE__*/_jsx__default["default"](FiltersBar.FiltersBar, {})) : null, /*#__PURE__*/jsxRuntime.jsx(TableContent, {
|
|
52
61
|
ref: tableContentWrapperRef
|
|
53
62
|
})]
|
package/cjs/DataTableSchema.js
CHANGED
|
@@ -57,6 +57,11 @@ const DataTableSchema = {
|
|
|
57
57
|
withFilterBar: dsPropsHelpers.PropTypes.bool.description('Whether to display the filter bar'),
|
|
58
58
|
filterBarProps: dsPropsHelpers.PropTypes.shape({
|
|
59
59
|
customPillRenderer: dsPropsHelpers.PropTypes.oneOfType([dsPropsHelpers.PropTypes.func, dsPropsHelpers.PropTypes.element]).description('If you specify custom filters, you will need to render their pills here'),
|
|
60
|
+
isDropdownMenuOpen: dsPropsHelpers.PropTypes.bool.description('Wether the DropdownMenu is Open or not.'),
|
|
61
|
+
onDropdownMenuToggle: dsPropsHelpers.PropTypes.func.description('Callback to toggle the DropdownMenu.'),
|
|
62
|
+
onClearAllFiltersClick: dsPropsHelpers.PropTypes.func.description('Callback for Clear Al Filters option.'),
|
|
63
|
+
onDropdownMenuClickOutside: dsPropsHelpers.PropTypes.func.description('Callback triggered when clicking outside DropdownMenu.'),
|
|
64
|
+
onDropdownMenuTriggerClick: dsPropsHelpers.PropTypes.func.description('Callback triggered when clicking DropdownMenu ellipsis.'),
|
|
60
65
|
extraOptions: dsPropsHelpers.PropTypes.arrayOf(dsPropsHelpers.PropTypes.shape({
|
|
61
66
|
type: dsPropsHelpers.PropTypes.string,
|
|
62
67
|
id: dsPropsHelpers.PropTypes.string,
|
|
@@ -18,7 +18,6 @@ require('@elliemae/ds-popperjs');
|
|
|
18
18
|
require('styled-components');
|
|
19
19
|
require('../../../redux/reducers/index.js');
|
|
20
20
|
require('../../../configs/constants.js');
|
|
21
|
-
require('react/jsx-runtime');
|
|
22
21
|
var EditableCell = require('../../../exported-related/EditableCell.js');
|
|
23
22
|
require('@elliemae/ds-icons');
|
|
24
23
|
require('@elliemae/ds-utilities');
|
|
@@ -27,6 +26,7 @@ require('../../../configs/useRowFlattenization.js');
|
|
|
27
26
|
require('core-js/modules/esnext.async-iterator.map.js');
|
|
28
27
|
require('core-js/modules/esnext.iterator.map.js');
|
|
29
28
|
require('../../../styled.js');
|
|
29
|
+
require('react/jsx-runtime');
|
|
30
30
|
require('@elliemae/ds-form');
|
|
31
31
|
require('../../../parts/TableContent.js');
|
|
32
32
|
require('@elliemae/ds-grid');
|
|
@@ -15,7 +15,6 @@ require('@elliemae/ds-popperjs');
|
|
|
15
15
|
require('styled-components');
|
|
16
16
|
require('../../../redux/reducers/index.js');
|
|
17
17
|
require('../../../configs/constants.js');
|
|
18
|
-
require('react/jsx-runtime');
|
|
19
18
|
var EditableCell = require('../../../exported-related/EditableCell.js');
|
|
20
19
|
require('@elliemae/ds-icons');
|
|
21
20
|
require('@elliemae/ds-utilities');
|
|
@@ -26,6 +25,7 @@ require('../../../configs/useRowFlattenization.js');
|
|
|
26
25
|
require('core-js/modules/esnext.async-iterator.map.js');
|
|
27
26
|
require('core-js/modules/esnext.iterator.map.js');
|
|
28
27
|
require('../../../styled.js');
|
|
28
|
+
require('react/jsx-runtime');
|
|
29
29
|
require('@elliemae/ds-form');
|
|
30
30
|
require('../../../parts/TableContent.js');
|
|
31
31
|
require('@elliemae/ds-grid');
|
|
@@ -15,7 +15,6 @@ require('@elliemae/ds-button');
|
|
|
15
15
|
require('@elliemae/ds-popperjs');
|
|
16
16
|
require('../../../redux/reducers/index.js');
|
|
17
17
|
require('../../../configs/constants.js');
|
|
18
|
-
require('react/jsx-runtime');
|
|
19
18
|
var EditableCell = require('../../../exported-related/EditableCell.js');
|
|
20
19
|
require('@elliemae/ds-icons');
|
|
21
20
|
require('@elliemae/ds-utilities');
|
|
@@ -26,6 +25,7 @@ require('../../../configs/useRowFlattenization.js');
|
|
|
26
25
|
require('core-js/modules/esnext.async-iterator.map.js');
|
|
27
26
|
require('core-js/modules/esnext.iterator.map.js');
|
|
28
27
|
require('../../../styled.js');
|
|
28
|
+
require('react/jsx-runtime');
|
|
29
29
|
require('@elliemae/ds-form');
|
|
30
30
|
require('../../../parts/TableContent.js');
|
|
31
31
|
require('@elliemae/ds-grid');
|
|
@@ -21,6 +21,9 @@ require('core-js/modules/esnext.set.reduce.js');
|
|
|
21
21
|
require('core-js/modules/esnext.set.some.js');
|
|
22
22
|
require('core-js/modules/esnext.set.symmetric-difference.js');
|
|
23
23
|
require('core-js/modules/esnext.set.union.js');
|
|
24
|
+
require('core-js/modules/esnext.async-iterator.filter.js');
|
|
25
|
+
require('core-js/modules/esnext.iterator.constructor.js');
|
|
26
|
+
require('core-js/modules/esnext.iterator.filter.js');
|
|
24
27
|
var React = require('react');
|
|
25
28
|
var Grid = require('@elliemae/ds-grid');
|
|
26
29
|
var dsControlledForm = require('@elliemae/ds-controlled-form');
|
|
@@ -33,9 +36,6 @@ require('styled-components');
|
|
|
33
36
|
require('@elliemae/ds-button');
|
|
34
37
|
require('@elliemae/ds-utilities');
|
|
35
38
|
var constants = require('../../../../configs/constants.js');
|
|
36
|
-
require('core-js/modules/esnext.async-iterator.filter.js');
|
|
37
|
-
require('core-js/modules/esnext.iterator.constructor.js');
|
|
38
|
-
require('core-js/modules/esnext.iterator.filter.js');
|
|
39
39
|
require('core-js/modules/esnext.async-iterator.reduce.js');
|
|
40
40
|
require('core-js/modules/esnext.iterator.reduce.js');
|
|
41
41
|
require('react-virtual');
|
|
@@ -55,6 +55,8 @@ require('../../../../exported-related/Filters/applyOutOfTheBoxFilters.js');
|
|
|
55
55
|
require('moment');
|
|
56
56
|
require('core-js/modules/esnext.async-iterator.some.js');
|
|
57
57
|
require('core-js/modules/esnext.iterator.some.js');
|
|
58
|
+
require('../../../../redux/reducers/index.js');
|
|
59
|
+
var useDispatchHeadersActions = require('../../../../redux/reducers/headersReducers/useDispatchHeadersActions.js');
|
|
58
60
|
|
|
59
61
|
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
|
|
60
62
|
|
|
@@ -69,7 +71,8 @@ const BaseSelectFilter = props => {
|
|
|
69
71
|
type,
|
|
70
72
|
column: {
|
|
71
73
|
id,
|
|
72
|
-
filterOptions: userFilterOptions
|
|
74
|
+
filterOptions: userFilterOptions,
|
|
75
|
+
filterMinWidth
|
|
73
76
|
},
|
|
74
77
|
ctx: {
|
|
75
78
|
tableProps: {
|
|
@@ -80,10 +83,13 @@ const BaseSelectFilter = props => {
|
|
|
80
83
|
innerRef,
|
|
81
84
|
onValueChange
|
|
82
85
|
} = props;
|
|
86
|
+
const {
|
|
87
|
+
patchHeaderFilterButtonAndMenu
|
|
88
|
+
} = useDispatchHeadersActions.useDispatchHeadersActions();
|
|
83
89
|
const filterOptions = React.useMemo(() => {
|
|
84
90
|
// If the user didn't provide options, use the available ones
|
|
85
91
|
if (!userFilterOptions) {
|
|
86
|
-
const automaticFilters = [...new Set(data.map(datum => datum[id].toString()))].map(item => ({
|
|
92
|
+
const automaticFilters = [...new Set(data.filter(datum => !!datum[id]).map(datum => datum[id].toString()))].map(item => ({
|
|
87
93
|
type: 'option',
|
|
88
94
|
dsId: item,
|
|
89
95
|
value: item,
|
|
@@ -100,6 +106,7 @@ const BaseSelectFilter = props => {
|
|
|
100
106
|
|
|
101
107
|
const handleOnChange = value => {
|
|
102
108
|
onValueChange(type, value);
|
|
109
|
+
if (!isMulti) patchHeaderFilterButtonAndMenu(column.id, true);
|
|
103
110
|
};
|
|
104
111
|
|
|
105
112
|
const [filters, setFilteredOptions] = React.useState(filterOptions);
|
|
@@ -111,7 +118,8 @@ const BaseSelectFilter = props => {
|
|
|
111
118
|
"data-testid": isMulti ? constants.DATA_TESTID.DATA_TABLE_MULTISELECT_CONTROLLER : constants.DATA_TESTID.DATA_TABLE_SINGLESELECT_CONTROLLER,
|
|
112
119
|
style: {
|
|
113
120
|
background: '#fff',
|
|
114
|
-
position: 'relative'
|
|
121
|
+
position: 'relative',
|
|
122
|
+
width: filterMinWidth
|
|
115
123
|
}
|
|
116
124
|
}, void 0, /*#__PURE__*/_jsx__default["default"](dsControlledForm.DSComboBox, {
|
|
117
125
|
inline: true,
|
|
@@ -16,9 +16,9 @@ require('@elliemae/ds-popperjs');
|
|
|
16
16
|
require('styled-components');
|
|
17
17
|
require('../../../../redux/reducers/index.js');
|
|
18
18
|
var constants = require('../../../../configs/constants.js');
|
|
19
|
-
require('react/jsx-runtime');
|
|
20
19
|
require('../../../../styled.js');
|
|
21
20
|
require('../../../../DataTableContext.js');
|
|
21
|
+
require('react/jsx-runtime');
|
|
22
22
|
require('@elliemae/ds-icons');
|
|
23
23
|
require('@elliemae/ds-utilities');
|
|
24
24
|
require('core-js/modules/esnext.async-iterator.reduce.js');
|
|
@@ -16,9 +16,9 @@ require('@elliemae/ds-popperjs');
|
|
|
16
16
|
require('styled-components');
|
|
17
17
|
require('../../../../redux/reducers/index.js');
|
|
18
18
|
var constants = require('../../../../configs/constants.js');
|
|
19
|
-
require('react/jsx-runtime');
|
|
20
19
|
require('../../../../styled.js');
|
|
21
20
|
require('../../../../DataTableContext.js');
|
|
21
|
+
require('react/jsx-runtime');
|
|
22
22
|
require('@elliemae/ds-icons');
|
|
23
23
|
require('@elliemae/ds-utilities');
|
|
24
24
|
require('core-js/modules/esnext.async-iterator.reduce.js');
|
|
@@ -54,7 +54,11 @@ const useDatatableConfig = props => {
|
|
|
54
54
|
// Layout config
|
|
55
55
|
// ===========================================================================
|
|
56
56
|
|
|
57
|
-
const [gridLayout, setGridLayout] = React.useState(columnsToGrid.columnsToGrid(visibleColumns, props.colsLayoutStyle));
|
|
57
|
+
const [gridLayout, setGridLayout] = React.useState(columnsToGrid.columnsToGrid(visibleColumns, props.colsLayoutStyle)); // We need to listen and update the state based on this props
|
|
58
|
+
|
|
59
|
+
React.useEffect(() => {
|
|
60
|
+
setGridLayout(columnsToGrid.columnsToGrid(visibleColumns, props.colsLayoutStyle));
|
|
61
|
+
}, [visibleColumns, props.colsLayoutStyle]);
|
|
58
62
|
const totalColumnsWidth = React.useMemo(() => props.colsLayoutStyle === constants.ColsLayoutStyle.Fixed ? gridLayout.reduce((acc, cur) => acc + Number.parseInt(cur, 10), 0) : '100%', [props.colsLayoutStyle, gridLayout]);
|
|
59
63
|
const layoutHelpers = React.useMemo(() => ({
|
|
60
64
|
gridLayout,
|
|
@@ -15,7 +15,6 @@ var dsPopperjs = require('@elliemae/ds-popperjs');
|
|
|
15
15
|
var styled = require('styled-components');
|
|
16
16
|
require('../redux/reducers/index.js');
|
|
17
17
|
var constants = require('../configs/constants.js');
|
|
18
|
-
var jsxRuntime = require('react/jsx-runtime');
|
|
19
18
|
var useDispatchHeadersActions = require('../redux/reducers/headersReducers/useDispatchHeadersActions.js');
|
|
20
19
|
|
|
21
20
|
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
|
|
@@ -36,7 +35,22 @@ const Button = /*#__PURE__*/styled__default["default"](DSButton.DSButton).withCo
|
|
|
36
35
|
const PopperContent = /*#__PURE__*/styled__default["default"].div.withConfig({
|
|
37
36
|
componentId: "sc-16i88ut-2"
|
|
38
37
|
})(["background-color:#fff;"]);
|
|
39
|
-
|
|
38
|
+
|
|
39
|
+
const ButtonTrap = _ref2 => {
|
|
40
|
+
let {
|
|
41
|
+
cb
|
|
42
|
+
} = _ref2;
|
|
43
|
+
return /*#__PURE__*/_jsx__default["default"]("span", {
|
|
44
|
+
"aria-hidden": "true",
|
|
45
|
+
tabIndex: 0,
|
|
46
|
+
onFocus: e => {
|
|
47
|
+
e.stopPropagation();
|
|
48
|
+
cb();
|
|
49
|
+
}
|
|
50
|
+
});
|
|
51
|
+
};
|
|
52
|
+
|
|
53
|
+
const FilterPopover = _ref3 => {
|
|
40
54
|
let {
|
|
41
55
|
column,
|
|
42
56
|
columnId,
|
|
@@ -48,7 +62,7 @@ const FilterPopover = _ref2 => {
|
|
|
48
62
|
innerRef,
|
|
49
63
|
ariaLabel,
|
|
50
64
|
customStyles
|
|
51
|
-
} =
|
|
65
|
+
} = _ref3;
|
|
52
66
|
const {
|
|
53
67
|
hideFilterButton,
|
|
54
68
|
hideFilterMenu
|
|
@@ -56,7 +70,6 @@ const FilterPopover = _ref2 => {
|
|
|
56
70
|
hideFilterButton: true,
|
|
57
71
|
hideFilterMenu: true
|
|
58
72
|
};
|
|
59
|
-
const popperRef = React.useRef(null);
|
|
60
73
|
const {
|
|
61
74
|
patchHeaderFilterButtonAndMenu,
|
|
62
75
|
patchHeader
|
|
@@ -87,6 +100,13 @@ const FilterPopover = _ref2 => {
|
|
|
87
100
|
};
|
|
88
101
|
|
|
89
102
|
const [referenceElement, setReferenceElement] = React.useState(null);
|
|
103
|
+
const buttonTrapCallback = React.useCallback(() => {
|
|
104
|
+
patchHeader(columnId, {
|
|
105
|
+
hideFilterMenu: true,
|
|
106
|
+
hideFilterButton: false
|
|
107
|
+
});
|
|
108
|
+
referenceElement?.focus();
|
|
109
|
+
}, [columnId, patchHeader, referenceElement]);
|
|
90
110
|
return /*#__PURE__*/_jsx__default["default"]("div", {
|
|
91
111
|
// This is here to prevent propagation, and not trigger the sort functionality
|
|
92
112
|
onClick: e => e.stopPropagation(),
|
|
@@ -109,11 +129,6 @@ const FilterPopover = _ref2 => {
|
|
|
109
129
|
},
|
|
110
130
|
style: {
|
|
111
131
|
display: 'flex'
|
|
112
|
-
},
|
|
113
|
-
onBlur: e => {
|
|
114
|
-
if (e.target !== referenceElement && !popperRef.current?.contains(e.relatedTarget)) {
|
|
115
|
-
referenceElement?.focus();
|
|
116
|
-
}
|
|
117
132
|
}
|
|
118
133
|
}, void 0, /*#__PURE__*/_jsx__default["default"](FilterButton, {
|
|
119
134
|
hide: !isIconVisible,
|
|
@@ -145,24 +160,11 @@ const FilterPopover = _ref2 => {
|
|
|
145
160
|
minWidth: column.ref?.current?.offsetWidth ?? '0px'
|
|
146
161
|
}),
|
|
147
162
|
placementOrderPreference: ['bottom-end']
|
|
148
|
-
}, void 0, /*#__PURE__*/
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
patchHeader(columnId, {
|
|
154
|
-
hideFilterMenu: true,
|
|
155
|
-
hideFilterButton: false
|
|
156
|
-
});
|
|
157
|
-
e.preventDefault();
|
|
158
|
-
referenceElement.focus();
|
|
159
|
-
}
|
|
160
|
-
});
|
|
161
|
-
}
|
|
162
|
-
},
|
|
163
|
-
ref: popperRef,
|
|
164
|
-
children: menuContent
|
|
165
|
-
})));
|
|
163
|
+
}, void 0, /*#__PURE__*/_jsx__default["default"](PopperContent, {}, void 0, /*#__PURE__*/_jsx__default["default"](ButtonTrap, {
|
|
164
|
+
cb: buttonTrapCallback
|
|
165
|
+
}), menuContent, /*#__PURE__*/_jsx__default["default"](ButtonTrap, {
|
|
166
|
+
cb: buttonTrapCallback
|
|
167
|
+
}))));
|
|
166
168
|
};
|
|
167
169
|
|
|
168
170
|
exports.FilterPopover = FilterPopover;
|
|
@@ -100,12 +100,18 @@ const DefaultRowContentRenderer = props => {
|
|
|
100
100
|
|
|
101
101
|
return padding;
|
|
102
102
|
}, [row.depth, visibleColumns]);
|
|
103
|
+
const handleSelectDisableRow = React.useCallback(e => {
|
|
104
|
+
if (disabledRows[row.uid]) {
|
|
105
|
+
e.preventDefault();
|
|
106
|
+
e.stopPropagation();
|
|
107
|
+
}
|
|
108
|
+
}, [disabledRows, row.uid]);
|
|
103
109
|
const PureRowContent = React.useMemo(() => {
|
|
104
110
|
const DetailsView = row.original.tableRowDetails;
|
|
105
111
|
return /*#__PURE__*/jsxRuntime.jsxs(jsxRuntime.Fragment, {
|
|
106
112
|
children: [/*#__PURE__*/jsxRuntime.jsx(styled.StyledCellContainer, _objectSpread(_objectSpread({
|
|
107
113
|
ref: rowRef,
|
|
108
|
-
tabIndex: 0,
|
|
114
|
+
tabIndex: disabledRows[row.uid] ? -1 : 0,
|
|
109
115
|
role: "row",
|
|
110
116
|
"aria-rowindex": row.realIndex + 1,
|
|
111
117
|
"aria-label": ariaLabelMessage(row, selection?.[row.uid] === true),
|
|
@@ -124,6 +130,7 @@ const DefaultRowContentRenderer = props => {
|
|
|
124
130
|
selected: noSelectionColumn && selection?.[row.uid] === true,
|
|
125
131
|
disabled: disabledRows[row.uid],
|
|
126
132
|
"data-testid": constants.DATA_TESTID.DATA_TABLE_ROW_CONTENT,
|
|
133
|
+
onMouseDown: handleSelectDisableRow,
|
|
127
134
|
children: /*#__PURE__*/_jsx__default["default"](index$1, {
|
|
128
135
|
row: row,
|
|
129
136
|
isRowSelected: selectedRowId === row.uid,
|
|
@@ -48,12 +48,26 @@ const useRowRendererHandlers = _ref => {
|
|
|
48
48
|
const {
|
|
49
49
|
tableProps: {
|
|
50
50
|
onRowClick,
|
|
51
|
-
onRowFocus
|
|
51
|
+
onRowFocus,
|
|
52
|
+
disabledRows
|
|
52
53
|
},
|
|
53
54
|
virtualListHelpers: {
|
|
54
55
|
scrollToIndex
|
|
55
56
|
}
|
|
56
57
|
} = React.useContext(DataTableContext["default"]);
|
|
58
|
+
|
|
59
|
+
const isOptionFocuseable = opt => !disabledRows[opt.id];
|
|
60
|
+
|
|
61
|
+
const findInCircularList = function (list, from, criteria) {
|
|
62
|
+
let step = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 1;
|
|
63
|
+
|
|
64
|
+
for (let i = (from + step + list.length) % list.length; i !== from && from > -1; i = (i + step + list.length) % list.length) {
|
|
65
|
+
if (criteria(list[i])) return i;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
return from; // return same item
|
|
69
|
+
};
|
|
70
|
+
|
|
57
71
|
const {
|
|
58
72
|
setSelectedRowId,
|
|
59
73
|
setFocusedRowId
|
|
@@ -64,6 +78,7 @@ const useRowRendererHandlers = _ref => {
|
|
|
64
78
|
uid
|
|
65
79
|
} = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : row;
|
|
66
80
|
// setSelectedRowId(null);
|
|
81
|
+
if (disabledRows[uid]) return;
|
|
67
82
|
onRowClick(original, e, uid);
|
|
68
83
|
onRowFocus({
|
|
69
84
|
itemIndex,
|
|
@@ -75,7 +90,7 @@ const useRowRendererHandlers = _ref => {
|
|
|
75
90
|
},
|
|
76
91
|
original
|
|
77
92
|
}, e);
|
|
78
|
-
}, [row, onRowClick, onRowFocus, itemIndex, scrollToIndex]);
|
|
93
|
+
}, [row, disabledRows, onRowClick, onRowFocus, itemIndex, scrollToIndex]);
|
|
79
94
|
const isActive = draggableProps && draggableProps.active;
|
|
80
95
|
const handleKeyDown = React.useCallback(e => {
|
|
81
96
|
if (isDragOverlay || isActive) {
|
|
@@ -102,24 +117,27 @@ const useRowRendererHandlers = _ref => {
|
|
|
102
117
|
|
|
103
118
|
if (e.code === 'ArrowDown') {
|
|
104
119
|
e.preventDefault();
|
|
105
|
-
|
|
120
|
+
e.stopPropagation();
|
|
121
|
+
const next = findInCircularList(items, itemIndex, isOptionFocuseable);
|
|
122
|
+
setFocusedRowId(items[next].uid);
|
|
106
123
|
}
|
|
107
124
|
|
|
108
125
|
if (e.code === 'ArrowUp') {
|
|
109
126
|
e.preventDefault();
|
|
110
|
-
|
|
127
|
+
const prev = findInCircularList(items, itemIndex, isOptionFocuseable, -1);
|
|
128
|
+
setFocusedRowId(items[prev].uid);
|
|
111
129
|
}
|
|
112
|
-
}, [isDragOverlay, isActive, selectedRowId, row, setSelectedRowId, handleItemClick, itemIndex,
|
|
130
|
+
}, [isDragOverlay, isActive, selectedRowId, row, setSelectedRowId, handleItemClick, items, itemIndex, isOptionFocuseable, setFocusedRowId]);
|
|
113
131
|
const handleOnBlur = React.useCallback(e => {
|
|
114
132
|
if (e.relatedTarget?.getAttribute('data-testid') === 'data-table-row-content') {
|
|
115
133
|
setSelectedRowId(null);
|
|
116
134
|
}
|
|
117
135
|
}, [setSelectedRowId]);
|
|
118
136
|
const handleOnFocus = React.useCallback(e => {
|
|
119
|
-
if (e.target && e.target.getAttribute('data-testid') === constants.DATA_TESTID.DATA_TABLE_ROW_CONTENT) {
|
|
137
|
+
if (!disabledRows[row.uid] && e.target && e.target.getAttribute('data-testid') === constants.DATA_TESTID.DATA_TABLE_ROW_CONTENT) {
|
|
120
138
|
setFocusedRowId(row.uid);
|
|
121
139
|
}
|
|
122
|
-
}, [row.uid, setFocusedRowId]);
|
|
140
|
+
}, [row.uid, setFocusedRowId, disabledRows]);
|
|
123
141
|
return {
|
|
124
142
|
handleItemClick,
|
|
125
143
|
handleKeyDown,
|
package/cjs/parts/Cells/Cell.js
CHANGED
|
@@ -71,7 +71,8 @@ const Cell = _ref2 => {
|
|
|
71
71
|
const ctx = React.useContext(DataTableContext["default"]);
|
|
72
72
|
const {
|
|
73
73
|
tableProps: {
|
|
74
|
-
cellRendererProps
|
|
74
|
+
cellRendererProps,
|
|
75
|
+
disabledRows
|
|
75
76
|
}
|
|
76
77
|
} = ctx;
|
|
77
78
|
const {
|
|
@@ -120,7 +121,7 @@ const Cell = _ref2 => {
|
|
|
120
121
|
return null;
|
|
121
122
|
}, [DefaultCellContentJSX, cellProps, column]);
|
|
122
123
|
return /*#__PURE__*/jsxRuntime.jsx(PureStandardCell, _objectSpread(_objectSpread({}, cellProps), {}, {
|
|
123
|
-
children: column.editable ? EditableContentJSX : DefaultCellContentJSX
|
|
124
|
+
children: column.editable && !disabledRows[row.id] ? EditableContentJSX : DefaultCellContentJSX
|
|
124
125
|
}));
|
|
125
126
|
};
|
|
126
127
|
|
|
@@ -20,9 +20,9 @@ require('@elliemae/ds-popperjs');
|
|
|
20
20
|
require('styled-components');
|
|
21
21
|
require('../../redux/reducers/index.js');
|
|
22
22
|
var constants = require('../../configs/constants.js');
|
|
23
|
-
require('react/jsx-runtime');
|
|
24
23
|
require('../../styled.js');
|
|
25
24
|
var DataTableContext = require('../../DataTableContext.js');
|
|
25
|
+
require('react/jsx-runtime');
|
|
26
26
|
require('@elliemae/ds-utilities');
|
|
27
27
|
require('core-js/modules/esnext.async-iterator.reduce.js');
|
|
28
28
|
require('core-js/modules/esnext.iterator.reduce.js');
|
|
@@ -76,6 +76,7 @@ const FiltersBar = () => {
|
|
|
76
76
|
},
|
|
77
77
|
visibleColumns
|
|
78
78
|
} = React.useContext(DataTableContext["default"]);
|
|
79
|
+
const [isOpen, setIsOpen] = React.useState(false);
|
|
79
80
|
const pillGroupRefs = React.useMemo(() => {
|
|
80
81
|
const refs = [];
|
|
81
82
|
|
|
@@ -86,7 +87,29 @@ const FiltersBar = () => {
|
|
|
86
87
|
const dropdownMenuRef = React.useRef(null);
|
|
87
88
|
const removeAllFilters = React.useCallback(() => {
|
|
88
89
|
onFiltersChange([]);
|
|
89
|
-
|
|
90
|
+
filterBarProps?.onClearAllFiltersClick?.();
|
|
91
|
+
}, [onFiltersChange, filterBarProps?.onClearAllFiltersClick]);
|
|
92
|
+
const onFilterBarClose = React.useCallback(() => {
|
|
93
|
+
filterBarProps?.onDropdownMenuToggle?.(false, 'onClose');
|
|
94
|
+
setIsOpen(false);
|
|
95
|
+
}, [filterBarProps?.onDropdownMenuToggle]);
|
|
96
|
+
const onFilterBarOpen = React.useCallback(() => {
|
|
97
|
+
filterBarProps?.onDropdownMenuToggle?.(true, 'onOpen');
|
|
98
|
+
setIsOpen(true);
|
|
99
|
+
}, [filterBarProps?.onDropdownMenuToggle]);
|
|
100
|
+
const onFilterBarOnClickOutside = React.useCallback(() => {
|
|
101
|
+
filterBarProps?.onDropdownMenuToggle?.(false, 'onClickOutside');
|
|
102
|
+
filterBarProps?.onDropdownMenuClickOutside?.();
|
|
103
|
+
setIsOpen(false);
|
|
104
|
+
}, [filterBarProps?.onDropdownMenuToggle, filterBarProps?.onDropdownMenuClickOutside]);
|
|
105
|
+
const onTriggerClick = React.useCallback(() => {
|
|
106
|
+
filterBarProps?.onDropdownMenuTriggerClick?.();
|
|
107
|
+
onFilterBarOpen();
|
|
108
|
+
}, [filterBarProps?.onDropdownMenuTriggerClick]);
|
|
109
|
+
const finalIsOpen = React.useMemo(() => {
|
|
110
|
+
if (typeof filterBarProps?.isDropdownMenuOpen === 'boolean') return filterBarProps.isDropdownMenuOpen;
|
|
111
|
+
return isOpen;
|
|
112
|
+
}, [filterBarProps?.isDropdownMenuOpen, isOpen]);
|
|
90
113
|
return /*#__PURE__*/_jsx__default["default"](styled.StyledWrapper, {
|
|
91
114
|
width: width,
|
|
92
115
|
"aria-live": "polite",
|
|
@@ -122,6 +145,9 @@ const FiltersBar = () => {
|
|
|
122
145
|
}, column);
|
|
123
146
|
}), /*#__PURE__*/_jsx__default["default"](styled.StyledDropdownMenu, {
|
|
124
147
|
preventOverflow: "scrollParent",
|
|
148
|
+
isOpen: finalIsOpen,
|
|
149
|
+
onClose: onFilterBarClose,
|
|
150
|
+
onClickOutsideMenu: onFilterBarOnClickOutside,
|
|
125
151
|
options: [{
|
|
126
152
|
id: '__internal__option__clear__filters',
|
|
127
153
|
label: 'Clear Filters',
|
|
@@ -133,6 +159,7 @@ const FiltersBar = () => {
|
|
|
133
159
|
},
|
|
134
160
|
buttonType: "text",
|
|
135
161
|
innerRef: dropdownMenuRef,
|
|
162
|
+
onClick: onTriggerClick,
|
|
136
163
|
icon: _MoreOptionsVert || (_MoreOptionsVert = /*#__PURE__*/_jsx__default["default"](dsIcons.MoreOptionsVert, {}))
|
|
137
164
|
})
|
|
138
165
|
}));
|
|
@@ -25,9 +25,9 @@ require('@elliemae/ds-popperjs');
|
|
|
25
25
|
require('styled-components');
|
|
26
26
|
require('../../redux/reducers/index.js');
|
|
27
27
|
require('../../configs/constants.js');
|
|
28
|
-
var jsxRuntime = require('react/jsx-runtime');
|
|
29
28
|
require('../../styled.js');
|
|
30
29
|
require('../../DataTableContext.js');
|
|
30
|
+
var jsxRuntime = require('react/jsx-runtime');
|
|
31
31
|
require('@elliemae/ds-icons');
|
|
32
32
|
require('@elliemae/ds-utilities');
|
|
33
33
|
require('core-js/modules/esnext.async-iterator.reduce.js');
|
|
@@ -49,9 +49,10 @@ const StyledWrapper = /*#__PURE__*/styled__default["default"](Grid.Grid).withCon
|
|
|
49
49
|
componentId: "sc-1dqaj8a-0"
|
|
50
50
|
})(["position:relative;", " width:", ";grid-column:", ";background:", ";opacity:", ";box-shadow:0 2px 4px 0 ", ";border-left:", " solid ", ";"], _ref => {
|
|
51
51
|
let {
|
|
52
|
-
shouldDropOneLevel
|
|
52
|
+
shouldDropOneLevel,
|
|
53
|
+
isDragOverlay
|
|
53
54
|
} = _ref;
|
|
54
|
-
return shouldDropOneLevel ? `top: 50%; height: 50%;` : '';
|
|
55
|
+
return shouldDropOneLevel && !isDragOverlay ? `top: 50%; height: 50%;` : '';
|
|
55
56
|
}, props => props.isDragOverlay ? 'fit-content' : '100%', props => props.gridColumn, props => props.isDragging ? props.theme.colors.neutral['080'] : 'white', props => props.isDragging ? 0.8 : 1, props => props.isDragOverlay ? 'rgba(0,0,0,0.5)' : 'transparent', _ref2 => {
|
|
56
57
|
let {
|
|
57
58
|
isFirst
|
|
@@ -79,9 +79,9 @@ const HeaderResizer = _ref => {
|
|
|
79
79
|
e.stopPropagation();
|
|
80
80
|
}, [column.id, nextWidth, visibleColumnsCopy]);
|
|
81
81
|
const onResizeEnd = React.useCallback(() => {
|
|
82
|
-
onColumnResize(column.id, nextWidth);
|
|
83
82
|
setGridLayout(columnsToGrid.columnsToGrid(visibleColumns, constants.ColsLayoutStyle.Fixed));
|
|
84
83
|
setIsResizing(false);
|
|
84
|
+
onColumnResize(column.id, nextWidth);
|
|
85
85
|
}, [onColumnResize, column.id, nextWidth, setGridLayout, visibleColumns]);
|
|
86
86
|
React.useEffect(() => {
|
|
87
87
|
const debouncedResizeHandler = onResizeHandler;
|
package/cjs/parts/Row.js
CHANGED
|
@@ -5,6 +5,7 @@ Object.defineProperty(exports, '__esModule', { value: true });
|
|
|
5
5
|
var _jsx = require('@babel/runtime/helpers/jsx');
|
|
6
6
|
var React = require('react');
|
|
7
7
|
var reactRedux = require('react-redux');
|
|
8
|
+
var dsSystem = require('@elliemae/ds-system');
|
|
8
9
|
var DataTableContext = require('../DataTableContext.js');
|
|
9
10
|
require('core-js/modules/esnext.async-iterator.for-each.js');
|
|
10
11
|
require('core-js/modules/esnext.iterator.constructor.js');
|
|
@@ -29,6 +30,15 @@ const setItemRefs = (measureRef, draggableRef, ref) => {
|
|
|
29
30
|
refsHelpers.setMultipleRefs(...refsToSet)(ref);
|
|
30
31
|
};
|
|
31
32
|
|
|
33
|
+
const StyledRow = dsSystem.styled('div')`
|
|
34
|
+
cursor: ${_ref => {
|
|
35
|
+
let {
|
|
36
|
+
disabled
|
|
37
|
+
} = _ref;
|
|
38
|
+
return disabled ? 'not-allowed' : 'normal';
|
|
39
|
+
}};
|
|
40
|
+
`;
|
|
41
|
+
|
|
32
42
|
const RowComp = props => {
|
|
33
43
|
const {
|
|
34
44
|
row,
|
|
@@ -39,11 +49,17 @@ const RowComp = props => {
|
|
|
39
49
|
selectedRowId
|
|
40
50
|
} = props;
|
|
41
51
|
const ctx = React.useContext(DataTableContext["default"]);
|
|
52
|
+
const {
|
|
53
|
+
tableProps: {
|
|
54
|
+
disabledRows
|
|
55
|
+
}
|
|
56
|
+
} = ctx;
|
|
42
57
|
const {
|
|
43
58
|
draggableProps
|
|
44
59
|
} = React.useContext(SortableItemContext.SortableItemContext);
|
|
45
60
|
const draggableRef = draggableProps && draggableProps.setNodeRef;
|
|
46
|
-
return /*#__PURE__*/jsxRuntime.jsx(
|
|
61
|
+
return /*#__PURE__*/jsxRuntime.jsx(StyledRow, {
|
|
62
|
+
disabled: disabledRows[row.id],
|
|
47
63
|
style: !isDragOverlay ? itemWrapperStyle : {},
|
|
48
64
|
ref: ref => setItemRefs(measureRef, draggableRef, ref),
|
|
49
65
|
children: /*#__PURE__*/_jsx__default["default"](index.RowVariantMapItem, {
|
|
@@ -16,9 +16,9 @@ require('@elliemae/ds-popperjs');
|
|
|
16
16
|
require('styled-components');
|
|
17
17
|
require('../../redux/reducers/index.js');
|
|
18
18
|
require('../../configs/constants.js');
|
|
19
|
-
var jsxRuntime = require('react/jsx-runtime');
|
|
20
19
|
require('../../styled.js');
|
|
21
20
|
require('../../DataTableContext.js');
|
|
21
|
+
var jsxRuntime = require('react/jsx-runtime');
|
|
22
22
|
require('@elliemae/ds-icons');
|
|
23
23
|
require('@elliemae/ds-utilities');
|
|
24
24
|
require('core-js/modules/esnext.async-iterator.reduce.js');
|
|
@@ -64,7 +64,7 @@ const TableContentComponent = props => {
|
|
|
64
64
|
visibleColumns
|
|
65
65
|
} = React.useContext(DataTableContext["default"]);
|
|
66
66
|
const [shiftKeyPressed, setShiftKeyPressed] = React.useState(false);
|
|
67
|
-
const PureTableContent = React.useMemo(() => /*#__PURE__*/jsxRuntime.jsxs(styled.
|
|
67
|
+
const PureTableContent = React.useMemo(() => /*#__PURE__*/jsxRuntime.jsxs(styled.StyledDataTableContentWrapper, {
|
|
68
68
|
"data-testid": constants.DATA_TESTID.DATA_TABLE_CONTENT_WRAPPER,
|
|
69
69
|
height: height,
|
|
70
70
|
width: width,
|