@osdk/react-components 0.2.0-beta.11 → 0.2.0-beta.13

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.
Files changed (157) hide show
  1. package/AGENTS.md +105 -0
  2. package/CHANGELOG.md +30 -0
  3. package/build/browser/base-components/draggable-list/DraggableList.module.css +2 -2
  4. package/build/browser/filter-list/FilterListApi.js.map +1 -1
  5. package/build/browser/filter-list/base/DragHandleIcon.js +51 -0
  6. package/build/browser/filter-list/base/DragHandleIcon.js.map +1 -0
  7. package/build/browser/filter-list/base/FilterList.js +3 -1
  8. package/build/browser/filter-list/base/FilterList.js.map +1 -1
  9. package/build/browser/filter-list/base/FilterListContent.js +143 -3
  10. package/build/browser/filter-list/base/FilterListContent.js.map +1 -1
  11. package/build/browser/filter-list/base/FilterListContent.module.css +6 -0
  12. package/build/browser/filter-list/base/FilterListContent.module.css.js +2 -1
  13. package/build/browser/filter-list/base/FilterListItem.js +11 -18
  14. package/build/browser/filter-list/base/FilterListItem.js.map +1 -1
  15. package/build/browser/filter-list/base/FilterListItem.module.css +32 -0
  16. package/build/browser/filter-list/base/FilterListItem.module.css.js +3 -1
  17. package/build/browser/filter-list/base/SortableFilterListItem.js +63 -0
  18. package/build/browser/filter-list/base/SortableFilterListItem.js.map +1 -0
  19. package/build/browser/filter-list/utils/getFilterLabel.js +36 -0
  20. package/build/browser/filter-list/utils/getFilterLabel.js.map +1 -0
  21. package/build/browser/object-table/EditableCell.js +1 -2
  22. package/build/browser/object-table/EditableCell.js.map +1 -1
  23. package/build/browser/object-table/TableRow.js +1 -2
  24. package/build/browser/object-table/TableRow.js.map +1 -1
  25. package/build/browser/styles.css +40 -2
  26. package/build/cjs/public/experimental.cjs +905 -677
  27. package/build/cjs/public/experimental.cjs.map +1 -1
  28. package/build/cjs/public/experimental.css +34 -2
  29. package/build/cjs/public/experimental.css.map +1 -1
  30. package/build/cjs/public/experimental.d.cts +7 -0
  31. package/build/esm/base-components/draggable-list/DraggableList.module.css +2 -2
  32. package/build/esm/filter-list/FilterListApi.js.map +1 -1
  33. package/build/esm/filter-list/base/DragHandleIcon.js +51 -0
  34. package/build/esm/filter-list/base/DragHandleIcon.js.map +1 -0
  35. package/build/esm/filter-list/base/FilterList.js +3 -1
  36. package/build/esm/filter-list/base/FilterList.js.map +1 -1
  37. package/build/esm/filter-list/base/FilterListContent.js +143 -3
  38. package/build/esm/filter-list/base/FilterListContent.js.map +1 -1
  39. package/build/esm/filter-list/base/FilterListContent.module.css +6 -0
  40. package/build/esm/filter-list/base/FilterListItem.js +11 -18
  41. package/build/esm/filter-list/base/FilterListItem.js.map +1 -1
  42. package/build/esm/filter-list/base/FilterListItem.module.css +32 -0
  43. package/build/esm/filter-list/base/SortableFilterListItem.js +63 -0
  44. package/build/esm/filter-list/base/SortableFilterListItem.js.map +1 -0
  45. package/build/esm/filter-list/utils/getFilterLabel.js +36 -0
  46. package/build/esm/filter-list/utils/getFilterLabel.js.map +1 -0
  47. package/build/esm/object-table/EditableCell.js +1 -2
  48. package/build/esm/object-table/EditableCell.js.map +1 -1
  49. package/build/esm/object-table/TableRow.js +1 -2
  50. package/build/esm/object-table/TableRow.js.map +1 -1
  51. package/build/types/filter-list/FilterListApi.d.ts +7 -0
  52. package/build/types/filter-list/FilterListApi.d.ts.map +1 -1
  53. package/build/types/filter-list/base/DragHandleIcon.d.ts +2 -0
  54. package/build/types/filter-list/base/DragHandleIcon.d.ts.map +1 -0
  55. package/build/types/filter-list/base/FilterListContent.d.ts +2 -1
  56. package/build/types/filter-list/base/FilterListContent.d.ts.map +1 -1
  57. package/build/types/filter-list/base/FilterListItem.d.ts +4 -1
  58. package/build/types/filter-list/base/FilterListItem.d.ts.map +1 -1
  59. package/build/types/filter-list/base/SortableFilterListItem.d.ts +16 -0
  60. package/build/types/filter-list/base/SortableFilterListItem.d.ts.map +1 -0
  61. package/build/types/filter-list/utils/getFilterLabel.d.ts +3 -0
  62. package/build/types/filter-list/utils/getFilterLabel.d.ts.map +1 -0
  63. package/build/types/object-table/EditableCell.d.ts +1 -3
  64. package/build/types/object-table/EditableCell.d.ts.map +1 -1
  65. package/build/types/object-table/TableRow.d.ts +1 -2
  66. package/build/types/object-table/TableRow.d.ts.map +1 -1
  67. package/package.json +6 -5
  68. package/build/browser/filter-list/__tests__/LinkedPropertyInput.test.js +0 -202
  69. package/build/browser/filter-list/__tests__/LinkedPropertyInput.test.js.map +0 -1
  70. package/build/browser/filter-list/__tests__/dateUtils.test.js +0 -55
  71. package/build/browser/filter-list/__tests__/dateUtils.test.js.map +0 -1
  72. package/build/browser/filter-list/__tests__/filterStateToWhereClause.test.js +0 -296
  73. package/build/browser/filter-list/__tests__/filterStateToWhereClause.test.js.map +0 -1
  74. package/build/browser/filter-list/__tests__/getFilterKey.test.js +0 -53
  75. package/build/browser/filter-list/__tests__/getFilterKey.test.js.map +0 -1
  76. package/build/browser/filter-list/__tests__/testUtils.js +0 -203
  77. package/build/browser/filter-list/__tests__/testUtils.js.map +0 -1
  78. package/build/browser/filter-list/hooks/__tests__/useFilterListState.test.js +0 -128
  79. package/build/browser/filter-list/hooks/__tests__/useFilterListState.test.js.map +0 -1
  80. package/build/browser/object-table/hooks/__tests__/useCellContextMenu.test.js +0 -147
  81. package/build/browser/object-table/hooks/__tests__/useCellContextMenu.test.js.map +0 -1
  82. package/build/browser/object-table/hooks/__tests__/useColumnDefs.test.js +0 -520
  83. package/build/browser/object-table/hooks/__tests__/useColumnDefs.test.js.map +0 -1
  84. package/build/browser/object-table/hooks/__tests__/useColumnPinning.test.js +0 -266
  85. package/build/browser/object-table/hooks/__tests__/useColumnPinning.test.js.map +0 -1
  86. package/build/browser/object-table/hooks/__tests__/useColumnVisibility.test.js +0 -200
  87. package/build/browser/object-table/hooks/__tests__/useColumnVisibility.test.js.map +0 -1
  88. package/build/browser/object-table/hooks/__tests__/useEditableTable.test.js +0 -292
  89. package/build/browser/object-table/hooks/__tests__/useEditableTable.test.js.map +0 -1
  90. package/build/browser/object-table/hooks/__tests__/useObjectTableData.test.js +0 -315
  91. package/build/browser/object-table/hooks/__tests__/useObjectTableData.test.js.map +0 -1
  92. package/build/browser/object-table/hooks/__tests__/useRowSelection.test.js +0 -596
  93. package/build/browser/object-table/hooks/__tests__/useRowSelection.test.js.map +0 -1
  94. package/build/browser/object-table/hooks/__tests__/useSelectionColumn.test.js +0 -220
  95. package/build/browser/object-table/hooks/__tests__/useSelectionColumn.test.js.map +0 -1
  96. package/build/browser/object-table/hooks/__tests__/useTableSorting.test.js +0 -501
  97. package/build/browser/object-table/hooks/__tests__/useTableSorting.test.js.map +0 -1
  98. package/build/esm/filter-list/__tests__/LinkedPropertyInput.test.js +0 -202
  99. package/build/esm/filter-list/__tests__/LinkedPropertyInput.test.js.map +0 -1
  100. package/build/esm/filter-list/__tests__/dateUtils.test.js +0 -55
  101. package/build/esm/filter-list/__tests__/dateUtils.test.js.map +0 -1
  102. package/build/esm/filter-list/__tests__/filterStateToWhereClause.test.js +0 -296
  103. package/build/esm/filter-list/__tests__/filterStateToWhereClause.test.js.map +0 -1
  104. package/build/esm/filter-list/__tests__/getFilterKey.test.js +0 -53
  105. package/build/esm/filter-list/__tests__/getFilterKey.test.js.map +0 -1
  106. package/build/esm/filter-list/__tests__/testUtils.js +0 -203
  107. package/build/esm/filter-list/__tests__/testUtils.js.map +0 -1
  108. package/build/esm/filter-list/hooks/__tests__/useFilterListState.test.js +0 -128
  109. package/build/esm/filter-list/hooks/__tests__/useFilterListState.test.js.map +0 -1
  110. package/build/esm/object-table/hooks/__tests__/useCellContextMenu.test.js +0 -147
  111. package/build/esm/object-table/hooks/__tests__/useCellContextMenu.test.js.map +0 -1
  112. package/build/esm/object-table/hooks/__tests__/useColumnDefs.test.js +0 -520
  113. package/build/esm/object-table/hooks/__tests__/useColumnDefs.test.js.map +0 -1
  114. package/build/esm/object-table/hooks/__tests__/useColumnPinning.test.js +0 -266
  115. package/build/esm/object-table/hooks/__tests__/useColumnPinning.test.js.map +0 -1
  116. package/build/esm/object-table/hooks/__tests__/useColumnVisibility.test.js +0 -200
  117. package/build/esm/object-table/hooks/__tests__/useColumnVisibility.test.js.map +0 -1
  118. package/build/esm/object-table/hooks/__tests__/useEditableTable.test.js +0 -292
  119. package/build/esm/object-table/hooks/__tests__/useEditableTable.test.js.map +0 -1
  120. package/build/esm/object-table/hooks/__tests__/useObjectTableData.test.js +0 -315
  121. package/build/esm/object-table/hooks/__tests__/useObjectTableData.test.js.map +0 -1
  122. package/build/esm/object-table/hooks/__tests__/useRowSelection.test.js +0 -596
  123. package/build/esm/object-table/hooks/__tests__/useRowSelection.test.js.map +0 -1
  124. package/build/esm/object-table/hooks/__tests__/useSelectionColumn.test.js +0 -220
  125. package/build/esm/object-table/hooks/__tests__/useSelectionColumn.test.js.map +0 -1
  126. package/build/esm/object-table/hooks/__tests__/useTableSorting.test.js +0 -501
  127. package/build/esm/object-table/hooks/__tests__/useTableSorting.test.js.map +0 -1
  128. package/build/types/filter-list/__tests__/LinkedPropertyInput.test.d.ts +0 -1
  129. package/build/types/filter-list/__tests__/LinkedPropertyInput.test.d.ts.map +0 -1
  130. package/build/types/filter-list/__tests__/dateUtils.test.d.ts +0 -1
  131. package/build/types/filter-list/__tests__/dateUtils.test.d.ts.map +0 -1
  132. package/build/types/filter-list/__tests__/filterStateToWhereClause.test.d.ts +0 -1
  133. package/build/types/filter-list/__tests__/filterStateToWhereClause.test.d.ts.map +0 -1
  134. package/build/types/filter-list/__tests__/getFilterKey.test.d.ts +0 -1
  135. package/build/types/filter-list/__tests__/getFilterKey.test.d.ts.map +0 -1
  136. package/build/types/filter-list/__tests__/testUtils.d.ts +0 -65
  137. package/build/types/filter-list/__tests__/testUtils.d.ts.map +0 -1
  138. package/build/types/filter-list/hooks/__tests__/useFilterListState.test.d.ts +0 -1
  139. package/build/types/filter-list/hooks/__tests__/useFilterListState.test.d.ts.map +0 -1
  140. package/build/types/object-table/hooks/__tests__/useCellContextMenu.test.d.ts +0 -1
  141. package/build/types/object-table/hooks/__tests__/useCellContextMenu.test.d.ts.map +0 -1
  142. package/build/types/object-table/hooks/__tests__/useColumnDefs.test.d.ts +0 -1
  143. package/build/types/object-table/hooks/__tests__/useColumnDefs.test.d.ts.map +0 -1
  144. package/build/types/object-table/hooks/__tests__/useColumnPinning.test.d.ts +0 -1
  145. package/build/types/object-table/hooks/__tests__/useColumnPinning.test.d.ts.map +0 -1
  146. package/build/types/object-table/hooks/__tests__/useColumnVisibility.test.d.ts +0 -1
  147. package/build/types/object-table/hooks/__tests__/useColumnVisibility.test.d.ts.map +0 -1
  148. package/build/types/object-table/hooks/__tests__/useEditableTable.test.d.ts +0 -1
  149. package/build/types/object-table/hooks/__tests__/useEditableTable.test.d.ts.map +0 -1
  150. package/build/types/object-table/hooks/__tests__/useObjectTableData.test.d.ts +0 -1
  151. package/build/types/object-table/hooks/__tests__/useObjectTableData.test.d.ts.map +0 -1
  152. package/build/types/object-table/hooks/__tests__/useRowSelection.test.d.ts +0 -1
  153. package/build/types/object-table/hooks/__tests__/useRowSelection.test.d.ts.map +0 -1
  154. package/build/types/object-table/hooks/__tests__/useSelectionColumn.test.d.ts +0 -1
  155. package/build/types/object-table/hooks/__tests__/useSelectionColumn.test.d.ts.map +0 -1
  156. package/build/types/object-table/hooks/__tests__/useTableSorting.test.d.ts +0 -1
  157. package/build/types/object-table/hooks/__tests__/useTableSorting.test.d.ts.map +0 -1
@@ -1,520 +0,0 @@
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, waitFor } from "@testing-library/react";
19
- import pDefer from "p-defer";
20
- import * as React from "react";
21
- import { describe, expect, it, vitest } from "vitest";
22
- import { useColumnDefs } from "../useColumnDefs.js";
23
- const TestObjectType = {
24
- type: "object",
25
- apiName: "TestObject"
26
- };
27
- const mockMetadata = {
28
- apiName: "TestObject",
29
- primaryKeyApiName: "id",
30
- primaryKeyType: "string",
31
- properties: {
32
- id: {
33
- type: "string",
34
- displayName: "ID"
35
- },
36
- name: {
37
- type: "string",
38
- displayName: "Name"
39
- },
40
- age: {
41
- type: "integer",
42
- displayName: "Age"
43
- },
44
- email: {
45
- type: "string",
46
- displayName: "Email Address"
47
- }
48
- }
49
- };
50
- describe(useColumnDefs, () => {
51
- const createWrapper = client => {
52
- return ({
53
- children
54
- }) => {
55
- return /*#__PURE__*/React.createElement(OsdkProvider, {
56
- client: client
57
- }, children);
58
- };
59
- };
60
- it("returns loading state initially", () => {
61
- const deferred = pDefer();
62
- const fakeClient = {
63
- fetchMetadata: vitest.fn(() => deferred.promise)
64
- };
65
- const wrapper = createWrapper(fakeClient);
66
- const {
67
- result
68
- } = renderHook(() => useColumnDefs(TestObjectType), {
69
- wrapper
70
- });
71
- expect(result.current.loading).toBe(true);
72
- expect(result.current.columns).toEqual([]);
73
- expect(result.current.error).toBeUndefined();
74
- });
75
- describe("when no columnDefinitions provided", () => {
76
- it("generates default columns from metadata", async () => {
77
- const deferred = pDefer();
78
- const fakeClient = {
79
- fetchMetadata: vitest.fn(() => deferred.promise)
80
- };
81
- const wrapper = createWrapper(fakeClient);
82
- const {
83
- result
84
- } = renderHook(() => useColumnDefs(TestObjectType), {
85
- wrapper
86
- });
87
- expect(result.current.loading).toBe(true);
88
- deferred.resolve(mockMetadata);
89
- await waitFor(() => {
90
- expect(result.current.loading).toBe(false);
91
- });
92
- expect(result.current.columns).toHaveLength(4);
93
- expect(result.current.columns[0]).toEqual({
94
- accessorKey: "id",
95
- header: "ID"
96
- });
97
- expect(result.current.columns[1]).toEqual({
98
- accessorKey: "name",
99
- header: "Name"
100
- });
101
- expect(result.current.columns[2]).toEqual({
102
- accessorKey: "age",
103
- header: "Age"
104
- });
105
- expect(result.current.columns[3]).toEqual({
106
- accessorKey: "email",
107
- header: "Email Address"
108
- });
109
- });
110
- it("returns empty columns array when metadata has no properties", async () => {
111
- const deferred = pDefer();
112
- const fakeClient = {
113
- fetchMetadata: vitest.fn(() => deferred.promise)
114
- };
115
- const wrapper = createWrapper(fakeClient);
116
- const {
117
- result
118
- } = renderHook(() => useColumnDefs(TestObjectType), {
119
- wrapper
120
- });
121
- deferred.resolve({
122
- ...mockMetadata,
123
- properties: undefined
124
- });
125
- await waitFor(() => {
126
- expect(result.current.loading).toBe(false);
127
- });
128
- expect(result.current.columns).toEqual([]);
129
- });
130
- it("uses property key as header when displayName is not available", async () => {
131
- const deferred = pDefer();
132
- const fakeClient = {
133
- fetchMetadata: vitest.fn(() => deferred.promise)
134
- };
135
- const wrapper = createWrapper(fakeClient);
136
- const {
137
- result
138
- } = renderHook(() => useColumnDefs(TestObjectType), {
139
- wrapper
140
- });
141
- deferred.resolve({
142
- ...mockMetadata,
143
- properties: {
144
- noDisplayName: {
145
- type: "string"
146
- }
147
- }
148
- });
149
- await waitFor(() => {
150
- expect(result.current.loading).toBe(false);
151
- });
152
- expect(result.current.columns).toHaveLength(1);
153
- expect(result.current.columns[0]).toEqual({
154
- accessorKey: "noDisplayName",
155
- header: "noDisplayName"
156
- });
157
- });
158
- });
159
- describe("when columnDefinitions is provided", () => {
160
- it("builds columns from columnDefinitions with property locators", async () => {
161
- const deferred = pDefer();
162
- const fakeClient = {
163
- fetchMetadata: vitest.fn(() => deferred.promise)
164
- };
165
- const wrapper = createWrapper(fakeClient);
166
- const columnDefinitions = [{
167
- locator: {
168
- type: "property",
169
- id: "name"
170
- },
171
- width: 200,
172
- minWidth: 100,
173
- maxWidth: 400,
174
- resizable: true,
175
- orderable: true,
176
- filterable: false
177
- }, {
178
- locator: {
179
- type: "property",
180
- id: "email"
181
- }
182
- }];
183
- const {
184
- result
185
- } = renderHook(() => useColumnDefs(TestObjectType, columnDefinitions), {
186
- wrapper
187
- });
188
- deferred.resolve(mockMetadata);
189
- await waitFor(() => {
190
- expect(result.current.loading).toBe(false);
191
- });
192
- expect(result.current.columns).toHaveLength(2);
193
- const nameColumn = result.current.columns[0];
194
- expect(nameColumn.id).toBe("name");
195
- expect(nameColumn.accessorKey).toBe("name");
196
- expect(nameColumn.header).toBe("Name");
197
- expect(nameColumn.size).toBe(200);
198
- expect(nameColumn.minSize).toBe(100);
199
- expect(nameColumn.maxSize).toBe(400);
200
- expect(nameColumn.enableResizing).toBe(true);
201
- expect(nameColumn.enableSorting).toBe(true);
202
- expect(nameColumn.enableColumnFilter).toBe(false);
203
- const emailColumn = result.current.columns[1];
204
- expect(emailColumn.id).toBe("email");
205
- expect(emailColumn.accessorKey).toBe("email");
206
- expect(emailColumn.header).toBe("Email Address");
207
- });
208
- it("builds columns from columnDefinitions even when metadata has no properties", async () => {
209
- const columnDefinitions = [{
210
- locator: {
211
- type: "property",
212
- id: "name"
213
- },
214
- width: 200,
215
- minWidth: 100,
216
- maxWidth: 400,
217
- resizable: true,
218
- orderable: true,
219
- filterable: false
220
- }, {
221
- locator: {
222
- type: "property",
223
- id: "email"
224
- }
225
- }];
226
- const deferred = pDefer();
227
- const fakeClient = {
228
- fetchMetadata: vitest.fn(() => deferred.promise)
229
- };
230
- const wrapper = createWrapper(fakeClient);
231
- const {
232
- result
233
- } = renderHook(() => useColumnDefs(TestObjectType, columnDefinitions), {
234
- wrapper
235
- });
236
- deferred.resolve({
237
- ...mockMetadata,
238
- properties: undefined
239
- });
240
- await waitFor(() => {
241
- expect(result.current.loading).toBe(false);
242
- });
243
- expect(result.current.columns.length).toBe(2);
244
- const nameColumn = result.current.columns[0];
245
- expect(nameColumn.header).toBeUndefined();
246
- const emailColumn = result.current.columns[1];
247
- expect(emailColumn.header).toBeUndefined();
248
- });
249
- it("uses custom renderHeader when provided", async () => {
250
- const deferred = pDefer();
251
- const fakeClient = {
252
- fetchMetadata: vitest.fn(() => deferred.promise)
253
- };
254
- const wrapper = createWrapper(fakeClient);
255
- const customHeader = () => /*#__PURE__*/React.createElement("div", null, "Custom Header");
256
- const columnDefinitions = [{
257
- locator: {
258
- type: "property",
259
- id: "name"
260
- },
261
- renderHeader: customHeader
262
- }];
263
- const {
264
- result
265
- } = renderHook(() => useColumnDefs(TestObjectType, columnDefinitions), {
266
- wrapper
267
- });
268
- deferred.resolve(mockMetadata);
269
- await waitFor(() => {
270
- expect(result.current.loading).toBe(false);
271
- });
272
- expect(result.current.columns[0].header).toBe(customHeader);
273
- });
274
- it("uses custom renderCell when provided", async () => {
275
- const deferred = pDefer();
276
- const fakeClient = {
277
- fetchMetadata: vitest.fn(() => deferred.promise)
278
- };
279
- const wrapper = createWrapper(fakeClient);
280
- const customRenderCell = vitest.fn(object => /*#__PURE__*/React.createElement("div", null, "Custom: ", object.name));
281
- const columnDefinitions = [{
282
- locator: {
283
- type: "property",
284
- id: "name"
285
- },
286
- renderCell: customRenderCell
287
- }];
288
- const {
289
- result
290
- } = renderHook(() => useColumnDefs(TestObjectType, columnDefinitions), {
291
- wrapper
292
- });
293
- deferred.resolve(mockMetadata);
294
- await waitFor(() => {
295
- expect(result.current.loading).toBe(false);
296
- });
297
- const nameColumn = result.current.columns[0];
298
- expect(nameColumn.cell).toBeDefined();
299
-
300
- // Test the cell renderer
301
- const mockObject = {
302
- name: "John"
303
- };
304
- const mockCellContext = {
305
- row: {
306
- original: mockObject
307
- },
308
- getValue: () => "John"
309
- };
310
- if (typeof nameColumn.cell === "function") {
311
- nameColumn.cell(mockCellContext);
312
- }
313
- expect(customRenderCell).toHaveBeenCalledWith(mockObject, {
314
- type: "property",
315
- id: "name"
316
- });
317
- });
318
- it("defaults to getValue when renderCell is not provided", async () => {
319
- const deferred = pDefer();
320
- const fakeClient = {
321
- fetchMetadata: vitest.fn(() => deferred.promise)
322
- };
323
- const wrapper = createWrapper(fakeClient);
324
- const columnDefinitions = [{
325
- locator: {
326
- type: "property",
327
- id: "name"
328
- }
329
- }];
330
- const {
331
- result
332
- } = renderHook(() => useColumnDefs(TestObjectType, columnDefinitions), {
333
- wrapper
334
- });
335
- deferred.resolve(mockMetadata);
336
- await waitFor(() => {
337
- expect(result.current.loading).toBe(false);
338
- });
339
- const nameColumn = result.current.columns[0];
340
- expect(nameColumn.cell).toBeDefined();
341
- const mockGetValue = vitest.fn(() => "John");
342
- let cellResult;
343
- if (typeof nameColumn.cell === "function") {
344
- cellResult = nameColumn.cell({
345
- row: {
346
- original: {
347
- name: "John"
348
- },
349
- id: "row-1"
350
- },
351
- getValue: mockGetValue,
352
- column: {
353
- id: "name",
354
- columnDef: {
355
- meta: {}
356
- }
357
- },
358
- table: {
359
- options: {
360
- meta: {}
361
- }
362
- }
363
- });
364
- }
365
- expect(cellResult).toEqual(/*#__PURE__*/React.createElement(React.Fragment, null, "John"));
366
- expect(mockGetValue).toHaveBeenCalled();
367
- });
368
- it("handles function column locators", async () => {
369
- const deferred = pDefer();
370
- const fakeClient = {
371
- fetchMetadata: vitest.fn(() => deferred.promise)
372
- };
373
- const wrapper = createWrapper(fakeClient);
374
- const columnDefinitions = [{
375
- locator: {
376
- type: "function",
377
- id: "myFunction"
378
- },
379
- width: 150
380
- }];
381
- const {
382
- result
383
- } = renderHook(() => useColumnDefs(TestObjectType, columnDefinitions), {
384
- wrapper
385
- });
386
- deferred.resolve(mockMetadata);
387
- await waitFor(() => {
388
- expect(result.current.loading).toBe(false);
389
- });
390
- expect(result.current.columns).toHaveLength(1);
391
- const functionColumn = result.current.columns[0];
392
- expect(functionColumn.id).toBe("myFunction");
393
- expect(functionColumn.accessorKey).toBe("myFunction");
394
- expect(functionColumn.header).toBeUndefined();
395
- expect(functionColumn.size).toBe(150);
396
- });
397
- it("handles RDP column locators", async () => {
398
- const deferred = pDefer();
399
- const fakeClient = {
400
- fetchMetadata: vitest.fn(() => deferred.promise)
401
- };
402
- const wrapper = createWrapper(fakeClient);
403
- const mockRdpCreator = vitest.fn();
404
- const columnDefinitions = [{
405
- locator: {
406
- type: "rdp",
407
- id: "myRdp",
408
- creator: mockRdpCreator
409
- },
410
- width: 180
411
- }];
412
- const {
413
- result
414
- } = renderHook(() => useColumnDefs(TestObjectType, columnDefinitions), {
415
- wrapper
416
- });
417
- deferred.resolve(mockMetadata);
418
- await waitFor(() => {
419
- expect(result.current.loading).toBe(false);
420
- });
421
- expect(result.current.columns).toHaveLength(1);
422
- const rdpColumn = result.current.columns[0];
423
- expect(rdpColumn.id).toBe("myRdp");
424
- expect(rdpColumn.accessorKey).toBe("myRdp");
425
- expect(rdpColumn.header).toBeUndefined();
426
- expect(rdpColumn.size).toBe(180);
427
- });
428
- it("updates columns when columnDefinitions changed", async () => {
429
- const deferred = pDefer();
430
- const fakeClient = {
431
- fetchMetadata: vitest.fn(() => deferred.promise)
432
- };
433
- const wrapper = createWrapper(fakeClient);
434
- const {
435
- result,
436
- rerender
437
- } = renderHook(({
438
- colDefs
439
- }) => useColumnDefs(TestObjectType, colDefs), {
440
- initialProps: {
441
- colDefs: [{
442
- locator: {
443
- type: "property",
444
- id: "name"
445
- }
446
- }]
447
- },
448
- wrapper
449
- });
450
- deferred.resolve(mockMetadata);
451
- await waitFor(() => {
452
- expect(result.current.loading).toBe(false);
453
- });
454
- const firstColumns = result.current.columns;
455
- // Rerender with new columnDefinitions
456
- rerender({
457
- colDefs: [{
458
- locator: {
459
- type: "property",
460
- id: "name"
461
- }
462
- }, {
463
- locator: {
464
- type: "property",
465
- id: "email"
466
- }
467
- }]
468
- });
469
-
470
- // Updated columns should have two items
471
- const updatedColumns = result.current.columns;
472
- expect(firstColumns.length).toBe(1);
473
- expect(updatedColumns.length).toBe(2);
474
- });
475
- });
476
- it("handles metadata fetch errors", async () => {
477
- const deferred = pDefer();
478
- const fakeClient = {
479
- fetchMetadata: vitest.fn(() => deferred.promise)
480
- };
481
- const wrapper = createWrapper(fakeClient);
482
- const {
483
- result
484
- } = renderHook(() => useColumnDefs(TestObjectType), {
485
- wrapper
486
- });
487
- const error = new Error("Failed to fetch metadata");
488
- deferred.reject(error);
489
- await waitFor(() => {
490
- expect(result.current.loading).toBe(false);
491
- });
492
- expect(result.current.error).toBeDefined();
493
- expect(result.current.columns).toEqual([]);
494
- });
495
- it("memoizes columns based on metadata properties", async () => {
496
- const deferred = pDefer();
497
- const fakeClient = {
498
- fetchMetadata: vitest.fn(() => deferred.promise)
499
- };
500
- const wrapper = createWrapper(fakeClient);
501
- const {
502
- result,
503
- rerender
504
- } = renderHook(() => useColumnDefs(TestObjectType), {
505
- wrapper
506
- });
507
- deferred.resolve(mockMetadata);
508
- await waitFor(() => {
509
- expect(result.current.loading).toBe(false);
510
- });
511
- const firstColumns = result.current.columns;
512
-
513
- // Rerender without changing metadata
514
- rerender();
515
-
516
- // Columns should be the same reference (memoized)
517
- expect(result.current.columns).toBe(firstColumns);
518
- });
519
- });
520
- //# sourceMappingURL=useColumnDefs.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"useColumnDefs.test.js","names":["OsdkProvider","renderHook","waitFor","pDefer","React","describe","expect","it","vitest","useColumnDefs","TestObjectType","type","apiName","mockMetadata","primaryKeyApiName","primaryKeyType","properties","id","displayName","name","age","email","createWrapper","client","children","createElement","deferred","fakeClient","fetchMetadata","fn","promise","wrapper","result","current","loading","toBe","columns","toEqual","error","toBeUndefined","resolve","toHaveLength","accessorKey","header","undefined","noDisplayName","columnDefinitions","locator","width","minWidth","maxWidth","resizable","orderable","filterable","nameColumn","size","minSize","maxSize","enableResizing","enableSorting","enableColumnFilter","emailColumn","length","customHeader","renderHeader","customRenderCell","object","renderCell","cell","toBeDefined","mockObject","mockCellContext","row","original","getValue","toHaveBeenCalledWith","mockGetValue","cellResult","column","columnDef","meta","table","options","Fragment","toHaveBeenCalled","functionColumn","mockRdpCreator","creator","rdpColumn","rerender","colDefs","initialProps","firstColumns","updatedColumns","Error","reject"],"sources":["useColumnDefs.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 Osdk,\n PropertyKeys,\n SimplePropertyDef,\n} from \"@osdk/api\";\nimport type { Client } from \"@osdk/client\";\nimport { OsdkProvider } from \"@osdk/react\";\nimport type { AccessorKeyColumnDef } from \"@tanstack/react-table\";\nimport { renderHook, waitFor } from \"@testing-library/react\";\nimport pDefer from \"p-defer\";\nimport * as React from \"react\";\nimport { describe, expect, it, vitest } from \"vitest\";\nimport type { ColumnDefinition } from \"../../ObjectTableApi.js\";\nimport { useColumnDefs } from \"../useColumnDefs.js\";\n\nconst TestObjectType = {\n type: \"object\",\n apiName: \"TestObject\",\n} as const satisfies ObjectTypeDefinition;\n\ntype TestObject = typeof TestObjectType;\n\ntype TestObjectKeys = PropertyKeys<TestObject>;\n\nconst mockMetadata = {\n apiName: \"TestObject\",\n primaryKeyApiName: \"id\",\n primaryKeyType: \"string\",\n properties: {\n id: {\n type: \"string\",\n displayName: \"ID\",\n },\n name: {\n type: \"string\",\n displayName: \"Name\",\n },\n age: {\n type: \"integer\",\n displayName: \"Age\",\n },\n email: {\n type: \"string\",\n displayName: \"Email Address\",\n },\n },\n};\ndescribe(useColumnDefs, () => {\n const createWrapper = (client: Client) => {\n return ({ children }: React.PropsWithChildren) => {\n return (\n <OsdkProvider client={client}>\n {children}\n </OsdkProvider>\n );\n };\n };\n\n it(\"returns loading state initially\", () => {\n const deferred = pDefer();\n const fakeClient = {\n fetchMetadata: vitest.fn(() => deferred.promise),\n } as unknown as Client;\n\n const wrapper = createWrapper(fakeClient);\n\n const { result } = renderHook(\n () => useColumnDefs(TestObjectType),\n { wrapper },\n );\n\n expect(result.current.loading).toBe(true);\n expect(result.current.columns).toEqual([]);\n expect(result.current.error).toBeUndefined();\n });\n\n describe(\"when no columnDefinitions provided\", () => {\n it(\"generates default columns from metadata\", async () => {\n const deferred = pDefer();\n const fakeClient = {\n fetchMetadata: vitest.fn(() => deferred.promise),\n } as unknown as Client;\n\n const wrapper = createWrapper(fakeClient);\n\n const { result } = renderHook(\n () => useColumnDefs(TestObjectType),\n { wrapper },\n );\n\n expect(result.current.loading).toBe(true);\n\n deferred.resolve(mockMetadata);\n\n await waitFor(() => {\n expect(result.current.loading).toBe(false);\n });\n\n expect(result.current.columns).toHaveLength(4);\n expect(result.current.columns[0]).toEqual({\n accessorKey: \"id\",\n header: \"ID\",\n });\n expect(result.current.columns[1]).toEqual({\n accessorKey: \"name\",\n header: \"Name\",\n });\n expect(result.current.columns[2]).toEqual({\n accessorKey: \"age\",\n header: \"Age\",\n });\n expect(result.current.columns[3]).toEqual({\n accessorKey: \"email\",\n header: \"Email Address\",\n });\n });\n\n it(\"returns empty columns array when metadata has no properties\", async () => {\n const deferred = pDefer();\n const fakeClient = {\n fetchMetadata: vitest.fn(() => deferred.promise),\n } as unknown as Client;\n\n const wrapper = createWrapper(fakeClient);\n\n const { result } = renderHook(\n () => useColumnDefs(TestObjectType),\n { wrapper },\n );\n\n deferred.resolve({\n ...mockMetadata,\n properties: undefined,\n });\n\n await waitFor(() => {\n expect(result.current.loading).toBe(false);\n });\n\n expect(result.current.columns).toEqual([]);\n });\n\n it(\"uses property key as header when displayName is not available\", async () => {\n const deferred = pDefer();\n const fakeClient = {\n fetchMetadata: vitest.fn(() => deferred.promise),\n } as unknown as Client;\n\n const wrapper = createWrapper(fakeClient);\n\n const { result } = renderHook(\n () => useColumnDefs(TestObjectType),\n { wrapper },\n );\n\n deferred.resolve({\n ...mockMetadata,\n properties: {\n noDisplayName: {\n type: \"string\",\n },\n },\n });\n\n await waitFor(() => {\n expect(result.current.loading).toBe(false);\n });\n\n expect(result.current.columns).toHaveLength(1);\n expect(result.current.columns[0]).toEqual({\n accessorKey: \"noDisplayName\",\n header: \"noDisplayName\",\n });\n });\n });\n\n describe(\"when columnDefinitions is provided\", () => {\n it(\"builds columns from columnDefinitions with property locators\", async () => {\n const deferred = pDefer();\n const fakeClient = {\n fetchMetadata: vitest.fn(() => deferred.promise),\n } as unknown as Client;\n\n const wrapper = createWrapper(fakeClient);\n\n const columnDefinitions: Array<ColumnDefinition<TestObject, {}, {}>> = [\n {\n locator: {\n type: \"property\",\n id: \"name\" as TestObjectKeys,\n },\n width: 200,\n minWidth: 100,\n maxWidth: 400,\n resizable: true,\n orderable: true,\n filterable: false,\n },\n {\n locator: { type: \"property\", id: \"email\" as TestObjectKeys },\n },\n ];\n\n const { result } = renderHook(\n () => useColumnDefs(TestObjectType, columnDefinitions),\n { wrapper },\n );\n\n deferred.resolve(mockMetadata);\n\n await waitFor(() => {\n expect(result.current.loading).toBe(false);\n });\n\n expect(result.current.columns).toHaveLength(2);\n\n const nameColumn = result.current.columns[0];\n expect(nameColumn.id).toBe(\"name\");\n expect(\n (nameColumn as AccessorKeyColumnDef<Osdk.Instance<TestObject>>)\n .accessorKey,\n ).toBe(\"name\");\n expect(nameColumn.header).toBe(\"Name\");\n expect(nameColumn.size).toBe(200);\n expect(nameColumn.minSize).toBe(100);\n expect(nameColumn.maxSize).toBe(400);\n expect(nameColumn.enableResizing).toBe(true);\n expect(nameColumn.enableSorting).toBe(true);\n expect(nameColumn.enableColumnFilter).toBe(false);\n\n const emailColumn = result.current.columns[1];\n expect(emailColumn.id).toBe(\"email\");\n expect(\n (emailColumn as AccessorKeyColumnDef<Osdk.Instance<TestObject>>)\n .accessorKey,\n ).toBe(\"email\");\n expect(emailColumn.header).toBe(\"Email Address\");\n });\n\n it(\"builds columns from columnDefinitions even when metadata has no properties\", async () => {\n const columnDefinitions: Array<ColumnDefinition<TestObject, {}, {}>> = [\n {\n locator: {\n type: \"property\",\n id: \"name\" as TestObjectKeys,\n },\n width: 200,\n minWidth: 100,\n maxWidth: 400,\n resizable: true,\n orderable: true,\n filterable: false,\n },\n {\n locator: { type: \"property\", id: \"email\" as TestObjectKeys },\n },\n ];\n const deferred = pDefer();\n const fakeClient = {\n fetchMetadata: vitest.fn(() => deferred.promise),\n } as unknown as Client;\n\n const wrapper = createWrapper(fakeClient);\n\n const { result } = renderHook(\n () => useColumnDefs(TestObjectType, columnDefinitions),\n { wrapper },\n );\n\n deferred.resolve({\n ...mockMetadata,\n properties: undefined,\n });\n\n await waitFor(() => {\n expect(result.current.loading).toBe(false);\n });\n\n expect(result.current.columns.length).toBe(2);\n const nameColumn = result.current.columns[0];\n expect(nameColumn.header).toBeUndefined();\n\n const emailColumn = result.current.columns[1];\n expect(emailColumn.header).toBeUndefined();\n });\n\n it(\"uses custom renderHeader when provided\", async () => {\n const deferred = pDefer();\n const fakeClient = {\n fetchMetadata: vitest.fn(() => deferred.promise),\n } as unknown as Client;\n\n const wrapper = createWrapper(fakeClient);\n\n const customHeader = () => <div>Custom Header</div>;\n\n const columnDefinitions: Array<ColumnDefinition<TestObject, {}, {}>> = [\n {\n locator: { type: \"property\", id: \"name\" as TestObjectKeys },\n renderHeader: customHeader,\n },\n ];\n\n const { result } = renderHook(\n () => useColumnDefs(TestObjectType, columnDefinitions),\n { wrapper },\n );\n\n deferred.resolve(mockMetadata);\n\n await waitFor(() => {\n expect(result.current.loading).toBe(false);\n });\n\n expect(result.current.columns[0].header).toBe(customHeader);\n });\n\n it(\"uses custom renderCell when provided\", async () => {\n const deferred = pDefer();\n const fakeClient = {\n fetchMetadata: vitest.fn(() => deferred.promise),\n } as unknown as Client;\n\n const wrapper = createWrapper(fakeClient);\n\n const customRenderCell = vitest.fn((\n object: Osdk.Instance<TestObject>,\n ) => <div>Custom: {(object as unknown as { name: string }).name}</div>);\n\n const columnDefinitions: Array<ColumnDefinition<TestObject, {}, {}>> = [\n {\n locator: { type: \"property\", id: \"name\" as TestObjectKeys },\n renderCell: customRenderCell,\n },\n ];\n\n const { result } = renderHook(\n () => useColumnDefs(TestObjectType, columnDefinitions),\n { wrapper },\n );\n\n deferred.resolve(mockMetadata);\n\n await waitFor(() => {\n expect(result.current.loading).toBe(false);\n });\n\n const nameColumn = result.current.columns[0];\n expect(nameColumn.cell).toBeDefined();\n\n // Test the cell renderer\n const mockObject = { name: \"John\" } as unknown as Osdk.Instance<\n TestObject\n >;\n const mockCellContext = {\n row: { original: mockObject },\n getValue: () => \"John\",\n };\n\n if (typeof nameColumn.cell === \"function\") {\n (nameColumn.cell as unknown as (\n ctx: typeof mockCellContext,\n ) => unknown)(mockCellContext);\n }\n\n expect(customRenderCell).toHaveBeenCalledWith(\n mockObject,\n { type: \"property\", id: \"name\" },\n );\n });\n\n it(\"defaults to getValue when renderCell is not provided\", async () => {\n const deferred = pDefer();\n const fakeClient = {\n fetchMetadata: vitest.fn(() => deferred.promise),\n } as unknown as Client;\n\n const wrapper = createWrapper(fakeClient);\n\n const columnDefinitions: Array<ColumnDefinition<TestObject, {}, {}>> = [\n {\n locator: { type: \"property\", id: \"name\" as TestObjectKeys },\n },\n ];\n\n const { result } = renderHook(\n () => useColumnDefs(TestObjectType, columnDefinitions),\n { wrapper },\n );\n\n deferred.resolve(mockMetadata);\n\n await waitFor(() => {\n expect(result.current.loading).toBe(false);\n });\n\n const nameColumn = result.current.columns[0];\n expect(nameColumn.cell).toBeDefined();\n\n const mockObject = { name: \"John\" } as unknown as Osdk.Instance<\n TestObject\n >;\n const mockGetValue = vitest.fn(() => \"John\");\n const mockCellContext = {\n row: { original: mockObject, id: \"row-1\" },\n getValue: mockGetValue,\n column: { id: \"name\", columnDef: { meta: {} } },\n table: {\n options: {\n meta: {},\n },\n },\n };\n\n let cellResult: unknown;\n\n if (typeof nameColumn.cell === \"function\") {\n cellResult = (nameColumn.cell as unknown as (\n ctx: typeof mockCellContext,\n ) => unknown)(mockCellContext);\n }\n expect(cellResult).toEqual(\n <React.Fragment>\n John\n </React.Fragment>,\n );\n expect(mockGetValue).toHaveBeenCalled();\n });\n\n it(\"handles function column locators\", async () => {\n const deferred = pDefer();\n const fakeClient = {\n fetchMetadata: vitest.fn(() => deferred.promise),\n } as unknown as Client;\n\n const wrapper = createWrapper(fakeClient);\n\n const columnDefinitions: Array<\n ColumnDefinition<TestObject, {}, { myFunction: any }>\n > = [\n {\n locator: { type: \"function\", id: \"myFunction\" },\n width: 150,\n },\n ];\n\n const { result } = renderHook(\n () => useColumnDefs(TestObjectType, columnDefinitions),\n { wrapper },\n );\n\n deferred.resolve(mockMetadata);\n\n await waitFor(() => {\n expect(result.current.loading).toBe(false);\n });\n\n expect(result.current.columns).toHaveLength(1);\n\n const functionColumn = result.current.columns[0];\n expect(functionColumn.id).toBe(\"myFunction\");\n expect(\n (functionColumn as AccessorKeyColumnDef<Osdk.Instance<TestObject>>)\n .accessorKey,\n ).toBe(\"myFunction\");\n expect(functionColumn.header).toBeUndefined();\n expect(functionColumn.size).toBe(150);\n });\n\n it(\"handles RDP column locators\", async () => {\n const deferred = pDefer();\n const fakeClient = {\n fetchMetadata: vitest.fn(() => deferred.promise),\n } as unknown as Client;\n\n const wrapper = createWrapper(fakeClient);\n\n const mockRdpCreator = vitest.fn() as unknown as DerivedProperty.Creator<\n TestObject,\n SimplePropertyDef\n >;\n\n const columnDefinitions: Array<\n ColumnDefinition<TestObject, { myRdp: SimplePropertyDef }, {}>\n > = [\n {\n locator: { type: \"rdp\", id: \"myRdp\", creator: mockRdpCreator },\n width: 180,\n },\n ];\n\n const { result } = renderHook(\n () => useColumnDefs(TestObjectType, columnDefinitions),\n { wrapper },\n );\n\n deferred.resolve(mockMetadata);\n\n await waitFor(() => {\n expect(result.current.loading).toBe(false);\n });\n\n expect(result.current.columns).toHaveLength(1);\n\n const rdpColumn = result.current.columns[0];\n expect(rdpColumn.id).toBe(\"myRdp\");\n expect(\n (rdpColumn as AccessorKeyColumnDef<Osdk.Instance<TestObject>>)\n .accessorKey,\n ).toBe(\"myRdp\");\n expect(rdpColumn.header).toBeUndefined();\n expect(rdpColumn.size).toBe(180);\n });\n\n it(\"updates columns when columnDefinitions changed\", async () => {\n const deferred = pDefer();\n const fakeClient = {\n fetchMetadata: vitest.fn(() => deferred.promise),\n } as unknown as Client;\n\n const wrapper = createWrapper(fakeClient);\n\n const initialColumnDefinitions: Array<\n ColumnDefinition<TestObject, {}, {}>\n > = [\n {\n locator: { type: \"property\", id: \"name\" as TestObjectKeys },\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 useColumnDefs(TestObjectType, colDefs),\n {\n initialProps: { colDefs: initialColumnDefinitions as ColDefs },\n wrapper,\n },\n );\n\n deferred.resolve(mockMetadata);\n\n await waitFor(() => {\n expect(result.current.loading).toBe(false);\n });\n\n const firstColumns = result.current.columns;\n\n const updatedColumnDefinitions: Array<\n ColumnDefinition<TestObject, {}, {}>\n > = [\n {\n locator: { type: \"property\", id: \"name\" as TestObjectKeys },\n },\n {\n locator: { type: \"property\", id: \"email\" as TestObjectKeys },\n },\n ];\n\n // Rerender with new columnDefinitions\n rerender({ colDefs: updatedColumnDefinitions });\n\n // Updated columns should have two items\n const updatedColumns = result.current.columns;\n\n expect(firstColumns.length).toBe(1);\n expect(updatedColumns.length).toBe(2);\n });\n });\n\n it(\"handles metadata fetch errors\", async () => {\n const deferred = pDefer();\n const fakeClient = {\n fetchMetadata: vitest.fn(() => deferred.promise),\n } as unknown as Client;\n\n const wrapper = createWrapper(fakeClient);\n\n const { result } = renderHook(\n () => useColumnDefs(TestObjectType),\n { wrapper },\n );\n\n const error = new Error(\"Failed to fetch metadata\");\n deferred.reject(error);\n\n await waitFor(() => {\n expect(result.current.loading).toBe(false);\n });\n\n expect(result.current.error).toBeDefined();\n expect(result.current.columns).toEqual([]);\n });\n\n it(\"memoizes columns based on metadata properties\", async () => {\n const deferred = pDefer();\n const fakeClient = {\n fetchMetadata: vitest.fn(() => deferred.promise),\n } as unknown as Client;\n\n const wrapper = createWrapper(fakeClient);\n\n const { result, rerender } = renderHook(\n () => useColumnDefs(TestObjectType),\n { wrapper },\n );\n\n deferred.resolve(mockMetadata);\n\n await waitFor(() => {\n expect(result.current.loading).toBe(false);\n });\n\n const firstColumns = result.current.columns;\n\n // Rerender without changing metadata\n rerender();\n\n // Columns should be the same reference (memoized)\n expect(result.current.columns).toBe(firstColumns);\n });\n});\n"],"mappings":"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","ignoreList":[]}