@osdk/react-components 0.1.0-beta.1 → 0.1.0-beta.2
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 +15 -0
- package/build/browser/object-table/CellContextMenu.js +48 -0
- package/build/browser/object-table/CellContextMenu.js.map +1 -0
- package/build/browser/object-table/ObjectTable.js +53 -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/SelectionCells.js +67 -0
- package/build/browser/object-table/SelectionCells.js.map +1 -0
- package/build/browser/object-table/Table.js +8 -4
- package/build/browser/object-table/Table.js.map +1 -1
- package/build/browser/object-table/TableBody.js +3 -1
- package/build/browser/object-table/TableBody.js.map +1 -1
- package/build/browser/object-table/TableCell.js +51 -0
- package/build/browser/object-table/TableCell.js.map +1 -0
- package/build/browser/object-table/TableHeader.js +20 -4
- package/build/browser/object-table/TableHeader.js.map +1 -1
- package/build/browser/object-table/TableRow.js +7 -9
- package/build/browser/object-table/TableRow.js.map +1 -1
- package/build/browser/object-table/hooks/__tests__/useCellContextMenu.test.js +147 -0
- package/build/browser/object-table/hooks/__tests__/useCellContextMenu.test.js.map +1 -0
- package/build/browser/object-table/hooks/__tests__/useObjectTableData.test.js +12 -0
- package/build/browser/object-table/hooks/__tests__/useObjectTableData.test.js.map +1 -1
- package/build/browser/object-table/hooks/__tests__/useRowSelection.test.js +548 -0
- package/build/browser/object-table/hooks/__tests__/useRowSelection.test.js.map +1 -0
- package/build/browser/object-table/hooks/__tests__/useSelectionColumn.test.js +274 -0
- package/build/browser/object-table/hooks/__tests__/useSelectionColumn.test.js.map +1 -0
- package/build/browser/object-table/hooks/useCellContextMenu.js +48 -0
- package/build/browser/object-table/hooks/useCellContextMenu.js.map +1 -0
- package/build/browser/object-table/hooks/useColumnDefs.js.map +1 -1
- package/build/browser/object-table/hooks/useObjectTableData.js +3 -2
- package/build/browser/object-table/hooks/useObjectTableData.js.map +1 -1
- package/build/browser/object-table/hooks/useRowSelection.js +180 -0
- package/build/browser/object-table/hooks/useRowSelection.js.map +1 -0
- package/build/browser/object-table/hooks/useSelectionColumn.js +51 -0
- package/build/browser/object-table/hooks/useSelectionColumn.js.map +1 -0
- package/build/browser/object-table/utils/getRowId.js +21 -0
- package/build/browser/object-table/utils/getRowId.js.map +1 -0
- package/build/browser/public/experimental.js +1 -0
- package/build/browser/public/experimental.js.map +1 -1
- package/build/cjs/public/experimental.cjs +406 -30
- package/build/cjs/public/experimental.cjs.map +1 -1
- package/build/cjs/public/experimental.d.cts +6 -11
- package/build/esm/object-table/CellContextMenu.js +48 -0
- package/build/esm/object-table/CellContextMenu.js.map +1 -0
- package/build/esm/object-table/ObjectTable.js +53 -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/SelectionCells.js +67 -0
- package/build/esm/object-table/SelectionCells.js.map +1 -0
- package/build/esm/object-table/Table.js +8 -4
- package/build/esm/object-table/Table.js.map +1 -1
- package/build/esm/object-table/TableBody.js +3 -1
- package/build/esm/object-table/TableBody.js.map +1 -1
- package/build/esm/object-table/TableCell.js +51 -0
- package/build/esm/object-table/TableCell.js.map +1 -0
- package/build/esm/object-table/TableHeader.js +20 -4
- package/build/esm/object-table/TableHeader.js.map +1 -1
- package/build/esm/object-table/TableRow.js +7 -9
- package/build/esm/object-table/TableRow.js.map +1 -1
- package/build/esm/object-table/hooks/__tests__/useCellContextMenu.test.js +147 -0
- package/build/esm/object-table/hooks/__tests__/useCellContextMenu.test.js.map +1 -0
- package/build/esm/object-table/hooks/__tests__/useObjectTableData.test.js +12 -0
- package/build/esm/object-table/hooks/__tests__/useObjectTableData.test.js.map +1 -1
- package/build/esm/object-table/hooks/__tests__/useRowSelection.test.js +548 -0
- package/build/esm/object-table/hooks/__tests__/useRowSelection.test.js.map +1 -0
- package/build/esm/object-table/hooks/__tests__/useSelectionColumn.test.js +274 -0
- package/build/esm/object-table/hooks/__tests__/useSelectionColumn.test.js.map +1 -0
- package/build/esm/object-table/hooks/useCellContextMenu.js +48 -0
- package/build/esm/object-table/hooks/useCellContextMenu.js.map +1 -0
- package/build/esm/object-table/hooks/useColumnDefs.js.map +1 -1
- package/build/esm/object-table/hooks/useObjectTableData.js +3 -2
- package/build/esm/object-table/hooks/useObjectTableData.js.map +1 -1
- package/build/esm/object-table/hooks/useRowSelection.js +180 -0
- package/build/esm/object-table/hooks/useRowSelection.js.map +1 -0
- package/build/esm/object-table/hooks/useSelectionColumn.js +51 -0
- package/build/esm/object-table/hooks/useSelectionColumn.js.map +1 -0
- package/build/esm/object-table/utils/getRowId.js +21 -0
- package/build/esm/object-table/utils/getRowId.js.map +1 -0
- package/build/esm/public/experimental.js +1 -0
- package/build/esm/public/experimental.js.map +1 -1
- package/build/types/object-table/CellContextMenu.d.ts +11 -0
- package/build/types/object-table/CellContextMenu.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 +5 -10
- package/build/types/object-table/ObjectTableApi.d.ts.map +1 -1
- package/build/types/object-table/SelectionCells.d.ts +14 -0
- package/build/types/object-table/SelectionCells.d.ts.map +1 -0
- package/build/types/object-table/Table.d.ts +4 -3
- package/build/types/object-table/Table.d.ts.map +1 -1
- package/build/types/object-table/TableBody.d.ts +3 -2
- package/build/types/object-table/TableBody.d.ts.map +1 -1
- package/build/types/object-table/TableCell.d.ts +8 -0
- package/build/types/object-table/TableCell.d.ts.map +1 -0
- package/build/types/object-table/TableHeader.d.ts +3 -3
- package/build/types/object-table/TableHeader.d.ts.map +1 -1
- package/build/types/object-table/TableRow.d.ts +3 -2
- package/build/types/object-table/TableRow.d.ts.map +1 -1
- package/build/types/object-table/hooks/__tests__/useCellContextMenu.test.d.ts +1 -0
- package/build/types/object-table/hooks/__tests__/useCellContextMenu.test.d.ts.map +1 -0
- package/build/types/object-table/hooks/__tests__/useRowSelection.test.d.ts +1 -0
- package/build/types/object-table/hooks/__tests__/useRowSelection.test.d.ts.map +1 -0
- package/build/types/object-table/hooks/__tests__/useSelectionColumn.test.d.ts +1 -0
- package/build/types/object-table/hooks/__tests__/useSelectionColumn.test.d.ts.map +1 -0
- package/build/types/object-table/hooks/useCellContextMenu.d.ts +17 -0
- package/build/types/object-table/hooks/useCellContextMenu.d.ts.map +1 -0
- package/build/types/object-table/hooks/useObjectTableData.d.ts +2 -2
- package/build/types/object-table/hooks/useObjectTableData.d.ts.map +1 -1
- package/build/types/object-table/hooks/useRowSelection.d.ts +22 -0
- package/build/types/object-table/hooks/useRowSelection.d.ts.map +1 -0
- package/build/types/object-table/hooks/useSelectionColumn.d.ts +15 -0
- package/build/types/object-table/hooks/useSelectionColumn.d.ts.map +1 -0
- package/build/types/object-table/utils/getRowId.d.ts +6 -0
- package/build/types/object-table/utils/getRowId.d.ts.map +1 -0
- package/build/types/public/experimental.d.ts.map +1 -1
- package/package.json +6 -4
|
@@ -1315,10 +1315,10 @@ function passiveEventSupported() {
|
|
|
1315
1315
|
return false;
|
|
1316
1316
|
}
|
|
1317
1317
|
};
|
|
1318
|
-
const
|
|
1318
|
+
const noop2 = () => {
|
|
1319
1319
|
};
|
|
1320
|
-
window.addEventListener("test",
|
|
1321
|
-
window.removeEventListener("test",
|
|
1320
|
+
window.addEventListener("test", noop2, options);
|
|
1321
|
+
window.removeEventListener("test", noop2);
|
|
1322
1322
|
} catch (err) {
|
|
1323
1323
|
supported = false;
|
|
1324
1324
|
}
|
|
@@ -2782,7 +2782,7 @@ var useDefaultTableStates = ({
|
|
|
2782
2782
|
};
|
|
2783
2783
|
};
|
|
2784
2784
|
var PAGE_SIZE = 50;
|
|
2785
|
-
function useObjectTableData(objectSet, columnDefinitions) {
|
|
2785
|
+
function useObjectTableData(objectSet, columnDefinitions, filter) {
|
|
2786
2786
|
const withProperties = React2.useMemo(() => {
|
|
2787
2787
|
if (!columnDefinitions) {
|
|
2788
2788
|
return;
|
|
@@ -2799,10 +2799,232 @@ function useObjectTableData(objectSet, columnDefinitions) {
|
|
|
2799
2799
|
}, [columnDefinitions]);
|
|
2800
2800
|
return experimental.useObjectSet(objectSet, {
|
|
2801
2801
|
withProperties,
|
|
2802
|
-
pageSize: PAGE_SIZE
|
|
2802
|
+
pageSize: PAGE_SIZE,
|
|
2803
|
+
where: filter
|
|
2803
2804
|
});
|
|
2804
2805
|
}
|
|
2805
2806
|
|
|
2807
|
+
// src/object-table/utils/getRowId.ts
|
|
2808
|
+
var getRowId = (row) => {
|
|
2809
|
+
return getRowIdFromPrimaryKey(row.$primaryKey);
|
|
2810
|
+
};
|
|
2811
|
+
var getRowIdFromPrimaryKey = (primaryKey) => primaryKey.toString();
|
|
2812
|
+
|
|
2813
|
+
// src/object-table/hooks/useRowSelection.ts
|
|
2814
|
+
function useRowSelection({
|
|
2815
|
+
selectionMode = "none",
|
|
2816
|
+
selectedRows,
|
|
2817
|
+
onRowSelection,
|
|
2818
|
+
data
|
|
2819
|
+
}) {
|
|
2820
|
+
const [internalRowSelection, setInternalRowSelection] = React2.useState({});
|
|
2821
|
+
const [lastSelectedRowIndex, setLastSelectedRowIndex] = React2.useState(null);
|
|
2822
|
+
const isControlled = selectedRows !== void 0;
|
|
2823
|
+
const isSelectionEnabled = selectionMode !== "none";
|
|
2824
|
+
const rowSelectionState = React2.useMemo(() => {
|
|
2825
|
+
if (!isSelectionEnabled) return {};
|
|
2826
|
+
if (isControlled && selectedRows) {
|
|
2827
|
+
return getRowSelectionState(selectedRows);
|
|
2828
|
+
}
|
|
2829
|
+
return internalRowSelection;
|
|
2830
|
+
}, [isSelectionEnabled, isControlled, selectedRows, internalRowSelection]);
|
|
2831
|
+
const selectedCount = Object.values(rowSelectionState).filter(Boolean).length;
|
|
2832
|
+
const totalCount = data?.length ?? 0;
|
|
2833
|
+
const isAllSelected = totalCount > 0 && selectedCount === totalCount;
|
|
2834
|
+
const hasSelection = selectedCount > 0;
|
|
2835
|
+
const onToggleAll = React2.useCallback(() => {
|
|
2836
|
+
if (!isSelectionEnabled || !data) return;
|
|
2837
|
+
const newSelectedRows = isAllSelected ? [] : data.map((item) => item.$primaryKey);
|
|
2838
|
+
if (!isControlled) {
|
|
2839
|
+
setInternalRowSelection(getRowSelectionState(newSelectedRows));
|
|
2840
|
+
}
|
|
2841
|
+
onRowSelection?.(newSelectedRows);
|
|
2842
|
+
}, [isSelectionEnabled, data, isAllSelected, isControlled, onRowSelection]);
|
|
2843
|
+
const onToggleRow = React2.useCallback((rowId, rowIndex, isShiftClick = false) => {
|
|
2844
|
+
if (!isSelectionEnabled || !data) return;
|
|
2845
|
+
let newSelectedRows = [];
|
|
2846
|
+
if (selectionMode === "single") {
|
|
2847
|
+
newSelectedRows = getSingleSelectionRows({
|
|
2848
|
+
rowId,
|
|
2849
|
+
rowIndex,
|
|
2850
|
+
data,
|
|
2851
|
+
rowSelectionState
|
|
2852
|
+
});
|
|
2853
|
+
setLastSelectedRowIndex(rowIndex);
|
|
2854
|
+
} else {
|
|
2855
|
+
if (isShiftClick && lastSelectedRowIndex != null) {
|
|
2856
|
+
newSelectedRows = getRangeSelectionRows({
|
|
2857
|
+
rowIndex,
|
|
2858
|
+
data,
|
|
2859
|
+
lastSelectedRowIndex,
|
|
2860
|
+
rowSelectionState
|
|
2861
|
+
});
|
|
2862
|
+
} else {
|
|
2863
|
+
newSelectedRows = getMultipleSelectionRows({
|
|
2864
|
+
rowIndex,
|
|
2865
|
+
data,
|
|
2866
|
+
rowSelectionState
|
|
2867
|
+
});
|
|
2868
|
+
}
|
|
2869
|
+
setLastSelectedRowIndex(rowIndex);
|
|
2870
|
+
}
|
|
2871
|
+
if (!isControlled) {
|
|
2872
|
+
setInternalRowSelection(getRowSelectionState(newSelectedRows));
|
|
2873
|
+
}
|
|
2874
|
+
onRowSelection?.(newSelectedRows);
|
|
2875
|
+
}, [isSelectionEnabled, data, selectionMode, lastSelectedRowIndex, isControlled, rowSelectionState, onRowSelection]);
|
|
2876
|
+
return {
|
|
2877
|
+
rowSelection: rowSelectionState,
|
|
2878
|
+
isAllSelected,
|
|
2879
|
+
hasSelection,
|
|
2880
|
+
onToggleAll,
|
|
2881
|
+
onToggleRow
|
|
2882
|
+
};
|
|
2883
|
+
}
|
|
2884
|
+
function getSingleSelectionRows({
|
|
2885
|
+
rowId,
|
|
2886
|
+
rowIndex,
|
|
2887
|
+
data,
|
|
2888
|
+
rowSelectionState
|
|
2889
|
+
}) {
|
|
2890
|
+
const primaryKey = data[rowIndex].$primaryKey;
|
|
2891
|
+
const newSelectedRows = rowSelectionState[rowId] ? [] : [primaryKey];
|
|
2892
|
+
return newSelectedRows;
|
|
2893
|
+
}
|
|
2894
|
+
function getRangeSelectionRows({
|
|
2895
|
+
lastSelectedRowIndex,
|
|
2896
|
+
rowIndex,
|
|
2897
|
+
data,
|
|
2898
|
+
rowSelectionState
|
|
2899
|
+
}) {
|
|
2900
|
+
if (lastSelectedRowIndex != null) {
|
|
2901
|
+
const rowsInRange = getRowsInRange(data, lastSelectedRowIndex, rowIndex);
|
|
2902
|
+
const primaryKeysInRange = rowsInRange.map((item) => item.$primaryKey);
|
|
2903
|
+
const currentlySelected = getSelectedPrimaryKeys(rowSelectionState, data);
|
|
2904
|
+
const newSelectedRows = [...currentlySelected];
|
|
2905
|
+
primaryKeysInRange.forEach((item) => {
|
|
2906
|
+
if (!newSelectedRows.includes(item)) {
|
|
2907
|
+
newSelectedRows.push(item);
|
|
2908
|
+
}
|
|
2909
|
+
});
|
|
2910
|
+
return newSelectedRows;
|
|
2911
|
+
}
|
|
2912
|
+
return [];
|
|
2913
|
+
}
|
|
2914
|
+
function getMultipleSelectionRows({
|
|
2915
|
+
rowIndex,
|
|
2916
|
+
data,
|
|
2917
|
+
rowSelectionState
|
|
2918
|
+
}) {
|
|
2919
|
+
const primaryKey = data[rowIndex].$primaryKey;
|
|
2920
|
+
const currentlySelected = getSelectedPrimaryKeys(rowSelectionState, data);
|
|
2921
|
+
const newSelectedRows = currentlySelected.includes(primaryKey) ? currentlySelected.filter((i) => i !== primaryKey) : [...currentlySelected, primaryKey];
|
|
2922
|
+
return newSelectedRows;
|
|
2923
|
+
}
|
|
2924
|
+
function getRowsInRange(data, startIndex, endIndex) {
|
|
2925
|
+
const start = Math.min(startIndex, endIndex);
|
|
2926
|
+
const end = Math.max(startIndex, endIndex);
|
|
2927
|
+
const rows = [];
|
|
2928
|
+
for (let i = start; i <= end; i++) {
|
|
2929
|
+
const item = data[i];
|
|
2930
|
+
if (item) {
|
|
2931
|
+
rows.push(item);
|
|
2932
|
+
}
|
|
2933
|
+
}
|
|
2934
|
+
return rows;
|
|
2935
|
+
}
|
|
2936
|
+
function getRowSelectionState(primaryKeys) {
|
|
2937
|
+
return primaryKeys.reduce((acc, primaryKey) => {
|
|
2938
|
+
acc[getRowIdFromPrimaryKey(primaryKey)] = true;
|
|
2939
|
+
return acc;
|
|
2940
|
+
}, {});
|
|
2941
|
+
}
|
|
2942
|
+
function getSelectedPrimaryKeys(selectionState, data) {
|
|
2943
|
+
return data.filter((item) => selectionState[getRowId(item)]).map((item) => item.$primaryKey);
|
|
2944
|
+
}
|
|
2945
|
+
function SelectionHeaderCell({
|
|
2946
|
+
isAllSelected,
|
|
2947
|
+
hasSelection,
|
|
2948
|
+
onToggleAll
|
|
2949
|
+
}) {
|
|
2950
|
+
return /* @__PURE__ */ React2__namespace.default.createElement("div", {
|
|
2951
|
+
style: {
|
|
2952
|
+
display: "flex",
|
|
2953
|
+
alignItems: "center",
|
|
2954
|
+
justifyContent: "center",
|
|
2955
|
+
width: "100%"
|
|
2956
|
+
}
|
|
2957
|
+
}, /* @__PURE__ */ React2__namespace.default.createElement("input", {
|
|
2958
|
+
type: "checkbox",
|
|
2959
|
+
checked: isAllSelected,
|
|
2960
|
+
ref: (input) => {
|
|
2961
|
+
if (input) input.indeterminate = hasSelection && !isAllSelected;
|
|
2962
|
+
},
|
|
2963
|
+
onChange: onToggleAll,
|
|
2964
|
+
"aria-label": "Select all rows"
|
|
2965
|
+
}));
|
|
2966
|
+
}
|
|
2967
|
+
var noop = () => {
|
|
2968
|
+
};
|
|
2969
|
+
function SelectionCell({
|
|
2970
|
+
row,
|
|
2971
|
+
onToggleRow
|
|
2972
|
+
}) {
|
|
2973
|
+
const isSelected = row.getIsSelected();
|
|
2974
|
+
const handleClick = React2.useCallback((e) => {
|
|
2975
|
+
e.stopPropagation();
|
|
2976
|
+
onToggleRow(row.id, row.index, e.shiftKey);
|
|
2977
|
+
}, [row, onToggleRow]);
|
|
2978
|
+
return /* @__PURE__ */ React2__namespace.default.createElement("div", {
|
|
2979
|
+
style: {
|
|
2980
|
+
display: "flex",
|
|
2981
|
+
alignItems: "center",
|
|
2982
|
+
justifyContent: "center",
|
|
2983
|
+
width: "100%"
|
|
2984
|
+
}
|
|
2985
|
+
}, /* @__PURE__ */ React2__namespace.default.createElement("input", {
|
|
2986
|
+
type: "checkbox",
|
|
2987
|
+
checked: isSelected,
|
|
2988
|
+
onClick: handleClick,
|
|
2989
|
+
onChange: noop,
|
|
2990
|
+
"aria-label": `Select row ${row.index + 1}`
|
|
2991
|
+
}));
|
|
2992
|
+
}
|
|
2993
|
+
|
|
2994
|
+
// src/object-table/hooks/useSelectionColumn.tsx
|
|
2995
|
+
var SELECTION_COLUMN_ID = "__selection__";
|
|
2996
|
+
var useSelectionColumn = ({
|
|
2997
|
+
selectionMode,
|
|
2998
|
+
isAllSelected,
|
|
2999
|
+
hasSelection,
|
|
3000
|
+
onToggleAll,
|
|
3001
|
+
onToggleRow
|
|
3002
|
+
}) => {
|
|
3003
|
+
const selectionColumn = React2.useMemo(() => {
|
|
3004
|
+
if (selectionMode === "none") return null;
|
|
3005
|
+
return {
|
|
3006
|
+
id: SELECTION_COLUMN_ID,
|
|
3007
|
+
header: () => selectionMode === "multiple" ? /* @__PURE__ */ React2__namespace.default.createElement(SelectionHeaderCell, {
|
|
3008
|
+
isAllSelected,
|
|
3009
|
+
hasSelection,
|
|
3010
|
+
onToggleAll
|
|
3011
|
+
}) : null,
|
|
3012
|
+
cell: ({
|
|
3013
|
+
row
|
|
3014
|
+
}) => /* @__PURE__ */ React2__namespace.default.createElement(SelectionCell, {
|
|
3015
|
+
row,
|
|
3016
|
+
onToggleRow
|
|
3017
|
+
}),
|
|
3018
|
+
size: 50,
|
|
3019
|
+
minSize: 50,
|
|
3020
|
+
maxSize: 50,
|
|
3021
|
+
enableSorting: false,
|
|
3022
|
+
enableResizing: false
|
|
3023
|
+
};
|
|
3024
|
+
}, [selectionMode, isAllSelected, hasSelection, onToggleAll, onToggleRow]);
|
|
3025
|
+
return selectionColumn;
|
|
3026
|
+
};
|
|
3027
|
+
|
|
2806
3028
|
// ../../node_modules/.pnpm/@tanstack+virtual-core@3.13.17/node_modules/@tanstack/virtual-core/dist/esm/utils.js
|
|
2807
3029
|
function memo2(getDeps, fn, opts) {
|
|
2808
3030
|
let deps = opts.initialDeps ?? [];
|
|
@@ -3672,10 +3894,104 @@ function useVirtualizer(options) {
|
|
|
3672
3894
|
...options
|
|
3673
3895
|
});
|
|
3674
3896
|
}
|
|
3897
|
+
function CellContextMenu({
|
|
3898
|
+
cell,
|
|
3899
|
+
position,
|
|
3900
|
+
onClose,
|
|
3901
|
+
renderContent
|
|
3902
|
+
}) {
|
|
3903
|
+
const ref = React2.useRef(null);
|
|
3904
|
+
React2.useEffect(() => {
|
|
3905
|
+
const handleClickOutside = (event) => {
|
|
3906
|
+
if (ref.current && !ref.current.contains(event.target)) {
|
|
3907
|
+
onClose();
|
|
3908
|
+
}
|
|
3909
|
+
};
|
|
3910
|
+
document.addEventListener("mousedown", handleClickOutside);
|
|
3911
|
+
return () => {
|
|
3912
|
+
document.removeEventListener("mousedown", handleClickOutside);
|
|
3913
|
+
};
|
|
3914
|
+
}, [onClose]);
|
|
3915
|
+
return /* @__PURE__ */ reactDom.createPortal(/* @__PURE__ */ React2__namespace.default.createElement("div", {
|
|
3916
|
+
ref,
|
|
3917
|
+
style: {
|
|
3918
|
+
position: "fixed",
|
|
3919
|
+
zIndex: 9999,
|
|
3920
|
+
left: position.left,
|
|
3921
|
+
top: position.top,
|
|
3922
|
+
minWidth: position.width
|
|
3923
|
+
}
|
|
3924
|
+
}, renderContent(cell.row.original, cell)), document.body);
|
|
3925
|
+
}
|
|
3926
|
+
var useCellContextMenu = ({
|
|
3927
|
+
tdRef
|
|
3928
|
+
}) => {
|
|
3929
|
+
const [popoverPosition, setPopoverPosition] = React2.useState(null);
|
|
3930
|
+
const [isContextMenuOpen, setIsContextMenuOpen] = React2.useState(false);
|
|
3931
|
+
const handleOpenContextMenu = React2.useCallback((event) => {
|
|
3932
|
+
event.preventDefault();
|
|
3933
|
+
event.stopPropagation();
|
|
3934
|
+
if (tdRef.current) {
|
|
3935
|
+
const rect = tdRef.current.getBoundingClientRect();
|
|
3936
|
+
const position = {
|
|
3937
|
+
left: rect.left,
|
|
3938
|
+
top: rect.bottom,
|
|
3939
|
+
width: rect.width
|
|
3940
|
+
};
|
|
3941
|
+
setPopoverPosition(position);
|
|
3942
|
+
setIsContextMenuOpen(true);
|
|
3943
|
+
}
|
|
3944
|
+
}, [tdRef]);
|
|
3945
|
+
const handleCloseContextMenu = React2.useCallback(() => {
|
|
3946
|
+
setIsContextMenuOpen(false);
|
|
3947
|
+
setPopoverPosition(null);
|
|
3948
|
+
}, []);
|
|
3949
|
+
return {
|
|
3950
|
+
isContextMenuOpen,
|
|
3951
|
+
handleOpenContextMenu,
|
|
3952
|
+
handleCloseContextMenu,
|
|
3953
|
+
popoverPosition
|
|
3954
|
+
};
|
|
3955
|
+
};
|
|
3956
|
+
|
|
3957
|
+
// src/object-table/TableCell.tsx
|
|
3958
|
+
function TableCell({
|
|
3959
|
+
cell,
|
|
3960
|
+
renderCellContextMenu
|
|
3961
|
+
}) {
|
|
3962
|
+
const tdRef = React2.useRef(null);
|
|
3963
|
+
const isSelectColumn = cell.column.id === SELECTION_COLUMN_ID;
|
|
3964
|
+
const {
|
|
3965
|
+
isContextMenuOpen,
|
|
3966
|
+
handleOpenContextMenu,
|
|
3967
|
+
handleCloseContextMenu,
|
|
3968
|
+
popoverPosition
|
|
3969
|
+
} = useCellContextMenu({
|
|
3970
|
+
tdRef
|
|
3971
|
+
});
|
|
3972
|
+
const shouldRenderContextMenu = !isSelectColumn && isContextMenuOpen && !!popoverPosition && !!renderCellContextMenu;
|
|
3973
|
+
return /* @__PURE__ */ React2__namespace.default.createElement(React2__namespace.default.Fragment, null, /* @__PURE__ */ React2__namespace.default.createElement("td", {
|
|
3974
|
+
ref: tdRef,
|
|
3975
|
+
style: {
|
|
3976
|
+
display: "flex",
|
|
3977
|
+
alignItems: "center",
|
|
3978
|
+
width: cell.column.getSize()
|
|
3979
|
+
},
|
|
3980
|
+
onContextMenu: handleOpenContextMenu
|
|
3981
|
+
}, flexRender(cell.column.columnDef.cell, cell.getContext())), shouldRenderContextMenu && /* @__PURE__ */ React2__namespace.default.createElement(CellContextMenu, {
|
|
3982
|
+
cell,
|
|
3983
|
+
position: popoverPosition,
|
|
3984
|
+
onClose: handleCloseContextMenu,
|
|
3985
|
+
renderContent: renderCellContextMenu
|
|
3986
|
+
}));
|
|
3987
|
+
}
|
|
3988
|
+
|
|
3989
|
+
// src/object-table/TableRow.tsx
|
|
3675
3990
|
function TableRow({
|
|
3676
3991
|
row,
|
|
3677
3992
|
virtualRow,
|
|
3678
|
-
onRowClick
|
|
3993
|
+
onRowClick,
|
|
3994
|
+
renderCellContextMenu
|
|
3679
3995
|
}) {
|
|
3680
3996
|
const handleClick = React2.useCallback(() => {
|
|
3681
3997
|
onRowClick?.(row.original);
|
|
@@ -3688,14 +4004,11 @@ function TableRow({
|
|
|
3688
4004
|
display: "flex"
|
|
3689
4005
|
},
|
|
3690
4006
|
onClick: handleClick
|
|
3691
|
-
}, row.getVisibleCells().map((cell) => /* @__PURE__ */ React2__namespace.default.createElement(
|
|
4007
|
+
}, row.getVisibleCells().map((cell) => /* @__PURE__ */ React2__namespace.default.createElement(TableCell, {
|
|
3692
4008
|
key: cell.id,
|
|
3693
|
-
|
|
3694
|
-
|
|
3695
|
-
|
|
3696
|
-
width: cell.column.getSize()
|
|
3697
|
-
}
|
|
3698
|
-
}, flexRender(cell.column.columnDef.cell, cell.getContext()))));
|
|
4009
|
+
cell,
|
|
4010
|
+
renderCellContextMenu
|
|
4011
|
+
})));
|
|
3699
4012
|
}
|
|
3700
4013
|
|
|
3701
4014
|
// src/object-table/TableBody.tsx
|
|
@@ -3703,6 +4016,7 @@ function TableBody({
|
|
|
3703
4016
|
rows,
|
|
3704
4017
|
tableContainerRef,
|
|
3705
4018
|
onRowClick,
|
|
4019
|
+
renderCellContextMenu,
|
|
3706
4020
|
rowHeight = 40
|
|
3707
4021
|
}) {
|
|
3708
4022
|
const rowVirtualizer = useVirtualizer({
|
|
@@ -3726,12 +4040,13 @@ function TableBody({
|
|
|
3726
4040
|
key: row.id,
|
|
3727
4041
|
row,
|
|
3728
4042
|
virtualRow,
|
|
3729
|
-
onRowClick
|
|
4043
|
+
onRowClick,
|
|
4044
|
+
renderCellContextMenu
|
|
3730
4045
|
});
|
|
3731
4046
|
}));
|
|
3732
4047
|
}
|
|
3733
4048
|
function TableHeader({
|
|
3734
|
-
|
|
4049
|
+
table
|
|
3735
4050
|
}) {
|
|
3736
4051
|
return /* @__PURE__ */ React2__namespace.default.createElement("thead", {
|
|
3737
4052
|
style: {
|
|
@@ -3740,7 +4055,7 @@ function TableHeader({
|
|
|
3740
4055
|
top: 0,
|
|
3741
4056
|
zIndex: 1
|
|
3742
4057
|
}
|
|
3743
|
-
},
|
|
4058
|
+
}, table.getHeaderGroups().map((headerGroup) => /* @__PURE__ */ React2__namespace.default.createElement("tr", {
|
|
3744
4059
|
key: headerGroup.id,
|
|
3745
4060
|
style: {
|
|
3746
4061
|
display: "flex"
|
|
@@ -3753,9 +4068,25 @@ function TableHeader({
|
|
|
3753
4068
|
display: "flex",
|
|
3754
4069
|
width: header.getSize(),
|
|
3755
4070
|
justifyContent: "flex-start",
|
|
3756
|
-
alignItems: "center"
|
|
4071
|
+
alignItems: "center",
|
|
4072
|
+
position: "relative"
|
|
3757
4073
|
}
|
|
3758
|
-
}, header.isPlaceholder ? null : flexRender(header.column.columnDef.header, header.getContext()))
|
|
4074
|
+
}, header.isPlaceholder ? null : flexRender(header.column.columnDef.header, header.getContext()), header.column.getCanResize() && /* @__PURE__ */ React2__namespace.default.createElement("div", {
|
|
4075
|
+
onDoubleClick: () => header.column.resetSize(),
|
|
4076
|
+
onMouseDown: header.getResizeHandler(),
|
|
4077
|
+
onTouchStart: header.getResizeHandler(),
|
|
4078
|
+
style: {
|
|
4079
|
+
position: "absolute",
|
|
4080
|
+
right: 0,
|
|
4081
|
+
top: 0,
|
|
4082
|
+
height: "100%",
|
|
4083
|
+
width: "3px",
|
|
4084
|
+
cursor: "col-resize",
|
|
4085
|
+
touchAction: "none",
|
|
4086
|
+
zIndex: 11,
|
|
4087
|
+
transform: header.column.getIsResizing() ? `translateX(${table.getState().columnSizingInfo.deltaOffset ?? 0}px)` : ""
|
|
4088
|
+
}
|
|
4089
|
+
}))
|
|
3759
4090
|
)))));
|
|
3760
4091
|
}
|
|
3761
4092
|
|
|
@@ -3765,7 +4096,8 @@ function Table({
|
|
|
3765
4096
|
isLoading,
|
|
3766
4097
|
fetchNextPage,
|
|
3767
4098
|
onRowClick,
|
|
3768
|
-
rowHeight
|
|
4099
|
+
rowHeight,
|
|
4100
|
+
renderCellContextMenu
|
|
3769
4101
|
}) {
|
|
3770
4102
|
const tableContainerRef = React2.useRef(null);
|
|
3771
4103
|
const fetchingRef = React2.useRef(false);
|
|
@@ -3796,7 +4128,9 @@ function Table({
|
|
|
3796
4128
|
// needed for sticky header
|
|
3797
4129
|
height: "100%",
|
|
3798
4130
|
// needed for scrolling
|
|
3799
|
-
overflow: "auto"
|
|
4131
|
+
overflow: "auto",
|
|
4132
|
+
cursor: table.getState().columnSizingInfo?.isResizingColumn ? "col-resize" : "default",
|
|
4133
|
+
userSelect: table.getState().columnSizingInfo?.isResizingColumn ? "none" : "auto"
|
|
3800
4134
|
},
|
|
3801
4135
|
onScroll: handleScroll
|
|
3802
4136
|
}, /* @__PURE__ */ React2__namespace.default.createElement("table", {
|
|
@@ -3804,12 +4138,13 @@ function Table({
|
|
|
3804
4138
|
display: "grid"
|
|
3805
4139
|
}
|
|
3806
4140
|
}, /* @__PURE__ */ React2__namespace.default.createElement(TableHeader, {
|
|
3807
|
-
|
|
4141
|
+
table
|
|
3808
4142
|
}), /* @__PURE__ */ React2__namespace.default.createElement(TableBody, {
|
|
3809
4143
|
rows: table.getRowModel().rows,
|
|
3810
4144
|
tableContainerRef,
|
|
3811
4145
|
onRowClick,
|
|
3812
|
-
rowHeight
|
|
4146
|
+
rowHeight,
|
|
4147
|
+
renderCellContextMenu
|
|
3813
4148
|
})));
|
|
3814
4149
|
}
|
|
3815
4150
|
|
|
@@ -3818,14 +4153,18 @@ function ObjectTable({
|
|
|
3818
4153
|
objectSet,
|
|
3819
4154
|
objectType,
|
|
3820
4155
|
columnDefinitions,
|
|
3821
|
-
|
|
3822
|
-
|
|
4156
|
+
filter,
|
|
4157
|
+
onRowSelection,
|
|
4158
|
+
renderCellContextMenu,
|
|
4159
|
+
selectionMode = "none",
|
|
4160
|
+
selectedRows,
|
|
4161
|
+
...props
|
|
3823
4162
|
}) {
|
|
3824
4163
|
const {
|
|
3825
4164
|
data,
|
|
3826
4165
|
fetchMore,
|
|
3827
4166
|
isLoading
|
|
3828
|
-
} = useObjectTableData(objectSet, columnDefinitions);
|
|
4167
|
+
} = useObjectTableData(objectSet, columnDefinitions, filter);
|
|
3829
4168
|
const {
|
|
3830
4169
|
columns,
|
|
3831
4170
|
loading: isColumnsLoading
|
|
@@ -3835,21 +4174,58 @@ function ObjectTable({
|
|
|
3835
4174
|
} = useDefaultTableStates({
|
|
3836
4175
|
columnDefinitions
|
|
3837
4176
|
});
|
|
4177
|
+
const [columnSizing, setColumnSizing] = React2.useState({});
|
|
4178
|
+
const {
|
|
4179
|
+
rowSelection,
|
|
4180
|
+
isAllSelected,
|
|
4181
|
+
hasSelection,
|
|
4182
|
+
onToggleAll,
|
|
4183
|
+
onToggleRow
|
|
4184
|
+
} = useRowSelection({
|
|
4185
|
+
selectionMode,
|
|
4186
|
+
selectedRows,
|
|
4187
|
+
onRowSelection,
|
|
4188
|
+
data
|
|
4189
|
+
});
|
|
4190
|
+
const selectionColumn = useSelectionColumn({
|
|
4191
|
+
selectionMode,
|
|
4192
|
+
isAllSelected,
|
|
4193
|
+
hasSelection,
|
|
4194
|
+
onToggleAll,
|
|
4195
|
+
onToggleRow
|
|
4196
|
+
});
|
|
4197
|
+
const allColumns = React2.useMemo(() => {
|
|
4198
|
+
return selectionColumn ? [selectionColumn, ...columns] : columns;
|
|
4199
|
+
}, [selectionColumn, columns]);
|
|
3838
4200
|
const table = useReactTable({
|
|
3839
4201
|
data: data ?? [],
|
|
3840
|
-
columns,
|
|
4202
|
+
columns: allColumns,
|
|
3841
4203
|
getCoreRowModel: getCoreRowModel(),
|
|
3842
4204
|
state: {
|
|
3843
|
-
columnVisibility
|
|
3844
|
-
|
|
4205
|
+
columnVisibility,
|
|
4206
|
+
rowSelection,
|
|
4207
|
+
columnSizing
|
|
4208
|
+
},
|
|
4209
|
+
onColumnSizingChange: setColumnSizing,
|
|
4210
|
+
enableRowSelection: selectionMode !== "none",
|
|
4211
|
+
columnResizeMode: "onChange",
|
|
4212
|
+
columnResizeDirection: "ltr",
|
|
4213
|
+
defaultColumn: {
|
|
4214
|
+
minSize: 80
|
|
4215
|
+
},
|
|
4216
|
+
getRowId
|
|
3845
4217
|
});
|
|
4218
|
+
const onRenderCellContextMenu = React2.useCallback((row, cell) => {
|
|
4219
|
+
return renderCellContextMenu?.(row, cell.getValue());
|
|
4220
|
+
}, [renderCellContextMenu]);
|
|
3846
4221
|
const isTableLoading = isLoading || isColumnsLoading;
|
|
3847
4222
|
return /* @__PURE__ */ React2__namespace.default.createElement(Table, {
|
|
3848
4223
|
table,
|
|
3849
4224
|
isLoading: isTableLoading,
|
|
3850
4225
|
fetchNextPage: fetchMore,
|
|
3851
|
-
onRowClick,
|
|
3852
|
-
rowHeight
|
|
4226
|
+
onRowClick: props.onRowClick,
|
|
4227
|
+
rowHeight: props.rowHeight,
|
|
4228
|
+
renderCellContextMenu: onRenderCellContextMenu
|
|
3853
4229
|
});
|
|
3854
4230
|
}
|
|
3855
4231
|
/*! Bundled license information:
|