@osdk/react-components 0.1.0-beta.0 → 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 +31 -0
- package/README.md +56 -6
- 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 +114 -0
- package/build/browser/object-table/ObjectTable.js.map +1 -0
- 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 +81 -0
- package/build/browser/object-table/Table.js.map +1 -0
- package/build/browser/object-table/TableBody.js +56 -0
- package/build/browser/object-table/TableBody.js.map +1 -0
- 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 +63 -0
- package/build/browser/object-table/TableHeader.js.map +1 -0
- package/build/browser/object-table/TableRow.js +42 -0
- package/build/browser/object-table/TableRow.js.map +1 -0
- 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__/useColumnDefs.test.js +508 -0
- package/build/browser/object-table/hooks/__tests__/useColumnDefs.test.js.map +1 -0
- package/build/browser/object-table/hooks/__tests__/useDefaultTableStates.test.js +178 -0
- package/build/browser/object-table/hooks/__tests__/useDefaultTableStates.test.js.map +1 -0
- package/build/browser/object-table/hooks/__tests__/useObjectTableData.test.js +229 -0
- package/build/browser/object-table/hooks/__tests__/useObjectTableData.test.js.map +1 -0
- 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 +87 -0
- package/build/browser/object-table/hooks/useColumnDefs.js.map +1 -0
- package/build/browser/object-table/hooks/useDefaultTableStates.js +43 -0
- package/build/browser/object-table/hooks/useDefaultTableStates.js.map +1 -0
- package/build/browser/object-table/hooks/useObjectTableData.js +49 -0
- package/build/browser/object-table/hooks/useObjectTableData.js.map +1 -0
- 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/{junk.test.js → object-table/utils/getRowId.js} +6 -8
- package/build/browser/object-table/utils/getRowId.js.map +1 -0
- package/build/browser/public/experimental.js +18 -1
- package/build/browser/public/experimental.js.map +1 -1
- package/build/cjs/public/experimental.cjs +4256 -0
- package/build/cjs/public/experimental.cjs.map +1 -1
- package/build/cjs/public/experimental.d.cts +39 -17
- 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 +114 -0
- package/build/esm/object-table/ObjectTable.js.map +1 -0
- 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 +81 -0
- package/build/esm/object-table/Table.js.map +1 -0
- package/build/esm/object-table/TableBody.js +56 -0
- package/build/esm/object-table/TableBody.js.map +1 -0
- 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 +63 -0
- package/build/esm/object-table/TableHeader.js.map +1 -0
- package/build/esm/object-table/TableRow.js +42 -0
- package/build/esm/object-table/TableRow.js.map +1 -0
- 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__/useColumnDefs.test.js +508 -0
- package/build/esm/object-table/hooks/__tests__/useColumnDefs.test.js.map +1 -0
- package/build/esm/object-table/hooks/__tests__/useDefaultTableStates.test.js +178 -0
- package/build/esm/object-table/hooks/__tests__/useDefaultTableStates.test.js.map +1 -0
- package/build/esm/object-table/hooks/__tests__/useObjectTableData.test.js +229 -0
- package/build/esm/object-table/hooks/__tests__/useObjectTableData.test.js.map +1 -0
- 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 +87 -0
- package/build/esm/object-table/hooks/useColumnDefs.js.map +1 -0
- package/build/esm/object-table/hooks/useDefaultTableStates.js +43 -0
- package/build/esm/object-table/hooks/useDefaultTableStates.js.map +1 -0
- package/build/esm/object-table/hooks/useObjectTableData.js +49 -0
- package/build/esm/object-table/hooks/useObjectTableData.js.map +1 -0
- 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/{junk.test.js → object-table/utils/getRowId.js} +6 -8
- package/build/esm/object-table/utils/getRowId.js.map +1 -0
- package/build/esm/public/experimental.js +18 -1
- 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 +16 -0
- package/build/types/object-table/ObjectTable.d.ts.map +1 -0
- package/build/types/object-table/ObjectTableApi.d.ts +30 -20
- 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 +12 -0
- package/build/types/object-table/Table.d.ts.map +1 -0
- package/build/types/object-table/TableBody.d.ts +11 -0
- package/build/types/object-table/TableBody.d.ts.map +1 -0
- 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 +7 -0
- package/build/types/object-table/TableHeader.d.ts.map +1 -0
- package/build/types/object-table/TableRow.d.ts +11 -0
- package/build/types/object-table/TableRow.d.ts.map +1 -0
- package/build/types/object-table/hooks/__tests__/useCellContextMenu.test.d.ts.map +1 -0
- package/build/types/object-table/hooks/__tests__/useColumnDefs.test.d.ts +1 -0
- package/build/types/object-table/hooks/__tests__/useColumnDefs.test.d.ts.map +1 -0
- package/build/types/object-table/hooks/__tests__/useDefaultTableStates.test.d.ts +1 -0
- package/build/types/object-table/hooks/__tests__/useDefaultTableStates.test.d.ts.map +1 -0
- package/build/types/object-table/hooks/__tests__/useObjectTableData.test.d.ts +1 -0
- package/build/types/object-table/hooks/__tests__/useObjectTableData.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/useColumnDefs.d.ts +20 -0
- package/build/types/object-table/hooks/useColumnDefs.d.ts.map +1 -0
- package/build/types/object-table/hooks/useDefaultTableStates.d.ts +19 -0
- package/build/types/object-table/hooks/useDefaultTableStates.d.ts.map +1 -0
- package/build/types/object-table/hooks/useObjectTableData.d.ts +13 -0
- package/build/types/object-table/hooks/useObjectTableData.d.ts.map +1 -0
- 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 +2 -1
- package/build/types/public/experimental.d.ts.map +1 -1
- package/package.json +11 -4
- package/build/browser/junk.test.js.map +0 -1
- package/build/esm/junk.test.js.map +0 -1
- package/build/types/junk.test.d.ts.map +0 -1
- /package/build/types/{junk.test.d.ts → object-table/hooks/__tests__/useCellContextMenu.test.d.ts} +0 -0
|
@@ -0,0 +1,178 @@
|
|
|
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
|
+
import { renderHook, waitFor } from "@testing-library/react";
|
|
18
|
+
import { describe, expect, it } from "vitest";
|
|
19
|
+
import { useDefaultTableStates } from "../useDefaultTableStates.js";
|
|
20
|
+
const TestObjectType = {
|
|
21
|
+
type: "object",
|
|
22
|
+
apiName: "TestObject"
|
|
23
|
+
};
|
|
24
|
+
describe(useDefaultTableStates, () => {
|
|
25
|
+
it("returns undefined columnVisibility when no columnDefinitions provided", () => {
|
|
26
|
+
const {
|
|
27
|
+
result
|
|
28
|
+
} = renderHook(() => useDefaultTableStates({
|
|
29
|
+
columnDefinitions: undefined
|
|
30
|
+
}));
|
|
31
|
+
expect(result.current.columnVisibility).toBeUndefined();
|
|
32
|
+
});
|
|
33
|
+
it("returns empty columnVisibility when columnDefinitions have no isVisible properties", () => {
|
|
34
|
+
const columnDefinitions = [{
|
|
35
|
+
locator: {
|
|
36
|
+
type: "property",
|
|
37
|
+
id: "name"
|
|
38
|
+
}
|
|
39
|
+
}, {
|
|
40
|
+
locator: {
|
|
41
|
+
type: "property",
|
|
42
|
+
id: "email"
|
|
43
|
+
}
|
|
44
|
+
}];
|
|
45
|
+
const {
|
|
46
|
+
result
|
|
47
|
+
} = renderHook(() => useDefaultTableStates({
|
|
48
|
+
columnDefinitions
|
|
49
|
+
}));
|
|
50
|
+
expect(result.current.columnVisibility).toEqual({});
|
|
51
|
+
});
|
|
52
|
+
it("handles mixed column types with different visibility states", async () => {
|
|
53
|
+
const columnDefinitions = [{
|
|
54
|
+
locator: {
|
|
55
|
+
type: "property",
|
|
56
|
+
id: "name"
|
|
57
|
+
},
|
|
58
|
+
isVisible: true
|
|
59
|
+
}, {
|
|
60
|
+
locator: {
|
|
61
|
+
type: "function",
|
|
62
|
+
id: "myFunction"
|
|
63
|
+
},
|
|
64
|
+
isVisible: false
|
|
65
|
+
}, {
|
|
66
|
+
locator: {
|
|
67
|
+
type: "rdp",
|
|
68
|
+
id: "myRdp",
|
|
69
|
+
creator: () => ({})
|
|
70
|
+
},
|
|
71
|
+
isVisible: true
|
|
72
|
+
}, {
|
|
73
|
+
locator: {
|
|
74
|
+
type: "property",
|
|
75
|
+
id: "email"
|
|
76
|
+
}
|
|
77
|
+
}];
|
|
78
|
+
const {
|
|
79
|
+
result
|
|
80
|
+
} = renderHook(() => useDefaultTableStates({
|
|
81
|
+
columnDefinitions
|
|
82
|
+
}));
|
|
83
|
+
await waitFor(() => {
|
|
84
|
+
expect(result.current.columnVisibility).toEqual({
|
|
85
|
+
name: true,
|
|
86
|
+
myFunction: false,
|
|
87
|
+
myRdp: true
|
|
88
|
+
});
|
|
89
|
+
});
|
|
90
|
+
});
|
|
91
|
+
it("updates columnVisibility when columnDefinitions change", async () => {
|
|
92
|
+
const {
|
|
93
|
+
result,
|
|
94
|
+
rerender
|
|
95
|
+
} = renderHook(({
|
|
96
|
+
columnDefinitions
|
|
97
|
+
}) => useDefaultTableStates({
|
|
98
|
+
columnDefinitions
|
|
99
|
+
}), {
|
|
100
|
+
initialProps: {
|
|
101
|
+
columnDefinitions: [{
|
|
102
|
+
locator: {
|
|
103
|
+
type: "property",
|
|
104
|
+
id: "name"
|
|
105
|
+
},
|
|
106
|
+
isVisible: true
|
|
107
|
+
}]
|
|
108
|
+
}
|
|
109
|
+
});
|
|
110
|
+
await waitFor(() => {
|
|
111
|
+
expect(result.current.columnVisibility).toEqual({
|
|
112
|
+
name: true
|
|
113
|
+
});
|
|
114
|
+
});
|
|
115
|
+
rerender({
|
|
116
|
+
columnDefinitions: [{
|
|
117
|
+
locator: {
|
|
118
|
+
type: "property",
|
|
119
|
+
id: "name"
|
|
120
|
+
},
|
|
121
|
+
isVisible: false
|
|
122
|
+
}, {
|
|
123
|
+
locator: {
|
|
124
|
+
type: "property",
|
|
125
|
+
id: "email"
|
|
126
|
+
},
|
|
127
|
+
isVisible: true
|
|
128
|
+
}]
|
|
129
|
+
});
|
|
130
|
+
await waitFor(() => {
|
|
131
|
+
expect(result.current.columnVisibility).toEqual({
|
|
132
|
+
name: false,
|
|
133
|
+
email: true
|
|
134
|
+
});
|
|
135
|
+
});
|
|
136
|
+
});
|
|
137
|
+
it("only includes columns with explicit isVisible in the visibility state", async () => {
|
|
138
|
+
const columnDefinitions = [{
|
|
139
|
+
locator: {
|
|
140
|
+
type: "property",
|
|
141
|
+
id: "name"
|
|
142
|
+
},
|
|
143
|
+
isVisible: true
|
|
144
|
+
}, {
|
|
145
|
+
locator: {
|
|
146
|
+
type: "property",
|
|
147
|
+
id: "email"
|
|
148
|
+
}
|
|
149
|
+
}, {
|
|
150
|
+
locator: {
|
|
151
|
+
type: "property",
|
|
152
|
+
id: "age"
|
|
153
|
+
},
|
|
154
|
+
isVisible: false
|
|
155
|
+
}, {
|
|
156
|
+
locator: {
|
|
157
|
+
type: "property",
|
|
158
|
+
id: "id"
|
|
159
|
+
}
|
|
160
|
+
}];
|
|
161
|
+
const {
|
|
162
|
+
result
|
|
163
|
+
} = renderHook(() => useDefaultTableStates({
|
|
164
|
+
columnDefinitions
|
|
165
|
+
}));
|
|
166
|
+
await waitFor(() => {
|
|
167
|
+
expect(result.current.columnVisibility).toEqual({
|
|
168
|
+
name: true,
|
|
169
|
+
age: false
|
|
170
|
+
});
|
|
171
|
+
});
|
|
172
|
+
|
|
173
|
+
// Verify that columns without isVisible are not in the state
|
|
174
|
+
expect(result.current.columnVisibility).not.toHaveProperty("email");
|
|
175
|
+
expect(result.current.columnVisibility).not.toHaveProperty("id");
|
|
176
|
+
});
|
|
177
|
+
});
|
|
178
|
+
//# sourceMappingURL=useDefaultTableStates.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useDefaultTableStates.test.js","names":["renderHook","waitFor","describe","expect","it","useDefaultTableStates","TestObjectType","type","apiName","result","columnDefinitions","undefined","current","columnVisibility","toBeUndefined","locator","id","toEqual","isVisible","creator","name","myFunction","myRdp","rerender","initialProps","email","age","not","toHaveProperty"],"sources":["useDefaultTableStates.test.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 {\n DerivedProperty,\n ObjectTypeDefinition,\n PropertyKeys,\n QueryDefinition,\n SimplePropertyDef,\n} from \"@osdk/api\";\nimport { renderHook, waitFor } from \"@testing-library/react\";\nimport { describe, expect, it } from \"vitest\";\nimport type { ColumnDefinition } from \"../../ObjectTableApi.js\";\nimport { useDefaultTableStates } from \"../useDefaultTableStates.js\";\n\nconst TestObjectType = {\n type: \"object\",\n apiName: \"TestObject\",\n} as const satisfies ObjectTypeDefinition;\n\ntype TestObject = typeof TestObjectType;\ntype TestObjectKeys = PropertyKeys<TestObject>;\n\ndescribe(useDefaultTableStates, () => {\n it(\"returns undefined columnVisibility when no columnDefinitions provided\", () => {\n const { result } = renderHook(() =>\n useDefaultTableStates({\n columnDefinitions: undefined,\n })\n );\n\n expect(result.current.columnVisibility).toBeUndefined();\n });\n\n it(\"returns empty columnVisibility when columnDefinitions have no isVisible properties\", () => {\n const columnDefinitions: Array<ColumnDefinition<TestObject, {}, {}>> = [\n {\n locator: { type: \"property\", id: \"name\" as TestObjectKeys },\n },\n {\n locator: { type: \"property\", id: \"email\" as TestObjectKeys },\n },\n ];\n\n const { result } = renderHook(() =>\n useDefaultTableStates({\n columnDefinitions,\n })\n );\n\n expect(result.current.columnVisibility).toEqual({});\n });\n\n it(\"handles mixed column types with different visibility states\", async () => {\n const mockRdpCreator = (() => ({})) as unknown as DerivedProperty.Creator<\n TestObject,\n SimplePropertyDef\n >;\n\n const columnDefinitions: Array<\n ColumnDefinition<\n TestObject,\n { myRdp: SimplePropertyDef },\n { myFunction: QueryDefinition<{}> }\n >\n > = [\n {\n locator: { type: \"property\", id: \"name\" as TestObjectKeys },\n isVisible: true,\n },\n {\n locator: { type: \"function\", id: \"myFunction\" },\n isVisible: false,\n },\n {\n locator: { type: \"rdp\", id: \"myRdp\", creator: mockRdpCreator },\n isVisible: true,\n },\n {\n locator: { type: \"property\", id: \"email\" as TestObjectKeys },\n },\n ];\n\n const { result } = renderHook(() =>\n useDefaultTableStates({\n columnDefinitions,\n })\n );\n\n await waitFor(() => {\n expect(result.current.columnVisibility).toEqual({\n name: true,\n myFunction: false,\n myRdp: true,\n });\n });\n });\n\n it(\"updates columnVisibility when columnDefinitions change\", async () => {\n const initialColumnDefinitions: Array<\n ColumnDefinition<TestObject, {}, {}>\n > = [\n {\n locator: { type: \"property\", id: \"name\" as TestObjectKeys },\n isVisible: true,\n },\n ];\n\n const { result, rerender } = renderHook(\n ({ columnDefinitions }) =>\n useDefaultTableStates({\n columnDefinitions,\n }),\n {\n initialProps: { columnDefinitions: initialColumnDefinitions },\n },\n );\n\n await waitFor(() => {\n expect(result.current.columnVisibility).toEqual({\n name: true,\n });\n });\n\n const updatedColumnDefinitions: Array<\n ColumnDefinition<TestObject, {}, {}>\n > = [\n {\n locator: { type: \"property\", id: \"name\" as TestObjectKeys },\n isVisible: false,\n },\n {\n locator: { type: \"property\", id: \"email\" as TestObjectKeys },\n isVisible: true,\n },\n ];\n\n rerender({ columnDefinitions: updatedColumnDefinitions });\n\n await waitFor(() => {\n expect(result.current.columnVisibility).toEqual({\n name: false,\n email: true,\n });\n });\n });\n\n it(\"only includes columns with explicit isVisible in the visibility state\", async () => {\n const columnDefinitions: Array<ColumnDefinition<TestObject, {}, {}>> = [\n {\n locator: { type: \"property\", id: \"name\" as TestObjectKeys },\n isVisible: true,\n },\n {\n locator: { type: \"property\", id: \"email\" as TestObjectKeys },\n },\n {\n locator: { type: \"property\", id: \"age\" as TestObjectKeys },\n isVisible: false,\n },\n {\n locator: { type: \"property\", id: \"id\" as TestObjectKeys },\n },\n ];\n\n const { result } = renderHook(() =>\n useDefaultTableStates({\n columnDefinitions,\n })\n );\n\n await waitFor(() => {\n expect(result.current.columnVisibility).toEqual({\n name: true,\n age: false,\n });\n });\n\n // Verify that columns without isVisible are not in the state\n expect(result.current.columnVisibility).not.toHaveProperty(\"email\");\n expect(result.current.columnVisibility).not.toHaveProperty(\"id\");\n });\n});\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,229 @@
|
|
|
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
|
+
import { OsdkProvider } from "@osdk/react";
|
|
18
|
+
import { renderHook } from "@testing-library/react";
|
|
19
|
+
import * as React from "react";
|
|
20
|
+
import { describe, expect, it, vi } from "vitest";
|
|
21
|
+
import { useObjectTableData } from "../useObjectTableData.js";
|
|
22
|
+
vi.mock("@osdk/react/experimental", () => ({
|
|
23
|
+
useObjectSet: vi.fn((objectSet, options) => {
|
|
24
|
+
return {
|
|
25
|
+
data: [],
|
|
26
|
+
isLoading: false,
|
|
27
|
+
error: undefined,
|
|
28
|
+
fetchNextPage: vi.fn(),
|
|
29
|
+
hasNextPage: false,
|
|
30
|
+
isFetchingNextPage: false,
|
|
31
|
+
// Return the options to verify they were passed correctly
|
|
32
|
+
_testOptions: options
|
|
33
|
+
};
|
|
34
|
+
})
|
|
35
|
+
}));
|
|
36
|
+
const TestObjectType = {
|
|
37
|
+
type: "object",
|
|
38
|
+
apiName: "TestObject"
|
|
39
|
+
};
|
|
40
|
+
const mockObjectSet = {
|
|
41
|
+
objectType: TestObjectType
|
|
42
|
+
};
|
|
43
|
+
describe(useObjectTableData, () => {
|
|
44
|
+
const wrapper = (client => {
|
|
45
|
+
return ({
|
|
46
|
+
children
|
|
47
|
+
}) => {
|
|
48
|
+
return /*#__PURE__*/React.createElement(OsdkProvider, {
|
|
49
|
+
client: client
|
|
50
|
+
}, children);
|
|
51
|
+
};
|
|
52
|
+
})({});
|
|
53
|
+
it("calls useObjectSet with pageSize of 50", () => {
|
|
54
|
+
const {
|
|
55
|
+
result
|
|
56
|
+
} = renderHook(() => useObjectTableData(mockObjectSet), {
|
|
57
|
+
wrapper
|
|
58
|
+
});
|
|
59
|
+
const mockResult = result.current;
|
|
60
|
+
expect(mockResult._testOptions).toEqual({
|
|
61
|
+
withProperties: undefined,
|
|
62
|
+
pageSize: 50
|
|
63
|
+
});
|
|
64
|
+
});
|
|
65
|
+
it("calls useObjectSet with filter clause provided", () => {
|
|
66
|
+
const filterClause = {
|
|
67
|
+
name: "John"
|
|
68
|
+
};
|
|
69
|
+
const {
|
|
70
|
+
result
|
|
71
|
+
} = renderHook(() => useObjectTableData(mockObjectSet, undefined, filterClause), {
|
|
72
|
+
wrapper
|
|
73
|
+
});
|
|
74
|
+
const mockResult = result.current;
|
|
75
|
+
expect(mockResult._testOptions.where).toEqual(filterClause);
|
|
76
|
+
});
|
|
77
|
+
it("calls useObjectSet without withProperties when no columnDefinitions provided", () => {
|
|
78
|
+
const {
|
|
79
|
+
result
|
|
80
|
+
} = renderHook(() => useObjectTableData(mockObjectSet, undefined), {
|
|
81
|
+
wrapper
|
|
82
|
+
});
|
|
83
|
+
const mockResult = result.current;
|
|
84
|
+
expect(mockResult._testOptions.withProperties).toBeUndefined();
|
|
85
|
+
expect(mockResult._testOptions.pageSize).toBe(50);
|
|
86
|
+
});
|
|
87
|
+
it("calls useObjectSet without withProperties when columnDefinitions have no RDP columns", () => {
|
|
88
|
+
const columnDefinitions = [{
|
|
89
|
+
locator: {
|
|
90
|
+
type: "property",
|
|
91
|
+
id: "name"
|
|
92
|
+
}
|
|
93
|
+
}, {
|
|
94
|
+
locator: {
|
|
95
|
+
type: "property",
|
|
96
|
+
id: "email"
|
|
97
|
+
}
|
|
98
|
+
}];
|
|
99
|
+
const {
|
|
100
|
+
result
|
|
101
|
+
} = renderHook(() => useObjectTableData(mockObjectSet, columnDefinitions), {
|
|
102
|
+
wrapper
|
|
103
|
+
});
|
|
104
|
+
const mockResult = result.current;
|
|
105
|
+
expect(mockResult._testOptions.withProperties).toEqual({});
|
|
106
|
+
expect(mockResult._testOptions.pageSize).toBe(50);
|
|
107
|
+
});
|
|
108
|
+
it("extracts RDP creators and passes them to useObjectSet", () => {
|
|
109
|
+
const mockRdpCreator1 = vi.fn();
|
|
110
|
+
const mockRdpCreator2 = vi.fn();
|
|
111
|
+
const columnDefinitions = [{
|
|
112
|
+
locator: {
|
|
113
|
+
type: "property",
|
|
114
|
+
id: "name"
|
|
115
|
+
}
|
|
116
|
+
}, {
|
|
117
|
+
locator: {
|
|
118
|
+
type: "rdp",
|
|
119
|
+
id: "rdp1",
|
|
120
|
+
creator: mockRdpCreator1
|
|
121
|
+
}
|
|
122
|
+
}, {
|
|
123
|
+
locator: {
|
|
124
|
+
type: "rdp",
|
|
125
|
+
id: "rdp2",
|
|
126
|
+
creator: mockRdpCreator2
|
|
127
|
+
}
|
|
128
|
+
}, {
|
|
129
|
+
locator: {
|
|
130
|
+
type: "function",
|
|
131
|
+
id: "myFunction"
|
|
132
|
+
}
|
|
133
|
+
}];
|
|
134
|
+
const {
|
|
135
|
+
result
|
|
136
|
+
} = renderHook(() => useObjectTableData(mockObjectSet, columnDefinitions), {
|
|
137
|
+
wrapper
|
|
138
|
+
});
|
|
139
|
+
const mockResult = result.current;
|
|
140
|
+
expect(mockResult._testOptions.withProperties).toEqual({
|
|
141
|
+
rdp1: mockRdpCreator1,
|
|
142
|
+
rdp2: mockRdpCreator2
|
|
143
|
+
});
|
|
144
|
+
});
|
|
145
|
+
it("memoizes withProperties based on columnDefinitions", () => {
|
|
146
|
+
const mockRdpCreator = vi.fn();
|
|
147
|
+
const columnDefinitions = [{
|
|
148
|
+
locator: {
|
|
149
|
+
type: "rdp",
|
|
150
|
+
id: "myRdp",
|
|
151
|
+
creator: mockRdpCreator
|
|
152
|
+
}
|
|
153
|
+
}];
|
|
154
|
+
const {
|
|
155
|
+
result,
|
|
156
|
+
rerender
|
|
157
|
+
} = renderHook(({
|
|
158
|
+
colDefs
|
|
159
|
+
}) => useObjectTableData(mockObjectSet, colDefs), {
|
|
160
|
+
initialProps: {
|
|
161
|
+
colDefs: columnDefinitions
|
|
162
|
+
},
|
|
163
|
+
wrapper
|
|
164
|
+
});
|
|
165
|
+
const firstMockResult = result.current;
|
|
166
|
+
const firstWithProperties = firstMockResult._testOptions.withProperties;
|
|
167
|
+
|
|
168
|
+
// Rerender with same columnDefinitions reference
|
|
169
|
+
rerender({
|
|
170
|
+
colDefs: columnDefinitions
|
|
171
|
+
});
|
|
172
|
+
|
|
173
|
+
// Should be the same reference (memoized)
|
|
174
|
+
const secondMockResult = result.current;
|
|
175
|
+
expect(secondMockResult._testOptions.withProperties).toBe(firstWithProperties);
|
|
176
|
+
});
|
|
177
|
+
it("updates withProperties when columnDefinitions change", () => {
|
|
178
|
+
const mockRdpCreator1 = vi.fn();
|
|
179
|
+
const mockRdpCreator2 = vi.fn();
|
|
180
|
+
const {
|
|
181
|
+
result,
|
|
182
|
+
rerender
|
|
183
|
+
} = renderHook(({
|
|
184
|
+
colDefs
|
|
185
|
+
}) => useObjectTableData(mockObjectSet, colDefs), {
|
|
186
|
+
initialProps: {
|
|
187
|
+
colDefs: [{
|
|
188
|
+
locator: {
|
|
189
|
+
type: "rdp",
|
|
190
|
+
id: "rdp1",
|
|
191
|
+
creator: mockRdpCreator1
|
|
192
|
+
}
|
|
193
|
+
}]
|
|
194
|
+
},
|
|
195
|
+
wrapper
|
|
196
|
+
});
|
|
197
|
+
const firstMockResult = result.current;
|
|
198
|
+
expect(firstMockResult._testOptions.withProperties).toEqual({
|
|
199
|
+
rdp1: mockRdpCreator1
|
|
200
|
+
});
|
|
201
|
+
rerender({
|
|
202
|
+
colDefs: [{
|
|
203
|
+
locator: {
|
|
204
|
+
type: "rdp",
|
|
205
|
+
id: "rdp2",
|
|
206
|
+
creator: mockRdpCreator2
|
|
207
|
+
}
|
|
208
|
+
}]
|
|
209
|
+
});
|
|
210
|
+
const secondMockResult = result.current;
|
|
211
|
+
expect(secondMockResult._testOptions.withProperties).toEqual({
|
|
212
|
+
rdp2: mockRdpCreator2
|
|
213
|
+
});
|
|
214
|
+
});
|
|
215
|
+
it("returns useObjectSet result structure", () => {
|
|
216
|
+
const {
|
|
217
|
+
result
|
|
218
|
+
} = renderHook(() => useObjectTableData(mockObjectSet), {
|
|
219
|
+
wrapper
|
|
220
|
+
});
|
|
221
|
+
expect(result.current).toHaveProperty("data");
|
|
222
|
+
expect(result.current).toHaveProperty("isLoading");
|
|
223
|
+
expect(result.current).toHaveProperty("error");
|
|
224
|
+
expect(result.current).toHaveProperty("fetchNextPage");
|
|
225
|
+
expect(result.current).toHaveProperty("hasNextPage");
|
|
226
|
+
expect(result.current).toHaveProperty("isFetchingNextPage");
|
|
227
|
+
});
|
|
228
|
+
});
|
|
229
|
+
//# sourceMappingURL=useObjectTableData.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useObjectTableData.test.js","names":["OsdkProvider","renderHook","React","describe","expect","it","vi","useObjectTableData","mock","useObjectSet","fn","objectSet","options","data","isLoading","error","undefined","fetchNextPage","hasNextPage","isFetchingNextPage","_testOptions","TestObjectType","type","apiName","mockObjectSet","objectType","wrapper","client","children","createElement","result","mockResult","current","toEqual","withProperties","pageSize","filterClause","name","where","toBeUndefined","toBe","columnDefinitions","locator","id","mockRdpCreator1","mockRdpCreator2","creator","rdp1","rdp2","mockRdpCreator","rerender","colDefs","initialProps","firstMockResult","firstWithProperties","secondMockResult","toHaveProperty"],"sources":["useObjectTableData.test.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 {\n DerivedProperty,\n ObjectSet,\n ObjectTypeDefinition,\n PropertyKeys,\n SimplePropertyDef,\n WhereClause,\n} from \"@osdk/api\";\nimport type { Client } from \"@osdk/client\";\nimport { OsdkProvider } from \"@osdk/react\";\nimport { renderHook } from \"@testing-library/react\";\nimport * as React from \"react\";\nimport { describe, expect, it, vi } from \"vitest\";\nimport type { ColumnDefinition } from \"../../ObjectTableApi.js\";\nimport { useObjectTableData } from \"../useObjectTableData.js\";\n\ninterface MockUseObjectSetReturn {\n data: [];\n isLoading: false;\n error: undefined;\n fetchNextPage: ReturnType<typeof vi.fn>;\n hasNextPage: false;\n isFetchingNextPage: false;\n _testOptions: {\n withProperties?: Record<string, unknown>;\n pageSize: number;\n where?: WhereClause<any>;\n };\n}\n\nvi.mock(\"@osdk/react/experimental\", () => ({\n useObjectSet: vi.fn((objectSet, options): MockUseObjectSetReturn => {\n return {\n data: [],\n isLoading: false,\n error: undefined,\n fetchNextPage: vi.fn(),\n hasNextPage: false,\n isFetchingNextPage: false,\n // Return the options to verify they were passed correctly\n _testOptions: options,\n };\n }),\n}));\n\nconst TestObjectType = {\n type: \"object\",\n apiName: \"TestObject\",\n} as const satisfies ObjectTypeDefinition;\n\ntype TestObject = typeof TestObjectType;\ntype TestObjectKeys = PropertyKeys<TestObject>;\n\nconst mockObjectSet = {\n objectType: TestObjectType,\n} as unknown as ObjectSet<TestObject>;\n\ndescribe(useObjectTableData, () => {\n const createWrapper = (client: Client) => {\n return ({ children }: React.PropsWithChildren) => {\n return <OsdkProvider client={client}>{children}</OsdkProvider>;\n };\n };\n\n const fakeClient = {} as unknown as Client;\n const wrapper = createWrapper(fakeClient);\n\n it(\"calls useObjectSet with pageSize of 50\", () => {\n const { result } = renderHook(\n () => useObjectTableData(mockObjectSet),\n { wrapper },\n );\n\n const mockResult = result.current as unknown as MockUseObjectSetReturn;\n expect(mockResult._testOptions).toEqual({\n withProperties: undefined,\n pageSize: 50,\n });\n });\n\n it(\"calls useObjectSet with filter clause provided\", () => {\n const filterClause = {\n name: \"John\",\n } as unknown as WhereClause<TestObject>;\n const { result } = renderHook(\n () => useObjectTableData(mockObjectSet, undefined, filterClause),\n { wrapper },\n );\n\n const mockResult = result.current as unknown as MockUseObjectSetReturn;\n expect(mockResult._testOptions.where).toEqual(filterClause);\n });\n\n it(\"calls useObjectSet without withProperties when no columnDefinitions provided\", () => {\n const { result } = renderHook(\n () => useObjectTableData(mockObjectSet, undefined),\n { wrapper },\n );\n\n const mockResult = result.current as unknown as MockUseObjectSetReturn;\n expect(mockResult._testOptions.withProperties).toBeUndefined();\n expect(mockResult._testOptions.pageSize).toBe(50);\n });\n\n it(\"calls useObjectSet without withProperties when columnDefinitions have no RDP columns\", () => {\n const columnDefinitions: Array<ColumnDefinition<TestObject, {}, {}>> = [\n {\n locator: { type: \"property\", id: \"name\" as TestObjectKeys },\n },\n {\n locator: { type: \"property\", id: \"email\" as TestObjectKeys },\n },\n ];\n\n const { result } = renderHook(\n () => useObjectTableData(mockObjectSet, columnDefinitions),\n { wrapper },\n );\n\n const mockResult = result.current as unknown as MockUseObjectSetReturn;\n expect(mockResult._testOptions.withProperties).toEqual({});\n expect(mockResult._testOptions.pageSize).toBe(50);\n });\n\n it(\"extracts RDP creators and passes them to useObjectSet\", () => {\n const mockRdpCreator1 = vi.fn() as unknown as DerivedProperty.Creator<\n TestObject,\n SimplePropertyDef\n >;\n const mockRdpCreator2 = vi.fn() as unknown as DerivedProperty.Creator<\n TestObject,\n SimplePropertyDef\n >;\n\n const columnDefinitions: Array<\n ColumnDefinition<\n TestObject,\n { rdp1: any; rdp2: any },\n { myFunction: any }\n >\n > = [\n {\n locator: { type: \"property\", id: \"name\" as TestObjectKeys },\n },\n {\n locator: { type: \"rdp\", id: \"rdp1\", creator: mockRdpCreator1 },\n },\n {\n locator: { type: \"rdp\", id: \"rdp2\", creator: mockRdpCreator2 },\n },\n {\n locator: { type: \"function\", id: \"myFunction\" },\n },\n ];\n\n const { result } = renderHook(\n () => useObjectTableData(mockObjectSet, columnDefinitions),\n { wrapper },\n );\n\n const mockResult = result.current as unknown as MockUseObjectSetReturn;\n expect(mockResult._testOptions.withProperties).toEqual({\n rdp1: mockRdpCreator1,\n rdp2: mockRdpCreator2,\n });\n });\n\n it(\"memoizes withProperties based on columnDefinitions\", () => {\n const mockRdpCreator = vi.fn() as unknown as DerivedProperty.Creator<\n TestObject,\n SimplePropertyDef\n >;\n\n const columnDefinitions: Array<\n ColumnDefinition<TestObject, { myRdp: any }, {}>\n > = [\n {\n locator: { type: \"rdp\", id: \"myRdp\", creator: mockRdpCreator },\n },\n ];\n\n const { result, rerender } = renderHook(\n ({ colDefs }) => useObjectTableData(mockObjectSet, colDefs),\n {\n initialProps: { colDefs: columnDefinitions },\n wrapper,\n },\n );\n\n const firstMockResult = result.current as unknown as MockUseObjectSetReturn;\n const firstWithProperties = firstMockResult._testOptions.withProperties;\n\n // Rerender with same columnDefinitions reference\n rerender({ colDefs: columnDefinitions });\n\n // Should be the same reference (memoized)\n const secondMockResult = result\n .current as unknown as MockUseObjectSetReturn;\n expect(secondMockResult._testOptions.withProperties).toBe(\n firstWithProperties,\n );\n });\n\n it(\"updates withProperties when columnDefinitions change\", () => {\n const mockRdpCreator1 = vi.fn() as unknown as DerivedProperty.Creator<\n TestObject,\n SimplePropertyDef\n >;\n const mockRdpCreator2 = vi.fn() as unknown as DerivedProperty.Creator<\n TestObject,\n SimplePropertyDef\n >;\n\n const initialColumnDefinitions: Array<\n ColumnDefinition<TestObject, { rdp1: any }, {}>\n > = [\n {\n locator: { type: \"rdp\", id: \"rdp1\", creator: mockRdpCreator1 },\n },\n ];\n\n type ColDefs =\n | Array<\n ColumnDefinition<TestObject, Record<string, SimplePropertyDef>, {}>\n >\n | undefined;\n\n const { result, rerender } = renderHook(\n ({ colDefs }: { colDefs: ColDefs }) =>\n useObjectTableData(mockObjectSet, colDefs),\n {\n initialProps: { colDefs: initialColumnDefinitions as ColDefs },\n wrapper,\n },\n );\n\n const firstMockResult = result.current as unknown as MockUseObjectSetReturn;\n expect(firstMockResult._testOptions.withProperties).toEqual({\n rdp1: mockRdpCreator1,\n });\n\n const updatedColumnDefinitions: Array<\n ColumnDefinition<TestObject, { rdp2: SimplePropertyDef }, {}>\n > = [\n {\n locator: { type: \"rdp\", id: \"rdp2\", creator: mockRdpCreator2 },\n },\n ];\n\n rerender({ colDefs: updatedColumnDefinitions as ColDefs });\n\n const secondMockResult = result\n .current as unknown as MockUseObjectSetReturn;\n expect(secondMockResult._testOptions.withProperties).toEqual({\n rdp2: mockRdpCreator2,\n });\n });\n\n it(\"returns useObjectSet result structure\", () => {\n const { result } = renderHook(\n () => useObjectTableData(mockObjectSet),\n { wrapper },\n );\n\n expect(result.current).toHaveProperty(\"data\");\n expect(result.current).toHaveProperty(\"isLoading\");\n expect(result.current).toHaveProperty(\"error\");\n expect(result.current).toHaveProperty(\"fetchNextPage\");\n expect(result.current).toHaveProperty(\"hasNextPage\");\n expect(result.current).toHaveProperty(\"isFetchingNextPage\");\n });\n});\n"],"mappings":"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","ignoreList":[]}
|