@osdk/react-components 0.1.0-beta.3 → 0.1.0-beta.5
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 +28 -0
- package/build/browser/base-components/checkbox/Checkbox.module.css +11 -10
- package/build/browser/object-table/CellContextMenu.js +2 -2
- package/build/browser/object-table/CellContextMenu.js.map +1 -1
- package/build/browser/object-table/CellContextMenu.module.css +20 -0
- package/build/browser/object-table/ObjectTable.js +37 -10
- 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 +7 -16
- package/build/browser/object-table/Table.js.map +1 -1
- package/build/browser/object-table/Table.module.css +22 -0
- package/build/browser/object-table/TableBody.js +2 -2
- package/build/browser/object-table/TableBody.js.map +1 -1
- package/build/browser/object-table/TableBody.module.css +20 -0
- package/build/browser/object-table/TableCell.js +12 -7
- package/build/browser/object-table/TableCell.js.map +1 -1
- package/build/browser/object-table/TableCell.module.css +63 -0
- package/build/browser/object-table/TableHeader.js +35 -38
- package/build/browser/object-table/TableHeader.js.map +1 -1
- package/build/browser/object-table/TableHeader.module.css +95 -0
- package/build/browser/object-table/TableHeaderContent.js +27 -0
- package/build/browser/object-table/TableHeaderContent.js.map +1 -0
- package/build/browser/object-table/TableHeaderContent.module.css +30 -0
- package/build/browser/object-table/TableHeaderWithPopover.js +155 -0
- package/build/browser/object-table/TableHeaderWithPopover.js.map +1 -0
- package/build/browser/object-table/TableHeaderWithPopover.module.css +105 -0
- package/build/browser/object-table/TableRow.js +4 -3
- package/build/browser/object-table/TableRow.js.map +1 -1
- package/build/browser/object-table/TableRow.module.css +60 -0
- package/build/browser/object-table/hooks/__tests__/useColumnPinning.test.js +266 -0
- package/build/browser/object-table/hooks/__tests__/useColumnPinning.test.js.map +1 -0
- package/build/browser/object-table/hooks/__tests__/{useDefaultTableStates.test.js → useColumnVisibility.test.js} +16 -16
- package/build/browser/object-table/hooks/__tests__/useColumnVisibility.test.js.map +1 -0
- package/build/browser/object-table/hooks/__tests__/useSelectionColumn.test.js +2 -1
- package/build/browser/object-table/hooks/__tests__/useSelectionColumn.test.js.map +1 -1
- package/build/browser/object-table/hooks/__tests__/useTableSorting.test.js +211 -0
- package/build/browser/object-table/hooks/__tests__/useTableSorting.test.js.map +1 -0
- package/build/browser/object-table/hooks/useColumnPinning.js +95 -0
- package/build/browser/object-table/hooks/useColumnPinning.js.map +1 -0
- package/build/{esm/object-table/hooks/useDefaultTableStates.js → browser/object-table/hooks/useColumnVisibility.js} +3 -5
- package/build/browser/object-table/hooks/useColumnVisibility.js.map +1 -0
- package/build/browser/object-table/hooks/useObjectTableData.js +15 -3
- package/build/browser/object-table/hooks/useObjectTableData.js.map +1 -1
- package/build/browser/object-table/hooks/useSelectionColumn.js +3 -2
- package/build/browser/object-table/hooks/useSelectionColumn.js.map +1 -1
- package/build/browser/object-table/hooks/useTableSorting.js +66 -0
- package/build/browser/object-table/hooks/useTableSorting.js.map +1 -0
- package/build/browser/object-table/utils/constants.js +18 -0
- package/build/browser/object-table/utils/constants.js.map +1 -0
- package/build/browser/object-table/utils/getColumnPinningStyles.js +27 -0
- package/build/browser/object-table/utils/getColumnPinningStyles.js.map +1 -0
- package/build/browser/public/experimental.js +4 -0
- package/build/browser/public/experimental.js.map +1 -1
- package/build/cjs/public/experimental.cjs +446 -129
- package/build/cjs/public/experimental.cjs.map +1 -1
- package/build/cjs/public/experimental.css +248 -4
- package/build/cjs/public/experimental.css.map +1 -1
- package/build/cjs/public/experimental.d.cts +26 -3
- package/build/esm/base-components/checkbox/Checkbox.module.css +11 -10
- package/build/esm/object-table/CellContextMenu.js +2 -2
- package/build/esm/object-table/CellContextMenu.js.map +1 -1
- package/build/esm/object-table/CellContextMenu.module.css +20 -0
- package/build/esm/object-table/ObjectTable.js +37 -10
- 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 +7 -16
- package/build/esm/object-table/Table.js.map +1 -1
- package/build/esm/object-table/Table.module.css +22 -0
- package/build/esm/object-table/TableBody.js +2 -2
- package/build/esm/object-table/TableBody.js.map +1 -1
- package/build/esm/object-table/TableBody.module.css +20 -0
- package/build/esm/object-table/TableCell.js +12 -7
- package/build/esm/object-table/TableCell.js.map +1 -1
- package/build/esm/object-table/TableCell.module.css +63 -0
- package/build/esm/object-table/TableHeader.js +35 -38
- package/build/esm/object-table/TableHeader.js.map +1 -1
- package/build/esm/object-table/TableHeader.module.css +95 -0
- package/build/esm/object-table/TableHeaderContent.js +27 -0
- package/build/esm/object-table/TableHeaderContent.js.map +1 -0
- package/build/esm/object-table/TableHeaderContent.module.css +30 -0
- package/build/esm/object-table/TableHeaderWithPopover.js +155 -0
- package/build/esm/object-table/TableHeaderWithPopover.js.map +1 -0
- package/build/esm/object-table/TableHeaderWithPopover.module.css +105 -0
- package/build/esm/object-table/TableRow.js +4 -3
- package/build/esm/object-table/TableRow.js.map +1 -1
- package/build/esm/object-table/TableRow.module.css +60 -0
- package/build/esm/object-table/hooks/__tests__/useColumnPinning.test.js +266 -0
- package/build/esm/object-table/hooks/__tests__/useColumnPinning.test.js.map +1 -0
- package/build/esm/object-table/hooks/__tests__/{useDefaultTableStates.test.js → useColumnVisibility.test.js} +16 -16
- package/build/esm/object-table/hooks/__tests__/useColumnVisibility.test.js.map +1 -0
- package/build/esm/object-table/hooks/__tests__/useSelectionColumn.test.js +2 -1
- package/build/esm/object-table/hooks/__tests__/useSelectionColumn.test.js.map +1 -1
- package/build/esm/object-table/hooks/__tests__/useTableSorting.test.js +211 -0
- package/build/esm/object-table/hooks/__tests__/useTableSorting.test.js.map +1 -0
- package/build/esm/object-table/hooks/useColumnPinning.js +95 -0
- package/build/esm/object-table/hooks/useColumnPinning.js.map +1 -0
- package/build/{browser/object-table/hooks/useDefaultTableStates.js → esm/object-table/hooks/useColumnVisibility.js} +3 -5
- package/build/esm/object-table/hooks/useColumnVisibility.js.map +1 -0
- package/build/esm/object-table/hooks/useObjectTableData.js +15 -3
- package/build/esm/object-table/hooks/useObjectTableData.js.map +1 -1
- package/build/esm/object-table/hooks/useSelectionColumn.js +3 -2
- package/build/esm/object-table/hooks/useSelectionColumn.js.map +1 -1
- package/build/esm/object-table/hooks/useTableSorting.js +66 -0
- package/build/esm/object-table/hooks/useTableSorting.js.map +1 -0
- package/build/esm/object-table/utils/constants.js +18 -0
- package/build/esm/object-table/utils/constants.js.map +1 -0
- package/build/esm/object-table/utils/getColumnPinningStyles.js +27 -0
- package/build/esm/object-table/utils/getColumnPinningStyles.js.map +1 -0
- package/build/esm/public/experimental.js +4 -0
- package/build/esm/public/experimental.js.map +1 -1
- package/build/types/object-table/CellContextMenu.d.ts.map +1 -1
- package/build/types/object-table/ObjectTable.d.ts +1 -1
- package/build/types/object-table/ObjectTable.d.ts.map +1 -1
- package/build/types/object-table/ObjectTableApi.d.ts +11 -0
- package/build/types/object-table/ObjectTableApi.d.ts.map +1 -1
- package/build/types/object-table/Table.d.ts +3 -3
- package/build/types/object-table/Table.d.ts.map +1 -1
- package/build/types/object-table/TableBody.d.ts.map +1 -1
- package/build/types/object-table/TableCell.d.ts.map +1 -1
- package/build/types/object-table/TableHeader.d.ts.map +1 -1
- package/build/types/object-table/TableHeaderContent.d.ts +7 -0
- package/build/types/object-table/TableHeaderContent.d.ts.map +1 -0
- package/build/types/object-table/TableHeaderWithPopover.d.ts +13 -0
- package/build/types/object-table/TableHeaderWithPopover.d.ts.map +1 -0
- package/build/types/object-table/TableRow.d.ts.map +1 -1
- package/build/types/object-table/hooks/__tests__/useColumnPinning.test.d.ts.map +1 -0
- package/build/types/object-table/hooks/__tests__/useColumnVisibility.test.d.ts +1 -0
- package/build/types/object-table/hooks/__tests__/useColumnVisibility.test.d.ts.map +1 -0
- package/build/types/object-table/hooks/__tests__/useTableSorting.test.d.ts +1 -0
- package/build/types/object-table/hooks/__tests__/useTableSorting.test.d.ts.map +1 -0
- package/build/types/object-table/hooks/useColumnPinning.d.ts +22 -0
- package/build/types/object-table/hooks/useColumnPinning.d.ts.map +1 -0
- package/build/types/object-table/hooks/{useDefaultTableStates.d.ts → useColumnVisibility.d.ts} +3 -6
- package/build/types/object-table/hooks/useColumnVisibility.d.ts.map +1 -0
- package/build/types/object-table/hooks/useObjectTableData.d.ts +2 -1
- package/build/types/object-table/hooks/useObjectTableData.d.ts.map +1 -1
- package/build/types/object-table/hooks/useSelectionColumn.d.ts +0 -1
- package/build/types/object-table/hooks/useSelectionColumn.d.ts.map +1 -1
- package/build/types/object-table/hooks/useTableSorting.d.ts +22 -0
- package/build/types/object-table/hooks/useTableSorting.d.ts.map +1 -0
- package/build/types/object-table/utils/constants.d.ts +1 -0
- package/build/types/object-table/utils/constants.d.ts.map +1 -0
- package/build/types/object-table/utils/getColumnPinningStyles.d.ts +7 -0
- package/build/types/object-table/utils/getColumnPinningStyles.d.ts.map +1 -0
- package/build/types/public/experimental.d.ts +2 -0
- package/build/types/public/experimental.d.ts.map +1 -1
- package/package.json +8 -8
- package/build/browser/object-table/hooks/__tests__/useDefaultTableStates.test.js.map +0 -1
- package/build/browser/object-table/hooks/useDefaultTableStates.js.map +0 -1
- package/build/esm/object-table/hooks/__tests__/useDefaultTableStates.test.js.map +0 -1
- package/build/esm/object-table/hooks/useDefaultTableStates.js.map +0 -1
- package/build/types/object-table/hooks/__tests__/useDefaultTableStates.test.d.ts.map +0 -1
- package/build/types/object-table/hooks/useDefaultTableStates.d.ts.map +0 -1
- /package/build/types/object-table/hooks/__tests__/{useDefaultTableStates.test.d.ts → useColumnPinning.test.d.ts} +0 -0
|
@@ -1,19 +1,20 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
3
|
var reactTable = require('@tanstack/react-table');
|
|
4
|
-
var
|
|
4
|
+
var React9 = 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 classNames = require('classnames');
|
|
10
10
|
var reactVirtual = require('@tanstack/react-virtual');
|
|
11
11
|
var reactDom = require('react-dom');
|
|
12
|
+
var menu = require('@base-ui/react/menu');
|
|
12
13
|
|
|
13
14
|
function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
|
|
14
15
|
|
|
15
|
-
var
|
|
16
|
-
var
|
|
16
|
+
var React9__default = /*#__PURE__*/_interopDefault(React9);
|
|
17
|
+
var classNames__default = /*#__PURE__*/_interopDefault(classNames);
|
|
17
18
|
|
|
18
19
|
// src/object-table/ObjectTable.tsx
|
|
19
20
|
function useColumnDefs(objectType, columnDefinitions) {
|
|
@@ -22,7 +23,7 @@ function useColumnDefs(objectType, columnDefinitions) {
|
|
|
22
23
|
loading,
|
|
23
24
|
error
|
|
24
25
|
} = react.useOsdkMetadata(objectType);
|
|
25
|
-
const columns =
|
|
26
|
+
const columns = React9.useMemo(() => {
|
|
26
27
|
const objectProperties = metadata?.properties;
|
|
27
28
|
if (columnDefinitions) {
|
|
28
29
|
return getColumnsFromColumnDefinitions(columnDefinitions, objectProperties);
|
|
@@ -78,10 +79,86 @@ function getDefaultColumns(objectProperties) {
|
|
|
78
79
|
return colDef;
|
|
79
80
|
});
|
|
80
81
|
}
|
|
81
|
-
|
|
82
|
+
|
|
83
|
+
// src/object-table/utils/constants.ts
|
|
84
|
+
var SELECTION_COLUMN_ID = "__selection__";
|
|
85
|
+
|
|
86
|
+
// src/object-table/hooks/useColumnPinning.ts
|
|
87
|
+
var useColumnPinning = ({
|
|
88
|
+
columnDefinitions,
|
|
89
|
+
hasSelectionColumn,
|
|
90
|
+
onColumnsPinnedChanged
|
|
91
|
+
}) => {
|
|
92
|
+
const [columnPinning, setColumnPinning] = React9.useState({
|
|
93
|
+
left: [],
|
|
94
|
+
right: []
|
|
95
|
+
});
|
|
96
|
+
React9.useEffect(() => {
|
|
97
|
+
const defaultState = getColumnPinningStateFromColumnDefs(columnDefinitions);
|
|
98
|
+
const selectionCol = hasSelectionColumn ? [SELECTION_COLUMN_ID] : [];
|
|
99
|
+
setColumnPinning({
|
|
100
|
+
left: [...selectionCol, ...defaultState.left ?? []],
|
|
101
|
+
right: [...defaultState.right ?? []]
|
|
102
|
+
});
|
|
103
|
+
}, [columnDefinitions, hasSelectionColumn]);
|
|
104
|
+
const onColumnPinningChange = React9.useCallback((updater) => {
|
|
105
|
+
setColumnPinning((prev) => {
|
|
106
|
+
const newPinning = typeof updater === "function" ? updater(prev) : updater;
|
|
107
|
+
if (onColumnsPinnedChanged) {
|
|
108
|
+
const newStates = convertColumnPinningStateToArray(newPinning);
|
|
109
|
+
const stateWithoutSelectionCol = newStates.filter((state) => state.columnId !== SELECTION_COLUMN_ID);
|
|
110
|
+
onColumnsPinnedChanged(stateWithoutSelectionCol);
|
|
111
|
+
}
|
|
112
|
+
return newPinning;
|
|
113
|
+
});
|
|
114
|
+
}, [onColumnsPinnedChanged]);
|
|
115
|
+
return {
|
|
116
|
+
columnPinning,
|
|
117
|
+
onColumnPinningChange
|
|
118
|
+
};
|
|
119
|
+
};
|
|
120
|
+
var getColumnPinningStateFromColumnDefs = (columnDefinitions) => {
|
|
121
|
+
if (!columnDefinitions) {
|
|
122
|
+
return {};
|
|
123
|
+
}
|
|
124
|
+
const columnPinningState = columnDefinitions.reduce((acc, {
|
|
125
|
+
locator,
|
|
126
|
+
pinned
|
|
127
|
+
}) => {
|
|
128
|
+
const colKey = locator.id.toString();
|
|
129
|
+
const isPinned = pinned != null && pinned !== "none";
|
|
130
|
+
if (!isPinned) {
|
|
131
|
+
return acc;
|
|
132
|
+
}
|
|
133
|
+
if (pinned === "left") {
|
|
134
|
+
return {
|
|
135
|
+
...acc,
|
|
136
|
+
left: [...acc.left ?? [], colKey]
|
|
137
|
+
};
|
|
138
|
+
}
|
|
139
|
+
return {
|
|
140
|
+
...acc,
|
|
141
|
+
right: [...acc.right ?? [], colKey]
|
|
142
|
+
};
|
|
143
|
+
}, {
|
|
144
|
+
left: [],
|
|
145
|
+
right: []
|
|
146
|
+
});
|
|
147
|
+
return columnPinningState;
|
|
148
|
+
};
|
|
149
|
+
function convertColumnPinningStateToArray(pinningState) {
|
|
150
|
+
return [...(pinningState.left ?? []).map((columnId) => ({
|
|
151
|
+
columnId,
|
|
152
|
+
pinned: "left"
|
|
153
|
+
})), ...(pinningState.right ?? []).map((columnId) => ({
|
|
154
|
+
columnId,
|
|
155
|
+
pinned: "right"
|
|
156
|
+
}))];
|
|
157
|
+
}
|
|
158
|
+
var useColumnVisibility = ({
|
|
82
159
|
columnDefinitions
|
|
83
160
|
}) => {
|
|
84
|
-
const columnVisibility =
|
|
161
|
+
const columnVisibility = React9.useMemo(() => {
|
|
85
162
|
if (columnDefinitions) {
|
|
86
163
|
const colVisibility = columnDefinitions.reduce((acc, colDef) => {
|
|
87
164
|
if (colDef.isVisible !== void 0) {
|
|
@@ -99,13 +176,20 @@ var useDefaultTableStates = ({
|
|
|
99
176
|
return colVisibility;
|
|
100
177
|
}
|
|
101
178
|
}, [columnDefinitions]);
|
|
102
|
-
return
|
|
103
|
-
columnVisibility
|
|
104
|
-
};
|
|
179
|
+
return columnVisibility;
|
|
105
180
|
};
|
|
106
181
|
var PAGE_SIZE = 50;
|
|
107
|
-
function useObjectTableData(objectSet, columnDefinitions, filter) {
|
|
108
|
-
const
|
|
182
|
+
function useObjectTableData(objectSet, columnDefinitions, filter, sorting) {
|
|
183
|
+
const orderBy = React9.useMemo(() => {
|
|
184
|
+
if (!sorting || sorting.length === 0) {
|
|
185
|
+
return void 0;
|
|
186
|
+
}
|
|
187
|
+
return sorting.reduce((acc, sort) => {
|
|
188
|
+
acc[sort.id] = sort.desc ? "desc" : "asc";
|
|
189
|
+
return acc;
|
|
190
|
+
}, {});
|
|
191
|
+
}, [sorting]);
|
|
192
|
+
const withProperties = React9.useMemo(() => {
|
|
109
193
|
if (!columnDefinitions) {
|
|
110
194
|
return;
|
|
111
195
|
}
|
|
@@ -122,7 +206,8 @@ function useObjectTableData(objectSet, columnDefinitions, filter) {
|
|
|
122
206
|
return experimental.useObjectSet(objectSet, {
|
|
123
207
|
withProperties,
|
|
124
208
|
pageSize: PAGE_SIZE,
|
|
125
|
-
where: filter
|
|
209
|
+
where: filter,
|
|
210
|
+
orderBy
|
|
126
211
|
});
|
|
127
212
|
}
|
|
128
213
|
|
|
@@ -139,11 +224,11 @@ function useRowSelection({
|
|
|
139
224
|
onRowSelection,
|
|
140
225
|
data
|
|
141
226
|
}) {
|
|
142
|
-
const [internalRowSelection, setInternalRowSelection] =
|
|
143
|
-
const [lastSelectedRowIndex, setLastSelectedRowIndex] =
|
|
227
|
+
const [internalRowSelection, setInternalRowSelection] = React9.useState({});
|
|
228
|
+
const [lastSelectedRowIndex, setLastSelectedRowIndex] = React9.useState(null);
|
|
144
229
|
const isControlled = selectedRows !== void 0;
|
|
145
230
|
const isSelectionEnabled = selectionMode !== "none";
|
|
146
|
-
const rowSelectionState =
|
|
231
|
+
const rowSelectionState = React9.useMemo(() => {
|
|
147
232
|
if (!isSelectionEnabled) return {};
|
|
148
233
|
if (isControlled && selectedRows) {
|
|
149
234
|
return getRowSelectionState(selectedRows);
|
|
@@ -154,7 +239,7 @@ function useRowSelection({
|
|
|
154
239
|
const totalCount = data?.length ?? 0;
|
|
155
240
|
const isAllSelected = totalCount > 0 && selectedCount === totalCount;
|
|
156
241
|
const hasSelection = selectedCount > 0;
|
|
157
|
-
const onToggleAll =
|
|
242
|
+
const onToggleAll = React9.useCallback(() => {
|
|
158
243
|
if (!isSelectionEnabled || !data) return;
|
|
159
244
|
const newSelectedRows = isAllSelected ? [] : data.map((item) => item.$primaryKey);
|
|
160
245
|
if (!isControlled) {
|
|
@@ -162,7 +247,7 @@ function useRowSelection({
|
|
|
162
247
|
}
|
|
163
248
|
onRowSelection?.(newSelectedRows);
|
|
164
249
|
}, [isSelectionEnabled, data, isAllSelected, isControlled, onRowSelection]);
|
|
165
|
-
const onToggleRow =
|
|
250
|
+
const onToggleRow = React9.useCallback((rowId, rowIndex, isShiftClick = false) => {
|
|
166
251
|
if (!isSelectionEnabled || !data) return;
|
|
167
252
|
let newSelectedRows = [];
|
|
168
253
|
if (selectionMode === "single") {
|
|
@@ -284,14 +369,14 @@ function Checkbox({
|
|
|
284
369
|
indicatorProps,
|
|
285
370
|
...rest
|
|
286
371
|
}) {
|
|
287
|
-
return /* @__PURE__ */
|
|
288
|
-
className:
|
|
372
|
+
return /* @__PURE__ */ React9__default.default.createElement(checkbox.Checkbox.Root, _extends({
|
|
373
|
+
className: classNames__default.default(Checkbox_default.osdkCheckboxRoot, className),
|
|
289
374
|
indeterminate
|
|
290
|
-
}, rest), /* @__PURE__ */
|
|
291
|
-
className:
|
|
292
|
-
}), indeterminate ? /* @__PURE__ */
|
|
375
|
+
}, rest), /* @__PURE__ */ React9__default.default.createElement(checkbox.Checkbox.Indicator, _extends({}, indicatorProps, {
|
|
376
|
+
className: classNames__default.default(Checkbox_default.osdkCheckboxIndicator, indicatorProps?.className)
|
|
377
|
+
}), indeterminate ? /* @__PURE__ */ React9__default.default.createElement(icons.Minus, {
|
|
293
378
|
color: "currentColor"
|
|
294
|
-
}) : /* @__PURE__ */
|
|
379
|
+
}) : /* @__PURE__ */ React9__default.default.createElement(icons.Tick, {
|
|
295
380
|
color: "currentColor"
|
|
296
381
|
})));
|
|
297
382
|
}
|
|
@@ -302,7 +387,7 @@ function SelectionHeaderCell({
|
|
|
302
387
|
hasSelection,
|
|
303
388
|
onToggleAll
|
|
304
389
|
}) {
|
|
305
|
-
return /* @__PURE__ */
|
|
390
|
+
return /* @__PURE__ */ React9__default.default.createElement(Checkbox, {
|
|
306
391
|
indeterminate: hasSelection && !isAllSelected,
|
|
307
392
|
checked: isAllSelected,
|
|
308
393
|
onCheckedChange: onToggleAll,
|
|
@@ -313,11 +398,11 @@ function SelectionCell({
|
|
|
313
398
|
row,
|
|
314
399
|
onToggleRow
|
|
315
400
|
}) {
|
|
316
|
-
const handleClick =
|
|
401
|
+
const handleClick = React9.useCallback((event) => {
|
|
317
402
|
const isShiftClick = event.shiftKey;
|
|
318
403
|
onToggleRow(row.id, row.index, isShiftClick);
|
|
319
404
|
}, [row, onToggleRow]);
|
|
320
|
-
return /* @__PURE__ */
|
|
405
|
+
return /* @__PURE__ */ React9__default.default.createElement(Checkbox, {
|
|
321
406
|
checked: row.getIsSelected(),
|
|
322
407
|
onClick: handleClick,
|
|
323
408
|
"aria-label": `Select row ${row.index + 1}`
|
|
@@ -325,7 +410,6 @@ function SelectionCell({
|
|
|
325
410
|
}
|
|
326
411
|
|
|
327
412
|
// src/object-table/hooks/useSelectionColumn.tsx
|
|
328
|
-
var SELECTION_COLUMN_ID = "__selection__";
|
|
329
413
|
var useSelectionColumn = ({
|
|
330
414
|
selectionMode,
|
|
331
415
|
isAllSelected,
|
|
@@ -333,18 +417,18 @@ var useSelectionColumn = ({
|
|
|
333
417
|
onToggleAll,
|
|
334
418
|
onToggleRow
|
|
335
419
|
}) => {
|
|
336
|
-
const selectionColumn =
|
|
420
|
+
const selectionColumn = React9.useMemo(() => {
|
|
337
421
|
if (selectionMode === "none") return null;
|
|
338
|
-
|
|
422
|
+
const colDef = {
|
|
339
423
|
id: SELECTION_COLUMN_ID,
|
|
340
|
-
header: () => selectionMode === "multiple" ? /* @__PURE__ */
|
|
424
|
+
header: () => selectionMode === "multiple" ? /* @__PURE__ */ React9__default.default.createElement(SelectionHeaderCell, {
|
|
341
425
|
isAllSelected,
|
|
342
426
|
hasSelection,
|
|
343
427
|
onToggleAll
|
|
344
428
|
}) : null,
|
|
345
429
|
cell: ({
|
|
346
430
|
row
|
|
347
|
-
}) => /* @__PURE__ */
|
|
431
|
+
}) => /* @__PURE__ */ React9__default.default.createElement(SelectionCell, {
|
|
348
432
|
row,
|
|
349
433
|
onToggleRow
|
|
350
434
|
}),
|
|
@@ -352,19 +436,73 @@ var useSelectionColumn = ({
|
|
|
352
436
|
minSize: 50,
|
|
353
437
|
maxSize: 50,
|
|
354
438
|
enableSorting: false,
|
|
355
|
-
enableResizing: false
|
|
439
|
+
enableResizing: false,
|
|
440
|
+
enablePinning: false
|
|
356
441
|
};
|
|
442
|
+
return colDef;
|
|
357
443
|
}, [selectionMode, isAllSelected, hasSelection, onToggleAll, onToggleRow]);
|
|
358
444
|
return selectionColumn;
|
|
359
445
|
};
|
|
446
|
+
var useTableSorting = ({
|
|
447
|
+
orderBy,
|
|
448
|
+
defaultOrderBy,
|
|
449
|
+
onOrderByChanged
|
|
450
|
+
}) => {
|
|
451
|
+
const [internalSorting, setInternalSorting] = React9.useState(() => defaultOrderBy ? convertOrderByToSortingState(defaultOrderBy) : []);
|
|
452
|
+
const isControlled = orderBy !== void 0;
|
|
453
|
+
const sortingState = React9.useMemo(() => orderBy ? convertOrderByToSortingState(orderBy) : internalSorting, [orderBy, internalSorting]);
|
|
454
|
+
const onSortingChange = React9.useCallback((updater) => {
|
|
455
|
+
const newSorting = typeof updater === "function" ? updater(sortingState) : updater;
|
|
456
|
+
if (!isControlled) {
|
|
457
|
+
setInternalSorting(newSorting);
|
|
458
|
+
}
|
|
459
|
+
if (onOrderByChanged) {
|
|
460
|
+
const newOrderBy = convertSortingStateToOrderBy(newSorting);
|
|
461
|
+
onOrderByChanged(newOrderBy);
|
|
462
|
+
}
|
|
463
|
+
}, [isControlled, sortingState, onOrderByChanged]);
|
|
464
|
+
return {
|
|
465
|
+
sorting: sortingState,
|
|
466
|
+
onSortingChange
|
|
467
|
+
};
|
|
468
|
+
};
|
|
469
|
+
function convertOrderByToSortingState(orderBy) {
|
|
470
|
+
return orderBy.map(({
|
|
471
|
+
property,
|
|
472
|
+
direction
|
|
473
|
+
}) => ({
|
|
474
|
+
id: property,
|
|
475
|
+
desc: direction === "desc"
|
|
476
|
+
}));
|
|
477
|
+
}
|
|
478
|
+
function convertSortingStateToOrderBy(sorting) {
|
|
479
|
+
return sorting.map(({
|
|
480
|
+
id,
|
|
481
|
+
desc
|
|
482
|
+
}) => ({
|
|
483
|
+
property: id,
|
|
484
|
+
direction: desc ? "desc" : "asc"
|
|
485
|
+
}));
|
|
486
|
+
}
|
|
487
|
+
|
|
488
|
+
// src/object-table/Table.module.css
|
|
489
|
+
var Table_default = {};
|
|
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
|
|
360
498
|
function CellContextMenu({
|
|
361
499
|
cell,
|
|
362
500
|
position,
|
|
363
501
|
onClose,
|
|
364
502
|
renderContent
|
|
365
503
|
}) {
|
|
366
|
-
const ref =
|
|
367
|
-
|
|
504
|
+
const ref = React9.useRef(null);
|
|
505
|
+
React9.useEffect(() => {
|
|
368
506
|
const handleClickOutside = (event) => {
|
|
369
507
|
if (ref.current && !ref.current.contains(event.target)) {
|
|
370
508
|
onClose();
|
|
@@ -375,11 +513,10 @@ function CellContextMenu({
|
|
|
375
513
|
document.removeEventListener("mousedown", handleClickOutside);
|
|
376
514
|
};
|
|
377
515
|
}, [onClose]);
|
|
378
|
-
return /* @__PURE__ */ reactDom.createPortal(/* @__PURE__ */
|
|
516
|
+
return /* @__PURE__ */ reactDom.createPortal(/* @__PURE__ */ React9__default.default.createElement("div", {
|
|
379
517
|
ref,
|
|
518
|
+
className: CellContextMenu_default.osdkCellContextMenu,
|
|
380
519
|
style: {
|
|
381
|
-
position: "fixed",
|
|
382
|
-
zIndex: 9999,
|
|
383
520
|
left: position.left,
|
|
384
521
|
top: position.top,
|
|
385
522
|
minWidth: position.width
|
|
@@ -389,9 +526,9 @@ function CellContextMenu({
|
|
|
389
526
|
var useCellContextMenu = ({
|
|
390
527
|
tdRef
|
|
391
528
|
}) => {
|
|
392
|
-
const [popoverPosition, setPopoverPosition] =
|
|
393
|
-
const [isContextMenuOpen, setIsContextMenuOpen] =
|
|
394
|
-
const handleOpenContextMenu =
|
|
529
|
+
const [popoverPosition, setPopoverPosition] = React9.useState(null);
|
|
530
|
+
const [isContextMenuOpen, setIsContextMenuOpen] = React9.useState(false);
|
|
531
|
+
const handleOpenContextMenu = React9.useCallback((event) => {
|
|
395
532
|
event.preventDefault();
|
|
396
533
|
event.stopPropagation();
|
|
397
534
|
if (tdRef.current) {
|
|
@@ -405,7 +542,7 @@ var useCellContextMenu = ({
|
|
|
405
542
|
setIsContextMenuOpen(true);
|
|
406
543
|
}
|
|
407
544
|
}, [tdRef]);
|
|
408
|
-
const handleCloseContextMenu =
|
|
545
|
+
const handleCloseContextMenu = React9.useCallback(() => {
|
|
409
546
|
setIsContextMenuOpen(false);
|
|
410
547
|
setPopoverPosition(null);
|
|
411
548
|
}, []);
|
|
@@ -417,12 +554,27 @@ var useCellContextMenu = ({
|
|
|
417
554
|
};
|
|
418
555
|
};
|
|
419
556
|
|
|
557
|
+
// src/object-table/TableCell.module.css
|
|
558
|
+
var TableCell_default = {};
|
|
559
|
+
|
|
560
|
+
// src/object-table/utils/getColumnPinningStyles.ts
|
|
561
|
+
function getColumnPinningStyles(column) {
|
|
562
|
+
const isPinned = column.getIsPinned();
|
|
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
|
+
|
|
420
572
|
// src/object-table/TableCell.tsx
|
|
421
573
|
function TableCell({
|
|
422
574
|
cell,
|
|
423
575
|
renderCellContextMenu
|
|
424
576
|
}) {
|
|
425
|
-
const tdRef =
|
|
577
|
+
const tdRef = React9.useRef(null);
|
|
426
578
|
const isSelectColumn = cell.column.id === SELECTION_COLUMN_ID;
|
|
427
579
|
const {
|
|
428
580
|
isContextMenuOpen,
|
|
@@ -433,15 +585,18 @@ function TableCell({
|
|
|
433
585
|
tdRef
|
|
434
586
|
});
|
|
435
587
|
const shouldRenderContextMenu = !isSelectColumn && isContextMenuOpen && !!popoverPosition && !!renderCellContextMenu;
|
|
436
|
-
|
|
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", {
|
|
437
592
|
ref: tdRef,
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
width: cell.column.getSize()
|
|
442
|
-
},
|
|
593
|
+
"data-pinned": cell.column.getIsPinned(),
|
|
594
|
+
className: TableCell_default.osdkTableCell,
|
|
595
|
+
style: columnStyles,
|
|
443
596
|
onContextMenu: handleOpenContextMenu
|
|
444
|
-
},
|
|
597
|
+
}, /* @__PURE__ */ React9__default.default.createElement("div", {
|
|
598
|
+
className: TableCell_default.osdkTableCellContent
|
|
599
|
+
}, reactTable.flexRender(cell.column.columnDef.cell, cell.getContext()))), shouldRenderContextMenu && /* @__PURE__ */ React9__default.default.createElement(CellContextMenu, {
|
|
445
600
|
cell,
|
|
446
601
|
position: popoverPosition,
|
|
447
602
|
onClose: handleCloseContextMenu,
|
|
@@ -449,6 +604,9 @@ function TableCell({
|
|
|
449
604
|
}));
|
|
450
605
|
}
|
|
451
606
|
|
|
607
|
+
// src/object-table/TableRow.module.css
|
|
608
|
+
var TableRow_default = {};
|
|
609
|
+
|
|
452
610
|
// src/object-table/TableRow.tsx
|
|
453
611
|
function TableRow({
|
|
454
612
|
row,
|
|
@@ -456,18 +614,18 @@ function TableRow({
|
|
|
456
614
|
onRowClick,
|
|
457
615
|
renderCellContextMenu
|
|
458
616
|
}) {
|
|
459
|
-
const handleClick =
|
|
617
|
+
const handleClick = React9.useCallback(() => {
|
|
460
618
|
onRowClick?.(row.original);
|
|
461
619
|
}, [onRowClick, row.original]);
|
|
462
|
-
return /* @__PURE__ */
|
|
620
|
+
return /* @__PURE__ */ React9__default.default.createElement("tr", {
|
|
621
|
+
"data-selected": row.getIsSelected(),
|
|
622
|
+
className: TableRow_default.osdkTableRow,
|
|
463
623
|
style: {
|
|
464
|
-
position: "absolute",
|
|
465
624
|
height: `${virtualRow.size}px`,
|
|
466
|
-
transform: `translateY(${virtualRow.start}px)
|
|
467
|
-
display: "flex"
|
|
625
|
+
transform: `translateY(${virtualRow.start}px)`
|
|
468
626
|
},
|
|
469
627
|
onClick: handleClick
|
|
470
|
-
}, row.getVisibleCells().map((cell) => /* @__PURE__ */
|
|
628
|
+
}, row.getVisibleCells().map((cell) => /* @__PURE__ */ React9__default.default.createElement(TableCell, {
|
|
471
629
|
key: cell.id,
|
|
472
630
|
cell,
|
|
473
631
|
renderCellContextMenu
|
|
@@ -488,18 +646,17 @@ function TableBody({
|
|
|
488
646
|
getScrollElement: () => tableContainerRef.current,
|
|
489
647
|
overscan: 5
|
|
490
648
|
});
|
|
491
|
-
|
|
649
|
+
React9.useLayoutEffect(() => {
|
|
492
650
|
rowVirtualizer.measure();
|
|
493
651
|
}, [rowVirtualizer, rows.length]);
|
|
494
|
-
return /* @__PURE__ */
|
|
652
|
+
return /* @__PURE__ */ React9__default.default.createElement("tbody", {
|
|
653
|
+
className: TableBody_default.osdkTableBody,
|
|
495
654
|
style: {
|
|
496
|
-
display: "grid",
|
|
497
|
-
position: "relative",
|
|
498
655
|
height: `${rowVirtualizer.getTotalSize()}px`
|
|
499
656
|
}
|
|
500
657
|
}, rowVirtualizer.getVirtualItems().map((virtualRow) => {
|
|
501
658
|
const row = rows[virtualRow.index];
|
|
502
|
-
return /* @__PURE__ */
|
|
659
|
+
return /* @__PURE__ */ React9__default.default.createElement(TableRow, {
|
|
503
660
|
key: row.id,
|
|
504
661
|
row,
|
|
505
662
|
virtualRow,
|
|
@@ -508,63 +665,209 @@ function TableBody({
|
|
|
508
665
|
});
|
|
509
666
|
}));
|
|
510
667
|
}
|
|
668
|
+
|
|
669
|
+
// src/object-table/TableHeader.module.css
|
|
670
|
+
var TableHeader_default = {};
|
|
671
|
+
|
|
672
|
+
// src/object-table/TableHeaderContent.module.css
|
|
673
|
+
var TableHeaderContent_default = {};
|
|
674
|
+
|
|
675
|
+
// src/object-table/TableHeaderContent.tsx
|
|
676
|
+
function TableHeaderContent({
|
|
677
|
+
header
|
|
678
|
+
}) {
|
|
679
|
+
return /* @__PURE__ */ React9__default.default.createElement("div", {
|
|
680
|
+
className: TableHeaderContent_default.osdkHeaderContent
|
|
681
|
+
}, reactTable.flexRender(header.column.columnDef.header, header.getContext()));
|
|
682
|
+
}
|
|
683
|
+
|
|
684
|
+
// src/object-table/TableHeaderWithPopover.module.css
|
|
685
|
+
var TableHeaderWithPopover_default = {};
|
|
686
|
+
|
|
687
|
+
// src/object-table/TableHeaderWithPopover.tsx
|
|
688
|
+
function HeaderMenuItem({
|
|
689
|
+
onClick,
|
|
690
|
+
icon: Icon,
|
|
691
|
+
label,
|
|
692
|
+
active = false
|
|
693
|
+
}) {
|
|
694
|
+
return /* @__PURE__ */ React9__default.default.createElement(menu.Menu.Item, {
|
|
695
|
+
closeOnClick: true,
|
|
696
|
+
className: classNames__default.default(TableHeaderWithPopover_default.osdkCenterContainer, TableHeaderWithPopover_default.osdkContentGap, TableHeaderWithPopover_default.osdkHeaderMenuItem, active && TableHeaderWithPopover_default.osdkHeaderActiveMenuItem),
|
|
697
|
+
onClick
|
|
698
|
+
}, /* @__PURE__ */ React9__default.default.createElement(Icon, {
|
|
699
|
+
className: TableHeaderWithPopover_default.osdkHeaderIcon,
|
|
700
|
+
color: "currentColor"
|
|
701
|
+
}), /* @__PURE__ */ React9__default.default.createElement("span", null, label));
|
|
702
|
+
}
|
|
703
|
+
function TableHeaderWithPopover({
|
|
704
|
+
header,
|
|
705
|
+
isColumnPinned,
|
|
706
|
+
setColumnPinning,
|
|
707
|
+
onSortChange,
|
|
708
|
+
onResetSize
|
|
709
|
+
}) {
|
|
710
|
+
const [isOpen, setIsOpen] = React9.useState(false);
|
|
711
|
+
const handlePinLeft = React9.useCallback(() => {
|
|
712
|
+
setColumnPinning((prev) => {
|
|
713
|
+
return {
|
|
714
|
+
left: [...prev.left || [], header.column.id],
|
|
715
|
+
right: prev.right?.filter((id) => id !== header.column.id) || []
|
|
716
|
+
};
|
|
717
|
+
});
|
|
718
|
+
}, [header.column.id, setColumnPinning]);
|
|
719
|
+
const handleUnpin = React9.useCallback(() => {
|
|
720
|
+
setColumnPinning((prev) => {
|
|
721
|
+
return {
|
|
722
|
+
left: prev.left?.filter((id) => id !== header.column.id) || [],
|
|
723
|
+
right: prev.right?.filter((id) => id !== header.column.id) || []
|
|
724
|
+
};
|
|
725
|
+
});
|
|
726
|
+
}, [header.column.id, setColumnPinning]);
|
|
727
|
+
const handleSortAscending = React9.useCallback(() => {
|
|
728
|
+
header.column.toggleSorting(false);
|
|
729
|
+
onSortChange?.([{
|
|
730
|
+
id: header.column.id,
|
|
731
|
+
desc: false
|
|
732
|
+
}]);
|
|
733
|
+
}, [header.column, onSortChange]);
|
|
734
|
+
const handleSortDescending = React9.useCallback(() => {
|
|
735
|
+
header.column.toggleSorting(true);
|
|
736
|
+
onSortChange?.([{
|
|
737
|
+
id: header.column.id,
|
|
738
|
+
desc: true
|
|
739
|
+
}]);
|
|
740
|
+
}, [header.column, onSortChange]);
|
|
741
|
+
const handleClearAllSorts = React9.useCallback(() => {
|
|
742
|
+
header.column.clearSorting();
|
|
743
|
+
onSortChange?.([]);
|
|
744
|
+
}, [header.column, onSortChange]);
|
|
745
|
+
const handleResetSize = React9.useCallback(() => {
|
|
746
|
+
header.column.resetSize();
|
|
747
|
+
if (onResetSize) {
|
|
748
|
+
onResetSize();
|
|
749
|
+
}
|
|
750
|
+
}, [header.column, onResetSize]);
|
|
751
|
+
const handleInteraction = React9.useCallback((e) => {
|
|
752
|
+
e.preventDefault();
|
|
753
|
+
setIsOpen((prev) => !prev);
|
|
754
|
+
}, []);
|
|
755
|
+
const isSorted = header.column.getIsSorted();
|
|
756
|
+
const isSortable = header.column.getCanSort();
|
|
757
|
+
return /* @__PURE__ */ React9__default.default.createElement(menu.Menu.Root, {
|
|
758
|
+
open: isOpen,
|
|
759
|
+
onOpenChange: setIsOpen
|
|
760
|
+
}, /* @__PURE__ */ React9__default.default.createElement("div", {
|
|
761
|
+
className: classNames__default.default(TableHeaderWithPopover_default.osdkCenterContainer, TableHeaderWithPopover_default.osdkContentGap, TableHeaderWithPopover_default.osdkHeaderContainer),
|
|
762
|
+
onContextMenu: handleInteraction
|
|
763
|
+
}, /* @__PURE__ */ React9__default.default.createElement("div", {
|
|
764
|
+
className: classNames__default.default(TableHeaderWithPopover_default.osdkCenterContainer, TableHeaderWithPopover_default.osdkContentGap, TableHeaderWithPopover_default.osdkHeaderContentLeft)
|
|
765
|
+
}, isColumnPinned && /* @__PURE__ */ React9__default.default.createElement(icons.Pin, {
|
|
766
|
+
className: TableHeaderWithPopover_default.osdkHeaderIcon,
|
|
767
|
+
color: "currentColor"
|
|
768
|
+
}), /* @__PURE__ */ React9__default.default.createElement(TableHeaderContent, {
|
|
769
|
+
header
|
|
770
|
+
})), /* @__PURE__ */ React9__default.default.createElement("div", {
|
|
771
|
+
className: classNames__default.default(TableHeaderWithPopover_default.osdkCenterContainer, TableHeaderWithPopover_default.osdkContentGap, TableHeaderWithPopover_default.osdkHeaderContentRight)
|
|
772
|
+
}, isSorted && /* @__PURE__ */ React9__default.default.createElement("div", {
|
|
773
|
+
className: TableHeaderWithPopover_default.osdkCenterContainer
|
|
774
|
+
}, isSorted === "asc" ? /* @__PURE__ */ React9__default.default.createElement(icons.SortAlphabetical, {
|
|
775
|
+
className: TableHeaderWithPopover_default.osdkHeaderIcon,
|
|
776
|
+
color: "currentColor"
|
|
777
|
+
}) : /* @__PURE__ */ React9__default.default.createElement(icons.SortAlphabeticalDesc, {
|
|
778
|
+
className: TableHeaderWithPopover_default.osdkHeaderIcon,
|
|
779
|
+
color: "currentColor"
|
|
780
|
+
})), /* @__PURE__ */ React9__default.default.createElement(menu.Menu.Trigger, {
|
|
781
|
+
"aria-label": `Open header menu for column with id=${header.column.id}`,
|
|
782
|
+
className: classNames__default.default(TableHeaderWithPopover_default.osdkCenterContainer, TableHeaderWithPopover_default.osdkHeaderPopoverTrigger)
|
|
783
|
+
}, /* @__PURE__ */ React9__default.default.createElement(icons.ChevronDown, {
|
|
784
|
+
className: TableHeaderWithPopover_default.osdkHeaderIcon
|
|
785
|
+
}))), /* @__PURE__ */ React9__default.default.createElement(menu.Menu.Portal, {
|
|
786
|
+
container: document.body
|
|
787
|
+
}, /* @__PURE__ */ React9__default.default.createElement(menu.Menu.Positioner, {
|
|
788
|
+
sideOffset: 4
|
|
789
|
+
}, /* @__PURE__ */ React9__default.default.createElement(menu.Menu.Popup, {
|
|
790
|
+
className: TableHeaderWithPopover_default.osdkHeaderPopup
|
|
791
|
+
}, !isColumnPinned && /* @__PURE__ */ React9__default.default.createElement(HeaderMenuItem, {
|
|
792
|
+
onClick: handlePinLeft,
|
|
793
|
+
icon: icons.Pin,
|
|
794
|
+
label: "Pin column"
|
|
795
|
+
}), isColumnPinned && /* @__PURE__ */ React9__default.default.createElement(HeaderMenuItem, {
|
|
796
|
+
onClick: handleUnpin,
|
|
797
|
+
icon: icons.Unpin,
|
|
798
|
+
label: "Unpin Column",
|
|
799
|
+
active: true
|
|
800
|
+
}), isSortable && /* @__PURE__ */ React9__default.default.createElement(React9__default.default.Fragment, null, /* @__PURE__ */ React9__default.default.createElement(HeaderMenuItem, {
|
|
801
|
+
onClick: handleSortAscending,
|
|
802
|
+
icon: icons.SortAlphabetical,
|
|
803
|
+
label: "Sort ascending",
|
|
804
|
+
active: isSorted === "asc"
|
|
805
|
+
}), /* @__PURE__ */ React9__default.default.createElement(HeaderMenuItem, {
|
|
806
|
+
onClick: handleSortDescending,
|
|
807
|
+
icon: icons.SortAlphabeticalDesc,
|
|
808
|
+
label: "Sort descending",
|
|
809
|
+
active: isSorted === "desc"
|
|
810
|
+
})), !!isSorted && /* @__PURE__ */ React9__default.default.createElement(HeaderMenuItem, {
|
|
811
|
+
onClick: handleClearAllSorts,
|
|
812
|
+
icon: icons.Remove,
|
|
813
|
+
label: "Clear all sorts"
|
|
814
|
+
}), /* @__PURE__ */ React9__default.default.createElement(HeaderMenuItem, {
|
|
815
|
+
onClick: handleResetSize,
|
|
816
|
+
icon: icons.VerticalDistribution,
|
|
817
|
+
label: "Reset Column Size"
|
|
818
|
+
}))))));
|
|
819
|
+
}
|
|
820
|
+
|
|
821
|
+
// src/object-table/TableHeader.tsx
|
|
511
822
|
function TableHeader({
|
|
512
823
|
table
|
|
513
824
|
}) {
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
zIndex: 1
|
|
520
|
-
}
|
|
521
|
-
}, table.getHeaderGroups().map((headerGroup) => /* @__PURE__ */ React__default.default.createElement("tr", {
|
|
825
|
+
const isResizing = !!table.getState().columnSizingInfo?.isResizingColumn;
|
|
826
|
+
return /* @__PURE__ */ React9__default.default.createElement("thead", {
|
|
827
|
+
className: TableHeader_default.osdkTableHeader,
|
|
828
|
+
"data-resizing": isResizing
|
|
829
|
+
}, table.getHeaderGroups().map((headerGroup) => /* @__PURE__ */ React9__default.default.createElement("tr", {
|
|
522
830
|
key: headerGroup.id,
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
|
|
831
|
+
className: TableHeader_default.osdkTableHeaderRow
|
|
832
|
+
}, headerGroup.headers.map((header) => {
|
|
833
|
+
const {
|
|
834
|
+
columnStyles
|
|
835
|
+
} = getColumnPinningStyles(header.column);
|
|
836
|
+
const isColumnPinned = header.column.getIsPinned();
|
|
837
|
+
const isSelectColumn = header.id === SELECTION_COLUMN_ID;
|
|
838
|
+
return /* @__PURE__ */ React9__default.default.createElement("th", {
|
|
529
839
|
key: header.id,
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
|
|
840
|
+
"data-pinned": header.column.getIsPinned(),
|
|
841
|
+
className: TableHeader_default.osdkTableHeaderCell,
|
|
842
|
+
style: columnStyles
|
|
843
|
+
}, header.isPlaceholder ? null : isSelectColumn ? /* @__PURE__ */ React9__default.default.createElement(TableHeaderContent, {
|
|
844
|
+
header
|
|
845
|
+
}) : /* @__PURE__ */ React9__default.default.createElement(TableHeaderWithPopover, {
|
|
846
|
+
header,
|
|
847
|
+
isColumnPinned,
|
|
848
|
+
setColumnPinning: table.setColumnPinning
|
|
849
|
+
}), header.column.getCanResize() && /* @__PURE__ */ React9__default.default.createElement("div", {
|
|
850
|
+
className: TableHeader_default.osdkTableHeaderResizer,
|
|
538
851
|
onDoubleClick: () => header.column.resetSize(),
|
|
539
852
|
onMouseDown: header.getResizeHandler(),
|
|
540
|
-
onTouchStart: header.getResizeHandler()
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
right: 0,
|
|
544
|
-
top: 0,
|
|
545
|
-
height: "100%",
|
|
546
|
-
width: "3px",
|
|
547
|
-
cursor: "col-resize",
|
|
548
|
-
touchAction: "none",
|
|
549
|
-
zIndex: 11,
|
|
550
|
-
transform: header.column.getIsResizing() ? `translateX(${table.getState().columnSizingInfo.deltaOffset ?? 0}px)` : ""
|
|
551
|
-
}
|
|
552
|
-
}))
|
|
553
|
-
)))));
|
|
853
|
+
onTouchStart: header.getResizeHandler()
|
|
854
|
+
}));
|
|
855
|
+
}))));
|
|
554
856
|
}
|
|
555
857
|
|
|
556
858
|
// src/object-table/Table.tsx
|
|
557
|
-
function
|
|
859
|
+
function BaseTable({
|
|
558
860
|
table,
|
|
559
861
|
isLoading,
|
|
560
862
|
fetchNextPage,
|
|
561
863
|
onRowClick,
|
|
562
864
|
rowHeight,
|
|
563
|
-
renderCellContextMenu
|
|
865
|
+
renderCellContextMenu,
|
|
866
|
+
className
|
|
564
867
|
}) {
|
|
565
|
-
const tableContainerRef =
|
|
566
|
-
const fetchingRef =
|
|
567
|
-
const fetchMoreOnEndReached =
|
|
868
|
+
const tableContainerRef = React9.useRef(null);
|
|
869
|
+
const fetchingRef = React9.useRef(false);
|
|
870
|
+
const fetchMoreOnEndReached = React9.useCallback(async (containerRefElement) => {
|
|
568
871
|
if (containerRefElement && !fetchingRef.current) {
|
|
569
872
|
const {
|
|
570
873
|
scrollHeight,
|
|
@@ -581,28 +884,16 @@ function Table({
|
|
|
581
884
|
}
|
|
582
885
|
}
|
|
583
886
|
}, [fetchNextPage, isLoading]);
|
|
584
|
-
const handleScroll =
|
|
887
|
+
const handleScroll = React9.useCallback(async (e) => {
|
|
585
888
|
await fetchMoreOnEndReached(e.currentTarget);
|
|
586
889
|
}, [fetchMoreOnEndReached]);
|
|
587
|
-
return /* @__PURE__ */
|
|
890
|
+
return /* @__PURE__ */ React9__default.default.createElement("div", {
|
|
588
891
|
ref: tableContainerRef,
|
|
589
|
-
|
|
590
|
-
position: "relative",
|
|
591
|
-
// needed for sticky header
|
|
592
|
-
height: "100%",
|
|
593
|
-
// needed for scrolling
|
|
594
|
-
overflow: "auto",
|
|
595
|
-
cursor: table.getState().columnSizingInfo?.isResizingColumn ? "col-resize" : "default",
|
|
596
|
-
userSelect: table.getState().columnSizingInfo?.isResizingColumn ? "none" : "auto"
|
|
597
|
-
},
|
|
892
|
+
className: classNames__default.default(Table_default.osdkTableContainer, className),
|
|
598
893
|
onScroll: handleScroll
|
|
599
|
-
}, /* @__PURE__ */
|
|
600
|
-
style: {
|
|
601
|
-
display: "grid"
|
|
602
|
-
}
|
|
603
|
-
}, /* @__PURE__ */ React__default.default.createElement(TableHeader, {
|
|
894
|
+
}, /* @__PURE__ */ React9__default.default.createElement("table", null, /* @__PURE__ */ React9__default.default.createElement(TableHeader, {
|
|
604
895
|
table
|
|
605
|
-
}), /* @__PURE__ */
|
|
896
|
+
}), /* @__PURE__ */ React9__default.default.createElement(TableBody, {
|
|
606
897
|
rows: table.getRowModel().rows,
|
|
607
898
|
tableContainerRef,
|
|
608
899
|
onRowClick,
|
|
@@ -617,27 +908,37 @@ function ObjectTable({
|
|
|
617
908
|
objectType,
|
|
618
909
|
columnDefinitions,
|
|
619
910
|
filter,
|
|
911
|
+
orderBy,
|
|
912
|
+
defaultOrderBy,
|
|
913
|
+
onOrderByChanged,
|
|
914
|
+
onColumnsPinnedChanged,
|
|
620
915
|
onRowSelection,
|
|
621
916
|
renderCellContextMenu,
|
|
622
917
|
selectionMode = "none",
|
|
623
918
|
selectedRows,
|
|
624
919
|
...props
|
|
625
920
|
}) {
|
|
921
|
+
const [columnSizing, setColumnSizing] = React9.useState({});
|
|
922
|
+
const {
|
|
923
|
+
sorting,
|
|
924
|
+
onSortingChange
|
|
925
|
+
} = useTableSorting({
|
|
926
|
+
orderBy,
|
|
927
|
+
defaultOrderBy,
|
|
928
|
+
onOrderByChanged
|
|
929
|
+
});
|
|
626
930
|
const {
|
|
627
931
|
data,
|
|
628
932
|
fetchMore,
|
|
629
933
|
isLoading
|
|
630
|
-
} = useObjectTableData(objectSet, columnDefinitions, filter);
|
|
934
|
+
} = useObjectTableData(objectSet, columnDefinitions, filter, sorting);
|
|
631
935
|
const {
|
|
632
936
|
columns,
|
|
633
937
|
loading: isColumnsLoading
|
|
634
938
|
} = useColumnDefs(objectType, columnDefinitions);
|
|
635
|
-
const {
|
|
636
|
-
columnVisibility
|
|
637
|
-
} = useDefaultTableStates({
|
|
939
|
+
const columnVisibility = useColumnVisibility({
|
|
638
940
|
columnDefinitions
|
|
639
941
|
});
|
|
640
|
-
const [columnSizing, setColumnSizing] = React.useState({});
|
|
641
942
|
const {
|
|
642
943
|
rowSelection,
|
|
643
944
|
isAllSelected,
|
|
@@ -657,9 +958,17 @@ function ObjectTable({
|
|
|
657
958
|
onToggleAll,
|
|
658
959
|
onToggleRow
|
|
659
960
|
});
|
|
660
|
-
const allColumns =
|
|
961
|
+
const allColumns = React9.useMemo(() => {
|
|
661
962
|
return selectionColumn ? [selectionColumn, ...columns] : columns;
|
|
662
963
|
}, [selectionColumn, columns]);
|
|
964
|
+
const {
|
|
965
|
+
columnPinning,
|
|
966
|
+
onColumnPinningChange
|
|
967
|
+
} = useColumnPinning({
|
|
968
|
+
columnDefinitions,
|
|
969
|
+
hasSelectionColumn: selectionColumn != null,
|
|
970
|
+
onColumnsPinnedChanged
|
|
971
|
+
});
|
|
663
972
|
const table = reactTable.useReactTable({
|
|
664
973
|
data: data ?? [],
|
|
665
974
|
columns: allColumns,
|
|
@@ -667,31 +976,39 @@ function ObjectTable({
|
|
|
667
976
|
state: {
|
|
668
977
|
columnVisibility,
|
|
669
978
|
rowSelection,
|
|
670
|
-
|
|
979
|
+
sorting,
|
|
980
|
+
columnSizing,
|
|
981
|
+
columnPinning
|
|
671
982
|
},
|
|
983
|
+
onSortingChange,
|
|
672
984
|
onColumnSizingChange: setColumnSizing,
|
|
985
|
+
onColumnPinningChange,
|
|
673
986
|
enableRowSelection: selectionMode !== "none",
|
|
674
987
|
columnResizeMode: "onChange",
|
|
675
988
|
columnResizeDirection: "ltr",
|
|
989
|
+
manualSorting: true,
|
|
990
|
+
// Enable manual sorting to indicate server-side sorting
|
|
676
991
|
defaultColumn: {
|
|
677
992
|
minSize: 80
|
|
678
993
|
},
|
|
679
994
|
getRowId
|
|
680
995
|
});
|
|
681
|
-
const onRenderCellContextMenu =
|
|
996
|
+
const onRenderCellContextMenu = React9.useCallback((row, cell) => {
|
|
682
997
|
return renderCellContextMenu?.(row, cell.getValue());
|
|
683
998
|
}, [renderCellContextMenu]);
|
|
684
999
|
const isTableLoading = isLoading || isColumnsLoading;
|
|
685
|
-
return /* @__PURE__ */
|
|
1000
|
+
return /* @__PURE__ */ React9__default.default.createElement(BaseTable, {
|
|
686
1001
|
table,
|
|
687
1002
|
isLoading: isTableLoading,
|
|
688
1003
|
fetchNextPage: fetchMore,
|
|
689
1004
|
onRowClick: props.onRowClick,
|
|
690
1005
|
rowHeight: props.rowHeight,
|
|
691
|
-
renderCellContextMenu: onRenderCellContextMenu
|
|
1006
|
+
renderCellContextMenu: onRenderCellContextMenu,
|
|
1007
|
+
className: props.className
|
|
692
1008
|
});
|
|
693
1009
|
}
|
|
694
1010
|
|
|
1011
|
+
exports.BaseTable = BaseTable;
|
|
695
1012
|
exports.ObjectTable = ObjectTable;
|
|
696
1013
|
//# sourceMappingURL=experimental.cjs.map
|
|
697
1014
|
//# sourceMappingURL=experimental.cjs.map
|