@osdk/react-components 0.1.0-beta.4 → 0.1.0-beta.6
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 +26 -0
- package/build/browser/action-form/ActionFormApi.js +2 -0
- package/build/browser/action-form/ActionFormApi.js.map +1 -0
- package/build/browser/action-form/FormFieldApi.js +2 -0
- package/build/browser/action-form/FormFieldApi.js.map +1 -0
- package/build/browser/base-components/checkbox/Checkbox.module.css +1 -2
- package/build/browser/object-table/ObjectTable.js +35 -9
- 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 +1 -1
- package/build/browser/object-table/Table.js.map +1 -1
- package/build/browser/object-table/Table.module.css +1 -0
- package/build/browser/object-table/TableCell.js +7 -4
- package/build/browser/object-table/TableCell.js.map +1 -1
- package/build/browser/object-table/TableCell.module.css +18 -1
- package/build/browser/object-table/TableHeader.js +28 -13
- package/build/browser/object-table/TableHeader.js.map +1 -1
- package/build/browser/object-table/TableHeader.module.css +17 -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/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 +412 -85
- package/build/cjs/public/experimental.cjs.map +1 -1
- package/build/cjs/public/experimental.css +113 -1
- package/build/cjs/public/experimental.css.map +1 -1
- package/build/cjs/public/experimental.d.cts +25 -3
- package/build/esm/action-form/ActionFormApi.js +2 -0
- package/build/esm/action-form/ActionFormApi.js.map +1 -0
- package/build/esm/action-form/FormFieldApi.js +2 -0
- package/build/esm/action-form/FormFieldApi.js.map +1 -0
- package/build/esm/base-components/checkbox/Checkbox.module.css +1 -2
- package/build/esm/object-table/ObjectTable.js +35 -9
- 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 +1 -1
- package/build/esm/object-table/Table.js.map +1 -1
- package/build/esm/object-table/Table.module.css +1 -0
- package/build/esm/object-table/TableCell.js +7 -4
- package/build/esm/object-table/TableCell.js.map +1 -1
- package/build/esm/object-table/TableCell.module.css +18 -1
- package/build/esm/object-table/TableHeader.js +28 -13
- package/build/esm/object-table/TableHeader.js.map +1 -1
- package/build/esm/object-table/TableHeader.module.css +17 -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/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/action-form/ActionFormApi.d.ts +76 -0
- package/build/types/action-form/ActionFormApi.d.ts.map +1 -0
- package/build/types/action-form/FormFieldApi.d.ts +241 -0
- package/build/types/action-form/FormFieldApi.d.ts.map +1 -0
- 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 +10 -0
- package/build/types/object-table/ObjectTableApi.d.ts.map +1 -1
- package/build/types/object-table/Table.d.ts +2 -3
- package/build/types/object-table/Table.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/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 +5 -5
- 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,11 +436,54 @@ 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
|
+
}
|
|
360
487
|
|
|
361
488
|
// src/object-table/Table.module.css
|
|
362
489
|
var Table_default = {};
|
|
@@ -374,8 +501,8 @@ function CellContextMenu({
|
|
|
374
501
|
onClose,
|
|
375
502
|
renderContent
|
|
376
503
|
}) {
|
|
377
|
-
const ref =
|
|
378
|
-
|
|
504
|
+
const ref = React9.useRef(null);
|
|
505
|
+
React9.useEffect(() => {
|
|
379
506
|
const handleClickOutside = (event) => {
|
|
380
507
|
if (ref.current && !ref.current.contains(event.target)) {
|
|
381
508
|
onClose();
|
|
@@ -386,7 +513,7 @@ function CellContextMenu({
|
|
|
386
513
|
document.removeEventListener("mousedown", handleClickOutside);
|
|
387
514
|
};
|
|
388
515
|
}, [onClose]);
|
|
389
|
-
return /* @__PURE__ */ reactDom.createPortal(/* @__PURE__ */
|
|
516
|
+
return /* @__PURE__ */ reactDom.createPortal(/* @__PURE__ */ React9__default.default.createElement("div", {
|
|
390
517
|
ref,
|
|
391
518
|
className: CellContextMenu_default.osdkCellContextMenu,
|
|
392
519
|
style: {
|
|
@@ -399,9 +526,9 @@ function CellContextMenu({
|
|
|
399
526
|
var useCellContextMenu = ({
|
|
400
527
|
tdRef
|
|
401
528
|
}) => {
|
|
402
|
-
const [popoverPosition, setPopoverPosition] =
|
|
403
|
-
const [isContextMenuOpen, setIsContextMenuOpen] =
|
|
404
|
-
const handleOpenContextMenu =
|
|
529
|
+
const [popoverPosition, setPopoverPosition] = React9.useState(null);
|
|
530
|
+
const [isContextMenuOpen, setIsContextMenuOpen] = React9.useState(false);
|
|
531
|
+
const handleOpenContextMenu = React9.useCallback((event) => {
|
|
405
532
|
event.preventDefault();
|
|
406
533
|
event.stopPropagation();
|
|
407
534
|
if (tdRef.current) {
|
|
@@ -415,7 +542,7 @@ var useCellContextMenu = ({
|
|
|
415
542
|
setIsContextMenuOpen(true);
|
|
416
543
|
}
|
|
417
544
|
}, [tdRef]);
|
|
418
|
-
const handleCloseContextMenu =
|
|
545
|
+
const handleCloseContextMenu = React9.useCallback(() => {
|
|
419
546
|
setIsContextMenuOpen(false);
|
|
420
547
|
setPopoverPosition(null);
|
|
421
548
|
}, []);
|
|
@@ -430,12 +557,24 @@ var useCellContextMenu = ({
|
|
|
430
557
|
// src/object-table/TableCell.module.css
|
|
431
558
|
var TableCell_default = {};
|
|
432
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
|
+
|
|
433
572
|
// src/object-table/TableCell.tsx
|
|
434
573
|
function TableCell({
|
|
435
574
|
cell,
|
|
436
575
|
renderCellContextMenu
|
|
437
576
|
}) {
|
|
438
|
-
const tdRef =
|
|
577
|
+
const tdRef = React9.useRef(null);
|
|
439
578
|
const isSelectColumn = cell.column.id === SELECTION_COLUMN_ID;
|
|
440
579
|
const {
|
|
441
580
|
isContextMenuOpen,
|
|
@@ -446,16 +585,18 @@ function TableCell({
|
|
|
446
585
|
tdRef
|
|
447
586
|
});
|
|
448
587
|
const shouldRenderContextMenu = !isSelectColumn && isContextMenuOpen && !!popoverPosition && !!renderCellContextMenu;
|
|
449
|
-
|
|
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", {
|
|
450
592
|
ref: tdRef,
|
|
593
|
+
"data-pinned": cell.column.getIsPinned(),
|
|
451
594
|
className: TableCell_default.osdkTableCell,
|
|
452
|
-
style:
|
|
453
|
-
width: cell.column.getSize()
|
|
454
|
-
},
|
|
595
|
+
style: columnStyles,
|
|
455
596
|
onContextMenu: handleOpenContextMenu
|
|
456
|
-
}, /* @__PURE__ */
|
|
597
|
+
}, /* @__PURE__ */ React9__default.default.createElement("div", {
|
|
457
598
|
className: TableCell_default.osdkTableCellContent
|
|
458
|
-
}, reactTable.flexRender(cell.column.columnDef.cell, cell.getContext()))), shouldRenderContextMenu && /* @__PURE__ */
|
|
599
|
+
}, reactTable.flexRender(cell.column.columnDef.cell, cell.getContext()))), shouldRenderContextMenu && /* @__PURE__ */ React9__default.default.createElement(CellContextMenu, {
|
|
459
600
|
cell,
|
|
460
601
|
position: popoverPosition,
|
|
461
602
|
onClose: handleCloseContextMenu,
|
|
@@ -473,10 +614,10 @@ function TableRow({
|
|
|
473
614
|
onRowClick,
|
|
474
615
|
renderCellContextMenu
|
|
475
616
|
}) {
|
|
476
|
-
const handleClick =
|
|
617
|
+
const handleClick = React9.useCallback(() => {
|
|
477
618
|
onRowClick?.(row.original);
|
|
478
619
|
}, [onRowClick, row.original]);
|
|
479
|
-
return /* @__PURE__ */
|
|
620
|
+
return /* @__PURE__ */ React9__default.default.createElement("tr", {
|
|
480
621
|
"data-selected": row.getIsSelected(),
|
|
481
622
|
className: TableRow_default.osdkTableRow,
|
|
482
623
|
style: {
|
|
@@ -484,7 +625,7 @@ function TableRow({
|
|
|
484
625
|
transform: `translateY(${virtualRow.start}px)`
|
|
485
626
|
},
|
|
486
627
|
onClick: handleClick
|
|
487
|
-
}, row.getVisibleCells().map((cell) => /* @__PURE__ */
|
|
628
|
+
}, row.getVisibleCells().map((cell) => /* @__PURE__ */ React9__default.default.createElement(TableCell, {
|
|
488
629
|
key: cell.id,
|
|
489
630
|
cell,
|
|
490
631
|
renderCellContextMenu
|
|
@@ -505,17 +646,17 @@ function TableBody({
|
|
|
505
646
|
getScrollElement: () => tableContainerRef.current,
|
|
506
647
|
overscan: 5
|
|
507
648
|
});
|
|
508
|
-
|
|
649
|
+
React9.useLayoutEffect(() => {
|
|
509
650
|
rowVirtualizer.measure();
|
|
510
651
|
}, [rowVirtualizer, rows.length]);
|
|
511
|
-
return /* @__PURE__ */
|
|
652
|
+
return /* @__PURE__ */ React9__default.default.createElement("tbody", {
|
|
512
653
|
className: TableBody_default.osdkTableBody,
|
|
513
654
|
style: {
|
|
514
655
|
height: `${rowVirtualizer.getTotalSize()}px`
|
|
515
656
|
}
|
|
516
657
|
}, rowVirtualizer.getVirtualItems().map((virtualRow) => {
|
|
517
658
|
const row = rows[virtualRow.index];
|
|
518
|
-
return /* @__PURE__ */
|
|
659
|
+
return /* @__PURE__ */ React9__default.default.createElement(TableRow, {
|
|
519
660
|
key: row.id,
|
|
520
661
|
row,
|
|
521
662
|
virtualRow,
|
|
@@ -528,33 +669,194 @@ function TableBody({
|
|
|
528
669
|
// src/object-table/TableHeader.module.css
|
|
529
670
|
var TableHeader_default = {};
|
|
530
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
|
+
|
|
531
821
|
// src/object-table/TableHeader.tsx
|
|
532
822
|
function TableHeader({
|
|
533
823
|
table
|
|
534
824
|
}) {
|
|
535
825
|
const isResizing = !!table.getState().columnSizingInfo?.isResizingColumn;
|
|
536
|
-
return /* @__PURE__ */
|
|
826
|
+
return /* @__PURE__ */ React9__default.default.createElement("thead", {
|
|
537
827
|
className: TableHeader_default.osdkTableHeader,
|
|
538
828
|
"data-resizing": isResizing
|
|
539
|
-
}, table.getHeaderGroups().map((headerGroup) => /* @__PURE__ */
|
|
829
|
+
}, table.getHeaderGroups().map((headerGroup) => /* @__PURE__ */ React9__default.default.createElement("tr", {
|
|
540
830
|
key: headerGroup.id,
|
|
541
831
|
className: TableHeader_default.osdkTableHeaderRow
|
|
542
|
-
}, headerGroup.headers.map((header) =>
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
|
|
549
|
-
|
|
550
|
-
|
|
551
|
-
|
|
552
|
-
|
|
553
|
-
|
|
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", {
|
|
839
|
+
key: header.id,
|
|
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,
|
|
851
|
+
onDoubleClick: () => header.column.resetSize(),
|
|
852
|
+
onMouseDown: header.getResizeHandler(),
|
|
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,
|
|
@@ -563,9 +865,9 @@ function Table({
|
|
|
563
865
|
renderCellContextMenu,
|
|
564
866
|
className
|
|
565
867
|
}) {
|
|
566
|
-
const tableContainerRef =
|
|
567
|
-
const fetchingRef =
|
|
568
|
-
const fetchMoreOnEndReached =
|
|
868
|
+
const tableContainerRef = React9.useRef(null);
|
|
869
|
+
const fetchingRef = React9.useRef(false);
|
|
870
|
+
const fetchMoreOnEndReached = React9.useCallback(async (containerRefElement) => {
|
|
569
871
|
if (containerRefElement && !fetchingRef.current) {
|
|
570
872
|
const {
|
|
571
873
|
scrollHeight,
|
|
@@ -582,16 +884,16 @@ function Table({
|
|
|
582
884
|
}
|
|
583
885
|
}
|
|
584
886
|
}, [fetchNextPage, isLoading]);
|
|
585
|
-
const handleScroll =
|
|
887
|
+
const handleScroll = React9.useCallback(async (e) => {
|
|
586
888
|
await fetchMoreOnEndReached(e.currentTarget);
|
|
587
889
|
}, [fetchMoreOnEndReached]);
|
|
588
|
-
return /* @__PURE__ */
|
|
890
|
+
return /* @__PURE__ */ React9__default.default.createElement("div", {
|
|
589
891
|
ref: tableContainerRef,
|
|
590
|
-
className:
|
|
892
|
+
className: classNames__default.default(Table_default.osdkTableContainer, className),
|
|
591
893
|
onScroll: handleScroll
|
|
592
|
-
}, /* @__PURE__ */
|
|
894
|
+
}, /* @__PURE__ */ React9__default.default.createElement("table", null, /* @__PURE__ */ React9__default.default.createElement(TableHeader, {
|
|
593
895
|
table
|
|
594
|
-
}), /* @__PURE__ */
|
|
896
|
+
}), /* @__PURE__ */ React9__default.default.createElement(TableBody, {
|
|
595
897
|
rows: table.getRowModel().rows,
|
|
596
898
|
tableContainerRef,
|
|
597
899
|
onRowClick,
|
|
@@ -606,27 +908,37 @@ function ObjectTable({
|
|
|
606
908
|
objectType,
|
|
607
909
|
columnDefinitions,
|
|
608
910
|
filter,
|
|
911
|
+
orderBy,
|
|
912
|
+
defaultOrderBy,
|
|
913
|
+
onOrderByChanged,
|
|
914
|
+
onColumnsPinnedChanged,
|
|
609
915
|
onRowSelection,
|
|
610
916
|
renderCellContextMenu,
|
|
611
917
|
selectionMode = "none",
|
|
612
918
|
selectedRows,
|
|
613
919
|
...props
|
|
614
920
|
}) {
|
|
921
|
+
const [columnSizing, setColumnSizing] = React9.useState({});
|
|
922
|
+
const {
|
|
923
|
+
sorting,
|
|
924
|
+
onSortingChange
|
|
925
|
+
} = useTableSorting({
|
|
926
|
+
orderBy,
|
|
927
|
+
defaultOrderBy,
|
|
928
|
+
onOrderByChanged
|
|
929
|
+
});
|
|
615
930
|
const {
|
|
616
931
|
data,
|
|
617
932
|
fetchMore,
|
|
618
933
|
isLoading
|
|
619
|
-
} = useObjectTableData(objectSet, columnDefinitions, filter);
|
|
934
|
+
} = useObjectTableData(objectSet, columnDefinitions, filter, sorting);
|
|
620
935
|
const {
|
|
621
936
|
columns,
|
|
622
937
|
loading: isColumnsLoading
|
|
623
938
|
} = useColumnDefs(objectType, columnDefinitions);
|
|
624
|
-
const {
|
|
625
|
-
columnVisibility
|
|
626
|
-
} = useDefaultTableStates({
|
|
939
|
+
const columnVisibility = useColumnVisibility({
|
|
627
940
|
columnDefinitions
|
|
628
941
|
});
|
|
629
|
-
const [columnSizing, setColumnSizing] = React5.useState({});
|
|
630
942
|
const {
|
|
631
943
|
rowSelection,
|
|
632
944
|
isAllSelected,
|
|
@@ -646,9 +958,17 @@ function ObjectTable({
|
|
|
646
958
|
onToggleAll,
|
|
647
959
|
onToggleRow
|
|
648
960
|
});
|
|
649
|
-
const allColumns =
|
|
961
|
+
const allColumns = React9.useMemo(() => {
|
|
650
962
|
return selectionColumn ? [selectionColumn, ...columns] : columns;
|
|
651
963
|
}, [selectionColumn, columns]);
|
|
964
|
+
const {
|
|
965
|
+
columnPinning,
|
|
966
|
+
onColumnPinningChange
|
|
967
|
+
} = useColumnPinning({
|
|
968
|
+
columnDefinitions,
|
|
969
|
+
hasSelectionColumn: selectionColumn != null,
|
|
970
|
+
onColumnsPinnedChanged
|
|
971
|
+
});
|
|
652
972
|
const table = reactTable.useReactTable({
|
|
653
973
|
data: data ?? [],
|
|
654
974
|
columns: allColumns,
|
|
@@ -656,22 +976,28 @@ function ObjectTable({
|
|
|
656
976
|
state: {
|
|
657
977
|
columnVisibility,
|
|
658
978
|
rowSelection,
|
|
659
|
-
|
|
979
|
+
sorting,
|
|
980
|
+
columnSizing,
|
|
981
|
+
columnPinning
|
|
660
982
|
},
|
|
983
|
+
onSortingChange,
|
|
661
984
|
onColumnSizingChange: setColumnSizing,
|
|
985
|
+
onColumnPinningChange,
|
|
662
986
|
enableRowSelection: selectionMode !== "none",
|
|
663
987
|
columnResizeMode: "onChange",
|
|
664
988
|
columnResizeDirection: "ltr",
|
|
989
|
+
manualSorting: true,
|
|
990
|
+
// Enable manual sorting to indicate server-side sorting
|
|
665
991
|
defaultColumn: {
|
|
666
992
|
minSize: 80
|
|
667
993
|
},
|
|
668
994
|
getRowId
|
|
669
995
|
});
|
|
670
|
-
const onRenderCellContextMenu =
|
|
996
|
+
const onRenderCellContextMenu = React9.useCallback((row, cell) => {
|
|
671
997
|
return renderCellContextMenu?.(row, cell.getValue());
|
|
672
998
|
}, [renderCellContextMenu]);
|
|
673
999
|
const isTableLoading = isLoading || isColumnsLoading;
|
|
674
|
-
return /* @__PURE__ */
|
|
1000
|
+
return /* @__PURE__ */ React9__default.default.createElement(BaseTable, {
|
|
675
1001
|
table,
|
|
676
1002
|
isLoading: isTableLoading,
|
|
677
1003
|
fetchNextPage: fetchMore,
|
|
@@ -682,6 +1008,7 @@ function ObjectTable({
|
|
|
682
1008
|
});
|
|
683
1009
|
}
|
|
684
1010
|
|
|
1011
|
+
exports.BaseTable = BaseTable;
|
|
685
1012
|
exports.ObjectTable = ObjectTable;
|
|
686
1013
|
//# sourceMappingURL=experimental.cjs.map
|
|
687
1014
|
//# sourceMappingURL=experimental.cjs.map
|