@elliemae/ds-data-table 2.4.2 → 2.4.3-rc.10
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 +6 -0
- 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/exported-related/Toolbar/Toolbar.js +3 -10
- 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/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 +6 -0
- 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/exported-related/Toolbar/Toolbar.js +3 -10
- 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/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/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');
|
|
@@ -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
|
|
|
@@ -80,6 +82,9 @@ const BaseSelectFilter = props => {
|
|
|
80
82
|
innerRef,
|
|
81
83
|
onValueChange
|
|
82
84
|
} = props;
|
|
85
|
+
const {
|
|
86
|
+
patchHeaderFilterButtonAndMenu
|
|
87
|
+
} = useDispatchHeadersActions.useDispatchHeadersActions();
|
|
83
88
|
const filterOptions = React.useMemo(() => {
|
|
84
89
|
// If the user didn't provide options, use the available ones
|
|
85
90
|
if (!userFilterOptions) {
|
|
@@ -100,6 +105,7 @@ const BaseSelectFilter = props => {
|
|
|
100
105
|
|
|
101
106
|
const handleOnChange = value => {
|
|
102
107
|
onValueChange(type, value);
|
|
108
|
+
if (!isMulti) patchHeaderFilterButtonAndMenu(column.id, true);
|
|
103
109
|
};
|
|
104
110
|
|
|
105
111
|
const [filters, setFilteredOptions] = React.useState(filterOptions);
|
|
@@ -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,
|
|
@@ -55,22 +55,15 @@ const Toolbar = _ref => {
|
|
|
55
55
|
children
|
|
56
56
|
} = _ref;
|
|
57
57
|
const [show, setShow] = React.useState(false);
|
|
58
|
-
const [clicked, setClicked] = React.useState(false);
|
|
59
58
|
const toolbarRef = React.useRef(null);
|
|
60
|
-
const handleOnClickOutside = React.useCallback(() =>
|
|
61
|
-
|
|
62
|
-
setClicked(false);
|
|
63
|
-
}, []);
|
|
64
|
-
const handleOnClick = React.useCallback(() => {
|
|
65
|
-
setShow(true);
|
|
66
|
-
setClicked(true);
|
|
67
|
-
}, []);
|
|
59
|
+
const handleOnClickOutside = React.useCallback(() => setShow(false), []);
|
|
60
|
+
const handleOnClick = React.useCallback(() => setShow(true), []);
|
|
68
61
|
dsUtilities.useOnClickOutside(toolbarRef, handleOnClickOutside);
|
|
69
62
|
return /*#__PURE__*/jsxRuntime.jsx(ToolbarPosition, {
|
|
70
63
|
ref: toolbarRef,
|
|
71
64
|
children: /*#__PURE__*/_jsx__default["default"](ToolbarWrapper, {
|
|
72
65
|
onMouseEnter: () => setShow(true),
|
|
73
|
-
onMouseLeave: () => setShow(
|
|
66
|
+
onMouseLeave: () => setShow(false)
|
|
74
67
|
}, void 0, show && /*#__PURE__*/_jsx__default["default"](ToolbarBtns, {}, void 0, children), /*#__PURE__*/_jsx__default["default"](DSButton__default["default"], {
|
|
75
68
|
buttonType: "text",
|
|
76
69
|
className: "toolbar-trigger",
|
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');
|
|
@@ -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,
|