@elliemae/ds-data-table 2.4.3-rc.9 → 2.4.4

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.
@@ -41,32 +41,44 @@ var styled__default = /*#__PURE__*/_interopDefaultLegacy(styled$1);
41
41
  function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
42
42
 
43
43
  function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty__default["default"](target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
44
+ const disabledCaret = /*#__PURE__*/styled$1.css(["cursor:not-allowed;svg{fill:", ";}"], _ref => {
45
+ let {
46
+ theme
47
+ } = _ref;
48
+ return theme.colors.neutral['400'];
49
+ });
44
50
  const StyledSpan = /*#__PURE__*/styled__default["default"].span.withConfig({
45
51
  componentId: "sc-1xp824d-0"
46
- })(["cursor:pointer;box-sizing:border-box;outline:none;display:flex;justify-content:center;align-items:center;"]);
52
+ })(["cursor:pointer;box-sizing:border-box;outline:none;display:flex;justify-content:center;align-items:center;", ""], _ref2 => {
53
+ let {
54
+ disabled
55
+ } = _ref2;
56
+ return disabled && disabledCaret;
57
+ });
47
58
  const expandRowColumn = {
48
59
  // Build our expander column
49
60
  id: 'expander',
50
61
  // Make sure it has an ID
51
62
  accessor: 'expandRowColumn',
52
- Header: _ref => {
63
+ Header: _ref3 => {
53
64
  let {
54
65
  ctx
55
- } = _ref;
66
+ } = _ref3;
56
67
  const {
57
68
  tableProps: {
58
69
  expandedRows,
59
- onRowExpand
70
+ onRowExpand,
71
+ disabledRows
60
72
  },
61
73
  allDataFlattened
62
74
  } = ctx;
63
75
  const allExpandable = React.useMemo(() => {
64
76
  const expandable = {};
65
77
  allDataFlattened.forEach(row => {
66
- if (row.original.subRows || row.original.tableRowDetails || row.original.dimsumHeaderValue) expandable[row.uid] = true;
78
+ if (!disabledRows[row.uid] && (row.original.subRows || row.original.tableRowDetails || row.original.dimsumHeaderValue)) expandable[row.uid] = true;
67
79
  });
68
80
  return expandable;
69
- }, [allDataFlattened]);
81
+ }, [allDataFlattened, disabledRows]);
70
82
  const isAllRowsExpanded = React.useMemo(() => Object.keys(allExpandable).length === Object.keys(expandedRows).length, [allExpandable, expandedRows]);
71
83
  const onExpandedAllHandler = React.useCallback(() => {
72
84
  if (isAllRowsExpanded) onRowExpand({}, 'All');else onRowExpand(_objectSpread({}, allExpandable), 'All');
@@ -114,19 +126,20 @@ const expandRowColumn = {
114
126
  }
115
127
  }, void 0, GlobalExpandIcon));
116
128
  },
117
- Cell: _ref2 => {
129
+ Cell: _ref4 => {
118
130
  let {
119
131
  cell,
120
132
  row,
121
133
  isRowSelected,
122
134
  ctx,
123
135
  draggableProps
124
- } = _ref2;
136
+ } = _ref4;
125
137
  const {
126
138
  tableProps: {
127
139
  dragAndDropRows,
128
140
  expandedRows,
129
- onRowExpand
141
+ onRowExpand,
142
+ disabledRows
130
143
  }
131
144
  } = ctx;
132
145
  const uniqueId = row.uid;
@@ -160,7 +173,7 @@ const expandRowColumn = {
160
173
  role: 'button',
161
174
  key: `${row.uid}-expand-button`,
162
175
  title: 'Toggle Row Expanded',
163
- onClick: onRowExpandHandler,
176
+ onClick: !disabledRows[row.uid] ? onRowExpandHandler : undefined,
164
177
  onKeyDown: e => {
165
178
  if (['Enter', 'Space'].includes(e.code)) {
166
179
  e.preventDefault();
@@ -168,11 +181,12 @@ const expandRowColumn = {
168
181
  }
169
182
  },
170
183
  ref: cell.ref,
171
- tabIndex: isRowSelected ? 0 : -1,
184
+ tabIndex: isRowSelected || disabledRows[row.uid] ? 0 : -1,
172
185
  'data-testid': 'data-table-row-expand-cell',
173
186
  'aria-expanded': isExpanded,
174
- isRightArrow: !isExpanded || isDragging || isDragOverlay
175
- }), [row.uid, onRowExpandHandler, cell.ref, isRowSelected, isExpanded, isDragging, isDragOverlay]);
187
+ isRightArrow: !isExpanded || isDragging || isDragOverlay,
188
+ disabled: disabledRows[row.uid]
189
+ }), [row.uid, disabledRows, onRowExpandHandler, cell.ref, isRowSelected, isExpanded, isDragging, isDragOverlay]);
176
190
  const PureCaretIcon = React.useMemo(() => isExpanded && !isDragging && !isDragOverlay ? /*#__PURE__*/_jsx__default["default"](dsIcons.ArrowheadDown, {
177
191
  "data-is-col-expanded": isExpanded,
178
192
  "data-role": "row-expander-col",
@@ -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');
@@ -71,7 +71,8 @@ const BaseSelectFilter = props => {
71
71
  type,
72
72
  column: {
73
73
  id,
74
- filterOptions: userFilterOptions
74
+ filterOptions: userFilterOptions,
75
+ filterMinWidth
75
76
  },
76
77
  ctx: {
77
78
  tableProps: {
@@ -88,7 +89,7 @@ const BaseSelectFilter = props => {
88
89
  const filterOptions = React.useMemo(() => {
89
90
  // If the user didn't provide options, use the available ones
90
91
  if (!userFilterOptions) {
91
- 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 => ({
92
93
  type: 'option',
93
94
  dsId: item,
94
95
  value: item,
@@ -117,7 +118,8 @@ const BaseSelectFilter = props => {
117
118
  "data-testid": isMulti ? constants.DATA_TESTID.DATA_TABLE_MULTISELECT_CONTROLLER : constants.DATA_TESTID.DATA_TABLE_SINGLESELECT_CONTROLLER,
118
119
  style: {
119
120
  background: '#fff',
120
- position: 'relative'
121
+ position: 'relative',
122
+ width: filterMinWidth
121
123
  }
122
124
  }, void 0, /*#__PURE__*/_jsx__default["default"](dsControlledForm.DSComboBox, {
123
125
  inline: true,
@@ -141,7 +141,7 @@ const DefaultRowContentRenderer = props => {
141
141
  detailsIndent: detailsIndent
142
142
  }))]
143
143
  });
144
- }, [row, selection, isExpandable, expandedRows, disabledRows, gridTemplateColProps, backgroundColor, compact, dropIndicatorPosition, isDndActive, isDragging, isDragOverlay, noSelectionColumn, selectedRowId, detailsIndent]);
144
+ }, [row, disabledRows, selection, isExpandable, expandedRows, gridTemplateColProps, backgroundColor, compact, dropIndicatorPosition, isDndActive, isDragging, isDragOverlay, noSelectionColumn, handleSelectDisableRow, selectedRowId, detailsIndent]);
145
145
  return PureRowContent;
146
146
  };
147
147
 
@@ -56,7 +56,7 @@ const useRowRendererHandlers = _ref => {
56
56
  }
57
57
  } = React.useContext(DataTableContext["default"]);
58
58
 
59
- const isOptionFocuseable = opt => !disabledRows[opt.id];
59
+ const isOptionFocuseable = opt => !disabledRows[opt.uid];
60
60
 
61
61
  const findInCircularList = function (list, from, criteria) {
62
62
  let step = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 1;
@@ -121,7 +121,7 @@ const Cell = _ref2 => {
121
121
  return null;
122
122
  }, [DefaultCellContentJSX, cellProps, column]);
123
123
  return /*#__PURE__*/jsxRuntime.jsx(PureStandardCell, _objectSpread(_objectSpread({}, cellProps), {}, {
124
- children: column.editable && !disabledRows[row.id] ? EditableContentJSX : DefaultCellContentJSX
124
+ children: column.editable && !disabledRows[row.uid] ? EditableContentJSX : DefaultCellContentJSX
125
125
  }));
126
126
  };
127
127
 
@@ -88,28 +88,28 @@ const FiltersBar = () => {
88
88
  const removeAllFilters = React.useCallback(() => {
89
89
  onFiltersChange([]);
90
90
  filterBarProps?.onClearAllFiltersClick?.();
91
- }, [onFiltersChange, filterBarProps.onClearAllFiltersClick]);
91
+ }, [onFiltersChange, filterBarProps?.onClearAllFiltersClick]);
92
92
  const onFilterBarClose = React.useCallback(() => {
93
93
  filterBarProps?.onDropdownMenuToggle?.(false, 'onClose');
94
94
  setIsOpen(false);
95
- }, [filterBarProps.onDropdownMenuToggle]);
95
+ }, [filterBarProps?.onDropdownMenuToggle]);
96
96
  const onFilterBarOpen = React.useCallback(() => {
97
97
  filterBarProps?.onDropdownMenuToggle?.(true, 'onOpen');
98
98
  setIsOpen(true);
99
- }, [filterBarProps.onDropdownMenuToggle]);
99
+ }, [filterBarProps?.onDropdownMenuToggle]);
100
100
  const onFilterBarOnClickOutside = React.useCallback(() => {
101
101
  filterBarProps?.onDropdownMenuToggle?.(false, 'onClickOutside');
102
102
  filterBarProps?.onDropdownMenuClickOutside?.();
103
103
  setIsOpen(false);
104
- }, [filterBarProps.onDropdownMenuToggle, filterBarProps.onDropdownMenuClickOutside]);
104
+ }, [filterBarProps?.onDropdownMenuToggle, filterBarProps?.onDropdownMenuClickOutside]);
105
105
  const onTriggerClick = React.useCallback(() => {
106
106
  filterBarProps?.onDropdownMenuTriggerClick?.();
107
107
  onFilterBarOpen();
108
- }, [filterBarProps.onDropdownMenuTriggerClick]);
108
+ }, [filterBarProps?.onDropdownMenuTriggerClick]);
109
109
  const finalIsOpen = React.useMemo(() => {
110
110
  if (typeof filterBarProps?.isDropdownMenuOpen === 'boolean') return filterBarProps.isDropdownMenuOpen;
111
111
  return isOpen;
112
- }, [filterBarProps.isDropdownMenuOpen, isOpen]);
112
+ }, [filterBarProps?.isDropdownMenuOpen, isOpen]);
113
113
  return /*#__PURE__*/_jsx__default["default"](styled.StyledWrapper, {
114
114
  width: width,
115
115
  "aria-live": "polite",
@@ -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
@@ -59,7 +59,7 @@ const RowComp = props => {
59
59
  } = React.useContext(SortableItemContext.SortableItemContext);
60
60
  const draggableRef = draggableProps && draggableProps.setNodeRef;
61
61
  return /*#__PURE__*/jsxRuntime.jsx(StyledRow, {
62
- disabled: disabledRows[row.id],
62
+ disabled: disabledRows[row.uid],
63
63
  style: !isDragOverlay ? itemWrapperStyle : {},
64
64
  ref: ref => setItemRefs(measureRef, draggableRef, ref),
65
65
  children: /*#__PURE__*/_jsx__default["default"](index.RowVariantMapItem, {
package/cjs/styled.js CHANGED
@@ -157,13 +157,7 @@ const StyledHeaderRightIconsWrapper = /*#__PURE__*/styled__default["default"].di
157
157
  })(["height:100%;display:flex;align-items:center;max-height:24px;"]);
158
158
  const StyledResizer = /*#__PURE__*/styled__default["default"].div.withConfig({
159
159
  componentId: "sc-38sgfo-10"
160
- })(["display:inline-block;background:", ";width:4px;height:100%;position:absolute;right:0;top:0;z-index:1;touch-action:none;cursor:col-resize;"], _ref7 => {
161
- let {
162
- isResizing,
163
- theme
164
- } = _ref7;
165
- return isResizing ? theme.colors.brand[600] : theme.colors.brand[400];
166
- }); // CELL ***********************************************************************/
160
+ })(["display:inline-block;background:transparent;width:4px;height:100%;position:absolute;right:0;top:0;z-index:1;touch-action:none;cursor:col-resize;"]); // CELL ***********************************************************************/
167
161
 
168
162
  const StyledActionCell = /*#__PURE__*/styled__default["default"].div.withConfig({
169
163
  componentId: "sc-38sgfo-11"
@@ -179,10 +173,10 @@ const StyledPencilIcon = /*#__PURE__*/styled__default["default"](dsIcons.EditPen
179
173
  })([""]);
180
174
  const StyledEditableContainer = /*#__PURE__*/styled__default["default"](Grid__default["default"]).withConfig({
181
175
  componentId: "sc-38sgfo-15"
182
- })(["width:100%;height:100%;align-items:center;& ", "{display:", ";}&:hover{", "{display:block;}}&:focus{", " ", "{display:block;}}outline:none;"], StyledPencilIcon, _ref8 => {
176
+ })(["width:100%;height:100%;align-items:center;& ", "{display:", ";}&:hover{", "{display:block;}}&:focus{", " ", "{display:block;}}outline:none;"], StyledPencilIcon, _ref7 => {
183
177
  let {
184
178
  shouldDisplayEditIcon
185
- } = _ref8;
179
+ } = _ref7;
186
180
  return shouldDisplayEditIcon ? 'block' : 'none';
187
181
  }, StyledPencilIcon, styledFocusCss, StyledPencilIcon); // ROW ************************************************************************/
188
182
 
@@ -191,15 +185,15 @@ const StyledFullsizeGrid = /*#__PURE__*/styled__default["default"](Grid__default
191
185
  })(["position:relative;z-index:", ";min-height:", ";height:", ";"], zIndexInternalConfig.ZIndexDataTable.ROW, props => props.minHeight || '36px', props => props.height || 'auto');
192
186
  const GroupHeaderContainer = /*#__PURE__*/styled__default["default"](Grid__default["default"]).withConfig({
193
187
  componentId: "sc-38sgfo-17"
194
- })(["position:relative;background-color:", ";align-items:center;padding:0 ", ";border-top:1px solid ", ";grid-template-columns:min-content 1fr;"], _ref9 => {
188
+ })(["position:relative;background-color:", ";align-items:center;padding:0 ", ";border-top:1px solid ", ";grid-template-columns:min-content 1fr;"], _ref8 => {
195
189
  let {
196
190
  theme
197
- } = _ref9;
191
+ } = _ref8;
198
192
  return theme.colors.brand[200];
199
- }, props => props.padding, _ref10 => {
193
+ }, props => props.padding, _ref9 => {
200
194
  let {
201
195
  theme
202
- } = _ref10;
196
+ } = _ref9;
203
197
  return theme.colors.brand[300];
204
198
  });
205
199
  const GroupHeaderTitle = /*#__PURE__*/styled__default["default"].span.withConfig({
@@ -211,28 +205,29 @@ const StyledCellContainer = /*#__PURE__*/styled__default["default"](Grid__defaul
211
205
  cols: props.cols,
212
206
  colsLayoutStyle: props.colLayoutStyle,
213
207
  isExpandable: props.isExpandable
214
- }), _ref11 => {
208
+ }), _ref10 => {
215
209
  let {
216
210
  backgroundColor,
217
211
  isDragging,
218
212
  theme
219
- } = _ref11;
213
+ } = _ref10;
220
214
  return isDragging ? theme.colors.neutral[100] : backgroundColor || 'white';
221
- }, props => props.isDragOverlay ? '' : styledFocusCss(props), _ref12 => {
215
+ }, props => props.isDragOverlay ? '' : styledFocusCss(props), _ref11 => {
222
216
  let {
223
217
  isDropIndicatorPositionInside,
224
218
  theme
225
- } = _ref12;
219
+ } = _ref11;
226
220
  if (!isDropIndicatorPositionInside) return '';
227
221
  return styledFocusCss({
228
222
  theme
229
223
  });
230
- }, _ref13 => {
224
+ }, _ref12 => {
231
225
  let {
232
226
  shouldDisplayHover,
233
- theme
234
- } = _ref13;
235
- return shouldDisplayHover ? `:hover {
227
+ theme,
228
+ disabled
229
+ } = _ref12;
230
+ return shouldDisplayHover && !disabled ? `:hover {
236
231
  background-color: ${theme.colors.brand[200]};
237
232
  }` : '';
238
233
  }, props => props.isDragOverlay ? 'rgba(0,0,0,0.5)' : 'transparent', props => props.isDragging ? 0.8 : 1, props => !props.selected ? '' : `
@@ -7,7 +7,7 @@ import 'core-js/modules/esnext.async-iterator.filter.js';
7
7
  import 'core-js/modules/esnext.iterator.filter.js';
8
8
  import { useMemo, useCallback } from 'react';
9
9
  import { ArrowheadDown, ArrowheadRight, ArrowShortReturn } from '@elliemae/ds-icons';
10
- import styled from 'styled-components';
10
+ import styled, { css } from 'styled-components';
11
11
  import { StyledFocusWithin } from '../../../styled.js';
12
12
  import { DATA_TESTID } from '../../../configs/constants.js';
13
13
  import 'core-js/modules/esnext.async-iterator.reduce.js';
@@ -31,32 +31,44 @@ import { jsx } from 'react/jsx-runtime';
31
31
  function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
32
32
 
33
33
  function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
34
+ const disabledCaret = /*#__PURE__*/css(["cursor:not-allowed;svg{fill:", ";}"], _ref => {
35
+ let {
36
+ theme
37
+ } = _ref;
38
+ return theme.colors.neutral['400'];
39
+ });
34
40
  const StyledSpan = /*#__PURE__*/styled.span.withConfig({
35
41
  componentId: "sc-1xp824d-0"
36
- })(["cursor:pointer;box-sizing:border-box;outline:none;display:flex;justify-content:center;align-items:center;"]);
42
+ })(["cursor:pointer;box-sizing:border-box;outline:none;display:flex;justify-content:center;align-items:center;", ""], _ref2 => {
43
+ let {
44
+ disabled
45
+ } = _ref2;
46
+ return disabled && disabledCaret;
47
+ });
37
48
  const expandRowColumn = {
38
49
  // Build our expander column
39
50
  id: 'expander',
40
51
  // Make sure it has an ID
41
52
  accessor: 'expandRowColumn',
42
- Header: _ref => {
53
+ Header: _ref3 => {
43
54
  let {
44
55
  ctx
45
- } = _ref;
56
+ } = _ref3;
46
57
  const {
47
58
  tableProps: {
48
59
  expandedRows,
49
- onRowExpand
60
+ onRowExpand,
61
+ disabledRows
50
62
  },
51
63
  allDataFlattened
52
64
  } = ctx;
53
65
  const allExpandable = useMemo(() => {
54
66
  const expandable = {};
55
67
  allDataFlattened.forEach(row => {
56
- if (row.original.subRows || row.original.tableRowDetails || row.original.dimsumHeaderValue) expandable[row.uid] = true;
68
+ if (!disabledRows[row.uid] && (row.original.subRows || row.original.tableRowDetails || row.original.dimsumHeaderValue)) expandable[row.uid] = true;
57
69
  });
58
70
  return expandable;
59
- }, [allDataFlattened]);
71
+ }, [allDataFlattened, disabledRows]);
60
72
  const isAllRowsExpanded = useMemo(() => Object.keys(allExpandable).length === Object.keys(expandedRows).length, [allExpandable, expandedRows]);
61
73
  const onExpandedAllHandler = useCallback(() => {
62
74
  if (isAllRowsExpanded) onRowExpand({}, 'All');else onRowExpand(_objectSpread({}, allExpandable), 'All');
@@ -104,19 +116,20 @@ const expandRowColumn = {
104
116
  }
105
117
  }, void 0, GlobalExpandIcon));
106
118
  },
107
- Cell: _ref2 => {
119
+ Cell: _ref4 => {
108
120
  let {
109
121
  cell,
110
122
  row,
111
123
  isRowSelected,
112
124
  ctx,
113
125
  draggableProps
114
- } = _ref2;
126
+ } = _ref4;
115
127
  const {
116
128
  tableProps: {
117
129
  dragAndDropRows,
118
130
  expandedRows,
119
- onRowExpand
131
+ onRowExpand,
132
+ disabledRows
120
133
  }
121
134
  } = ctx;
122
135
  const uniqueId = row.uid;
@@ -150,7 +163,7 @@ const expandRowColumn = {
150
163
  role: 'button',
151
164
  key: `${row.uid}-expand-button`,
152
165
  title: 'Toggle Row Expanded',
153
- onClick: onRowExpandHandler,
166
+ onClick: !disabledRows[row.uid] ? onRowExpandHandler : undefined,
154
167
  onKeyDown: e => {
155
168
  if (['Enter', 'Space'].includes(e.code)) {
156
169
  e.preventDefault();
@@ -158,11 +171,12 @@ const expandRowColumn = {
158
171
  }
159
172
  },
160
173
  ref: cell.ref,
161
- tabIndex: isRowSelected ? 0 : -1,
174
+ tabIndex: isRowSelected || disabledRows[row.uid] ? 0 : -1,
162
175
  'data-testid': 'data-table-row-expand-cell',
163
176
  'aria-expanded': isExpanded,
164
- isRightArrow: !isExpanded || isDragging || isDragOverlay
165
- }), [row.uid, onRowExpandHandler, cell.ref, isRowSelected, isExpanded, isDragging, isDragOverlay]);
177
+ isRightArrow: !isExpanded || isDragging || isDragOverlay,
178
+ disabled: disabledRows[row.uid]
179
+ }), [row.uid, disabledRows, onRowExpandHandler, cell.ref, isRowSelected, isExpanded, isDragging, isDragOverlay]);
166
180
  const PureCaretIcon = useMemo(() => isExpanded && !isDragging && !isDragOverlay ? /*#__PURE__*/_jsx(ArrowheadDown, {
167
181
  "data-is-col-expanded": isExpanded,
168
182
  "data-role": "row-expander-col",
@@ -17,6 +17,9 @@ import 'core-js/modules/esnext.set.reduce.js';
17
17
  import 'core-js/modules/esnext.set.some.js';
18
18
  import 'core-js/modules/esnext.set.symmetric-difference.js';
19
19
  import 'core-js/modules/esnext.set.union.js';
20
+ import 'core-js/modules/esnext.async-iterator.filter.js';
21
+ import 'core-js/modules/esnext.iterator.constructor.js';
22
+ import 'core-js/modules/esnext.iterator.filter.js';
20
23
  import { useMemo, useState, useEffect } from 'react';
21
24
  import { Grid } from '@elliemae/ds-grid';
22
25
  import { DSComboBox } from '@elliemae/ds-controlled-form';
@@ -29,9 +32,6 @@ import 'styled-components';
29
32
  import '@elliemae/ds-button';
30
33
  import '@elliemae/ds-utilities';
31
34
  import { DATA_TESTID } from '../../../../configs/constants.js';
32
- import 'core-js/modules/esnext.async-iterator.filter.js';
33
- import 'core-js/modules/esnext.iterator.constructor.js';
34
- import 'core-js/modules/esnext.iterator.filter.js';
35
35
  import 'core-js/modules/esnext.async-iterator.reduce.js';
36
36
  import 'core-js/modules/esnext.iterator.reduce.js';
37
37
  import 'react-virtual';
@@ -63,7 +63,8 @@ const BaseSelectFilter = props => {
63
63
  type,
64
64
  column: {
65
65
  id,
66
- filterOptions: userFilterOptions
66
+ filterOptions: userFilterOptions,
67
+ filterMinWidth
67
68
  },
68
69
  ctx: {
69
70
  tableProps: {
@@ -80,7 +81,7 @@ const BaseSelectFilter = props => {
80
81
  const filterOptions = useMemo(() => {
81
82
  // If the user didn't provide options, use the available ones
82
83
  if (!userFilterOptions) {
83
- const automaticFilters = [...new Set(data.map(datum => datum[id].toString()))].map(item => ({
84
+ const automaticFilters = [...new Set(data.filter(datum => !!datum[id]).map(datum => datum[id].toString()))].map(item => ({
84
85
  type: 'option',
85
86
  dsId: item,
86
87
  value: item,
@@ -109,7 +110,8 @@ const BaseSelectFilter = props => {
109
110
  "data-testid": isMulti ? DATA_TESTID.DATA_TABLE_MULTISELECT_CONTROLLER : DATA_TESTID.DATA_TABLE_SINGLESELECT_CONTROLLER,
110
111
  style: {
111
112
  background: '#fff',
112
- position: 'relative'
113
+ position: 'relative',
114
+ width: filterMinWidth
113
115
  }
114
116
  }, void 0, /*#__PURE__*/_jsx(DSComboBox, {
115
117
  inline: true,
@@ -132,7 +132,7 @@ const DefaultRowContentRenderer = props => {
132
132
  detailsIndent: detailsIndent
133
133
  }))]
134
134
  });
135
- }, [row, selection, isExpandable, expandedRows, disabledRows, gridTemplateColProps, backgroundColor, compact, dropIndicatorPosition, isDndActive, isDragging, isDragOverlay, noSelectionColumn, selectedRowId, detailsIndent]);
135
+ }, [row, disabledRows, selection, isExpandable, expandedRows, gridTemplateColProps, backgroundColor, compact, dropIndicatorPosition, isDndActive, isDragging, isDragOverlay, noSelectionColumn, handleSelectDisableRow, selectedRowId, detailsIndent]);
136
136
  return PureRowContent;
137
137
  };
138
138
 
@@ -52,7 +52,7 @@ const useRowRendererHandlers = _ref => {
52
52
  }
53
53
  } = useContext(DataTableContext);
54
54
 
55
- const isOptionFocuseable = opt => !disabledRows[opt.id];
55
+ const isOptionFocuseable = opt => !disabledRows[opt.uid];
56
56
 
57
57
  const findInCircularList = function (list, from, criteria) {
58
58
  let step = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 1;
@@ -113,7 +113,7 @@ const Cell = _ref2 => {
113
113
  return null;
114
114
  }, [DefaultCellContentJSX, cellProps, column]);
115
115
  return /*#__PURE__*/jsx(PureStandardCell, _objectSpread(_objectSpread({}, cellProps), {}, {
116
- children: column.editable && !disabledRows[row.id] ? EditableContentJSX : DefaultCellContentJSX
116
+ children: column.editable && !disabledRows[row.uid] ? EditableContentJSX : DefaultCellContentJSX
117
117
  }));
118
118
  };
119
119
 
@@ -78,28 +78,28 @@ const FiltersBar = () => {
78
78
  const removeAllFilters = useCallback(() => {
79
79
  onFiltersChange([]);
80
80
  filterBarProps?.onClearAllFiltersClick?.();
81
- }, [onFiltersChange, filterBarProps.onClearAllFiltersClick]);
81
+ }, [onFiltersChange, filterBarProps?.onClearAllFiltersClick]);
82
82
  const onFilterBarClose = useCallback(() => {
83
83
  filterBarProps?.onDropdownMenuToggle?.(false, 'onClose');
84
84
  setIsOpen(false);
85
- }, [filterBarProps.onDropdownMenuToggle]);
85
+ }, [filterBarProps?.onDropdownMenuToggle]);
86
86
  const onFilterBarOpen = useCallback(() => {
87
87
  filterBarProps?.onDropdownMenuToggle?.(true, 'onOpen');
88
88
  setIsOpen(true);
89
- }, [filterBarProps.onDropdownMenuToggle]);
89
+ }, [filterBarProps?.onDropdownMenuToggle]);
90
90
  const onFilterBarOnClickOutside = useCallback(() => {
91
91
  filterBarProps?.onDropdownMenuToggle?.(false, 'onClickOutside');
92
92
  filterBarProps?.onDropdownMenuClickOutside?.();
93
93
  setIsOpen(false);
94
- }, [filterBarProps.onDropdownMenuToggle, filterBarProps.onDropdownMenuClickOutside]);
94
+ }, [filterBarProps?.onDropdownMenuToggle, filterBarProps?.onDropdownMenuClickOutside]);
95
95
  const onTriggerClick = useCallback(() => {
96
96
  filterBarProps?.onDropdownMenuTriggerClick?.();
97
97
  onFilterBarOpen();
98
- }, [filterBarProps.onDropdownMenuTriggerClick]);
98
+ }, [filterBarProps?.onDropdownMenuTriggerClick]);
99
99
  const finalIsOpen = useMemo(() => {
100
100
  if (typeof filterBarProps?.isDropdownMenuOpen === 'boolean') return filterBarProps.isDropdownMenuOpen;
101
101
  return isOpen;
102
- }, [filterBarProps.isDropdownMenuOpen, isOpen]);
102
+ }, [filterBarProps?.isDropdownMenuOpen, isOpen]);
103
103
  return /*#__PURE__*/_jsx(StyledWrapper, {
104
104
  width: width,
105
105
  "aria-live": "polite",
@@ -40,9 +40,10 @@ const StyledWrapper = /*#__PURE__*/styled(Grid).withConfig({
40
40
  componentId: "sc-1dqaj8a-0"
41
41
  })(["position:relative;", " width:", ";grid-column:", ";background:", ";opacity:", ";box-shadow:0 2px 4px 0 ", ";border-left:", " solid ", ";"], _ref => {
42
42
  let {
43
- shouldDropOneLevel
43
+ shouldDropOneLevel,
44
+ isDragOverlay
44
45
  } = _ref;
45
- return shouldDropOneLevel ? `top: 50%; height: 50%;` : '';
46
+ return shouldDropOneLevel && !isDragOverlay ? `top: 50%; height: 50%;` : '';
46
47
  }, 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 => {
47
48
  let {
48
49
  isFirst
@@ -71,9 +71,9 @@ const HeaderResizer = _ref => {
71
71
  e.stopPropagation();
72
72
  }, [column.id, nextWidth, visibleColumnsCopy]);
73
73
  const onResizeEnd = useCallback(() => {
74
- onColumnResize(column.id, nextWidth);
75
74
  setGridLayout(columnsToGrid(visibleColumns, ColsLayoutStyle.Fixed));
76
75
  setIsResizing(false);
76
+ onColumnResize(column.id, nextWidth);
77
77
  }, [onColumnResize, column.id, nextWidth, setGridLayout, visibleColumns]);
78
78
  useEffect(() => {
79
79
  const debouncedResizeHandler = onResizeHandler;
package/esm/parts/Row.js CHANGED
@@ -51,7 +51,7 @@ const RowComp = props => {
51
51
  } = useContext(SortableItemContext);
52
52
  const draggableRef = draggableProps && draggableProps.setNodeRef;
53
53
  return /*#__PURE__*/jsx(StyledRow, {
54
- disabled: disabledRows[row.id],
54
+ disabled: disabledRows[row.uid],
55
55
  style: !isDragOverlay ? itemWrapperStyle : {},
56
56
  ref: ref => setItemRefs(measureRef, draggableRef, ref),
57
57
  children: /*#__PURE__*/_jsx(RowVariantMapItem, {
package/esm/styled.js CHANGED
@@ -148,13 +148,7 @@ const StyledHeaderRightIconsWrapper = /*#__PURE__*/styled.div.withConfig({
148
148
  })(["height:100%;display:flex;align-items:center;max-height:24px;"]);
149
149
  const StyledResizer = /*#__PURE__*/styled.div.withConfig({
150
150
  componentId: "sc-38sgfo-10"
151
- })(["display:inline-block;background:", ";width:4px;height:100%;position:absolute;right:0;top:0;z-index:1;touch-action:none;cursor:col-resize;"], _ref7 => {
152
- let {
153
- isResizing,
154
- theme
155
- } = _ref7;
156
- return isResizing ? theme.colors.brand[600] : theme.colors.brand[400];
157
- }); // CELL ***********************************************************************/
151
+ })(["display:inline-block;background:transparent;width:4px;height:100%;position:absolute;right:0;top:0;z-index:1;touch-action:none;cursor:col-resize;"]); // CELL ***********************************************************************/
158
152
 
159
153
  const StyledActionCell = /*#__PURE__*/styled.div.withConfig({
160
154
  componentId: "sc-38sgfo-11"
@@ -170,10 +164,10 @@ const StyledPencilIcon = /*#__PURE__*/styled(EditPencil).withConfig({
170
164
  })([""]);
171
165
  const StyledEditableContainer = /*#__PURE__*/styled(Grid).withConfig({
172
166
  componentId: "sc-38sgfo-15"
173
- })(["width:100%;height:100%;align-items:center;& ", "{display:", ";}&:hover{", "{display:block;}}&:focus{", " ", "{display:block;}}outline:none;"], StyledPencilIcon, _ref8 => {
167
+ })(["width:100%;height:100%;align-items:center;& ", "{display:", ";}&:hover{", "{display:block;}}&:focus{", " ", "{display:block;}}outline:none;"], StyledPencilIcon, _ref7 => {
174
168
  let {
175
169
  shouldDisplayEditIcon
176
- } = _ref8;
170
+ } = _ref7;
177
171
  return shouldDisplayEditIcon ? 'block' : 'none';
178
172
  }, StyledPencilIcon, styledFocusCss, StyledPencilIcon); // ROW ************************************************************************/
179
173
 
@@ -182,15 +176,15 @@ const StyledFullsizeGrid = /*#__PURE__*/styled(Grid).withConfig({
182
176
  })(["position:relative;z-index:", ";min-height:", ";height:", ";"], ZIndexDataTable.ROW, props => props.minHeight || '36px', props => props.height || 'auto');
183
177
  const GroupHeaderContainer = /*#__PURE__*/styled(Grid).withConfig({
184
178
  componentId: "sc-38sgfo-17"
185
- })(["position:relative;background-color:", ";align-items:center;padding:0 ", ";border-top:1px solid ", ";grid-template-columns:min-content 1fr;"], _ref9 => {
179
+ })(["position:relative;background-color:", ";align-items:center;padding:0 ", ";border-top:1px solid ", ";grid-template-columns:min-content 1fr;"], _ref8 => {
186
180
  let {
187
181
  theme
188
- } = _ref9;
182
+ } = _ref8;
189
183
  return theme.colors.brand[200];
190
- }, props => props.padding, _ref10 => {
184
+ }, props => props.padding, _ref9 => {
191
185
  let {
192
186
  theme
193
- } = _ref10;
187
+ } = _ref9;
194
188
  return theme.colors.brand[300];
195
189
  });
196
190
  const GroupHeaderTitle = /*#__PURE__*/styled.span.withConfig({
@@ -202,28 +196,29 @@ const StyledCellContainer = /*#__PURE__*/styled(Grid).withConfig({
202
196
  cols: props.cols,
203
197
  colsLayoutStyle: props.colLayoutStyle,
204
198
  isExpandable: props.isExpandable
205
- }), _ref11 => {
199
+ }), _ref10 => {
206
200
  let {
207
201
  backgroundColor,
208
202
  isDragging,
209
203
  theme
210
- } = _ref11;
204
+ } = _ref10;
211
205
  return isDragging ? theme.colors.neutral[100] : backgroundColor || 'white';
212
- }, props => props.isDragOverlay ? '' : styledFocusCss(props), _ref12 => {
206
+ }, props => props.isDragOverlay ? '' : styledFocusCss(props), _ref11 => {
213
207
  let {
214
208
  isDropIndicatorPositionInside,
215
209
  theme
216
- } = _ref12;
210
+ } = _ref11;
217
211
  if (!isDropIndicatorPositionInside) return '';
218
212
  return styledFocusCss({
219
213
  theme
220
214
  });
221
- }, _ref13 => {
215
+ }, _ref12 => {
222
216
  let {
223
217
  shouldDisplayHover,
224
- theme
225
- } = _ref13;
226
- return shouldDisplayHover ? `:hover {
218
+ theme,
219
+ disabled
220
+ } = _ref12;
221
+ return shouldDisplayHover && !disabled ? `:hover {
227
222
  background-color: ${theme.colors.brand[200]};
228
223
  }` : '';
229
224
  }, props => props.isDragOverlay ? 'rgba(0,0,0,0.5)' : 'transparent', props => props.isDragging ? 0.8 : 1, props => !props.selected ? '' : `
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@elliemae/ds-data-table",
3
- "version": "2.4.3-rc.9",
3
+ "version": "2.4.4",
4
4
  "license": "MIT",
5
5
  "description": "ICE MT - Dimsum - Data Table",
6
6
  "module": "./esm/index.js",
@@ -570,24 +570,24 @@
570
570
  "dependencies": {
571
571
  "@dnd-kit/core": "~4.0.1",
572
572
  "@dnd-kit/sortable": "~5.0.0",
573
- "@elliemae/ds-button": "2.4.3-rc.9",
574
- "@elliemae/ds-circular-progress-indicator": "2.4.3-rc.9",
575
- "@elliemae/ds-controlled-form": "2.4.3-rc.9",
576
- "@elliemae/ds-drag-and-drop": "2.4.3-rc.9",
577
- "@elliemae/ds-dropdownmenu": "2.4.3-rc.9",
578
- "@elliemae/ds-form": "2.4.3-rc.9",
579
- "@elliemae/ds-form-layout-blocks": "2.4.3-rc.9",
580
- "@elliemae/ds-grid": "2.4.3-rc.9",
581
- "@elliemae/ds-icons": "2.4.3-rc.9",
582
- "@elliemae/ds-indeterminate-progress-indicator": "2.4.3-rc.9",
583
- "@elliemae/ds-pagination": "2.4.3-rc.9",
584
- "@elliemae/ds-pills": "2.4.3-rc.9",
585
- "@elliemae/ds-popperjs": "2.4.3-rc.9",
586
- "@elliemae/ds-props-helpers": "2.4.3-rc.9",
587
- "@elliemae/ds-system": "2.4.3-rc.9",
588
- "@elliemae/ds-toolbar": "2.4.3-rc.9",
589
- "@elliemae/ds-truncated-tooltip-text": "2.4.3-rc.9",
590
- "@elliemae/ds-utilities": "2.4.3-rc.9",
573
+ "@elliemae/ds-button": "2.4.4",
574
+ "@elliemae/ds-circular-progress-indicator": "2.4.4",
575
+ "@elliemae/ds-controlled-form": "2.4.4",
576
+ "@elliemae/ds-drag-and-drop": "2.4.4",
577
+ "@elliemae/ds-dropdownmenu": "2.4.4",
578
+ "@elliemae/ds-form": "2.4.4",
579
+ "@elliemae/ds-form-layout-blocks": "2.4.4",
580
+ "@elliemae/ds-grid": "2.4.4",
581
+ "@elliemae/ds-icons": "2.4.4",
582
+ "@elliemae/ds-indeterminate-progress-indicator": "2.4.4",
583
+ "@elliemae/ds-pagination": "2.4.4",
584
+ "@elliemae/ds-pills": "2.4.4",
585
+ "@elliemae/ds-popperjs": "2.4.4",
586
+ "@elliemae/ds-props-helpers": "2.4.4",
587
+ "@elliemae/ds-system": "2.4.4",
588
+ "@elliemae/ds-toolbar": "2.4.4",
589
+ "@elliemae/ds-truncated-tooltip-text": "2.4.4",
590
+ "@elliemae/ds-utilities": "2.4.4",
591
591
  "@reduxjs/toolkit": "~1.6.2",
592
592
  "csstype": "~3.0.9",
593
593
  "moment": "~2.29.1",
@@ -14,6 +14,7 @@ export declare type TypescriptColumn = {
14
14
  accessor?: string;
15
15
  filter?: string;
16
16
  filterOptions?: FilterOptionT[] | (() => FilterOptionT[]);
17
+ filterMinWidth?: number | string;
17
18
  Filter?: React.ComponentType<FilterProps>;
18
19
  Cell?: React.ComponentType<any>;
19
20
  editable?: string | TypescriptGenericFunc;