@osdk/react-components 0.1.0-beta.3 → 0.1.0-beta.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +13 -0
- package/build/browser/base-components/checkbox/Checkbox.module.css +10 -8
- 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 +2 -1
- 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 +6 -15
- package/build/browser/object-table/Table.js.map +1 -1
- package/build/browser/object-table/Table.module.css +21 -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 +5 -3
- package/build/browser/object-table/TableCell.js.map +1 -1
- package/build/browser/object-table/TableCell.module.css +46 -0
- package/build/browser/object-table/TableHeader.js +12 -30
- package/build/browser/object-table/TableHeader.js.map +1 -1
- package/build/browser/object-table/TableHeader.module.css +78 -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/cjs/public/experimental.cjs +98 -108
- package/build/cjs/public/experimental.cjs.map +1 -1
- package/build/cjs/public/experimental.css +136 -4
- package/build/cjs/public/experimental.css.map +1 -1
- package/build/cjs/public/experimental.d.cts +1 -0
- package/build/esm/base-components/checkbox/Checkbox.module.css +10 -8
- 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 +2 -1
- 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 +6 -15
- package/build/esm/object-table/Table.js.map +1 -1
- package/build/esm/object-table/Table.module.css +21 -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 +5 -3
- package/build/esm/object-table/TableCell.js.map +1 -1
- package/build/esm/object-table/TableCell.module.css +46 -0
- package/build/esm/object-table/TableHeader.js +12 -30
- package/build/esm/object-table/TableHeader.js.map +1 -1
- package/build/esm/object-table/TableHeader.module.css +78 -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/types/object-table/CellContextMenu.d.ts.map +1 -1
- package/build/types/object-table/ObjectTableApi.d.ts +1 -0
- package/build/types/object-table/ObjectTableApi.d.ts.map +1 -1
- package/build/types/object-table/Table.d.ts +2 -1
- package/build/types/object-table/Table.d.ts.map +1 -1
- package/build/types/object-table/TableBody.d.ts.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/TableRow.d.ts.map +1 -1
- package/package.json +8 -8
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright 2025 Palantir Technologies, Inc. All rights reserved.
|
|
3
|
+
*
|
|
4
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
* you may not use this file except in compliance with the License.
|
|
6
|
+
* You may obtain a copy of the License at
|
|
7
|
+
*
|
|
8
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
*
|
|
10
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
* See the License for the specific language governing permissions and
|
|
14
|
+
* limitations under the License.
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
.osdkTableHeader {
|
|
18
|
+
display: grid;
|
|
19
|
+
position: sticky;
|
|
20
|
+
top: 0;
|
|
21
|
+
z-index: var(--bp-surface-zIndex-1);
|
|
22
|
+
background-color: var(--osdk-table-header-bg);
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
.osdkTableHeader[data-resizing="true"] {
|
|
26
|
+
cursor: col-resize;
|
|
27
|
+
user-select: none;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
.osdkTableHeaderRow {
|
|
31
|
+
display: flex;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
.osdkTableHeaderCell {
|
|
35
|
+
display: flex;
|
|
36
|
+
align-items: center;
|
|
37
|
+
text-align: left;
|
|
38
|
+
position: relative;
|
|
39
|
+
padding: var(--osdk-table-cell-padding);
|
|
40
|
+
font-weight: var(--osdk-table-header-fontWeight);
|
|
41
|
+
font-size: var(--osdk-table-header-fontSize);
|
|
42
|
+
color: var(--osdk-table-header-color);
|
|
43
|
+
border-top: var(--osdk-table-border);
|
|
44
|
+
border-right: var(--osdk-table-header-divider);
|
|
45
|
+
background-color: inherit;
|
|
46
|
+
|
|
47
|
+
&:first-child {
|
|
48
|
+
border-left: var(--osdk-table-border);
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
&:last-child {
|
|
52
|
+
border-right: var(--osdk-table-border);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
.osdkTableHeaderCell:has([role="checkbox"]) {
|
|
57
|
+
justify-content: center;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
.osdkTableHeaderResizer {
|
|
61
|
+
background: none;
|
|
62
|
+
cursor: col-resize;
|
|
63
|
+
height: 100%;
|
|
64
|
+
position: absolute;
|
|
65
|
+
right: calc(-1 * var(--osdk-table-border-width));
|
|
66
|
+
top: 0;
|
|
67
|
+
touch-action: none;
|
|
68
|
+
width: 3px;
|
|
69
|
+
z-index: var(--bp-surface-zIndex-2);
|
|
70
|
+
|
|
71
|
+
&:hover {
|
|
72
|
+
background: var(--bp-intent-primary-hover);
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
&:active {
|
|
76
|
+
background: var(--bp-intent-primary-active);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
@@ -16,6 +16,7 @@
|
|
|
16
16
|
|
|
17
17
|
import React, { useCallback } from "react";
|
|
18
18
|
import { TableCell } from "./TableCell.js";
|
|
19
|
+
import styles from "./TableRow.module.css";
|
|
19
20
|
export function TableRow({
|
|
20
21
|
row,
|
|
21
22
|
virtualRow,
|
|
@@ -26,11 +27,11 @@ export function TableRow({
|
|
|
26
27
|
onRowClick?.(row.original);
|
|
27
28
|
}, [onRowClick, row.original]);
|
|
28
29
|
return /*#__PURE__*/React.createElement("tr", {
|
|
30
|
+
"data-selected": row.getIsSelected(),
|
|
31
|
+
className: styles.osdkTableRow,
|
|
29
32
|
style: {
|
|
30
|
-
position: "absolute",
|
|
31
33
|
height: `${virtualRow.size}px`,
|
|
32
|
-
transform: `translateY(${virtualRow.start}px)
|
|
33
|
-
display: "flex"
|
|
34
|
+
transform: `translateY(${virtualRow.start}px)`
|
|
34
35
|
},
|
|
35
36
|
onClick: handleClick
|
|
36
37
|
}, row.getVisibleCells().map(cell => /*#__PURE__*/React.createElement(TableCell, {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TableRow.js","names":["React","useCallback","TableCell","TableRow","row","virtualRow","onRowClick","renderCellContextMenu","handleClick","original","createElement","
|
|
1
|
+
{"version":3,"file":"TableRow.js","names":["React","useCallback","TableCell","styles","TableRow","row","virtualRow","onRowClick","renderCellContextMenu","handleClick","original","createElement","getIsSelected","className","osdkTableRow","style","height","size","transform","start","onClick","getVisibleCells","map","cell","key","id"],"sources":["TableRow.tsx"],"sourcesContent":["/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport type { Cell, Row, RowData } from \"@tanstack/react-table\";\nimport type { VirtualItem } from \"@tanstack/react-virtual\";\nimport React, { useCallback } from \"react\";\nimport { TableCell } from \"./TableCell.js\";\nimport styles from \"./TableRow.module.css\";\n\ninterface TableRowProps<TData extends RowData> {\n row: Row<TData>;\n virtualRow: VirtualItem;\n onRowClick?: (row: TData) => void;\n renderCellContextMenu?: (\n row: TData,\n cell: Cell<TData, unknown>,\n ) => React.ReactNode;\n}\n\nexport function TableRow<TData extends RowData>({\n row,\n virtualRow,\n onRowClick,\n renderCellContextMenu,\n}: TableRowProps<TData>): React.ReactElement {\n const handleClick = useCallback(() => {\n onRowClick?.(row.original);\n }, [onRowClick, row.original]);\n\n return (\n <tr\n data-selected={row.getIsSelected()}\n className={styles.osdkTableRow}\n style={{\n height: `${virtualRow.size}px`,\n transform: `translateY(${virtualRow.start}px)`,\n }}\n onClick={handleClick}\n >\n {row.getVisibleCells().map((cell) => (\n <TableCell\n key={cell.id}\n cell={cell}\n renderCellContextMenu={renderCellContextMenu}\n />\n ))}\n </tr>\n );\n}\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAIA,OAAOA,KAAK,IAAIC,WAAW,QAAQ,OAAO;AAC1C,SAASC,SAAS,QAAQ,gBAAgB;AAC1C,OAAOC,MAAM,MAAM,uBAAuB;AAY1C,OAAO,SAASC,QAAQA,CAAwB;EAC9CC,GAAG;EACHC,UAAU;EACVC,UAAU;EACVC;AACoB,CAAC,EAAsB;EAC3C,MAAMC,WAAW,GAAGR,WAAW,CAAC,MAAM;IACpCM,UAAU,GAAGF,GAAG,CAACK,QAAQ,CAAC;EAC5B,CAAC,EAAE,CAACH,UAAU,EAAEF,GAAG,CAACK,QAAQ,CAAC,CAAC;EAE9B,oBACEV,KAAA,CAAAW,aAAA;IACE,iBAAeN,GAAG,CAACO,aAAa,CAAC,CAAE;IACnCC,SAAS,EAAEV,MAAM,CAACW,YAAa;IAC/BC,KAAK,EAAE;MACLC,MAAM,EAAE,GAAGV,UAAU,CAACW,IAAI,IAAI;MAC9BC,SAAS,EAAE,cAAcZ,UAAU,CAACa,KAAK;IAC3C,CAAE;IACFC,OAAO,EAAEX;EAAY,GAEpBJ,GAAG,CAACgB,eAAe,CAAC,CAAC,CAACC,GAAG,CAAEC,IAAI,iBAC9BvB,KAAA,CAAAW,aAAA,CAACT,SAAS;IACRsB,GAAG,EAAED,IAAI,CAACE,EAAG;IACbF,IAAI,EAAEA,IAAK;IACXf,qBAAqB,EAAEA;EAAsB,CAC9C,CACF,CACC,CAAC;AAET","ignoreList":[]}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright 2025 Palantir Technologies, Inc. All rights reserved.
|
|
3
|
+
*
|
|
4
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
* you may not use this file except in compliance with the License.
|
|
6
|
+
* You may obtain a copy of the License at
|
|
7
|
+
*
|
|
8
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
*
|
|
10
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
* See the License for the specific language governing permissions and
|
|
14
|
+
* limitations under the License.
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
.osdkTableRow {
|
|
18
|
+
position: absolute;
|
|
19
|
+
display: flex;
|
|
20
|
+
background-color: var(--osdk-table-row-bg-default);
|
|
21
|
+
border-top: var(--osdk-table-row-divider);
|
|
22
|
+
border-bottom: var(--osdk-table-border-width) solid transparent;
|
|
23
|
+
|
|
24
|
+
&:last-child {
|
|
25
|
+
border-bottom: var(--osdk-table-border);
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
/* Zebra rows */
|
|
29
|
+
&:nth-child(even) {
|
|
30
|
+
background-color: var(
|
|
31
|
+
--osdk-table-row-bg-alternate,
|
|
32
|
+
var(--osdk-table-row-bg-default)
|
|
33
|
+
);
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
&:hover {
|
|
37
|
+
z-index: 1;
|
|
38
|
+
background-color: var(
|
|
39
|
+
--osdk-table-row-bg-hover,
|
|
40
|
+
var(--bp-surface-colorHover-default)
|
|
41
|
+
);
|
|
42
|
+
border-top-color: var(--osdk-table-row-border-color-hover);
|
|
43
|
+
border-bottom-color: var(--osdk-table-row-border-color-hover);
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
&[data-selected="true"] {
|
|
47
|
+
z-index: 2;
|
|
48
|
+
background-color: var(--osdk-table-row-bg-active);
|
|
49
|
+
border-top-color: var(--osdk-table-row-border-color-active);
|
|
50
|
+
border-bottom-color: var(--osdk-table-row-border-color-active);
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
&[data-selected="true"] + &[data-selected="true"] {
|
|
54
|
+
border-top-color: transparent;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
&[data-selected="true"]:has(+ &[data-selected="true"]) {
|
|
58
|
+
border-bottom-color: transparent;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
3
|
var reactTable = require('@tanstack/react-table');
|
|
4
|
-
var
|
|
4
|
+
var React5 = 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');
|
|
@@ -12,7 +12,7 @@ var reactDom = require('react-dom');
|
|
|
12
12
|
|
|
13
13
|
function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
|
|
14
14
|
|
|
15
|
-
var
|
|
15
|
+
var React5__default = /*#__PURE__*/_interopDefault(React5);
|
|
16
16
|
var classnames__default = /*#__PURE__*/_interopDefault(classnames);
|
|
17
17
|
|
|
18
18
|
// src/object-table/ObjectTable.tsx
|
|
@@ -22,7 +22,7 @@ function useColumnDefs(objectType, columnDefinitions) {
|
|
|
22
22
|
loading,
|
|
23
23
|
error
|
|
24
24
|
} = react.useOsdkMetadata(objectType);
|
|
25
|
-
const columns =
|
|
25
|
+
const columns = React5.useMemo(() => {
|
|
26
26
|
const objectProperties = metadata?.properties;
|
|
27
27
|
if (columnDefinitions) {
|
|
28
28
|
return getColumnsFromColumnDefinitions(columnDefinitions, objectProperties);
|
|
@@ -81,7 +81,7 @@ function getDefaultColumns(objectProperties) {
|
|
|
81
81
|
var useDefaultTableStates = ({
|
|
82
82
|
columnDefinitions
|
|
83
83
|
}) => {
|
|
84
|
-
const columnVisibility =
|
|
84
|
+
const columnVisibility = React5.useMemo(() => {
|
|
85
85
|
if (columnDefinitions) {
|
|
86
86
|
const colVisibility = columnDefinitions.reduce((acc, colDef) => {
|
|
87
87
|
if (colDef.isVisible !== void 0) {
|
|
@@ -105,7 +105,7 @@ var useDefaultTableStates = ({
|
|
|
105
105
|
};
|
|
106
106
|
var PAGE_SIZE = 50;
|
|
107
107
|
function useObjectTableData(objectSet, columnDefinitions, filter) {
|
|
108
|
-
const withProperties =
|
|
108
|
+
const withProperties = React5.useMemo(() => {
|
|
109
109
|
if (!columnDefinitions) {
|
|
110
110
|
return;
|
|
111
111
|
}
|
|
@@ -139,11 +139,11 @@ function useRowSelection({
|
|
|
139
139
|
onRowSelection,
|
|
140
140
|
data
|
|
141
141
|
}) {
|
|
142
|
-
const [internalRowSelection, setInternalRowSelection] =
|
|
143
|
-
const [lastSelectedRowIndex, setLastSelectedRowIndex] =
|
|
142
|
+
const [internalRowSelection, setInternalRowSelection] = React5.useState({});
|
|
143
|
+
const [lastSelectedRowIndex, setLastSelectedRowIndex] = React5.useState(null);
|
|
144
144
|
const isControlled = selectedRows !== void 0;
|
|
145
145
|
const isSelectionEnabled = selectionMode !== "none";
|
|
146
|
-
const rowSelectionState =
|
|
146
|
+
const rowSelectionState = React5.useMemo(() => {
|
|
147
147
|
if (!isSelectionEnabled) return {};
|
|
148
148
|
if (isControlled && selectedRows) {
|
|
149
149
|
return getRowSelectionState(selectedRows);
|
|
@@ -154,7 +154,7 @@ function useRowSelection({
|
|
|
154
154
|
const totalCount = data?.length ?? 0;
|
|
155
155
|
const isAllSelected = totalCount > 0 && selectedCount === totalCount;
|
|
156
156
|
const hasSelection = selectedCount > 0;
|
|
157
|
-
const onToggleAll =
|
|
157
|
+
const onToggleAll = React5.useCallback(() => {
|
|
158
158
|
if (!isSelectionEnabled || !data) return;
|
|
159
159
|
const newSelectedRows = isAllSelected ? [] : data.map((item) => item.$primaryKey);
|
|
160
160
|
if (!isControlled) {
|
|
@@ -162,7 +162,7 @@ function useRowSelection({
|
|
|
162
162
|
}
|
|
163
163
|
onRowSelection?.(newSelectedRows);
|
|
164
164
|
}, [isSelectionEnabled, data, isAllSelected, isControlled, onRowSelection]);
|
|
165
|
-
const onToggleRow =
|
|
165
|
+
const onToggleRow = React5.useCallback((rowId, rowIndex, isShiftClick = false) => {
|
|
166
166
|
if (!isSelectionEnabled || !data) return;
|
|
167
167
|
let newSelectedRows = [];
|
|
168
168
|
if (selectionMode === "single") {
|
|
@@ -284,14 +284,14 @@ function Checkbox({
|
|
|
284
284
|
indicatorProps,
|
|
285
285
|
...rest
|
|
286
286
|
}) {
|
|
287
|
-
return /* @__PURE__ */
|
|
287
|
+
return /* @__PURE__ */ React5__default.default.createElement(checkbox.Checkbox.Root, _extends({
|
|
288
288
|
className: classnames__default.default(Checkbox_default.osdkCheckboxRoot, className),
|
|
289
289
|
indeterminate
|
|
290
|
-
}, rest), /* @__PURE__ */
|
|
290
|
+
}, rest), /* @__PURE__ */ React5__default.default.createElement(checkbox.Checkbox.Indicator, _extends({}, indicatorProps, {
|
|
291
291
|
className: classnames__default.default(Checkbox_default.osdkCheckboxIndicator, indicatorProps?.className)
|
|
292
|
-
}), indeterminate ? /* @__PURE__ */
|
|
292
|
+
}), indeterminate ? /* @__PURE__ */ React5__default.default.createElement(icons.Minus, {
|
|
293
293
|
color: "currentColor"
|
|
294
|
-
}) : /* @__PURE__ */
|
|
294
|
+
}) : /* @__PURE__ */ React5__default.default.createElement(icons.Tick, {
|
|
295
295
|
color: "currentColor"
|
|
296
296
|
})));
|
|
297
297
|
}
|
|
@@ -302,7 +302,7 @@ function SelectionHeaderCell({
|
|
|
302
302
|
hasSelection,
|
|
303
303
|
onToggleAll
|
|
304
304
|
}) {
|
|
305
|
-
return /* @__PURE__ */
|
|
305
|
+
return /* @__PURE__ */ React5__default.default.createElement(Checkbox, {
|
|
306
306
|
indeterminate: hasSelection && !isAllSelected,
|
|
307
307
|
checked: isAllSelected,
|
|
308
308
|
onCheckedChange: onToggleAll,
|
|
@@ -313,11 +313,11 @@ function SelectionCell({
|
|
|
313
313
|
row,
|
|
314
314
|
onToggleRow
|
|
315
315
|
}) {
|
|
316
|
-
const handleClick =
|
|
316
|
+
const handleClick = React5.useCallback((event) => {
|
|
317
317
|
const isShiftClick = event.shiftKey;
|
|
318
318
|
onToggleRow(row.id, row.index, isShiftClick);
|
|
319
319
|
}, [row, onToggleRow]);
|
|
320
|
-
return /* @__PURE__ */
|
|
320
|
+
return /* @__PURE__ */ React5__default.default.createElement(Checkbox, {
|
|
321
321
|
checked: row.getIsSelected(),
|
|
322
322
|
onClick: handleClick,
|
|
323
323
|
"aria-label": `Select row ${row.index + 1}`
|
|
@@ -333,18 +333,18 @@ var useSelectionColumn = ({
|
|
|
333
333
|
onToggleAll,
|
|
334
334
|
onToggleRow
|
|
335
335
|
}) => {
|
|
336
|
-
const selectionColumn =
|
|
336
|
+
const selectionColumn = React5.useMemo(() => {
|
|
337
337
|
if (selectionMode === "none") return null;
|
|
338
338
|
return {
|
|
339
339
|
id: SELECTION_COLUMN_ID,
|
|
340
|
-
header: () => selectionMode === "multiple" ? /* @__PURE__ */
|
|
340
|
+
header: () => selectionMode === "multiple" ? /* @__PURE__ */ React5__default.default.createElement(SelectionHeaderCell, {
|
|
341
341
|
isAllSelected,
|
|
342
342
|
hasSelection,
|
|
343
343
|
onToggleAll
|
|
344
344
|
}) : null,
|
|
345
345
|
cell: ({
|
|
346
346
|
row
|
|
347
|
-
}) => /* @__PURE__ */
|
|
347
|
+
}) => /* @__PURE__ */ React5__default.default.createElement(SelectionCell, {
|
|
348
348
|
row,
|
|
349
349
|
onToggleRow
|
|
350
350
|
}),
|
|
@@ -357,14 +357,25 @@ var useSelectionColumn = ({
|
|
|
357
357
|
}, [selectionMode, isAllSelected, hasSelection, onToggleAll, onToggleRow]);
|
|
358
358
|
return selectionColumn;
|
|
359
359
|
};
|
|
360
|
+
|
|
361
|
+
// src/object-table/Table.module.css
|
|
362
|
+
var Table_default = {};
|
|
363
|
+
|
|
364
|
+
// src/object-table/TableBody.module.css
|
|
365
|
+
var TableBody_default = {};
|
|
366
|
+
|
|
367
|
+
// src/object-table/CellContextMenu.module.css
|
|
368
|
+
var CellContextMenu_default = {};
|
|
369
|
+
|
|
370
|
+
// src/object-table/CellContextMenu.tsx
|
|
360
371
|
function CellContextMenu({
|
|
361
372
|
cell,
|
|
362
373
|
position,
|
|
363
374
|
onClose,
|
|
364
375
|
renderContent
|
|
365
376
|
}) {
|
|
366
|
-
const ref =
|
|
367
|
-
|
|
377
|
+
const ref = React5.useRef(null);
|
|
378
|
+
React5.useEffect(() => {
|
|
368
379
|
const handleClickOutside = (event) => {
|
|
369
380
|
if (ref.current && !ref.current.contains(event.target)) {
|
|
370
381
|
onClose();
|
|
@@ -375,11 +386,10 @@ function CellContextMenu({
|
|
|
375
386
|
document.removeEventListener("mousedown", handleClickOutside);
|
|
376
387
|
};
|
|
377
388
|
}, [onClose]);
|
|
378
|
-
return /* @__PURE__ */ reactDom.createPortal(/* @__PURE__ */
|
|
389
|
+
return /* @__PURE__ */ reactDom.createPortal(/* @__PURE__ */ React5__default.default.createElement("div", {
|
|
379
390
|
ref,
|
|
391
|
+
className: CellContextMenu_default.osdkCellContextMenu,
|
|
380
392
|
style: {
|
|
381
|
-
position: "fixed",
|
|
382
|
-
zIndex: 9999,
|
|
383
393
|
left: position.left,
|
|
384
394
|
top: position.top,
|
|
385
395
|
minWidth: position.width
|
|
@@ -389,9 +399,9 @@ function CellContextMenu({
|
|
|
389
399
|
var useCellContextMenu = ({
|
|
390
400
|
tdRef
|
|
391
401
|
}) => {
|
|
392
|
-
const [popoverPosition, setPopoverPosition] =
|
|
393
|
-
const [isContextMenuOpen, setIsContextMenuOpen] =
|
|
394
|
-
const handleOpenContextMenu =
|
|
402
|
+
const [popoverPosition, setPopoverPosition] = React5.useState(null);
|
|
403
|
+
const [isContextMenuOpen, setIsContextMenuOpen] = React5.useState(false);
|
|
404
|
+
const handleOpenContextMenu = React5.useCallback((event) => {
|
|
395
405
|
event.preventDefault();
|
|
396
406
|
event.stopPropagation();
|
|
397
407
|
if (tdRef.current) {
|
|
@@ -405,7 +415,7 @@ var useCellContextMenu = ({
|
|
|
405
415
|
setIsContextMenuOpen(true);
|
|
406
416
|
}
|
|
407
417
|
}, [tdRef]);
|
|
408
|
-
const handleCloseContextMenu =
|
|
418
|
+
const handleCloseContextMenu = React5.useCallback(() => {
|
|
409
419
|
setIsContextMenuOpen(false);
|
|
410
420
|
setPopoverPosition(null);
|
|
411
421
|
}, []);
|
|
@@ -417,12 +427,15 @@ var useCellContextMenu = ({
|
|
|
417
427
|
};
|
|
418
428
|
};
|
|
419
429
|
|
|
430
|
+
// src/object-table/TableCell.module.css
|
|
431
|
+
var TableCell_default = {};
|
|
432
|
+
|
|
420
433
|
// src/object-table/TableCell.tsx
|
|
421
434
|
function TableCell({
|
|
422
435
|
cell,
|
|
423
436
|
renderCellContextMenu
|
|
424
437
|
}) {
|
|
425
|
-
const tdRef =
|
|
438
|
+
const tdRef = React5.useRef(null);
|
|
426
439
|
const isSelectColumn = cell.column.id === SELECTION_COLUMN_ID;
|
|
427
440
|
const {
|
|
428
441
|
isContextMenuOpen,
|
|
@@ -433,15 +446,16 @@ function TableCell({
|
|
|
433
446
|
tdRef
|
|
434
447
|
});
|
|
435
448
|
const shouldRenderContextMenu = !isSelectColumn && isContextMenuOpen && !!popoverPosition && !!renderCellContextMenu;
|
|
436
|
-
return /* @__PURE__ */
|
|
449
|
+
return /* @__PURE__ */ React5__default.default.createElement(React5__default.default.Fragment, null, /* @__PURE__ */ React5__default.default.createElement("td", {
|
|
437
450
|
ref: tdRef,
|
|
451
|
+
className: TableCell_default.osdkTableCell,
|
|
438
452
|
style: {
|
|
439
|
-
display: "flex",
|
|
440
|
-
alignItems: "center",
|
|
441
453
|
width: cell.column.getSize()
|
|
442
454
|
},
|
|
443
455
|
onContextMenu: handleOpenContextMenu
|
|
444
|
-
},
|
|
456
|
+
}, /* @__PURE__ */ React5__default.default.createElement("div", {
|
|
457
|
+
className: TableCell_default.osdkTableCellContent
|
|
458
|
+
}, reactTable.flexRender(cell.column.columnDef.cell, cell.getContext()))), shouldRenderContextMenu && /* @__PURE__ */ React5__default.default.createElement(CellContextMenu, {
|
|
445
459
|
cell,
|
|
446
460
|
position: popoverPosition,
|
|
447
461
|
onClose: handleCloseContextMenu,
|
|
@@ -449,6 +463,9 @@ function TableCell({
|
|
|
449
463
|
}));
|
|
450
464
|
}
|
|
451
465
|
|
|
466
|
+
// src/object-table/TableRow.module.css
|
|
467
|
+
var TableRow_default = {};
|
|
468
|
+
|
|
452
469
|
// src/object-table/TableRow.tsx
|
|
453
470
|
function TableRow({
|
|
454
471
|
row,
|
|
@@ -456,18 +473,18 @@ function TableRow({
|
|
|
456
473
|
onRowClick,
|
|
457
474
|
renderCellContextMenu
|
|
458
475
|
}) {
|
|
459
|
-
const handleClick =
|
|
476
|
+
const handleClick = React5.useCallback(() => {
|
|
460
477
|
onRowClick?.(row.original);
|
|
461
478
|
}, [onRowClick, row.original]);
|
|
462
|
-
return /* @__PURE__ */
|
|
479
|
+
return /* @__PURE__ */ React5__default.default.createElement("tr", {
|
|
480
|
+
"data-selected": row.getIsSelected(),
|
|
481
|
+
className: TableRow_default.osdkTableRow,
|
|
463
482
|
style: {
|
|
464
|
-
position: "absolute",
|
|
465
483
|
height: `${virtualRow.size}px`,
|
|
466
|
-
transform: `translateY(${virtualRow.start}px)
|
|
467
|
-
display: "flex"
|
|
484
|
+
transform: `translateY(${virtualRow.start}px)`
|
|
468
485
|
},
|
|
469
486
|
onClick: handleClick
|
|
470
|
-
}, row.getVisibleCells().map((cell) => /* @__PURE__ */
|
|
487
|
+
}, row.getVisibleCells().map((cell) => /* @__PURE__ */ React5__default.default.createElement(TableCell, {
|
|
471
488
|
key: cell.id,
|
|
472
489
|
cell,
|
|
473
490
|
renderCellContextMenu
|
|
@@ -488,18 +505,17 @@ function TableBody({
|
|
|
488
505
|
getScrollElement: () => tableContainerRef.current,
|
|
489
506
|
overscan: 5
|
|
490
507
|
});
|
|
491
|
-
|
|
508
|
+
React5.useLayoutEffect(() => {
|
|
492
509
|
rowVirtualizer.measure();
|
|
493
510
|
}, [rowVirtualizer, rows.length]);
|
|
494
|
-
return /* @__PURE__ */
|
|
511
|
+
return /* @__PURE__ */ React5__default.default.createElement("tbody", {
|
|
512
|
+
className: TableBody_default.osdkTableBody,
|
|
495
513
|
style: {
|
|
496
|
-
display: "grid",
|
|
497
|
-
position: "relative",
|
|
498
514
|
height: `${rowVirtualizer.getTotalSize()}px`
|
|
499
515
|
}
|
|
500
516
|
}, rowVirtualizer.getVirtualItems().map((virtualRow) => {
|
|
501
517
|
const row = rows[virtualRow.index];
|
|
502
|
-
return /* @__PURE__ */
|
|
518
|
+
return /* @__PURE__ */ React5__default.default.createElement(TableRow, {
|
|
503
519
|
key: row.id,
|
|
504
520
|
row,
|
|
505
521
|
virtualRow,
|
|
@@ -508,49 +524,33 @@ function TableBody({
|
|
|
508
524
|
});
|
|
509
525
|
}));
|
|
510
526
|
}
|
|
527
|
+
|
|
528
|
+
// src/object-table/TableHeader.module.css
|
|
529
|
+
var TableHeader_default = {};
|
|
530
|
+
|
|
531
|
+
// src/object-table/TableHeader.tsx
|
|
511
532
|
function TableHeader({
|
|
512
533
|
table
|
|
513
534
|
}) {
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
zIndex: 1
|
|
520
|
-
}
|
|
521
|
-
}, table.getHeaderGroups().map((headerGroup) => /* @__PURE__ */ React__default.default.createElement("tr", {
|
|
535
|
+
const isResizing = !!table.getState().columnSizingInfo?.isResizingColumn;
|
|
536
|
+
return /* @__PURE__ */ React5__default.default.createElement("thead", {
|
|
537
|
+
className: TableHeader_default.osdkTableHeader,
|
|
538
|
+
"data-resizing": isResizing
|
|
539
|
+
}, table.getHeaderGroups().map((headerGroup) => /* @__PURE__ */ React5__default.default.createElement("tr", {
|
|
522
540
|
key: headerGroup.id,
|
|
541
|
+
className: TableHeader_default.osdkTableHeaderRow
|
|
542
|
+
}, headerGroup.headers.map((header) => /* @__PURE__ */ React5__default.default.createElement("th", {
|
|
543
|
+
key: header.id,
|
|
544
|
+
className: TableHeader_default.osdkTableHeaderCell,
|
|
523
545
|
style: {
|
|
524
|
-
|
|
546
|
+
width: header.getSize()
|
|
525
547
|
}
|
|
526
|
-
},
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
width: header.getSize(),
|
|
533
|
-
justifyContent: "flex-start",
|
|
534
|
-
alignItems: "center",
|
|
535
|
-
position: "relative"
|
|
536
|
-
}
|
|
537
|
-
}, header.isPlaceholder ? null : reactTable.flexRender(header.column.columnDef.header, header.getContext()), header.column.getCanResize() && /* @__PURE__ */ React__default.default.createElement("div", {
|
|
538
|
-
onDoubleClick: () => header.column.resetSize(),
|
|
539
|
-
onMouseDown: header.getResizeHandler(),
|
|
540
|
-
onTouchStart: header.getResizeHandler(),
|
|
541
|
-
style: {
|
|
542
|
-
position: "absolute",
|
|
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
|
-
)))));
|
|
548
|
+
}, header.isPlaceholder ? null : reactTable.flexRender(header.column.columnDef.header, header.getContext()), header.column.getCanResize() && /* @__PURE__ */ React5__default.default.createElement("div", {
|
|
549
|
+
className: TableHeader_default.osdkTableHeaderResizer,
|
|
550
|
+
onDoubleClick: () => header.column.resetSize(),
|
|
551
|
+
onMouseDown: header.getResizeHandler(),
|
|
552
|
+
onTouchStart: header.getResizeHandler()
|
|
553
|
+
}))))));
|
|
554
554
|
}
|
|
555
555
|
|
|
556
556
|
// src/object-table/Table.tsx
|
|
@@ -560,11 +560,12 @@ function Table({
|
|
|
560
560
|
fetchNextPage,
|
|
561
561
|
onRowClick,
|
|
562
562
|
rowHeight,
|
|
563
|
-
renderCellContextMenu
|
|
563
|
+
renderCellContextMenu,
|
|
564
|
+
className
|
|
564
565
|
}) {
|
|
565
|
-
const tableContainerRef =
|
|
566
|
-
const fetchingRef =
|
|
567
|
-
const fetchMoreOnEndReached =
|
|
566
|
+
const tableContainerRef = React5.useRef(null);
|
|
567
|
+
const fetchingRef = React5.useRef(false);
|
|
568
|
+
const fetchMoreOnEndReached = React5.useCallback(async (containerRefElement) => {
|
|
568
569
|
if (containerRefElement && !fetchingRef.current) {
|
|
569
570
|
const {
|
|
570
571
|
scrollHeight,
|
|
@@ -581,28 +582,16 @@ function Table({
|
|
|
581
582
|
}
|
|
582
583
|
}
|
|
583
584
|
}, [fetchNextPage, isLoading]);
|
|
584
|
-
const handleScroll =
|
|
585
|
+
const handleScroll = React5.useCallback(async (e) => {
|
|
585
586
|
await fetchMoreOnEndReached(e.currentTarget);
|
|
586
587
|
}, [fetchMoreOnEndReached]);
|
|
587
|
-
return /* @__PURE__ */
|
|
588
|
+
return /* @__PURE__ */ React5__default.default.createElement("div", {
|
|
588
589
|
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
|
-
},
|
|
590
|
+
className: classnames__default.default(Table_default.osdkTableContainer, className),
|
|
598
591
|
onScroll: handleScroll
|
|
599
|
-
}, /* @__PURE__ */
|
|
600
|
-
style: {
|
|
601
|
-
display: "grid"
|
|
602
|
-
}
|
|
603
|
-
}, /* @__PURE__ */ React__default.default.createElement(TableHeader, {
|
|
592
|
+
}, /* @__PURE__ */ React5__default.default.createElement("table", null, /* @__PURE__ */ React5__default.default.createElement(TableHeader, {
|
|
604
593
|
table
|
|
605
|
-
}), /* @__PURE__ */
|
|
594
|
+
}), /* @__PURE__ */ React5__default.default.createElement(TableBody, {
|
|
606
595
|
rows: table.getRowModel().rows,
|
|
607
596
|
tableContainerRef,
|
|
608
597
|
onRowClick,
|
|
@@ -637,7 +626,7 @@ function ObjectTable({
|
|
|
637
626
|
} = useDefaultTableStates({
|
|
638
627
|
columnDefinitions
|
|
639
628
|
});
|
|
640
|
-
const [columnSizing, setColumnSizing] =
|
|
629
|
+
const [columnSizing, setColumnSizing] = React5.useState({});
|
|
641
630
|
const {
|
|
642
631
|
rowSelection,
|
|
643
632
|
isAllSelected,
|
|
@@ -657,7 +646,7 @@ function ObjectTable({
|
|
|
657
646
|
onToggleAll,
|
|
658
647
|
onToggleRow
|
|
659
648
|
});
|
|
660
|
-
const allColumns =
|
|
649
|
+
const allColumns = React5.useMemo(() => {
|
|
661
650
|
return selectionColumn ? [selectionColumn, ...columns] : columns;
|
|
662
651
|
}, [selectionColumn, columns]);
|
|
663
652
|
const table = reactTable.useReactTable({
|
|
@@ -678,17 +667,18 @@ function ObjectTable({
|
|
|
678
667
|
},
|
|
679
668
|
getRowId
|
|
680
669
|
});
|
|
681
|
-
const onRenderCellContextMenu =
|
|
670
|
+
const onRenderCellContextMenu = React5.useCallback((row, cell) => {
|
|
682
671
|
return renderCellContextMenu?.(row, cell.getValue());
|
|
683
672
|
}, [renderCellContextMenu]);
|
|
684
673
|
const isTableLoading = isLoading || isColumnsLoading;
|
|
685
|
-
return /* @__PURE__ */
|
|
674
|
+
return /* @__PURE__ */ React5__default.default.createElement(Table, {
|
|
686
675
|
table,
|
|
687
676
|
isLoading: isTableLoading,
|
|
688
677
|
fetchNextPage: fetchMore,
|
|
689
678
|
onRowClick: props.onRowClick,
|
|
690
679
|
rowHeight: props.rowHeight,
|
|
691
|
-
renderCellContextMenu: onRenderCellContextMenu
|
|
680
|
+
renderCellContextMenu: onRenderCellContextMenu,
|
|
681
|
+
className: props.className
|
|
692
682
|
});
|
|
693
683
|
}
|
|
694
684
|
|