@equinor/eds-data-grid-react 0.1.0-beta.2 → 0.2.0

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.
@@ -39,15 +39,16 @@ var useTableContext = function useTableContext() {
39
39
  return react.useContext(EdsDataGridContext);
40
40
  };
41
41
 
42
- var _excluded = ["value", "values", "onChange", "debounce"];
42
+ var _excluded = ["value", "values", "onChange", "debounce", "label"];
43
43
  // File ignored, as relevant actions are covered via Filter.test.tsx
44
44
  function DebouncedInput(_ref) {
45
- var _props$placeholder, _props$placeholder2;
45
+ var _props$placeholder;
46
46
  var initialValue = _ref.value,
47
47
  values = _ref.values,
48
48
  onChange = _ref.onChange,
49
49
  _ref$debounce = _ref.debounce,
50
50
  debounce = _ref$debounce === void 0 ? 500 : _ref$debounce,
51
+ label = _ref.label,
51
52
  props = _objectWithoutProperties__default.default(_ref, _excluded);
52
53
  var _useState = react.useState(initialValue),
53
54
  _useState2 = _slicedToArray__default.default(_useState, 2),
@@ -65,41 +66,101 @@ function DebouncedInput(_ref) {
65
66
  };
66
67
  // eslint-disable-next-line react-hooks/exhaustive-deps
67
68
  }, [value]);
68
- return /*#__PURE__*/jsxRuntime.jsx(edsCoreReact.EdsProvider, {
69
- density: "compact",
70
- children: props.type === 'number' ? /*#__PURE__*/jsxRuntime.jsx(edsCoreReact.Input, {
71
- type: 'number',
72
- placeholder: (_props$placeholder = props.placeholder) !== null && _props$placeholder !== void 0 ? _props$placeholder : 'Search',
73
- value: value,
74
- onChange: function onChange(e) {
75
- return setValue(e.target.valueAsNumber);
76
- }
77
- }) : /*#__PURE__*/jsxRuntime.jsx(edsCoreReact.Autocomplete, {
78
- options: values,
79
- multiple: true,
80
- optionComponent: function optionComponent(opt) {
81
- return opt === 'NULL_OR_UNDEFINED' ? '<Blank>' : opt;
82
- },
83
- "data-testid": 'autocomplete'
84
- /* eslint-disable-next-line @typescript-eslint/ban-ts-comment */
85
- // @ts-ignore
86
- ,
87
- label: null,
88
- placeholder: (_props$placeholder2 = props.placeholder) !== null && _props$placeholder2 !== void 0 ? _props$placeholder2 : 'Search',
89
- onOptionsChange: function onOptionsChange(c) {
90
- return setValue(c.selectedItems);
91
- }
69
+ return /*#__PURE__*/jsxRuntime.jsx(jsxRuntime.Fragment, {
70
+ children: props.type === 'number' ? /*#__PURE__*/jsxRuntime.jsx(edsCoreReact.InputWrapper, {
71
+ label: props.placeholder,
72
+ children: /*#__PURE__*/jsxRuntime.jsx(edsCoreReact.Input, {
73
+ type: 'number',
74
+ placeholder: '0',
75
+ value: value,
76
+ onChange: function onChange(e) {
77
+ return setValue(e.target.valueAsNumber);
78
+ }
79
+ })
80
+ }) : /*#__PURE__*/jsxRuntime.jsxs(jsxRuntime.Fragment, {
81
+ children: [/*#__PURE__*/jsxRuntime.jsx(edsCoreReact.Autocomplete, {
82
+ options: values,
83
+ autoWidth: true,
84
+ multiple: true,
85
+ optionComponent: function optionComponent(opt) {
86
+ return opt === 'NULL_OR_UNDEFINED' ? '<Blank>' : opt;
87
+ },
88
+ "data-testid": 'autocomplete'
89
+ /* eslint-disable-next-line @typescript-eslint/ban-ts-comment */,
90
+ label: "Select ".concat(label !== null && label !== void 0 ? label : ''),
91
+ placeholder: (_props$placeholder = props.placeholder) !== null && _props$placeholder !== void 0 ? _props$placeholder : 'Search',
92
+ disablePortal: false /*TODO: Check with Oddbjørn re. sizing/position*/,
93
+
94
+ selectedOptions: value,
95
+ onOptionsChange: function onOptionsChange(c) {
96
+ return setValue(c.selectedItems);
97
+ }
98
+ }), /*#__PURE__*/jsxRuntime.jsx("div", {
99
+ style: {
100
+ display: 'flex',
101
+ flexWrap: 'wrap',
102
+ marginTop: '8px'
103
+ },
104
+ children: value.map(function (v) {
105
+ return /*#__PURE__*/jsxRuntime.jsxs(edsCoreReact.Chip, {
106
+ title: v,
107
+ onKeyDownCapture: function onKeyDownCapture(event) {
108
+ if (['Backspace', 'Delete'].includes(event.key)) {
109
+ onChange(value.filter(function (item) {
110
+ return item !== v;
111
+ }));
112
+ }
113
+ },
114
+ style: {
115
+ margin: '4px'
116
+ },
117
+ onDelete: function onDelete() {
118
+ return onChange(value.filter(function (item) {
119
+ return item !== v;
120
+ }));
121
+ },
122
+ children: [v.slice(0, 20), v.length > 20 ? '...' : '']
123
+ }, v);
124
+ })
125
+ })]
92
126
  })
93
127
  });
94
128
  }
95
129
 
96
- /* istanbul ignore file */
97
-
130
+ var NumberContainer = styled__default.default.div.withConfig({
131
+ displayName: "Filter__NumberContainer",
132
+ componentId: "sc-ytpdpw-0"
133
+ })(["display:grid;grid-template-columns:80px 80px;grid-column-gap:32px;"]);
98
134
  function Filter(_ref) {
99
135
  var _table$getPreFiltered, _column$getFacetedMin, _column$getFacetedMin2, _column$getFacetedMin3, _column$getFacetedMin4, _, _column$getFacetedMin5, _column$getFacetedMin6, _column$getFacetedMin7, _column$getFacetedMin8, _column$getFacetedMin9, _column$getFacetedMin10, _2, _column$getFacetedMin11, _column$getFacetedMin12;
100
136
  var column = _ref.column,
101
137
  table = _ref.table;
102
138
  var firstValue = (_table$getPreFiltered = table.getPreFilteredRowModel().flatRows[0]) === null || _table$getPreFiltered === void 0 ? void 0 : _table$getPreFiltered.getValue(column.id);
139
+ var _useState = react.useState(false),
140
+ _useState2 = _slicedToArray__default.default(_useState, 2),
141
+ open = _useState2[0],
142
+ setOpen = _useState2[1];
143
+ var filterIconRef = react.useRef();
144
+ var togglePopover = function togglePopover(event) {
145
+ event.stopPropagation();
146
+ setOpen(!open);
147
+ };
148
+ var columnText = react.useMemo(function () {
149
+ var header;
150
+ try {
151
+ if (typeof column.columnDef.header === 'function') {
152
+ var obj = column.columnDef.header(
153
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any,@typescript-eslint/no-unsafe-argument
154
+ {});
155
+ header = obj.props.children;
156
+ } else {
157
+ header = column.columnDef.header;
158
+ }
159
+ } catch (_unused) {
160
+ /*em all*/
161
+ }
162
+ return header;
163
+ }, [column.columnDef]);
103
164
  var columnFilterValue = column.getFilterValue();
104
165
  var sortedUniqueValues = react.useMemo(function () {
105
166
  return typeof firstValue === 'number' ? [] : Array.from(column.getFacetedUniqueValues().keys()).sort().map(function (v) {
@@ -108,41 +169,85 @@ function Filter(_ref) {
108
169
  },
109
170
  // eslint-disable-next-line react-hooks/exhaustive-deps
110
171
  [column.getFacetedUniqueValues()]);
111
- return typeof firstValue === 'number' ? /*#__PURE__*/jsxRuntime.jsxs("div", {
112
- children: [/*#__PURE__*/jsxRuntime.jsx(DebouncedInput, {
113
- type: "number",
114
- values: sortedUniqueValues,
115
- min: Number((_column$getFacetedMin = (_column$getFacetedMin2 = column.getFacetedMinMaxValues()) === null || _column$getFacetedMin2 === void 0 ? void 0 : _column$getFacetedMin2[0]) !== null && _column$getFacetedMin !== void 0 ? _column$getFacetedMin : ''),
116
- max: Number((_column$getFacetedMin3 = (_column$getFacetedMin4 = column.getFacetedMinMaxValues()) === null || _column$getFacetedMin4 === void 0 ? void 0 : _column$getFacetedMin4[1]) !== null && _column$getFacetedMin3 !== void 0 ? _column$getFacetedMin3 : ''),
117
- value: (_ = columnFilterValue === null || columnFilterValue === void 0 ? void 0 : columnFilterValue[0]) !== null && _ !== void 0 ? _ : '',
118
- onChange: function onChange(value) {
119
- return column.setFilterValue(function (old) {
120
- return [value, old === null || old === void 0 ? void 0 : old[1]];
172
+ var hasActiveFilters = function hasActiveFilters(value) {
173
+ if (Array.isArray(value)) {
174
+ if (typeof firstValue === 'number') {
175
+ return value.some(function (v) {
176
+ return !isNaN(v) && !!v;
121
177
  });
178
+ } else {
179
+ return value.filter(function (v) {
180
+ return !!v;
181
+ }).length > 0;
182
+ }
183
+ }
184
+ return value;
185
+ };
186
+ return /*#__PURE__*/jsxRuntime.jsxs(jsxRuntime.Fragment, {
187
+ children: [/*#__PURE__*/jsxRuntime.jsx(edsCoreReact.Button, {
188
+ "aria-haspopup": true,
189
+ "aria-expanded": open,
190
+ "data-testid": 'open-filters',
191
+ ref: filterIconRef,
192
+ onClick: togglePopover,
193
+ variant: 'ghost_icon',
194
+ children: /*#__PURE__*/jsxRuntime.jsx(edsCoreReact.Icon, {
195
+ color: edsTokens.tokens.colors.text.static_icons__default.hex,
196
+ data: hasActiveFilters(columnFilterValue) ? edsIcons.filter_alt_active : edsIcons.filter_alt
197
+ })
198
+ }), /*#__PURE__*/jsxRuntime.jsx(edsCoreReact.Popover, {
199
+ style: {
200
+ width: typeof firstValue === 'number' ? '220px' : '340px'
122
201
  },
123
- placeholder: "Min ".concat((_column$getFacetedMin5 = column.getFacetedMinMaxValues()) !== null && _column$getFacetedMin5 !== void 0 && _column$getFacetedMin5[0] ? "(".concat((_column$getFacetedMin6 = column.getFacetedMinMaxValues()) === null || _column$getFacetedMin6 === void 0 ? void 0 : _column$getFacetedMin6[0], ")") : '')
124
- }), /*#__PURE__*/jsxRuntime.jsx(DebouncedInput, {
125
- type: "number",
126
- values: sortedUniqueValues,
127
- min: Number((_column$getFacetedMin7 = (_column$getFacetedMin8 = column.getFacetedMinMaxValues()) === null || _column$getFacetedMin8 === void 0 ? void 0 : _column$getFacetedMin8[0]) !== null && _column$getFacetedMin7 !== void 0 ? _column$getFacetedMin7 : ''),
128
- max: Number((_column$getFacetedMin9 = (_column$getFacetedMin10 = column.getFacetedMinMaxValues()) === null || _column$getFacetedMin10 === void 0 ? void 0 : _column$getFacetedMin10[1]) !== null && _column$getFacetedMin9 !== void 0 ? _column$getFacetedMin9 : ''),
129
- value: (_2 = columnFilterValue === null || columnFilterValue === void 0 ? void 0 : columnFilterValue[1]) !== null && _2 !== void 0 ? _2 : '',
130
- onChange: function onChange(value) {
131
- return column.setFilterValue(function (old) {
132
- return [old === null || old === void 0 ? void 0 : old[0], value];
133
- });
202
+ anchorEl: filterIconRef.current,
203
+ open: open,
204
+ onClose: function onClose() {
205
+ return setOpen(false);
134
206
  },
135
- placeholder: "Max ".concat((_column$getFacetedMin11 = column.getFacetedMinMaxValues()) !== null && _column$getFacetedMin11 !== void 0 && _column$getFacetedMin11[1] ? "(".concat((_column$getFacetedMin12 = column.getFacetedMinMaxValues()) === null || _column$getFacetedMin12 === void 0 ? void 0 : _column$getFacetedMin12[1], ")") : '')
207
+ children: /*#__PURE__*/jsxRuntime.jsx(edsCoreReact.Popover.Content, {
208
+ style: {
209
+ width: typeof firstValue === 'number' ? '180px' : '310px'
210
+ },
211
+ children: typeof firstValue === 'number' ? /*#__PURE__*/jsxRuntime.jsxs(NumberContainer, {
212
+ children: [/*#__PURE__*/jsxRuntime.jsx(DebouncedInput, {
213
+ type: "number",
214
+ values: sortedUniqueValues,
215
+ min: Number((_column$getFacetedMin = (_column$getFacetedMin2 = column.getFacetedMinMaxValues()) === null || _column$getFacetedMin2 === void 0 ? void 0 : _column$getFacetedMin2[0]) !== null && _column$getFacetedMin !== void 0 ? _column$getFacetedMin : ''),
216
+ max: Number((_column$getFacetedMin3 = (_column$getFacetedMin4 = column.getFacetedMinMaxValues()) === null || _column$getFacetedMin4 === void 0 ? void 0 : _column$getFacetedMin4[1]) !== null && _column$getFacetedMin3 !== void 0 ? _column$getFacetedMin3 : ''),
217
+ value: (_ = columnFilterValue === null || columnFilterValue === void 0 ? void 0 : columnFilterValue[0]) !== null && _ !== void 0 ? _ : '',
218
+ onChange: function onChange(value) {
219
+ return column.setFilterValue(function (old) {
220
+ return [value, old === null || old === void 0 ? void 0 : old[1]];
221
+ });
222
+ },
223
+ placeholder: "Min ".concat((_column$getFacetedMin5 = column.getFacetedMinMaxValues()) !== null && _column$getFacetedMin5 !== void 0 && _column$getFacetedMin5[0] ? "(".concat((_column$getFacetedMin6 = column.getFacetedMinMaxValues()) === null || _column$getFacetedMin6 === void 0 ? void 0 : _column$getFacetedMin6[0], ")") : '')
224
+ }), /*#__PURE__*/jsxRuntime.jsx(DebouncedInput, {
225
+ type: "number",
226
+ values: sortedUniqueValues,
227
+ min: Number((_column$getFacetedMin7 = (_column$getFacetedMin8 = column.getFacetedMinMaxValues()) === null || _column$getFacetedMin8 === void 0 ? void 0 : _column$getFacetedMin8[0]) !== null && _column$getFacetedMin7 !== void 0 ? _column$getFacetedMin7 : ''),
228
+ max: Number((_column$getFacetedMin9 = (_column$getFacetedMin10 = column.getFacetedMinMaxValues()) === null || _column$getFacetedMin10 === void 0 ? void 0 : _column$getFacetedMin10[1]) !== null && _column$getFacetedMin9 !== void 0 ? _column$getFacetedMin9 : ''),
229
+ value: (_2 = columnFilterValue === null || columnFilterValue === void 0 ? void 0 : columnFilterValue[1]) !== null && _2 !== void 0 ? _2 : '',
230
+ onChange: function onChange(value) {
231
+ return column.setFilterValue(function (old) {
232
+ return [old === null || old === void 0 ? void 0 : old[0], value];
233
+ });
234
+ },
235
+ placeholder: "Max ".concat((_column$getFacetedMin11 = column.getFacetedMinMaxValues()) !== null && _column$getFacetedMin11 !== void 0 && _column$getFacetedMin11[1] ? "(".concat((_column$getFacetedMin12 = column.getFacetedMinMaxValues()) === null || _column$getFacetedMin12 === void 0 ? void 0 : _column$getFacetedMin12[1], ")") : '')
236
+ })]
237
+ }) : /*#__PURE__*/jsxRuntime.jsx(DebouncedInput, {
238
+ type: "text",
239
+ label: columnText,
240
+ values: sortedUniqueValues,
241
+ debounce: 100,
242
+ value: columnFilterValue !== null && columnFilterValue !== void 0 ? columnFilterValue : [],
243
+ onChange: function onChange(value) {
244
+ return column.setFilterValue(value);
245
+ },
246
+ placeholder: "".concat((columnFilterValue !== null && columnFilterValue !== void 0 ? columnFilterValue : []).length, " / ").concat(column.getFacetedUniqueValues().size, " selected"),
247
+ list: column.id + 'list'
248
+ })
249
+ })
136
250
  })]
137
- }) : /*#__PURE__*/jsxRuntime.jsx(DebouncedInput, {
138
- type: "text",
139
- values: sortedUniqueValues,
140
- value: columnFilterValue !== null && columnFilterValue !== void 0 ? columnFilterValue : '',
141
- onChange: function onChange(value) {
142
- return column.setFilterValue(value);
143
- },
144
- placeholder: "Search (".concat(column.getFacetedUniqueValues().size, ")"),
145
- list: column.id + 'list'
146
251
  });
147
252
  }
148
253
 
@@ -152,33 +257,57 @@ var getSortLabel = function getSortLabel(sorted) {
152
257
  }
153
258
  return 'none';
154
259
  };
260
+ var ResizeInner = styled__default.default.div.withConfig({
261
+ displayName: "TableHeaderCell__ResizeInner",
262
+ componentId: "sc-1n0j3v0-0"
263
+ })(["width:2px;opacity:0;height:100%;"]);
155
264
  var Resizer = styled__default.default.div.withConfig({
156
265
  displayName: "TableHeaderCell__Resizer",
157
- componentId: "sc-1n0j3v0-0"
158
- })(["transform:", ";opacity:", ";position:absolute;right:0;top:0;height:100%;width:5px;cursor:col-resize;user-select:none;touch-action:none;"], function (props) {
159
- return props.columnResizeMode === 'onEnd' ? 'translateX(0px)' : 'none';
160
- }, function (props) {
161
- return props.isResizing ? 1 : 0;
266
+ componentId: "sc-1n0j3v0-1"
267
+ })(["transform:", ";", "{opacity:", ";}position:absolute;right:0;top:0;height:100%;width:5px;cursor:col-resize;user-select:none;touch-action:none;display:flex;justify-content:flex-end;"], function (props) {
268
+ return props.$columnResizeMode === 'onEnd' ? 'translateX(0px)' : 'none';
269
+ }, ResizeInner, function (props) {
270
+ return props.$isResizing ? 1 : 0;
162
271
  });
163
272
  var Cell = styled__default.default(edsCoreReact.Table.Cell).withConfig({
164
273
  displayName: "TableHeaderCell__Cell",
165
- componentId: "sc-1n0j3v0-1"
166
- })(["font-weight:bold;height:30px;position:", ";&:hover ", "{background:", ";opacity:1;}"], function (p) {
167
- return p.sticky ? 'sticky' : 'relative';
168
- }, Resizer, edsTokens.tokens.colors.interactive.primary__hover.rgba);
274
+ componentId: "sc-1n0j3v0-2"
275
+ })(["font-weight:bold;height:30px;position:", ";top:0;", " z-index:", ";&:hover ", "{background:", ";opacity:1;}"], function (p) {
276
+ return p.$sticky || p.$pinned ? 'sticky' : 'relative';
277
+ }, function (p) {
278
+ if (p.$pinned) {
279
+ return "".concat(p.$pinned, ": ").concat(p.$offset, "px;");
280
+ }
281
+ return '';
282
+ }, function (p) {
283
+ if (p.$sticky && p.$pinned) return 13;
284
+ if (p.$sticky || p.$pinned) return 12;
285
+ return 'auto';
286
+ }, ResizeInner, edsTokens.tokens.colors.interactive.primary__hover.rgba);
169
287
  function TableHeaderCell(_ref) {
170
288
  var _asc$desc;
171
289
  var header = _ref.header,
172
290
  columnResizeMode = _ref.columnResizeMode;
173
291
  var ctx = useTableContext();
174
292
  var table = ctx.table;
293
+ var pinned = header.column.getIsPinned();
294
+ var offset = react.useMemo(function () {
295
+ if (!pinned) {
296
+ return null;
297
+ }
298
+ return pinned === 'left' ? header.getStart() : table.getTotalSize() - header.getStart() - header.getSize();
299
+ }, [pinned, header, table]);
175
300
  return header.isPlaceholder ? /*#__PURE__*/jsxRuntime.jsx(Cell, {
176
- sticky: ctx.stickyHeader,
301
+ $sticky: ctx.stickyHeader,
302
+ $offset: offset,
303
+ $pinned: pinned,
177
304
  className: ctx.headerClass ? ctx.headerClass(header.column) : '',
178
- style: ctx.headerStyle ? ctx.headerStyle(header.column) : {},
305
+ style: _objectSpread__default.default({}, ctx.headerStyle ? ctx.headerStyle(header.column) : {}),
179
306
  "aria-hidden": true
180
307
  }) : /*#__PURE__*/jsxRuntime.jsxs(Cell, {
181
- sticky: ctx.stickyHeader,
308
+ $sticky: ctx.stickyHeader,
309
+ $offset: offset,
310
+ $pinned: pinned,
182
311
  className: ctx.headerClass ? ctx.headerClass(header.column) : '',
183
312
  "aria-sort": getSortLabel(header.column.getIsSorted()),
184
313
  onClick: header.column.getToggleSortingHandler(),
@@ -186,30 +315,18 @@ function TableHeaderCell(_ref) {
186
315
  colSpan: header.colSpan,
187
316
  style: _objectSpread__default.default({
188
317
  width: header.getSize(),
189
- verticalAlign: ctx.enableColumnFiltering ? 'baseline' : 'middle'
318
+ verticalAlign: ctx.enableColumnFiltering ? 'top' : 'middle'
190
319
  }, ctx.headerStyle ? ctx.headerStyle(header.column) : {}),
191
320
  children: [/*#__PURE__*/jsxRuntime.jsxs(jsxRuntime.Fragment, {
192
- children: [/*#__PURE__*/jsxRuntime.jsxs("div", {
321
+ children: [/*#__PURE__*/jsxRuntime.jsx("div", {
193
322
  style: {
194
323
  display: 'flex',
195
324
  flexDirection: 'column'
196
325
  },
197
- children: [/*#__PURE__*/jsxRuntime.jsx("span", {
326
+ children: /*#__PURE__*/jsxRuntime.jsx("span", {
198
327
  className: "table-header-cell-label",
199
328
  children: reactTable.flexRender(header.column.columnDef.header, header.getContext())
200
- }), header.column.getCanFilter() ?
201
- /*#__PURE__*/
202
- // Supressing this warning - div is not interactive, but prevents propagation of events to avoid unintended sorting
203
- // eslint-disable-next-line jsx-a11y/click-events-have-key-events,jsx-a11y/no-static-element-interactions
204
- jsxRuntime.jsx("div", {
205
- onClick: function onClick(e) {
206
- return e.stopPropagation();
207
- },
208
- children: /*#__PURE__*/jsxRuntime.jsx(Filter, {
209
- column: header.column,
210
- table: table
211
- })
212
- }) : null]
329
+ })
213
330
  }), (_asc$desc = {
214
331
  asc: /*#__PURE__*/jsxRuntime.jsx(edsCoreReact.Icon, {
215
332
  data: edsIcons.arrow_up
@@ -217,17 +334,30 @@ function TableHeaderCell(_ref) {
217
334
  desc: /*#__PURE__*/jsxRuntime.jsx(edsCoreReact.Icon, {
218
335
  data: edsIcons.arrow_down
219
336
  })
220
- }[header.column.getIsSorted()]) !== null && _asc$desc !== void 0 ? _asc$desc : null]
337
+ }[header.column.getIsSorted()]) !== null && _asc$desc !== void 0 ? _asc$desc : null, header.column.getCanFilter() ?
338
+
339
+ // Supressing this warning - div is not interactive, but prevents propagation of events to avoid unintended sorting
340
+ // eslint-disable-next-line jsx-a11y/click-events-have-key-events,jsx-a11y/no-static-element-interactions
341
+ jsxRuntime.jsx("div", {
342
+ onClick: function onClick(e) {
343
+ return e.stopPropagation();
344
+ },
345
+ children: /*#__PURE__*/jsxRuntime.jsx(Filter, {
346
+ column: header.column,
347
+ table: table
348
+ })
349
+ }) : null]
221
350
  }), columnResizeMode && /*#__PURE__*/jsxRuntime.jsx(Resizer, {
222
351
  onClick: function onClick(e) {
223
352
  return e.stopPropagation();
224
353
  },
225
354
  onMouseDown: header.getResizeHandler(),
226
355
  onTouchStart: header.getResizeHandler(),
227
- isResizing: header.column.getIsResizing(),
228
- columnResizeMode: columnResizeMode,
356
+ $isResizing: header.column.getIsResizing(),
357
+ $columnResizeMode: columnResizeMode,
229
358
  className: 'resize-handle',
230
- "data-testid": 'resize-handle'
359
+ "data-testid": 'resize-handle',
360
+ children: /*#__PURE__*/jsxRuntime.jsx(ResizeInner, {})
231
361
  })]
232
362
  });
233
363
  }
@@ -249,21 +379,46 @@ function TableHeaderRow(_ref) {
249
379
  });
250
380
  }
251
381
 
382
+ var StyledCell = styled__default.default(edsCoreReact.Table.Cell).withConfig({
383
+ displayName: "TableBodyCell__StyledCell",
384
+ componentId: "sc-1gsd2k4-0"
385
+ })(["position:", ";", " z-index:", ";background-color:", ";overflow:hidden;white-space:nowrap;text-overflow:ellipsis;"], function (p) {
386
+ return p.$pinned ? 'sticky' : 'relative';
387
+ }, function (p) {
388
+ if (p.$pinned) {
389
+ return "".concat(p.$pinned, ": ").concat(p.$offset, "px;");
390
+ }
391
+ return '';
392
+ }, function (p) {
393
+ return p.$pinned ? 11 : 'auto';
394
+ }, function (p) {
395
+ return p.$pinned ? edsTokens.tokens.colors.ui.background__default.hex : 'inherit';
396
+ });
252
397
  function TableBodyCell(_ref) {
253
398
  var _cellStyle;
254
399
  var cell = _ref.cell;
255
400
  var _useTableContext = useTableContext(),
256
401
  cellClass = _useTableContext.cellClass,
257
- cellStyle = _useTableContext.cellStyle;
258
- return /*#__PURE__*/jsxRuntime.jsx(edsCoreReact.Table.Cell, {
402
+ cellStyle = _useTableContext.cellStyle,
403
+ table = _useTableContext.table;
404
+ var pinned = cell.column.getIsPinned();
405
+ var pinnedOffset = react.useMemo(function () {
406
+ if (!pinned) {
407
+ return 0;
408
+ }
409
+ var header = table.getFlatHeaders().find(function (h) {
410
+ return h.id === cell.column.id;
411
+ });
412
+ return pinned === 'left' ? header.getStart() : table.getTotalSize() - header.getStart() - cell.column.getSize();
413
+ }, [pinned, cell.column, table]);
414
+ return /*#__PURE__*/jsxRuntime.jsx(StyledCell, {
415
+ $pinned: pinned,
416
+ $offset: pinnedOffset,
259
417
  className: cellClass ? cellClass(cell.row, cell.column.id) : '',
260
418
  key: cell.id,
261
419
  style: _objectSpread__default.default({
262
420
  width: cell.column.getSize(),
263
- maxWidth: cell.column.getSize(),
264
- overflow: 'hidden',
265
- whiteSpace: 'nowrap',
266
- textOverflow: 'ellipsis'
421
+ maxWidth: cell.column.getSize()
267
422
  }, (_cellStyle = cellStyle === null || cellStyle === void 0 ? void 0 : cellStyle(cell.row, cell.column.id)) !== null && _cellStyle !== void 0 ? _cellStyle : {}),
268
423
  children: /*#__PURE__*/jsxRuntime.jsx(edsCoreReact.Typography, {
269
424
  as: "span",
@@ -321,8 +476,16 @@ function EdsDataGrid(_ref) {
321
476
  rowClass = _ref.rowClass,
322
477
  rowStyle = _ref.rowStyle,
323
478
  headerClass = _ref.headerClass,
324
- headerStyle = _ref.headerStyle;
325
- var _useState = react.useState([]),
479
+ headerStyle = _ref.headerStyle,
480
+ externalPaginator = _ref.externalPaginator,
481
+ _onSortingChange = _ref.onSortingChange,
482
+ manualSorting = _ref.manualSorting,
483
+ sortingState = _ref.sortingState,
484
+ columnPinState = _ref.columnPinState,
485
+ scrollbarHorizontal = _ref.scrollbarHorizontal,
486
+ width = _ref.width,
487
+ height = _ref.height;
488
+ var _useState = react.useState(sortingState !== null && sortingState !== void 0 ? sortingState : []),
326
489
  _useState2 = _slicedToArray__default.default(_useState, 2),
327
490
  sorting = _useState2[0],
328
491
  setSorting = _useState2[1];
@@ -330,32 +493,44 @@ function EdsDataGrid(_ref) {
330
493
  _useState4 = _slicedToArray__default.default(_useState3, 2),
331
494
  selection = _useState4[0],
332
495
  setSelection = _useState4[1];
333
- var _useState5 = react.useState([]),
496
+ var _useState5 = react.useState(columnPinState !== null && columnPinState !== void 0 ? columnPinState : {}),
334
497
  _useState6 = _slicedToArray__default.default(_useState5, 2),
335
- columnFilters = _useState6[0],
336
- setColumnFilters = _useState6[1];
337
- var _useState7 = react.useState(columnVisibility !== null && columnVisibility !== void 0 ? columnVisibility : {}),
498
+ columnPin = _useState6[0],
499
+ setColumnPin = _useState6[1];
500
+ var _useState7 = react.useState([]),
338
501
  _useState8 = _slicedToArray__default.default(_useState7, 2),
339
- visible = _useState8[0],
340
- setVisible = _useState8[1];
341
- var _useState9 = react.useState(''),
502
+ columnFilters = _useState8[0],
503
+ setColumnFilters = _useState8[1];
504
+ var _useState9 = react.useState(columnVisibility !== null && columnVisibility !== void 0 ? columnVisibility : {}),
342
505
  _useState10 = _slicedToArray__default.default(_useState9, 2),
343
- globalFilter = _useState10[0],
344
- setGlobalFilter = _useState10[1];
345
- var _useState11 = react.useState([]),
506
+ visible = _useState10[0],
507
+ setVisible = _useState10[1];
508
+ var _useState11 = react.useState(''),
346
509
  _useState12 = _slicedToArray__default.default(_useState11, 2),
347
- columnOrderState = _useState12[0],
348
- setColumnOrderState = _useState12[1];
349
- var _useState13 = react.useState({
510
+ globalFilter = _useState12[0],
511
+ setGlobalFilter = _useState12[1];
512
+ var _useState13 = react.useState([]),
513
+ _useState14 = _slicedToArray__default.default(_useState13, 2),
514
+ columnOrderState = _useState14[0],
515
+ setColumnOrderState = _useState14[1];
516
+ var _useState15 = react.useState({
350
517
  pageIndex: 0,
351
518
  pageSize: pageSize !== null && pageSize !== void 0 ? pageSize : 25
352
519
  }),
353
- _useState14 = _slicedToArray__default.default(_useState13, 2),
354
- page = _useState14[0],
355
- setPage = _useState14[1];
520
+ _useState16 = _slicedToArray__default.default(_useState15, 2),
521
+ page = _useState16[0],
522
+ setPage = _useState16[1];
356
523
  react.useEffect(function () {
357
524
  setVisible(columnVisibility !== null && columnVisibility !== void 0 ? columnVisibility : {});
358
525
  }, [columnVisibility, setVisible]);
526
+ react.useEffect(function () {
527
+ setColumnPin(function (s) {
528
+ return columnPinState !== null && columnPinState !== void 0 ? columnPinState : s;
529
+ });
530
+ }, [columnPinState]);
531
+ react.useEffect(function () {
532
+ setSorting(sortingState);
533
+ }, [sortingState]);
359
534
  react.useEffect(function () {
360
535
  setSelection(selectedRows !== null && selectedRows !== void 0 ? selectedRows : {});
361
536
  }, [selectedRows]);
@@ -388,7 +563,7 @@ function EdsDataGrid(_ref) {
388
563
  _ref3 = _slicedToArray__default.default(_ref2, 2),
389
564
  start = _ref3[0],
390
565
  end = _ref3[1];
391
- return value >= (isNaN(start) ? 0 : start) && value <= (!end || isNaN(end) ? Infinity : end);
566
+ return Number(value) >= (isNaN(start) ? 0 : start) && Number(value) <= (!end || isNaN(end) ? Infinity : end);
392
567
  } else {
393
568
  var validFilterValue = filterValue.filter(function (v) {
394
569
  return !!v;
@@ -412,20 +587,29 @@ function EdsDataGrid(_ref) {
412
587
  columnResizeMode: columnResizeMode,
413
588
  state: {
414
589
  sorting: sorting,
590
+ columnPinning: columnPin,
415
591
  rowSelection: selection,
416
592
  columnOrder: columnOrderState
417
593
  },
418
- onSortingChange: setSorting,
594
+ onSortingChange: function onSortingChange(changes) {
595
+ if (_onSortingChange) {
596
+ _onSortingChange(changes);
597
+ }
598
+ setSorting(changes);
599
+ },
419
600
  enableColumnFilters: !!enableColumnFiltering,
420
601
  enableFilters: !!enableColumnFiltering,
421
602
  enableSorting: enableSorting !== null && enableSorting !== void 0 ? enableSorting : false,
603
+ manualSorting: manualSorting !== null && manualSorting !== void 0 ? manualSorting : false,
422
604
  enableColumnResizing: !!columnResizeMode,
423
605
  getCoreRowModel: reactTable.getCoreRowModel(),
424
606
  getSortedRowModel: reactTable.getSortedRowModel(),
425
607
  debugTable: debug,
426
608
  debugHeaders: debug,
427
609
  debugColumns: debug,
428
- enableRowSelection: rowSelection !== null && rowSelection !== void 0 ? rowSelection : false
610
+ enableRowSelection: rowSelection !== null && rowSelection !== void 0 ? rowSelection : false,
611
+ enableColumnPinning: true,
612
+ enablePinning: true
429
613
  };
430
614
  react.useEffect(function () {
431
615
  if (columnOrder && columnOrder.length > 0) {
@@ -498,8 +682,9 @@ function EdsDataGrid(_ref) {
498
682
  * By not setting this, the virtual-scroll will always render every row, reducing computational overhead if turned off.
499
683
  */
500
684
  if (enableVirtual) {
685
+ var _ref4;
501
686
  parentRefStyle = {
502
- height: virtualHeight !== null && virtualHeight !== void 0 ? virtualHeight : 500,
687
+ height: (_ref4 = height !== null && height !== void 0 ? height : virtualHeight) !== null && _ref4 !== void 0 ? _ref4 : 500,
503
688
  overflow: 'auto',
504
689
  position: 'relative'
505
690
  };
@@ -544,16 +729,22 @@ function EdsDataGrid(_ref) {
544
729
  stickyHeader: !!stickyHeader,
545
730
  children: [/*#__PURE__*/jsxRuntime.jsxs("div", {
546
731
  className: "table-wrapper",
547
- style: parentRefStyle,
732
+ style: _objectSpread__default.default(_objectSpread__default.default({
733
+ height: height !== null && height !== void 0 ? height : 'auto'
734
+ }, parentRefStyle), {}, {
735
+ width: scrollbarHorizontal ? width : 'auto',
736
+ tableLayout: scrollbarHorizontal ? 'fixed' : 'auto',
737
+ overflow: 'auto'
738
+ }),
548
739
  ref: parentRef,
549
740
  children: [/*#__PURE__*/jsxRuntime.jsxs(edsCoreReact.Table, {
550
- className: Object.entries(classList).filter(function (_ref4) {
551
- var _ref5 = _slicedToArray__default.default(_ref4, 2),
552
- k = _ref5[1];
741
+ className: Object.entries(classList).filter(function (_ref5) {
742
+ var _ref6 = _slicedToArray__default.default(_ref5, 2),
743
+ k = _ref6[1];
553
744
  return k;
554
- }).map(function (_ref6) {
555
- var _ref7 = _slicedToArray__default.default(_ref6, 1),
556
- k = _ref7[0];
745
+ }).map(function (_ref7) {
746
+ var _ref8 = _slicedToArray__default.default(_ref7, 1),
747
+ k = _ref8[0];
557
748
  return k;
558
749
  }).join(' '),
559
750
  style: {
@@ -605,7 +796,7 @@ function EdsDataGrid(_ref) {
605
796
  }, row.id);
606
797
  })]
607
798
  })]
608
- }), enablePagination && /*#__PURE__*/jsxRuntime.jsx("div", {
799
+ }), externalPaginator ? externalPaginator : enablePagination && /*#__PURE__*/jsxRuntime.jsx("div", {
609
800
  style: {
610
801
  maxWidth: "".concat(table.getTotalSize(), "px")
611
802
  },