@osdk/react-components 0.1.0-beta.6 → 0.1.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.
- package/CHANGELOG.md +33 -0
- package/README.md +2 -5
- package/build/browser/base-components/checkbox/Checkbox.js +32 -27
- package/build/browser/object-table/CellContextMenu.js +20 -23
- package/build/browser/object-table/LoadingCell.js +38 -0
- package/build/browser/object-table/LoadingCell.js.map +1 -0
- package/build/browser/object-table/LoadingRow.js +69 -0
- package/build/browser/object-table/LoadingRow.js.map +1 -0
- package/build/browser/object-table/LoadingStateTable.js +395 -0
- package/build/browser/object-table/LoadingStateTable.js.map +1 -0
- package/build/browser/object-table/NonIdealState.js +25 -0
- package/build/browser/object-table/NonIdealState.js.map +1 -0
- package/build/browser/object-table/ObjectTable.js +6 -5
- package/build/browser/object-table/ObjectTable.js.map +1 -1
- package/build/browser/object-table/ObjectTableApi.js.map +1 -1
- package/build/browser/object-table/Table.js +948 -45
- package/build/browser/object-table/Table.js.map +1 -1
- package/build/browser/object-table/TableBody.js +269 -34
- package/build/browser/object-table/TableBody.js.map +1 -1
- package/build/browser/object-table/TableCell.js +111 -31
- package/build/browser/object-table/TableCell.js.map +1 -1
- package/build/browser/object-table/TableHeader.js +215 -38
- package/build/browser/object-table/TableHeaderContent.js +18 -21
- package/build/browser/object-table/TableHeaderContent.js.map +1 -1
- package/build/browser/object-table/TableHeaderWithPopover.js +80 -66
- package/build/browser/object-table/TableRow.js +144 -26
- package/build/browser/object-table/hooks/__tests__/useObjectTableData.test.js +18 -20
- package/build/browser/object-table/hooks/__tests__/useObjectTableData.test.js.map +1 -1
- package/build/browser/object-table/hooks/useColumnDefs.js +6 -2
- package/build/browser/object-table/hooks/useColumnDefs.js.map +1 -1
- package/build/browser/object-table/hooks/useColumnPinning.js.map +1 -1
- package/build/browser/object-table/hooks/useColumnVisibility.js.map +1 -1
- package/build/browser/object-table/hooks/useObjectTableData.js +7 -6
- package/build/browser/object-table/hooks/useObjectTableData.js.map +1 -1
- package/build/browser/object-table/hooks/useRowSelection.js.map +1 -1
- package/build/browser/object-table/hooks/useSelectionColumn.js.map +1 -1
- package/build/browser/object-table/hooks/useTableSorting.js.map +1 -1
- package/build/browser/object-table/utils/getRowId.js.map +1 -1
- package/build/cjs/public/experimental.cjs +435 -264
- package/build/cjs/public/experimental.cjs.map +1 -1
- package/build/cjs/public/experimental.css +114 -56
- package/build/cjs/public/experimental.css.map +1 -1
- package/build/cjs/public/experimental.d.cts +8 -11
- package/build/esm/base-components/checkbox/Checkbox.module.css +10 -3
- package/build/esm/object-table/CellContextMenu.module.css +1 -1
- package/build/{browser/object-table/CellContextMenu.module.css → esm/object-table/LoadingCell.js} +16 -3
- package/build/esm/object-table/LoadingCell.js.map +1 -0
- package/build/esm/object-table/LoadingCell.module.css +48 -0
- package/build/esm/object-table/LoadingRow.js +43 -0
- package/build/esm/object-table/LoadingRow.js.map +1 -0
- package/build/esm/object-table/LoadingStateTable.js +101 -0
- package/build/esm/object-table/LoadingStateTable.js.map +1 -0
- package/build/{browser/object-table/TableHeaderContent.module.css → esm/object-table/NonIdealState.js} +11 -13
- package/build/esm/object-table/NonIdealState.js.map +1 -0
- package/build/{browser/object-table/Table.module.css → esm/object-table/NonIdealState.module.css} +10 -4
- package/build/esm/object-table/ObjectTable.js +6 -5
- package/build/esm/object-table/ObjectTable.js.map +1 -1
- package/build/esm/object-table/ObjectTableApi.js.map +1 -1
- package/build/esm/object-table/Table.js +34 -13
- package/build/esm/object-table/Table.js.map +1 -1
- package/build/esm/object-table/Table.module.css +2 -2
- package/build/esm/object-table/TableBody.js +13 -2
- package/build/esm/object-table/TableBody.js.map +1 -1
- package/build/esm/object-table/TableCell.js.map +1 -1
- package/build/esm/object-table/TableCell.module.css +7 -8
- package/build/esm/object-table/TableHeader.module.css +15 -9
- package/build/esm/object-table/TableHeaderContent.js.map +1 -1
- package/build/esm/object-table/TableHeaderWithPopover.module.css +31 -26
- package/build/esm/object-table/TableRow.module.css +1 -1
- package/build/esm/object-table/hooks/__tests__/useObjectTableData.test.js +18 -20
- package/build/esm/object-table/hooks/__tests__/useObjectTableData.test.js.map +1 -1
- package/build/esm/object-table/hooks/useColumnDefs.js +6 -2
- package/build/esm/object-table/hooks/useColumnDefs.js.map +1 -1
- package/build/esm/object-table/hooks/useColumnPinning.js.map +1 -1
- package/build/esm/object-table/hooks/useColumnVisibility.js.map +1 -1
- package/build/esm/object-table/hooks/useObjectTableData.js +7 -6
- package/build/esm/object-table/hooks/useObjectTableData.js.map +1 -1
- package/build/esm/object-table/hooks/useRowSelection.js.map +1 -1
- package/build/esm/object-table/hooks/useSelectionColumn.js.map +1 -1
- package/build/esm/object-table/hooks/useTableSorting.js.map +1 -1
- package/build/esm/object-table/utils/getRowId.js.map +1 -1
- package/build/types/object-table/LoadingCell.d.ts +4 -0
- package/build/types/object-table/LoadingCell.d.ts.map +1 -0
- package/build/types/object-table/LoadingRow.d.ts +11 -0
- package/build/types/object-table/LoadingRow.d.ts.map +1 -0
- package/build/types/object-table/LoadingStateTable.d.ts +11 -0
- package/build/types/object-table/LoadingStateTable.d.ts.map +1 -0
- package/build/types/object-table/NonIdealState.d.ts +6 -0
- package/build/types/object-table/NonIdealState.d.ts.map +1 -0
- package/build/types/object-table/ObjectTable.d.ts +4 -4
- package/build/types/object-table/ObjectTable.d.ts.map +1 -1
- package/build/types/object-table/ObjectTableApi.d.ts +4 -8
- package/build/types/object-table/ObjectTableApi.d.ts.map +1 -1
- package/build/types/object-table/Table.d.ts +2 -1
- package/build/types/object-table/Table.d.ts.map +1 -1
- package/build/types/object-table/TableBody.d.ts +4 -2
- package/build/types/object-table/TableBody.d.ts.map +1 -1
- package/build/types/object-table/TableHeaderContent.d.ts.map +1 -1
- package/build/types/object-table/hooks/useColumnDefs.d.ts +3 -3
- package/build/types/object-table/hooks/useColumnDefs.d.ts.map +1 -1
- package/build/types/object-table/hooks/useColumnPinning.d.ts +3 -3
- package/build/types/object-table/hooks/useColumnPinning.d.ts.map +1 -1
- package/build/types/object-table/hooks/useColumnVisibility.d.ts +3 -3
- package/build/types/object-table/hooks/useColumnVisibility.d.ts.map +1 -1
- package/build/types/object-table/hooks/useObjectTableData.d.ts +6 -6
- package/build/types/object-table/hooks/useObjectTableData.d.ts.map +1 -1
- package/build/types/object-table/hooks/useRowSelection.d.ts +3 -3
- package/build/types/object-table/hooks/useRowSelection.d.ts.map +1 -1
- package/build/types/object-table/hooks/useSelectionColumn.d.ts +2 -2
- package/build/types/object-table/hooks/useSelectionColumn.d.ts.map +1 -1
- package/build/types/object-table/hooks/useTableSorting.d.ts +3 -3
- package/build/types/object-table/hooks/useTableSorting.d.ts.map +1 -1
- package/build/types/object-table/utils/getRowId.d.ts +3 -3
- package/build/types/object-table/utils/getRowId.d.ts.map +1 -1
- package/package.json +6 -6
- package/build/browser/base-components/checkbox/Checkbox.module.css +0 -72
- package/build/browser/object-table/TableBody.module.css +0 -20
- package/build/browser/object-table/TableCell.module.css +0 -63
- package/build/browser/object-table/TableHeader.module.css +0 -95
- package/build/browser/object-table/TableHeaderWithPopover.module.css +0 -105
- package/build/browser/object-table/TableRow.module.css +0 -60
|
@@ -1,20 +1,20 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
3
|
var reactTable = require('@tanstack/react-table');
|
|
4
|
-
var
|
|
4
|
+
var React7 = require('react');
|
|
5
5
|
var react = require('@osdk/react');
|
|
6
6
|
var experimental = require('@osdk/react/experimental');
|
|
7
7
|
var checkbox = require('@base-ui/react/checkbox');
|
|
8
8
|
var icons = require('@blueprintjs/icons');
|
|
9
|
-
var
|
|
9
|
+
var classNames2 = require('classnames');
|
|
10
|
+
var menu = require('@base-ui/react/menu');
|
|
10
11
|
var reactVirtual = require('@tanstack/react-virtual');
|
|
11
12
|
var reactDom = require('react-dom');
|
|
12
|
-
var menu = require('@base-ui/react/menu');
|
|
13
13
|
|
|
14
14
|
function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
|
|
15
15
|
|
|
16
|
-
var
|
|
17
|
-
var
|
|
16
|
+
var React7__default = /*#__PURE__*/_interopDefault(React7);
|
|
17
|
+
var classNames2__default = /*#__PURE__*/_interopDefault(classNames2);
|
|
18
18
|
|
|
19
19
|
// src/object-table/ObjectTable.tsx
|
|
20
20
|
function useColumnDefs(objectType, columnDefinitions) {
|
|
@@ -23,7 +23,7 @@ function useColumnDefs(objectType, columnDefinitions) {
|
|
|
23
23
|
loading,
|
|
24
24
|
error
|
|
25
25
|
} = react.useOsdkMetadata(objectType);
|
|
26
|
-
const columns =
|
|
26
|
+
const columns = React7.useMemo(() => {
|
|
27
27
|
const objectProperties = metadata?.properties;
|
|
28
28
|
if (columnDefinitions) {
|
|
29
29
|
return getColumnsFromColumnDefinitions(columnDefinitions, objectProperties);
|
|
@@ -56,8 +56,12 @@ function getColumnsFromColumnDefinitions(columnDefinitions, objectProperties) {
|
|
|
56
56
|
accessorKey: colKey,
|
|
57
57
|
header: renderHeader ?? propertyMetadata?.displayName,
|
|
58
58
|
size: width,
|
|
59
|
-
|
|
60
|
-
|
|
59
|
+
...minWidth ? {
|
|
60
|
+
minSize: minWidth
|
|
61
|
+
} : {},
|
|
62
|
+
...maxWidth ? {
|
|
63
|
+
maxSize: maxWidth
|
|
64
|
+
} : {},
|
|
61
65
|
enableResizing: resizable,
|
|
62
66
|
enableSorting: orderable,
|
|
63
67
|
enableColumnFilter: filterable,
|
|
@@ -89,11 +93,11 @@ var useColumnPinning = ({
|
|
|
89
93
|
hasSelectionColumn,
|
|
90
94
|
onColumnsPinnedChanged
|
|
91
95
|
}) => {
|
|
92
|
-
const [columnPinning, setColumnPinning] =
|
|
96
|
+
const [columnPinning, setColumnPinning] = React7.useState({
|
|
93
97
|
left: [],
|
|
94
98
|
right: []
|
|
95
99
|
});
|
|
96
|
-
|
|
100
|
+
React7.useEffect(() => {
|
|
97
101
|
const defaultState = getColumnPinningStateFromColumnDefs(columnDefinitions);
|
|
98
102
|
const selectionCol = hasSelectionColumn ? [SELECTION_COLUMN_ID] : [];
|
|
99
103
|
setColumnPinning({
|
|
@@ -101,7 +105,7 @@ var useColumnPinning = ({
|
|
|
101
105
|
right: [...defaultState.right ?? []]
|
|
102
106
|
});
|
|
103
107
|
}, [columnDefinitions, hasSelectionColumn]);
|
|
104
|
-
const onColumnPinningChange =
|
|
108
|
+
const onColumnPinningChange = React7.useCallback((updater) => {
|
|
105
109
|
setColumnPinning((prev) => {
|
|
106
110
|
const newPinning = typeof updater === "function" ? updater(prev) : updater;
|
|
107
111
|
if (onColumnsPinnedChanged) {
|
|
@@ -158,7 +162,7 @@ function convertColumnPinningStateToArray(pinningState) {
|
|
|
158
162
|
var useColumnVisibility = ({
|
|
159
163
|
columnDefinitions
|
|
160
164
|
}) => {
|
|
161
|
-
const columnVisibility =
|
|
165
|
+
const columnVisibility = React7.useMemo(() => {
|
|
162
166
|
if (columnDefinitions) {
|
|
163
167
|
const colVisibility = columnDefinitions.reduce((acc, colDef) => {
|
|
164
168
|
if (colDef.isVisible !== void 0) {
|
|
@@ -179,8 +183,8 @@ var useColumnVisibility = ({
|
|
|
179
183
|
return columnVisibility;
|
|
180
184
|
};
|
|
181
185
|
var PAGE_SIZE = 50;
|
|
182
|
-
function useObjectTableData(
|
|
183
|
-
const orderBy =
|
|
186
|
+
function useObjectTableData(objectOrInterfaceType, columnDefinitions, filter, sorting) {
|
|
187
|
+
const orderBy = React7.useMemo(() => {
|
|
184
188
|
if (!sorting || sorting.length === 0) {
|
|
185
189
|
return void 0;
|
|
186
190
|
}
|
|
@@ -189,13 +193,16 @@ function useObjectTableData(objectSet, columnDefinitions, filter, sorting) {
|
|
|
189
193
|
return acc;
|
|
190
194
|
}, {});
|
|
191
195
|
}, [sorting]);
|
|
192
|
-
const withProperties =
|
|
196
|
+
const withProperties = React7.useMemo(() => {
|
|
193
197
|
if (!columnDefinitions) {
|
|
194
198
|
return;
|
|
195
199
|
}
|
|
196
200
|
const rdpColumns = columnDefinitions.map((colDef) => colDef.locator).filter((colLocator) => {
|
|
197
201
|
return colLocator.type === "rdp";
|
|
198
202
|
});
|
|
203
|
+
if (!rdpColumns.length) {
|
|
204
|
+
return;
|
|
205
|
+
}
|
|
199
206
|
return rdpColumns.reduce((acc, cur) => {
|
|
200
207
|
return {
|
|
201
208
|
...acc,
|
|
@@ -203,7 +210,7 @@ function useObjectTableData(objectSet, columnDefinitions, filter, sorting) {
|
|
|
203
210
|
};
|
|
204
211
|
}, {});
|
|
205
212
|
}, [columnDefinitions]);
|
|
206
|
-
return experimental.
|
|
213
|
+
return experimental.useOsdkObjects(objectOrInterfaceType, {
|
|
207
214
|
withProperties,
|
|
208
215
|
pageSize: PAGE_SIZE,
|
|
209
216
|
where: filter,
|
|
@@ -224,11 +231,11 @@ function useRowSelection({
|
|
|
224
231
|
onRowSelection,
|
|
225
232
|
data
|
|
226
233
|
}) {
|
|
227
|
-
const [internalRowSelection, setInternalRowSelection] =
|
|
228
|
-
const [lastSelectedRowIndex, setLastSelectedRowIndex] =
|
|
234
|
+
const [internalRowSelection, setInternalRowSelection] = React7.useState({});
|
|
235
|
+
const [lastSelectedRowIndex, setLastSelectedRowIndex] = React7.useState(null);
|
|
229
236
|
const isControlled = selectedRows !== void 0;
|
|
230
237
|
const isSelectionEnabled = selectionMode !== "none";
|
|
231
|
-
const rowSelectionState =
|
|
238
|
+
const rowSelectionState = React7.useMemo(() => {
|
|
232
239
|
if (!isSelectionEnabled) return {};
|
|
233
240
|
if (isControlled && selectedRows) {
|
|
234
241
|
return getRowSelectionState(selectedRows);
|
|
@@ -239,7 +246,7 @@ function useRowSelection({
|
|
|
239
246
|
const totalCount = data?.length ?? 0;
|
|
240
247
|
const isAllSelected = totalCount > 0 && selectedCount === totalCount;
|
|
241
248
|
const hasSelection = selectedCount > 0;
|
|
242
|
-
const onToggleAll =
|
|
249
|
+
const onToggleAll = React7.useCallback(() => {
|
|
243
250
|
if (!isSelectionEnabled || !data) return;
|
|
244
251
|
const newSelectedRows = isAllSelected ? [] : data.map((item) => item.$primaryKey);
|
|
245
252
|
if (!isControlled) {
|
|
@@ -247,7 +254,7 @@ function useRowSelection({
|
|
|
247
254
|
}
|
|
248
255
|
onRowSelection?.(newSelectedRows);
|
|
249
256
|
}, [isSelectionEnabled, data, isAllSelected, isControlled, onRowSelection]);
|
|
250
|
-
const onToggleRow =
|
|
257
|
+
const onToggleRow = React7.useCallback((rowId, rowIndex, isShiftClick = false) => {
|
|
251
258
|
if (!isSelectionEnabled || !data) return;
|
|
252
259
|
let newSelectedRows = [];
|
|
253
260
|
if (selectionMode === "single") {
|
|
@@ -369,14 +376,14 @@ function Checkbox({
|
|
|
369
376
|
indicatorProps,
|
|
370
377
|
...rest
|
|
371
378
|
}) {
|
|
372
|
-
return /* @__PURE__ */
|
|
373
|
-
className:
|
|
379
|
+
return /* @__PURE__ */ React7__default.default.createElement(checkbox.Checkbox.Root, _extends({
|
|
380
|
+
className: classNames2__default.default(Checkbox_default.osdkCheckboxRoot, className),
|
|
374
381
|
indeterminate
|
|
375
|
-
}, rest), /* @__PURE__ */
|
|
376
|
-
className:
|
|
377
|
-
}), indeterminate ? /* @__PURE__ */
|
|
382
|
+
}, rest), /* @__PURE__ */ React7__default.default.createElement(checkbox.Checkbox.Indicator, _extends({}, indicatorProps, {
|
|
383
|
+
className: classNames2__default.default(Checkbox_default.osdkCheckboxIndicator, indicatorProps?.className)
|
|
384
|
+
}), indeterminate ? /* @__PURE__ */ React7__default.default.createElement(icons.Minus, {
|
|
378
385
|
color: "currentColor"
|
|
379
|
-
}) : /* @__PURE__ */
|
|
386
|
+
}) : /* @__PURE__ */ React7__default.default.createElement(icons.Tick, {
|
|
380
387
|
color: "currentColor"
|
|
381
388
|
})));
|
|
382
389
|
}
|
|
@@ -387,7 +394,7 @@ function SelectionHeaderCell({
|
|
|
387
394
|
hasSelection,
|
|
388
395
|
onToggleAll
|
|
389
396
|
}) {
|
|
390
|
-
return /* @__PURE__ */
|
|
397
|
+
return /* @__PURE__ */ React7__default.default.createElement(Checkbox, {
|
|
391
398
|
indeterminate: hasSelection && !isAllSelected,
|
|
392
399
|
checked: isAllSelected,
|
|
393
400
|
onCheckedChange: onToggleAll,
|
|
@@ -398,11 +405,11 @@ function SelectionCell({
|
|
|
398
405
|
row,
|
|
399
406
|
onToggleRow
|
|
400
407
|
}) {
|
|
401
|
-
const handleClick =
|
|
408
|
+
const handleClick = React7.useCallback((event) => {
|
|
402
409
|
const isShiftClick = event.shiftKey;
|
|
403
410
|
onToggleRow(row.id, row.index, isShiftClick);
|
|
404
411
|
}, [row, onToggleRow]);
|
|
405
|
-
return /* @__PURE__ */
|
|
412
|
+
return /* @__PURE__ */ React7__default.default.createElement(Checkbox, {
|
|
406
413
|
checked: row.getIsSelected(),
|
|
407
414
|
onClick: handleClick,
|
|
408
415
|
"aria-label": `Select row ${row.index + 1}`
|
|
@@ -417,18 +424,18 @@ var useSelectionColumn = ({
|
|
|
417
424
|
onToggleAll,
|
|
418
425
|
onToggleRow
|
|
419
426
|
}) => {
|
|
420
|
-
const selectionColumn =
|
|
427
|
+
const selectionColumn = React7.useMemo(() => {
|
|
421
428
|
if (selectionMode === "none") return null;
|
|
422
429
|
const colDef = {
|
|
423
430
|
id: SELECTION_COLUMN_ID,
|
|
424
|
-
header: () => selectionMode === "multiple" ? /* @__PURE__ */
|
|
431
|
+
header: () => selectionMode === "multiple" ? /* @__PURE__ */ React7__default.default.createElement(SelectionHeaderCell, {
|
|
425
432
|
isAllSelected,
|
|
426
433
|
hasSelection,
|
|
427
434
|
onToggleAll
|
|
428
435
|
}) : null,
|
|
429
436
|
cell: ({
|
|
430
437
|
row
|
|
431
|
-
}) => /* @__PURE__ */
|
|
438
|
+
}) => /* @__PURE__ */ React7__default.default.createElement(SelectionCell, {
|
|
432
439
|
row,
|
|
433
440
|
onToggleRow
|
|
434
441
|
}),
|
|
@@ -448,10 +455,10 @@ var useTableSorting = ({
|
|
|
448
455
|
defaultOrderBy,
|
|
449
456
|
onOrderByChanged
|
|
450
457
|
}) => {
|
|
451
|
-
const [internalSorting, setInternalSorting] =
|
|
458
|
+
const [internalSorting, setInternalSorting] = React7.useState(() => defaultOrderBy ? convertOrderByToSortingState(defaultOrderBy) : []);
|
|
452
459
|
const isControlled = orderBy !== void 0;
|
|
453
|
-
const sortingState =
|
|
454
|
-
const onSortingChange =
|
|
460
|
+
const sortingState = React7.useMemo(() => orderBy ? convertOrderByToSortingState(orderBy) : internalSorting, [orderBy, internalSorting]);
|
|
461
|
+
const onSortingChange = React7.useCallback((updater) => {
|
|
455
462
|
const newSorting = typeof updater === "function" ? updater(sortingState) : updater;
|
|
456
463
|
if (!isControlled) {
|
|
457
464
|
setInternalSorting(newSorting);
|
|
@@ -485,187 +492,57 @@ function convertSortingStateToOrderBy(sorting) {
|
|
|
485
492
|
}));
|
|
486
493
|
}
|
|
487
494
|
|
|
488
|
-
// src/object-table/
|
|
489
|
-
var
|
|
490
|
-
|
|
491
|
-
// src/object-table/TableBody.module.css
|
|
492
|
-
var TableBody_default = {};
|
|
493
|
-
|
|
494
|
-
// src/object-table/CellContextMenu.module.css
|
|
495
|
-
var CellContextMenu_default = {};
|
|
496
|
-
|
|
497
|
-
// src/object-table/CellContextMenu.tsx
|
|
498
|
-
function CellContextMenu({
|
|
499
|
-
cell,
|
|
500
|
-
position,
|
|
501
|
-
onClose,
|
|
502
|
-
renderContent
|
|
503
|
-
}) {
|
|
504
|
-
const ref = React9.useRef(null);
|
|
505
|
-
React9.useEffect(() => {
|
|
506
|
-
const handleClickOutside = (event) => {
|
|
507
|
-
if (ref.current && !ref.current.contains(event.target)) {
|
|
508
|
-
onClose();
|
|
509
|
-
}
|
|
510
|
-
};
|
|
511
|
-
document.addEventListener("mousedown", handleClickOutside);
|
|
512
|
-
return () => {
|
|
513
|
-
document.removeEventListener("mousedown", handleClickOutside);
|
|
514
|
-
};
|
|
515
|
-
}, [onClose]);
|
|
516
|
-
return /* @__PURE__ */ reactDom.createPortal(/* @__PURE__ */ React9__default.default.createElement("div", {
|
|
517
|
-
ref,
|
|
518
|
-
className: CellContextMenu_default.osdkCellContextMenu,
|
|
519
|
-
style: {
|
|
520
|
-
left: position.left,
|
|
521
|
-
top: position.top,
|
|
522
|
-
minWidth: position.width
|
|
523
|
-
}
|
|
524
|
-
}, renderContent(cell.row.original, cell)), document.body);
|
|
525
|
-
}
|
|
526
|
-
var useCellContextMenu = ({
|
|
527
|
-
tdRef
|
|
528
|
-
}) => {
|
|
529
|
-
const [popoverPosition, setPopoverPosition] = React9.useState(null);
|
|
530
|
-
const [isContextMenuOpen, setIsContextMenuOpen] = React9.useState(false);
|
|
531
|
-
const handleOpenContextMenu = React9.useCallback((event) => {
|
|
532
|
-
event.preventDefault();
|
|
533
|
-
event.stopPropagation();
|
|
534
|
-
if (tdRef.current) {
|
|
535
|
-
const rect = tdRef.current.getBoundingClientRect();
|
|
536
|
-
const position = {
|
|
537
|
-
left: rect.left,
|
|
538
|
-
top: rect.bottom,
|
|
539
|
-
width: rect.width
|
|
540
|
-
};
|
|
541
|
-
setPopoverPosition(position);
|
|
542
|
-
setIsContextMenuOpen(true);
|
|
543
|
-
}
|
|
544
|
-
}, [tdRef]);
|
|
545
|
-
const handleCloseContextMenu = React9.useCallback(() => {
|
|
546
|
-
setIsContextMenuOpen(false);
|
|
547
|
-
setPopoverPosition(null);
|
|
548
|
-
}, []);
|
|
549
|
-
return {
|
|
550
|
-
isContextMenuOpen,
|
|
551
|
-
handleOpenContextMenu,
|
|
552
|
-
handleCloseContextMenu,
|
|
553
|
-
popoverPosition
|
|
554
|
-
};
|
|
555
|
-
};
|
|
495
|
+
// src/object-table/LoadingCell.module.css
|
|
496
|
+
var LoadingCell_default = {};
|
|
556
497
|
|
|
557
498
|
// src/object-table/TableCell.module.css
|
|
558
499
|
var TableCell_default = {};
|
|
559
500
|
|
|
560
|
-
// src/object-table/
|
|
561
|
-
function
|
|
562
|
-
|
|
563
|
-
return {
|
|
564
|
-
columnStyles: {
|
|
565
|
-
left: isPinned === "left" ? `${column.getStart("left")}px` : void 0,
|
|
566
|
-
right: isPinned === "right" ? `${column.getAfter("right")}px` : void 0,
|
|
567
|
-
width: column.getSize()
|
|
568
|
-
}
|
|
569
|
-
};
|
|
570
|
-
}
|
|
571
|
-
|
|
572
|
-
// src/object-table/TableCell.tsx
|
|
573
|
-
function TableCell({
|
|
574
|
-
cell,
|
|
575
|
-
renderCellContextMenu
|
|
501
|
+
// src/object-table/LoadingCell.tsx
|
|
502
|
+
function LoadingCell({
|
|
503
|
+
width
|
|
576
504
|
}) {
|
|
577
|
-
|
|
578
|
-
const isSelectColumn = cell.column.id === SELECTION_COLUMN_ID;
|
|
579
|
-
const {
|
|
580
|
-
isContextMenuOpen,
|
|
581
|
-
handleOpenContextMenu,
|
|
582
|
-
handleCloseContextMenu,
|
|
583
|
-
popoverPosition
|
|
584
|
-
} = useCellContextMenu({
|
|
585
|
-
tdRef
|
|
586
|
-
});
|
|
587
|
-
const shouldRenderContextMenu = !isSelectColumn && isContextMenuOpen && !!popoverPosition && !!renderCellContextMenu;
|
|
588
|
-
const {
|
|
589
|
-
columnStyles
|
|
590
|
-
} = getColumnPinningStyles(cell.column);
|
|
591
|
-
return /* @__PURE__ */ React9__default.default.createElement(React9__default.default.Fragment, null, /* @__PURE__ */ React9__default.default.createElement("td", {
|
|
592
|
-
ref: tdRef,
|
|
593
|
-
"data-pinned": cell.column.getIsPinned(),
|
|
505
|
+
return /* @__PURE__ */ React7__default.default.createElement("td", {
|
|
594
506
|
className: TableCell_default.osdkTableCell,
|
|
595
|
-
style:
|
|
596
|
-
|
|
597
|
-
|
|
598
|
-
|
|
599
|
-
|
|
600
|
-
cell,
|
|
601
|
-
position: popoverPosition,
|
|
602
|
-
onClose: handleCloseContextMenu,
|
|
603
|
-
renderContent: renderCellContextMenu
|
|
507
|
+
style: {
|
|
508
|
+
width
|
|
509
|
+
}
|
|
510
|
+
}, /* @__PURE__ */ React7__default.default.createElement("div", {
|
|
511
|
+
className: classNames2__default.default(LoadingCell_default.osdkLoadingCell, LoadingCell_default.osdkCellSkeleton)
|
|
604
512
|
}));
|
|
605
513
|
}
|
|
606
514
|
|
|
607
515
|
// src/object-table/TableRow.module.css
|
|
608
516
|
var TableRow_default = {};
|
|
609
517
|
|
|
610
|
-
// src/object-table/
|
|
611
|
-
function
|
|
612
|
-
|
|
613
|
-
|
|
614
|
-
|
|
615
|
-
|
|
518
|
+
// src/object-table/LoadingRow.tsx
|
|
519
|
+
function LoadingRow({
|
|
520
|
+
headers,
|
|
521
|
+
columnCount,
|
|
522
|
+
translateY,
|
|
523
|
+
rowHeight = 40,
|
|
524
|
+
columnWidth = 80
|
|
616
525
|
}) {
|
|
617
|
-
|
|
618
|
-
onRowClick?.(row.original);
|
|
619
|
-
}, [onRowClick, row.original]);
|
|
620
|
-
return /* @__PURE__ */ React9__default.default.createElement("tr", {
|
|
621
|
-
"data-selected": row.getIsSelected(),
|
|
526
|
+
return /* @__PURE__ */ React7__default.default.createElement("tr", {
|
|
622
527
|
className: TableRow_default.osdkTableRow,
|
|
623
528
|
style: {
|
|
624
|
-
height: `${
|
|
625
|
-
transform: `translateY(${
|
|
626
|
-
},
|
|
627
|
-
onClick: handleClick
|
|
628
|
-
}, row.getVisibleCells().map((cell) => /* @__PURE__ */ React9__default.default.createElement(TableCell, {
|
|
629
|
-
key: cell.id,
|
|
630
|
-
cell,
|
|
631
|
-
renderCellContextMenu
|
|
632
|
-
})));
|
|
633
|
-
}
|
|
634
|
-
|
|
635
|
-
// src/object-table/TableBody.tsx
|
|
636
|
-
function TableBody({
|
|
637
|
-
rows,
|
|
638
|
-
tableContainerRef,
|
|
639
|
-
onRowClick,
|
|
640
|
-
renderCellContextMenu,
|
|
641
|
-
rowHeight = 40
|
|
642
|
-
}) {
|
|
643
|
-
const rowVirtualizer = reactVirtual.useVirtualizer({
|
|
644
|
-
count: rows.length,
|
|
645
|
-
estimateSize: () => rowHeight,
|
|
646
|
-
getScrollElement: () => tableContainerRef.current,
|
|
647
|
-
overscan: 5
|
|
648
|
-
});
|
|
649
|
-
React9.useLayoutEffect(() => {
|
|
650
|
-
rowVirtualizer.measure();
|
|
651
|
-
}, [rowVirtualizer, rows.length]);
|
|
652
|
-
return /* @__PURE__ */ React9__default.default.createElement("tbody", {
|
|
653
|
-
className: TableBody_default.osdkTableBody,
|
|
654
|
-
style: {
|
|
655
|
-
height: `${rowVirtualizer.getTotalSize()}px`
|
|
529
|
+
height: `${rowHeight}px`,
|
|
530
|
+
transform: `translateY(${translateY}px)`
|
|
656
531
|
}
|
|
657
|
-
},
|
|
658
|
-
|
|
659
|
-
|
|
660
|
-
|
|
661
|
-
|
|
662
|
-
|
|
663
|
-
|
|
664
|
-
renderCellContextMenu
|
|
532
|
+
}, /* @__PURE__ */ React7__default.default.createElement(React7__default.default.Fragment, null, Array.from({
|
|
533
|
+
length: columnCount
|
|
534
|
+
}).map((_, index) => {
|
|
535
|
+
const width = headers.length > index ? headers[index].getSize() : columnWidth;
|
|
536
|
+
return /* @__PURE__ */ React7__default.default.createElement(LoadingCell, {
|
|
537
|
+
key: `loading-cell-${index}`,
|
|
538
|
+
width
|
|
665
539
|
});
|
|
666
|
-
}));
|
|
540
|
+
})));
|
|
667
541
|
}
|
|
668
542
|
|
|
543
|
+
// src/object-table/TableBody.module.css
|
|
544
|
+
var TableBody_default = {};
|
|
545
|
+
|
|
669
546
|
// src/object-table/TableHeader.module.css
|
|
670
547
|
var TableHeader_default = {};
|
|
671
548
|
|
|
@@ -676,7 +553,7 @@ var TableHeaderContent_default = {};
|
|
|
676
553
|
function TableHeaderContent({
|
|
677
554
|
header
|
|
678
555
|
}) {
|
|
679
|
-
return /* @__PURE__ */
|
|
556
|
+
return /* @__PURE__ */ React7__default.default.createElement("div", {
|
|
680
557
|
className: TableHeaderContent_default.osdkHeaderContent
|
|
681
558
|
}, reactTable.flexRender(header.column.columnDef.header, header.getContext()));
|
|
682
559
|
}
|
|
@@ -691,14 +568,14 @@ function HeaderMenuItem({
|
|
|
691
568
|
label,
|
|
692
569
|
active = false
|
|
693
570
|
}) {
|
|
694
|
-
return /* @__PURE__ */
|
|
571
|
+
return /* @__PURE__ */ React7__default.default.createElement(menu.Menu.Item, {
|
|
695
572
|
closeOnClick: true,
|
|
696
|
-
className:
|
|
573
|
+
className: classNames2__default.default(TableHeaderWithPopover_default.osdkCenterContainer, TableHeaderWithPopover_default.osdkContentGap, TableHeaderWithPopover_default.osdkHeaderMenuItem, active && TableHeaderWithPopover_default.osdkHeaderActiveMenuItem),
|
|
697
574
|
onClick
|
|
698
|
-
}, /* @__PURE__ */
|
|
575
|
+
}, /* @__PURE__ */ React7__default.default.createElement(Icon, {
|
|
699
576
|
className: TableHeaderWithPopover_default.osdkHeaderIcon,
|
|
700
577
|
color: "currentColor"
|
|
701
|
-
}), /* @__PURE__ */
|
|
578
|
+
}), /* @__PURE__ */ React7__default.default.createElement("span", null, label));
|
|
702
579
|
}
|
|
703
580
|
function TableHeaderWithPopover({
|
|
704
581
|
header,
|
|
@@ -707,8 +584,8 @@ function TableHeaderWithPopover({
|
|
|
707
584
|
onSortChange,
|
|
708
585
|
onResetSize
|
|
709
586
|
}) {
|
|
710
|
-
const [isOpen, setIsOpen] =
|
|
711
|
-
const handlePinLeft =
|
|
587
|
+
const [isOpen, setIsOpen] = React7.useState(false);
|
|
588
|
+
const handlePinLeft = React7.useCallback(() => {
|
|
712
589
|
setColumnPinning((prev) => {
|
|
713
590
|
return {
|
|
714
591
|
left: [...prev.left || [], header.column.id],
|
|
@@ -716,7 +593,7 @@ function TableHeaderWithPopover({
|
|
|
716
593
|
};
|
|
717
594
|
});
|
|
718
595
|
}, [header.column.id, setColumnPinning]);
|
|
719
|
-
const handleUnpin =
|
|
596
|
+
const handleUnpin = React7.useCallback(() => {
|
|
720
597
|
setColumnPinning((prev) => {
|
|
721
598
|
return {
|
|
722
599
|
left: prev.left?.filter((id) => id !== header.column.id) || [],
|
|
@@ -724,109 +601,121 @@ function TableHeaderWithPopover({
|
|
|
724
601
|
};
|
|
725
602
|
});
|
|
726
603
|
}, [header.column.id, setColumnPinning]);
|
|
727
|
-
const handleSortAscending =
|
|
604
|
+
const handleSortAscending = React7.useCallback(() => {
|
|
728
605
|
header.column.toggleSorting(false);
|
|
729
606
|
onSortChange?.([{
|
|
730
607
|
id: header.column.id,
|
|
731
608
|
desc: false
|
|
732
609
|
}]);
|
|
733
610
|
}, [header.column, onSortChange]);
|
|
734
|
-
const handleSortDescending =
|
|
611
|
+
const handleSortDescending = React7.useCallback(() => {
|
|
735
612
|
header.column.toggleSorting(true);
|
|
736
613
|
onSortChange?.([{
|
|
737
614
|
id: header.column.id,
|
|
738
615
|
desc: true
|
|
739
616
|
}]);
|
|
740
617
|
}, [header.column, onSortChange]);
|
|
741
|
-
const handleClearAllSorts =
|
|
618
|
+
const handleClearAllSorts = React7.useCallback(() => {
|
|
742
619
|
header.column.clearSorting();
|
|
743
620
|
onSortChange?.([]);
|
|
744
621
|
}, [header.column, onSortChange]);
|
|
745
|
-
const handleResetSize =
|
|
622
|
+
const handleResetSize = React7.useCallback(() => {
|
|
746
623
|
header.column.resetSize();
|
|
747
624
|
if (onResetSize) {
|
|
748
625
|
onResetSize();
|
|
749
626
|
}
|
|
750
627
|
}, [header.column, onResetSize]);
|
|
751
|
-
const handleInteraction =
|
|
628
|
+
const handleInteraction = React7.useCallback((e) => {
|
|
752
629
|
e.preventDefault();
|
|
753
630
|
setIsOpen((prev) => !prev);
|
|
754
631
|
}, []);
|
|
755
632
|
const isSorted = header.column.getIsSorted();
|
|
756
633
|
const isSortable = header.column.getCanSort();
|
|
757
|
-
return /* @__PURE__ */
|
|
634
|
+
return /* @__PURE__ */ React7__default.default.createElement(menu.Menu.Root, {
|
|
758
635
|
open: isOpen,
|
|
759
636
|
onOpenChange: setIsOpen
|
|
760
|
-
}, /* @__PURE__ */
|
|
761
|
-
className:
|
|
637
|
+
}, /* @__PURE__ */ React7__default.default.createElement("div", {
|
|
638
|
+
className: classNames2__default.default(TableHeaderWithPopover_default.osdkCenterContainer, TableHeaderWithPopover_default.osdkContentGap, TableHeaderWithPopover_default.osdkHeaderContainer),
|
|
762
639
|
onContextMenu: handleInteraction
|
|
763
|
-
}, /* @__PURE__ */
|
|
764
|
-
className:
|
|
765
|
-
}, isColumnPinned && /* @__PURE__ */
|
|
640
|
+
}, /* @__PURE__ */ React7__default.default.createElement("div", {
|
|
641
|
+
className: classNames2__default.default(TableHeaderWithPopover_default.osdkCenterContainer, TableHeaderWithPopover_default.osdkContentGap, TableHeaderWithPopover_default.osdkHeaderContentLeft)
|
|
642
|
+
}, isColumnPinned && /* @__PURE__ */ React7__default.default.createElement(icons.Pin, {
|
|
766
643
|
className: TableHeaderWithPopover_default.osdkHeaderIcon,
|
|
767
644
|
color: "currentColor"
|
|
768
|
-
}), /* @__PURE__ */
|
|
645
|
+
}), /* @__PURE__ */ React7__default.default.createElement(TableHeaderContent, {
|
|
769
646
|
header
|
|
770
|
-
})), /* @__PURE__ */
|
|
771
|
-
className:
|
|
772
|
-
}, isSorted && /* @__PURE__ */
|
|
647
|
+
})), /* @__PURE__ */ React7__default.default.createElement("div", {
|
|
648
|
+
className: classNames2__default.default(TableHeaderWithPopover_default.osdkCenterContainer, TableHeaderWithPopover_default.osdkContentGap, TableHeaderWithPopover_default.osdkHeaderContentRight)
|
|
649
|
+
}, isSorted && /* @__PURE__ */ React7__default.default.createElement("div", {
|
|
773
650
|
className: TableHeaderWithPopover_default.osdkCenterContainer
|
|
774
|
-
}, isSorted === "asc" ? /* @__PURE__ */
|
|
651
|
+
}, isSorted === "asc" ? /* @__PURE__ */ React7__default.default.createElement(icons.SortAlphabetical, {
|
|
775
652
|
className: TableHeaderWithPopover_default.osdkHeaderIcon,
|
|
776
653
|
color: "currentColor"
|
|
777
|
-
}) : /* @__PURE__ */
|
|
654
|
+
}) : /* @__PURE__ */ React7__default.default.createElement(icons.SortAlphabeticalDesc, {
|
|
778
655
|
className: TableHeaderWithPopover_default.osdkHeaderIcon,
|
|
779
656
|
color: "currentColor"
|
|
780
|
-
})), /* @__PURE__ */
|
|
657
|
+
})), /* @__PURE__ */ React7__default.default.createElement(menu.Menu.Trigger, {
|
|
781
658
|
"aria-label": `Open header menu for column with id=${header.column.id}`,
|
|
782
|
-
className:
|
|
783
|
-
}, /* @__PURE__ */
|
|
659
|
+
className: classNames2__default.default(TableHeaderWithPopover_default.osdkCenterContainer, TableHeaderWithPopover_default.osdkHeaderPopoverTrigger)
|
|
660
|
+
}, /* @__PURE__ */ React7__default.default.createElement(icons.ChevronDown, {
|
|
784
661
|
className: TableHeaderWithPopover_default.osdkHeaderIcon
|
|
785
|
-
}))), /* @__PURE__ */
|
|
662
|
+
}))), /* @__PURE__ */ React7__default.default.createElement(menu.Menu.Portal, {
|
|
786
663
|
container: document.body
|
|
787
|
-
}, /* @__PURE__ */
|
|
664
|
+
}, /* @__PURE__ */ React7__default.default.createElement(menu.Menu.Positioner, {
|
|
788
665
|
sideOffset: 4
|
|
789
|
-
}, /* @__PURE__ */
|
|
666
|
+
}, /* @__PURE__ */ React7__default.default.createElement(menu.Menu.Popup, {
|
|
790
667
|
className: TableHeaderWithPopover_default.osdkHeaderPopup
|
|
791
|
-
}, !isColumnPinned && /* @__PURE__ */
|
|
668
|
+
}, !isColumnPinned && /* @__PURE__ */ React7__default.default.createElement(HeaderMenuItem, {
|
|
792
669
|
onClick: handlePinLeft,
|
|
793
670
|
icon: icons.Pin,
|
|
794
671
|
label: "Pin column"
|
|
795
|
-
}), isColumnPinned && /* @__PURE__ */
|
|
672
|
+
}), isColumnPinned && /* @__PURE__ */ React7__default.default.createElement(HeaderMenuItem, {
|
|
796
673
|
onClick: handleUnpin,
|
|
797
674
|
icon: icons.Unpin,
|
|
798
675
|
label: "Unpin Column",
|
|
799
676
|
active: true
|
|
800
|
-
}), isSortable && /* @__PURE__ */
|
|
677
|
+
}), isSortable && /* @__PURE__ */ React7__default.default.createElement(React7__default.default.Fragment, null, /* @__PURE__ */ React7__default.default.createElement(HeaderMenuItem, {
|
|
801
678
|
onClick: handleSortAscending,
|
|
802
679
|
icon: icons.SortAlphabetical,
|
|
803
680
|
label: "Sort ascending",
|
|
804
681
|
active: isSorted === "asc"
|
|
805
|
-
}), /* @__PURE__ */
|
|
682
|
+
}), /* @__PURE__ */ React7__default.default.createElement(HeaderMenuItem, {
|
|
806
683
|
onClick: handleSortDescending,
|
|
807
684
|
icon: icons.SortAlphabeticalDesc,
|
|
808
685
|
label: "Sort descending",
|
|
809
686
|
active: isSorted === "desc"
|
|
810
|
-
})), !!isSorted && /* @__PURE__ */
|
|
687
|
+
})), !!isSorted && /* @__PURE__ */ React7__default.default.createElement(HeaderMenuItem, {
|
|
811
688
|
onClick: handleClearAllSorts,
|
|
812
689
|
icon: icons.Remove,
|
|
813
690
|
label: "Clear all sorts"
|
|
814
|
-
}), /* @__PURE__ */
|
|
691
|
+
}), /* @__PURE__ */ React7__default.default.createElement(HeaderMenuItem, {
|
|
815
692
|
onClick: handleResetSize,
|
|
816
693
|
icon: icons.VerticalDistribution,
|
|
817
694
|
label: "Reset Column Size"
|
|
818
695
|
}))))));
|
|
819
696
|
}
|
|
820
697
|
|
|
698
|
+
// src/object-table/utils/getColumnPinningStyles.ts
|
|
699
|
+
function getColumnPinningStyles(column) {
|
|
700
|
+
const isPinned = column.getIsPinned();
|
|
701
|
+
return {
|
|
702
|
+
columnStyles: {
|
|
703
|
+
left: isPinned === "left" ? `${column.getStart("left")}px` : void 0,
|
|
704
|
+
right: isPinned === "right" ? `${column.getAfter("right")}px` : void 0,
|
|
705
|
+
width: column.getSize()
|
|
706
|
+
}
|
|
707
|
+
};
|
|
708
|
+
}
|
|
709
|
+
|
|
821
710
|
// src/object-table/TableHeader.tsx
|
|
822
711
|
function TableHeader({
|
|
823
712
|
table
|
|
824
713
|
}) {
|
|
825
714
|
const isResizing = !!table.getState().columnSizingInfo?.isResizingColumn;
|
|
826
|
-
return /* @__PURE__ */
|
|
715
|
+
return /* @__PURE__ */ React7__default.default.createElement("thead", {
|
|
827
716
|
className: TableHeader_default.osdkTableHeader,
|
|
828
717
|
"data-resizing": isResizing
|
|
829
|
-
}, table.getHeaderGroups().map((headerGroup) => /* @__PURE__ */
|
|
718
|
+
}, table.getHeaderGroups().map((headerGroup) => /* @__PURE__ */ React7__default.default.createElement("tr", {
|
|
830
719
|
key: headerGroup.id,
|
|
831
720
|
className: TableHeader_default.osdkTableHeaderRow
|
|
832
721
|
}, headerGroup.headers.map((header) => {
|
|
@@ -835,18 +724,18 @@ function TableHeader({
|
|
|
835
724
|
} = getColumnPinningStyles(header.column);
|
|
836
725
|
const isColumnPinned = header.column.getIsPinned();
|
|
837
726
|
const isSelectColumn = header.id === SELECTION_COLUMN_ID;
|
|
838
|
-
return /* @__PURE__ */
|
|
727
|
+
return /* @__PURE__ */ React7__default.default.createElement("th", {
|
|
839
728
|
key: header.id,
|
|
840
729
|
"data-pinned": header.column.getIsPinned(),
|
|
841
730
|
className: TableHeader_default.osdkTableHeaderCell,
|
|
842
731
|
style: columnStyles
|
|
843
|
-
}, header.isPlaceholder ? null : isSelectColumn ? /* @__PURE__ */
|
|
732
|
+
}, header.isPlaceholder ? null : isSelectColumn ? /* @__PURE__ */ React7__default.default.createElement(TableHeaderContent, {
|
|
844
733
|
header
|
|
845
|
-
}) : /* @__PURE__ */
|
|
734
|
+
}) : /* @__PURE__ */ React7__default.default.createElement(TableHeaderWithPopover, {
|
|
846
735
|
header,
|
|
847
736
|
isColumnPinned,
|
|
848
737
|
setColumnPinning: table.setColumnPinning
|
|
849
|
-
}), header.column.getCanResize() && /* @__PURE__ */
|
|
738
|
+
}), header.column.getCanResize() && /* @__PURE__ */ React7__default.default.createElement("div", {
|
|
850
739
|
className: TableHeader_default.osdkTableHeaderResizer,
|
|
851
740
|
onDoubleClick: () => header.column.resetSize(),
|
|
852
741
|
onMouseDown: header.getResizeHandler(),
|
|
@@ -855,6 +744,265 @@ function TableHeader({
|
|
|
855
744
|
}))));
|
|
856
745
|
}
|
|
857
746
|
|
|
747
|
+
// src/object-table/LoadingStateTable.tsx
|
|
748
|
+
var MIN_ROWS = 5;
|
|
749
|
+
function LoadingStateTable({
|
|
750
|
+
table,
|
|
751
|
+
tableContainerRef,
|
|
752
|
+
headerGroups,
|
|
753
|
+
rowHeight = 40,
|
|
754
|
+
columnWidth = 120
|
|
755
|
+
}) {
|
|
756
|
+
const isSelectionEnabled = table.options.enableRowSelection;
|
|
757
|
+
const minHeaderCount = isSelectionEnabled ? 1 : 0;
|
|
758
|
+
const headers = headerGroups[0]?.headers ?? [];
|
|
759
|
+
const hasHeadersLoaded = headers.length > minHeaderCount;
|
|
760
|
+
const headerRef = React7.useRef(null);
|
|
761
|
+
const bodyRef = React7.useRef(null);
|
|
762
|
+
const [loadingRowCount, setLoadingRowCount] = React7.useState(MIN_ROWS);
|
|
763
|
+
const [loadingColumnCount, setLoadingColumnCount] = React7.useState(headers.length);
|
|
764
|
+
React7.useEffect(() => {
|
|
765
|
+
if (hasHeadersLoaded) {
|
|
766
|
+
setLoadingColumnCount(headers.length);
|
|
767
|
+
} else {
|
|
768
|
+
if (tableContainerRef.current) {
|
|
769
|
+
const tableWidth = tableContainerRef.current.clientWidth;
|
|
770
|
+
if (tableWidth > 0) {
|
|
771
|
+
const columnsNeeded = Math.ceil(tableWidth / columnWidth);
|
|
772
|
+
setLoadingColumnCount(columnsNeeded);
|
|
773
|
+
}
|
|
774
|
+
}
|
|
775
|
+
}
|
|
776
|
+
}, [columnWidth, hasHeadersLoaded, headers, tableContainerRef]);
|
|
777
|
+
React7.useEffect(() => {
|
|
778
|
+
if (tableContainerRef.current) {
|
|
779
|
+
const containerHeight = tableContainerRef.current.clientHeight;
|
|
780
|
+
const availableHeight = containerHeight - rowHeight;
|
|
781
|
+
if (availableHeight > 0) {
|
|
782
|
+
const rowsNeeded = Math.ceil(availableHeight / rowHeight);
|
|
783
|
+
setLoadingRowCount(Math.max(rowsNeeded, MIN_ROWS));
|
|
784
|
+
}
|
|
785
|
+
}
|
|
786
|
+
}, [tableContainerRef, rowHeight]);
|
|
787
|
+
return /* @__PURE__ */ React7__default.default.createElement(React7__default.default.Fragment, null, hasHeadersLoaded ? /* @__PURE__ */ React7__default.default.createElement(TableHeader, {
|
|
788
|
+
table
|
|
789
|
+
}) : /* @__PURE__ */ React7__default.default.createElement("thead", {
|
|
790
|
+
className: TableHeader_default.osdkTableHeader,
|
|
791
|
+
ref: headerRef
|
|
792
|
+
}, /* @__PURE__ */ React7__default.default.createElement("tr", {
|
|
793
|
+
className: TableHeader_default.osdkTableHeaderRow
|
|
794
|
+
}, Array.from({
|
|
795
|
+
length: loadingColumnCount
|
|
796
|
+
}).map((_, index) => {
|
|
797
|
+
const width = headers.length > index ? headers[index].getSize() : columnWidth;
|
|
798
|
+
return /* @__PURE__ */ React7__default.default.createElement("th", {
|
|
799
|
+
key: `loading-header-${index}`,
|
|
800
|
+
className: TableHeader_default.osdkTableHeaderCell,
|
|
801
|
+
style: {
|
|
802
|
+
width
|
|
803
|
+
}
|
|
804
|
+
}, /* @__PURE__ */ React7__default.default.createElement("div", {
|
|
805
|
+
className: classNames2__default.default(TableHeader_default.osdkLoadingHeaderCell, LoadingCell_default.osdkCellSkeleton)
|
|
806
|
+
}));
|
|
807
|
+
}))), /* @__PURE__ */ React7__default.default.createElement("tbody", {
|
|
808
|
+
className: TableBody_default.osdkTableBody,
|
|
809
|
+
ref: bodyRef
|
|
810
|
+
}, Array.from({
|
|
811
|
+
length: loadingRowCount
|
|
812
|
+
}).map((_, index) => /* @__PURE__ */ React7__default.default.createElement(LoadingRow, {
|
|
813
|
+
key: `skeleton-${index}`,
|
|
814
|
+
columnCount: loadingColumnCount,
|
|
815
|
+
headers,
|
|
816
|
+
translateY: rowHeight * index,
|
|
817
|
+
rowHeight,
|
|
818
|
+
columnWidth
|
|
819
|
+
}))));
|
|
820
|
+
}
|
|
821
|
+
|
|
822
|
+
// src/object-table/NonIdealState.module.css
|
|
823
|
+
var NonIdealState_default = {};
|
|
824
|
+
|
|
825
|
+
// src/object-table/NonIdealState.tsx
|
|
826
|
+
function NonIdealState({
|
|
827
|
+
message
|
|
828
|
+
}) {
|
|
829
|
+
return /* @__PURE__ */ React7__default.default.createElement("div", {
|
|
830
|
+
className: NonIdealState_default.container
|
|
831
|
+
}, /* @__PURE__ */ React7__default.default.createElement("div", {
|
|
832
|
+
className: NonIdealState_default.message
|
|
833
|
+
}, message));
|
|
834
|
+
}
|
|
835
|
+
|
|
836
|
+
// src/object-table/Table.module.css
|
|
837
|
+
var Table_default = {};
|
|
838
|
+
|
|
839
|
+
// src/object-table/CellContextMenu.module.css
|
|
840
|
+
var CellContextMenu_default = {};
|
|
841
|
+
|
|
842
|
+
// src/object-table/CellContextMenu.tsx
|
|
843
|
+
function CellContextMenu({
|
|
844
|
+
cell,
|
|
845
|
+
position,
|
|
846
|
+
onClose,
|
|
847
|
+
renderContent
|
|
848
|
+
}) {
|
|
849
|
+
const ref = React7.useRef(null);
|
|
850
|
+
React7.useEffect(() => {
|
|
851
|
+
const handleClickOutside = (event) => {
|
|
852
|
+
if (ref.current && !ref.current.contains(event.target)) {
|
|
853
|
+
onClose();
|
|
854
|
+
}
|
|
855
|
+
};
|
|
856
|
+
document.addEventListener("mousedown", handleClickOutside);
|
|
857
|
+
return () => {
|
|
858
|
+
document.removeEventListener("mousedown", handleClickOutside);
|
|
859
|
+
};
|
|
860
|
+
}, [onClose]);
|
|
861
|
+
return /* @__PURE__ */ reactDom.createPortal(/* @__PURE__ */ React7__default.default.createElement("div", {
|
|
862
|
+
ref,
|
|
863
|
+
className: CellContextMenu_default.osdkCellContextMenu,
|
|
864
|
+
style: {
|
|
865
|
+
left: position.left,
|
|
866
|
+
top: position.top,
|
|
867
|
+
minWidth: position.width
|
|
868
|
+
}
|
|
869
|
+
}, renderContent(cell.row.original, cell)), document.body);
|
|
870
|
+
}
|
|
871
|
+
var useCellContextMenu = ({
|
|
872
|
+
tdRef
|
|
873
|
+
}) => {
|
|
874
|
+
const [popoverPosition, setPopoverPosition] = React7.useState(null);
|
|
875
|
+
const [isContextMenuOpen, setIsContextMenuOpen] = React7.useState(false);
|
|
876
|
+
const handleOpenContextMenu = React7.useCallback((event) => {
|
|
877
|
+
event.preventDefault();
|
|
878
|
+
event.stopPropagation();
|
|
879
|
+
if (tdRef.current) {
|
|
880
|
+
const rect = tdRef.current.getBoundingClientRect();
|
|
881
|
+
const position = {
|
|
882
|
+
left: rect.left,
|
|
883
|
+
top: rect.bottom,
|
|
884
|
+
width: rect.width
|
|
885
|
+
};
|
|
886
|
+
setPopoverPosition(position);
|
|
887
|
+
setIsContextMenuOpen(true);
|
|
888
|
+
}
|
|
889
|
+
}, [tdRef]);
|
|
890
|
+
const handleCloseContextMenu = React7.useCallback(() => {
|
|
891
|
+
setIsContextMenuOpen(false);
|
|
892
|
+
setPopoverPosition(null);
|
|
893
|
+
}, []);
|
|
894
|
+
return {
|
|
895
|
+
isContextMenuOpen,
|
|
896
|
+
handleOpenContextMenu,
|
|
897
|
+
handleCloseContextMenu,
|
|
898
|
+
popoverPosition
|
|
899
|
+
};
|
|
900
|
+
};
|
|
901
|
+
|
|
902
|
+
// src/object-table/TableCell.tsx
|
|
903
|
+
function TableCell({
|
|
904
|
+
cell,
|
|
905
|
+
renderCellContextMenu
|
|
906
|
+
}) {
|
|
907
|
+
const tdRef = React7.useRef(null);
|
|
908
|
+
const isSelectColumn = cell.column.id === SELECTION_COLUMN_ID;
|
|
909
|
+
const {
|
|
910
|
+
isContextMenuOpen,
|
|
911
|
+
handleOpenContextMenu,
|
|
912
|
+
handleCloseContextMenu,
|
|
913
|
+
popoverPosition
|
|
914
|
+
} = useCellContextMenu({
|
|
915
|
+
tdRef
|
|
916
|
+
});
|
|
917
|
+
const shouldRenderContextMenu = !isSelectColumn && isContextMenuOpen && !!popoverPosition && !!renderCellContextMenu;
|
|
918
|
+
const {
|
|
919
|
+
columnStyles
|
|
920
|
+
} = getColumnPinningStyles(cell.column);
|
|
921
|
+
return /* @__PURE__ */ React7__default.default.createElement(React7__default.default.Fragment, null, /* @__PURE__ */ React7__default.default.createElement("td", {
|
|
922
|
+
ref: tdRef,
|
|
923
|
+
"data-pinned": cell.column.getIsPinned(),
|
|
924
|
+
className: TableCell_default.osdkTableCell,
|
|
925
|
+
style: columnStyles,
|
|
926
|
+
onContextMenu: handleOpenContextMenu
|
|
927
|
+
}, /* @__PURE__ */ React7__default.default.createElement("div", {
|
|
928
|
+
className: TableCell_default.osdkTableCellContent
|
|
929
|
+
}, reactTable.flexRender(cell.column.columnDef.cell, cell.getContext()))), shouldRenderContextMenu && /* @__PURE__ */ React7__default.default.createElement(CellContextMenu, {
|
|
930
|
+
cell,
|
|
931
|
+
position: popoverPosition,
|
|
932
|
+
onClose: handleCloseContextMenu,
|
|
933
|
+
renderContent: renderCellContextMenu
|
|
934
|
+
}));
|
|
935
|
+
}
|
|
936
|
+
|
|
937
|
+
// src/object-table/TableRow.tsx
|
|
938
|
+
function TableRow({
|
|
939
|
+
row,
|
|
940
|
+
virtualRow,
|
|
941
|
+
onRowClick,
|
|
942
|
+
renderCellContextMenu
|
|
943
|
+
}) {
|
|
944
|
+
const handleClick = React7.useCallback(() => {
|
|
945
|
+
onRowClick?.(row.original);
|
|
946
|
+
}, [onRowClick, row.original]);
|
|
947
|
+
return /* @__PURE__ */ React7__default.default.createElement("tr", {
|
|
948
|
+
"data-selected": row.getIsSelected(),
|
|
949
|
+
className: TableRow_default.osdkTableRow,
|
|
950
|
+
style: {
|
|
951
|
+
height: `${virtualRow.size}px`,
|
|
952
|
+
transform: `translateY(${virtualRow.start}px)`
|
|
953
|
+
},
|
|
954
|
+
onClick: handleClick
|
|
955
|
+
}, row.getVisibleCells().map((cell) => /* @__PURE__ */ React7__default.default.createElement(TableCell, {
|
|
956
|
+
key: cell.id,
|
|
957
|
+
cell,
|
|
958
|
+
renderCellContextMenu
|
|
959
|
+
})));
|
|
960
|
+
}
|
|
961
|
+
|
|
962
|
+
// src/object-table/TableBody.tsx
|
|
963
|
+
function TableBody({
|
|
964
|
+
rows,
|
|
965
|
+
tableContainerRef,
|
|
966
|
+
onRowClick,
|
|
967
|
+
renderCellContextMenu,
|
|
968
|
+
rowHeight = 40,
|
|
969
|
+
isLoadingMore = false,
|
|
970
|
+
headerGroups = []
|
|
971
|
+
}) {
|
|
972
|
+
const rowVirtualizer = reactVirtual.useVirtualizer({
|
|
973
|
+
count: rows.length,
|
|
974
|
+
estimateSize: () => rowHeight,
|
|
975
|
+
getScrollElement: () => tableContainerRef.current,
|
|
976
|
+
overscan: 5
|
|
977
|
+
});
|
|
978
|
+
React7.useLayoutEffect(() => {
|
|
979
|
+
rowVirtualizer.measure();
|
|
980
|
+
}, [rowVirtualizer, rows.length]);
|
|
981
|
+
const totalSize = rowVirtualizer.getTotalSize();
|
|
982
|
+
const bodyHeight = isLoadingMore ? totalSize + rowHeight : totalSize;
|
|
983
|
+
const headers = headerGroups[0]?.headers ?? [];
|
|
984
|
+
return /* @__PURE__ */ React7__default.default.createElement("tbody", {
|
|
985
|
+
className: TableBody_default.osdkTableBody,
|
|
986
|
+
style: {
|
|
987
|
+
height: `${bodyHeight}px`
|
|
988
|
+
}
|
|
989
|
+
}, rowVirtualizer.getVirtualItems().map((virtualRow) => {
|
|
990
|
+
const row = rows[virtualRow.index];
|
|
991
|
+
return /* @__PURE__ */ React7__default.default.createElement(TableRow, {
|
|
992
|
+
key: row.id,
|
|
993
|
+
row,
|
|
994
|
+
virtualRow,
|
|
995
|
+
onRowClick,
|
|
996
|
+
renderCellContextMenu
|
|
997
|
+
});
|
|
998
|
+
}), isLoadingMore && /* @__PURE__ */ React7__default.default.createElement(LoadingRow, {
|
|
999
|
+
headers,
|
|
1000
|
+
translateY: totalSize,
|
|
1001
|
+
rowHeight,
|
|
1002
|
+
columnCount: headers.length
|
|
1003
|
+
}));
|
|
1004
|
+
}
|
|
1005
|
+
|
|
858
1006
|
// src/object-table/Table.tsx
|
|
859
1007
|
function BaseTable({
|
|
860
1008
|
table,
|
|
@@ -863,48 +1011,69 @@ function BaseTable({
|
|
|
863
1011
|
onRowClick,
|
|
864
1012
|
rowHeight,
|
|
865
1013
|
renderCellContextMenu,
|
|
866
|
-
className
|
|
1014
|
+
className,
|
|
1015
|
+
error
|
|
867
1016
|
}) {
|
|
868
|
-
const tableContainerRef =
|
|
869
|
-
const
|
|
870
|
-
const
|
|
871
|
-
|
|
1017
|
+
const tableContainerRef = React7.useRef(null);
|
|
1018
|
+
const [isLoadingMore, setIsLoadingMore] = React7.useState(false);
|
|
1019
|
+
const fetchingRef = React7.useRef(false);
|
|
1020
|
+
React7.useEffect(() => {
|
|
1021
|
+
if (!isLoading || fetchNextPage == null) {
|
|
1022
|
+
setIsLoadingMore(false);
|
|
1023
|
+
}
|
|
1024
|
+
}, [isLoading, fetchNextPage]);
|
|
1025
|
+
const fetchMoreOnEndReached = React7.useCallback(async (containerRefElement) => {
|
|
1026
|
+
if (containerRefElement && !fetchingRef.current && !isLoadingMore) {
|
|
872
1027
|
const {
|
|
873
1028
|
scrollHeight,
|
|
874
1029
|
scrollTop,
|
|
875
1030
|
clientHeight
|
|
876
1031
|
} = containerRefElement;
|
|
877
|
-
if (scrollHeight - scrollTop - clientHeight < 100 && !isLoading) {
|
|
1032
|
+
if (scrollHeight - scrollTop - clientHeight < 100 && !isLoading && fetchNextPage != null) {
|
|
878
1033
|
fetchingRef.current = true;
|
|
1034
|
+
setIsLoadingMore(true);
|
|
879
1035
|
try {
|
|
880
|
-
await fetchNextPage
|
|
1036
|
+
await fetchNextPage();
|
|
881
1037
|
} finally {
|
|
882
1038
|
fetchingRef.current = false;
|
|
883
1039
|
}
|
|
884
1040
|
}
|
|
885
1041
|
}
|
|
886
|
-
}, [fetchNextPage, isLoading]);
|
|
887
|
-
const handleScroll =
|
|
1042
|
+
}, [fetchNextPage, isLoading, isLoadingMore]);
|
|
1043
|
+
const handleScroll = React7.useCallback(async (e) => {
|
|
888
1044
|
await fetchMoreOnEndReached(e.currentTarget);
|
|
889
1045
|
}, [fetchMoreOnEndReached]);
|
|
890
|
-
|
|
1046
|
+
const rows = table.getRowModel().rows;
|
|
1047
|
+
const headerGroups = table.getHeaderGroups();
|
|
1048
|
+
const hasData = rows.length > 0;
|
|
1049
|
+
return /* @__PURE__ */ React7__default.default.createElement("div", {
|
|
891
1050
|
ref: tableContainerRef,
|
|
892
|
-
className:
|
|
1051
|
+
className: classNames2__default.default(Table_default.osdkTableContainer, className),
|
|
893
1052
|
onScroll: handleScroll
|
|
894
|
-
}, /* @__PURE__ */
|
|
1053
|
+
}, /* @__PURE__ */ React7__default.default.createElement("table", null, isLoading && !hasData ? /* @__PURE__ */ React7__default.default.createElement(LoadingStateTable, {
|
|
1054
|
+
table,
|
|
1055
|
+
headerGroups,
|
|
1056
|
+
rowHeight,
|
|
1057
|
+
tableContainerRef
|
|
1058
|
+
}) : /* @__PURE__ */ React7__default.default.createElement(React7__default.default.Fragment, null, /* @__PURE__ */ React7__default.default.createElement(TableHeader, {
|
|
895
1059
|
table
|
|
896
|
-
}), /* @__PURE__ */
|
|
897
|
-
|
|
1060
|
+
}), !hasData && error == null ? /* @__PURE__ */ React7__default.default.createElement(NonIdealState, {
|
|
1061
|
+
message: "No Data"
|
|
1062
|
+
}) : /* @__PURE__ */ React7__default.default.createElement(TableBody, {
|
|
1063
|
+
rows,
|
|
898
1064
|
tableContainerRef,
|
|
899
1065
|
onRowClick,
|
|
900
1066
|
rowHeight,
|
|
901
|
-
renderCellContextMenu
|
|
1067
|
+
renderCellContextMenu,
|
|
1068
|
+
isLoadingMore,
|
|
1069
|
+
headerGroups
|
|
1070
|
+
})), error != null && /* @__PURE__ */ React7__default.default.createElement(NonIdealState, {
|
|
1071
|
+
message: `Error Loading Data: ${error.message}`
|
|
902
1072
|
})));
|
|
903
1073
|
}
|
|
904
1074
|
|
|
905
1075
|
// src/object-table/ObjectTable.tsx
|
|
906
1076
|
function ObjectTable({
|
|
907
|
-
objectSet,
|
|
908
1077
|
objectType,
|
|
909
1078
|
columnDefinitions,
|
|
910
1079
|
filter,
|
|
@@ -918,7 +1087,7 @@ function ObjectTable({
|
|
|
918
1087
|
selectedRows,
|
|
919
1088
|
...props
|
|
920
1089
|
}) {
|
|
921
|
-
const [columnSizing, setColumnSizing] =
|
|
1090
|
+
const [columnSizing, setColumnSizing] = React7.useState({});
|
|
922
1091
|
const {
|
|
923
1092
|
sorting,
|
|
924
1093
|
onSortingChange
|
|
@@ -930,8 +1099,9 @@ function ObjectTable({
|
|
|
930
1099
|
const {
|
|
931
1100
|
data,
|
|
932
1101
|
fetchMore,
|
|
933
|
-
isLoading
|
|
934
|
-
|
|
1102
|
+
isLoading,
|
|
1103
|
+
error
|
|
1104
|
+
} = useObjectTableData(objectType, columnDefinitions, filter, sorting);
|
|
935
1105
|
const {
|
|
936
1106
|
columns,
|
|
937
1107
|
loading: isColumnsLoading
|
|
@@ -958,7 +1128,7 @@ function ObjectTable({
|
|
|
958
1128
|
onToggleAll,
|
|
959
1129
|
onToggleRow
|
|
960
1130
|
});
|
|
961
|
-
const allColumns =
|
|
1131
|
+
const allColumns = React7.useMemo(() => {
|
|
962
1132
|
return selectionColumn ? [selectionColumn, ...columns] : columns;
|
|
963
1133
|
}, [selectionColumn, columns]);
|
|
964
1134
|
const {
|
|
@@ -993,18 +1163,19 @@ function ObjectTable({
|
|
|
993
1163
|
},
|
|
994
1164
|
getRowId
|
|
995
1165
|
});
|
|
996
|
-
const onRenderCellContextMenu =
|
|
1166
|
+
const onRenderCellContextMenu = React7.useCallback((row, cell) => {
|
|
997
1167
|
return renderCellContextMenu?.(row, cell.getValue());
|
|
998
1168
|
}, [renderCellContextMenu]);
|
|
999
1169
|
const isTableLoading = isLoading || isColumnsLoading;
|
|
1000
|
-
return /* @__PURE__ */
|
|
1170
|
+
return /* @__PURE__ */ React7__default.default.createElement(BaseTable, {
|
|
1001
1171
|
table,
|
|
1002
1172
|
isLoading: isTableLoading,
|
|
1003
1173
|
fetchNextPage: fetchMore,
|
|
1004
1174
|
onRowClick: props.onRowClick,
|
|
1005
1175
|
rowHeight: props.rowHeight,
|
|
1006
1176
|
renderCellContextMenu: onRenderCellContextMenu,
|
|
1007
|
-
className: props.className
|
|
1177
|
+
className: props.className,
|
|
1178
|
+
error
|
|
1008
1179
|
});
|
|
1009
1180
|
}
|
|
1010
1181
|
|