@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,501 +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 { act, renderHook } from "@testing-library/react";
18
- import { describe, expect, it, vi } from "vitest";
19
- import { useTableSorting } from "../useTableSorting.js";
20
- const TestObjectType = {
21
- type: "object",
22
- apiName: "TestObject"
23
- };
24
- describe("useTableSorting", () => {
25
- describe("uncontrolled mode", () => {
26
- it("initializes with empty sorting state when no defaultOrderBy provided", () => {
27
- const {
28
- result
29
- } = renderHook(() => useTableSorting({}));
30
- expect(result.current.sorting).toEqual([]);
31
- });
32
- it("initializes with defaultOrderBy when provided", () => {
33
- const defaultOrderBy = [{
34
- property: "name",
35
- direction: "asc"
36
- }, {
37
- property: "age",
38
- direction: "desc"
39
- }];
40
- const {
41
- result
42
- } = renderHook(() => useTableSorting({
43
- defaultOrderBy
44
- }));
45
- expect(result.current.sorting).toEqual([{
46
- id: "name",
47
- desc: false
48
- }, {
49
- id: "age",
50
- desc: true
51
- }]);
52
- });
53
- it("updates internal sorting state when onSortingChange is called", () => {
54
- const {
55
- result
56
- } = renderHook(() => useTableSorting({}));
57
- expect(result.current.sorting).toEqual([]);
58
- act(() => {
59
- result.current.onSortingChange([{
60
- id: "name",
61
- desc: false
62
- }]);
63
- });
64
- expect(result.current.sorting).toEqual([{
65
- id: "name",
66
- desc: false
67
- }]);
68
- });
69
- it("calls onOrderByChanged with converted format when sorting changes", () => {
70
- const onOrderByChanged = vi.fn();
71
- const {
72
- result
73
- } = renderHook(() => useTableSorting({
74
- onOrderByChanged
75
- }));
76
- act(() => {
77
- result.current.onSortingChange([{
78
- id: "name",
79
- desc: false
80
- }, {
81
- id: "age",
82
- desc: true
83
- }]);
84
- });
85
- expect(onOrderByChanged).toHaveBeenCalledWith([{
86
- property: "name",
87
- direction: "asc"
88
- }, {
89
- property: "age",
90
- direction: "desc"
91
- }]);
92
- });
93
- it("handles clearing sorting", () => {
94
- const onOrderByChanged = vi.fn();
95
- const {
96
- result
97
- } = renderHook(() => useTableSorting({
98
- defaultOrderBy: [{
99
- property: "name",
100
- direction: "asc"
101
- }],
102
- onOrderByChanged
103
- }));
104
- expect(result.current.sorting).toEqual([{
105
- id: "name",
106
- desc: false
107
- }]);
108
- act(() => {
109
- result.current.onSortingChange([]);
110
- });
111
- expect(result.current.sorting).toEqual([]);
112
- expect(onOrderByChanged).toHaveBeenCalledWith([]);
113
- });
114
- });
115
- describe("controlled mode", () => {
116
- it("uses orderBy prop for sorting state", () => {
117
- const orderBy = [{
118
- property: "name",
119
- direction: "asc"
120
- }];
121
- const {
122
- result
123
- } = renderHook(() => useTableSorting({
124
- orderBy
125
- }));
126
- expect(result.current.sorting).toEqual([{
127
- id: "name",
128
- desc: false
129
- }]);
130
- });
131
- it("enables sorting when orderBy is provided with onOrderByChanged", () => {
132
- const orderBy = [{
133
- property: "name",
134
- direction: "asc"
135
- }];
136
- const onOrderByChanged = vi.fn();
137
- const {
138
- result
139
- } = renderHook(() => useTableSorting({
140
- orderBy,
141
- onOrderByChanged
142
- }));
143
- });
144
- it("when both orderBy and defaultOrderBy are provided, orderBy takes precedence", () => {
145
- const orderBy = [{
146
- property: "name",
147
- direction: "asc"
148
- }];
149
- const defaultOrderBy = [{
150
- property: "age",
151
- direction: "asc"
152
- }];
153
- const {
154
- result
155
- } = renderHook(() => useTableSorting({
156
- orderBy,
157
- defaultOrderBy
158
- }));
159
- expect(result.current.sorting).toEqual([{
160
- id: "name",
161
- desc: false
162
- }]);
163
- });
164
- it("calls onOrderByChanged when sorting changes but does not update internal state", () => {
165
- const onOrderByChanged = vi.fn();
166
- const {
167
- result,
168
- rerender
169
- } = renderHook(({
170
- orderBy
171
- }) => useTableSorting({
172
- orderBy,
173
- onOrderByChanged
174
- }), {
175
- initialProps: {
176
- orderBy: [{
177
- property: "name",
178
- direction: "asc"
179
- }]
180
- }
181
- });
182
- expect(result.current.sorting).toEqual([{
183
- id: "name",
184
- desc: false
185
- }]);
186
-
187
- // Change sorting
188
- act(() => {
189
- result.current.onSortingChange([{
190
- id: "age",
191
- desc: true
192
- }]);
193
- });
194
-
195
- // Callback is called
196
- expect(onOrderByChanged).toHaveBeenCalledWith([{
197
- property: "age",
198
- direction: "desc"
199
- }]);
200
-
201
- // State doesn't change (controlled)
202
- expect(result.current.sorting).toEqual([{
203
- id: "name",
204
- desc: false
205
- }]);
206
-
207
- // Parent updates prop
208
-
209
- rerender({
210
- orderBy: [{
211
- property: "age",
212
- direction: "desc"
213
- }]
214
- });
215
-
216
- // Now state reflects the prop
217
- expect(result.current.sorting).toEqual([{
218
- id: "age",
219
- desc: true
220
- }]);
221
- });
222
- });
223
- describe("multisort scenarios", () => {
224
- it("supports sorting by multiple columns simultaneously", () => {
225
- const onOrderByChanged = vi.fn();
226
- const {
227
- result
228
- } = renderHook(() => useTableSorting({
229
- onOrderByChanged
230
- }));
231
- act(() => {
232
- result.current.onSortingChange([{
233
- id: "name",
234
- desc: false
235
- }, {
236
- id: "age",
237
- desc: true
238
- }, {
239
- id: "email",
240
- desc: false
241
- }]);
242
- });
243
- expect(result.current.sorting).toEqual([{
244
- id: "name",
245
- desc: false
246
- }, {
247
- id: "age",
248
- desc: true
249
- }, {
250
- id: "email",
251
- desc: false
252
- }]);
253
- expect(onOrderByChanged).toHaveBeenCalledWith([{
254
- property: "name",
255
- direction: "asc"
256
- }, {
257
- property: "age",
258
- direction: "desc"
259
- }, {
260
- property: "email",
261
- direction: "asc"
262
- }]);
263
- });
264
- it("initializes with multiple columns in defaultOrderBy", () => {
265
- const defaultOrderBy = [{
266
- property: "name",
267
- direction: "asc"
268
- }, {
269
- property: "age",
270
- direction: "desc"
271
- }, {
272
- property: "email",
273
- direction: "asc"
274
- }];
275
- const {
276
- result
277
- } = renderHook(() => useTableSorting({
278
- defaultOrderBy
279
- }));
280
- expect(result.current.sorting).toEqual([{
281
- id: "name",
282
- desc: false
283
- }, {
284
- id: "age",
285
- desc: true
286
- }, {
287
- id: "email",
288
- desc: false
289
- }]);
290
- });
291
- it("preserves order of sort columns when adding a new sort", () => {
292
- const onOrderByChanged = vi.fn();
293
- const {
294
- result
295
- } = renderHook(() => useTableSorting({
296
- defaultOrderBy: [{
297
- property: "name",
298
- direction: "asc"
299
- }],
300
- onOrderByChanged
301
- }));
302
-
303
- // Add a second sort column
304
- act(() => {
305
- result.current.onSortingChange([{
306
- id: "name",
307
- desc: false
308
- }, {
309
- id: "age",
310
- desc: true
311
- }]);
312
- });
313
- expect(result.current.sorting).toEqual([{
314
- id: "name",
315
- desc: false
316
- }, {
317
- id: "age",
318
- desc: true
319
- }]);
320
- expect(onOrderByChanged).toHaveBeenCalledWith([{
321
- property: "name",
322
- direction: "asc"
323
- }, {
324
- property: "age",
325
- direction: "desc"
326
- }]);
327
- });
328
- it("supports removing a column from multisort", () => {
329
- const onOrderByChanged = vi.fn();
330
- const {
331
- result
332
- } = renderHook(() => useTableSorting({
333
- defaultOrderBy: [{
334
- property: "name",
335
- direction: "asc"
336
- }, {
337
- property: "age",
338
- direction: "desc"
339
- }, {
340
- property: "email",
341
- direction: "asc"
342
- }],
343
- onOrderByChanged
344
- }));
345
-
346
- // Remove the middle sort column
347
- act(() => {
348
- result.current.onSortingChange([{
349
- id: "name",
350
- desc: false
351
- }, {
352
- id: "email",
353
- desc: false
354
- }]);
355
- });
356
- expect(result.current.sorting).toEqual([{
357
- id: "name",
358
- desc: false
359
- }, {
360
- id: "email",
361
- desc: false
362
- }]);
363
- expect(onOrderByChanged).toHaveBeenCalledWith([{
364
- property: "name",
365
- direction: "asc"
366
- }, {
367
- property: "email",
368
- direction: "asc"
369
- }]);
370
- });
371
- it("supports changing direction of one column in multisort", () => {
372
- const onOrderByChanged = vi.fn();
373
- const {
374
- result
375
- } = renderHook(() => useTableSorting({
376
- defaultOrderBy: [{
377
- property: "name",
378
- direction: "asc"
379
- }, {
380
- property: "age",
381
- direction: "asc"
382
- }],
383
- onOrderByChanged
384
- }));
385
-
386
- // Change direction of second column
387
- act(() => {
388
- result.current.onSortingChange([{
389
- id: "name",
390
- desc: false
391
- }, {
392
- id: "age",
393
- desc: true
394
- }]);
395
- });
396
- expect(result.current.sorting).toEqual([{
397
- id: "name",
398
- desc: false
399
- }, {
400
- id: "age",
401
- desc: true
402
- }]);
403
- expect(onOrderByChanged).toHaveBeenCalledWith([{
404
- property: "name",
405
- direction: "asc"
406
- }, {
407
- property: "age",
408
- direction: "desc"
409
- }]);
410
- });
411
- it("supports reordering sort columns", () => {
412
- const onOrderByChanged = vi.fn();
413
- const {
414
- result
415
- } = renderHook(() => useTableSorting({
416
- defaultOrderBy: [{
417
- property: "name",
418
- direction: "asc"
419
- }, {
420
- property: "age",
421
- direction: "desc"
422
- }],
423
- onOrderByChanged
424
- }));
425
-
426
- // Reorder: age becomes primary, name becomes secondary
427
- act(() => {
428
- result.current.onSortingChange([{
429
- id: "age",
430
- desc: true
431
- }, {
432
- id: "name",
433
- desc: false
434
- }]);
435
- });
436
- expect(result.current.sorting).toEqual([{
437
- id: "age",
438
- desc: true
439
- }, {
440
- id: "name",
441
- desc: false
442
- }]);
443
- expect(onOrderByChanged).toHaveBeenCalledWith([{
444
- property: "age",
445
- direction: "desc"
446
- }, {
447
- property: "name",
448
- direction: "asc"
449
- }]);
450
- });
451
- it("controlled mode with multisort reflects orderBy changes", () => {
452
- const onOrderByChanged = vi.fn();
453
- const {
454
- result,
455
- rerender
456
- } = renderHook(({
457
- orderBy
458
- }) => useTableSorting({
459
- orderBy,
460
- onOrderByChanged
461
- }), {
462
- initialProps: {
463
- orderBy: [{
464
- property: "name",
465
- direction: "asc"
466
- }]
467
- }
468
- });
469
- expect(result.current.sorting).toEqual([{
470
- id: "name",
471
- desc: false
472
- }]);
473
-
474
- // Parent adds more sort columns
475
-
476
- rerender({
477
- orderBy: [{
478
- property: "name",
479
- direction: "asc"
480
- }, {
481
- property: "age",
482
- direction: "desc"
483
- }, {
484
- property: "email",
485
- direction: "asc"
486
- }]
487
- });
488
- expect(result.current.sorting).toEqual([{
489
- id: "name",
490
- desc: false
491
- }, {
492
- id: "age",
493
- desc: true
494
- }, {
495
- id: "email",
496
- desc: false
497
- }]);
498
- });
499
- });
500
- });
501
- //# sourceMappingURL=useTableSorting.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"useTableSorting.test.js","names":["act","renderHook","describe","expect","it","vi","useTableSorting","TestObjectType","type","apiName","result","current","sorting","toEqual","defaultOrderBy","property","direction","id","desc","onSortingChange","onOrderByChanged","fn","toHaveBeenCalledWith","orderBy","rerender","initialProps"],"sources":["useTableSorting.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 { ObjectTypeDefinition, PropertyKeys } from \"@osdk/api\";\nimport { act, renderHook } from \"@testing-library/react\";\nimport { describe, expect, it, vi } from \"vitest\";\nimport { useTableSorting } from \"../useTableSorting.js\";\n\nconst TestObjectType = {\n type: \"object\",\n apiName: \"TestObject\",\n} as const satisfies ObjectTypeDefinition;\n\ntype TestObject = typeof TestObjectType;\n\ndescribe(\"useTableSorting\", () => {\n describe(\"uncontrolled mode\", () => {\n it(\"initializes with empty sorting state when no defaultOrderBy provided\", () => {\n const { result } = renderHook(() => useTableSorting({}));\n\n expect(result.current.sorting).toEqual([]);\n });\n\n it(\"initializes with defaultOrderBy when provided\", () => {\n const defaultOrderBy: Array<{\n property: PropertyKeys<TestObject>;\n direction: \"asc\" | \"desc\";\n }> = [\n { property: \"name\" as PropertyKeys<TestObject>, direction: \"asc\" },\n { property: \"age\" as PropertyKeys<TestObject>, direction: \"desc\" },\n ];\n\n const { result } = renderHook(() =>\n useTableSorting<TestObject>({\n defaultOrderBy,\n })\n );\n\n expect(result.current.sorting).toEqual([\n { id: \"name\", desc: false },\n { id: \"age\", desc: true },\n ]);\n });\n\n it(\"updates internal sorting state when onSortingChange is called\", () => {\n const { result } = renderHook(() => useTableSorting<TestObject>({}));\n\n expect(result.current.sorting).toEqual([]);\n\n act(() => {\n result.current.onSortingChange([\n { id: \"name\", desc: false },\n ]);\n });\n\n expect(result.current.sorting).toEqual([\n { id: \"name\", desc: false },\n ]);\n });\n\n it(\"calls onOrderByChanged with converted format when sorting changes\", () => {\n const onOrderByChanged = vi.fn();\n const { result } = renderHook(() =>\n useTableSorting<TestObject>({\n onOrderByChanged,\n })\n );\n\n act(() => {\n result.current.onSortingChange([\n { id: \"name\", desc: false },\n { id: \"age\", desc: true },\n ]);\n });\n\n expect(onOrderByChanged).toHaveBeenCalledWith([\n { property: \"name\", direction: \"asc\" },\n { property: \"age\", direction: \"desc\" },\n ]);\n });\n\n it(\"handles clearing sorting\", () => {\n const onOrderByChanged = vi.fn();\n const { result } = renderHook(() =>\n useTableSorting<TestObject>({\n defaultOrderBy: [\n { property: \"name\" as PropertyKeys<TestObject>, direction: \"asc\" },\n ],\n onOrderByChanged,\n })\n );\n\n expect(result.current.sorting).toEqual([\n { id: \"name\", desc: false },\n ]);\n\n act(() => {\n result.current.onSortingChange([]);\n });\n\n expect(result.current.sorting).toEqual([]);\n expect(onOrderByChanged).toHaveBeenCalledWith([]);\n });\n });\n\n describe(\"controlled mode\", () => {\n it(\"uses orderBy prop for sorting state\", () => {\n const orderBy: Array<{\n property: PropertyKeys<TestObject>;\n direction: \"asc\" | \"desc\";\n }> = [\n { property: \"name\" as PropertyKeys<TestObject>, direction: \"asc\" },\n ];\n\n const { result } = renderHook(() =>\n useTableSorting<TestObject>({\n orderBy,\n })\n );\n\n expect(result.current.sorting).toEqual([\n { id: \"name\", desc: false },\n ]);\n });\n\n it(\"enables sorting when orderBy is provided with onOrderByChanged\", () => {\n const orderBy: Array<{\n property: PropertyKeys<TestObject>;\n direction: \"asc\" | \"desc\";\n }> = [\n { property: \"name\" as PropertyKeys<TestObject>, direction: \"asc\" },\n ];\n const onOrderByChanged = vi.fn();\n\n const { result } = renderHook(() =>\n useTableSorting<TestObject>({\n orderBy,\n onOrderByChanged,\n })\n );\n });\n\n it(\"when both orderBy and defaultOrderBy are provided, orderBy takes precedence\", () => {\n const orderBy: Array<{\n property: PropertyKeys<TestObject>;\n direction: \"asc\" | \"desc\";\n }> = [\n { property: \"name\" as PropertyKeys<TestObject>, direction: \"asc\" },\n ];\n\n const defaultOrderBy: Array<{\n property: PropertyKeys<TestObject>;\n direction: \"asc\" | \"desc\";\n }> = [\n { property: \"age\" as PropertyKeys<TestObject>, direction: \"asc\" },\n ];\n\n const { result } = renderHook(() =>\n useTableSorting<TestObject>({\n orderBy,\n defaultOrderBy,\n })\n );\n\n expect(result.current.sorting).toEqual([\n { id: \"name\", desc: false },\n ]);\n });\n\n it(\"calls onOrderByChanged when sorting changes but does not update internal state\", () => {\n const onOrderByChanged = vi.fn();\n const orderBy: Array<{\n property: PropertyKeys<TestObject>;\n direction: \"asc\" | \"desc\";\n }> = [\n { property: \"name\" as PropertyKeys<TestObject>, direction: \"asc\" },\n ];\n\n const { result, rerender } = renderHook(\n ({ orderBy }) =>\n useTableSorting<TestObject>({\n orderBy,\n onOrderByChanged,\n }),\n {\n initialProps: { orderBy },\n },\n );\n\n expect(result.current.sorting).toEqual([\n { id: \"name\", desc: false },\n ]);\n\n // Change sorting\n act(() => {\n result.current.onSortingChange([\n { id: \"age\", desc: true },\n ]);\n });\n\n // Callback is called\n expect(onOrderByChanged).toHaveBeenCalledWith([\n { property: \"age\", direction: \"desc\" },\n ]);\n\n // State doesn't change (controlled)\n expect(result.current.sorting).toEqual([\n { id: \"name\", desc: false },\n ]);\n\n // Parent updates prop\n const newOrderBy: Array<{\n property: PropertyKeys<TestObject>;\n direction: \"asc\" | \"desc\";\n }> = [\n { property: \"age\" as PropertyKeys<TestObject>, direction: \"desc\" },\n ];\n rerender({ orderBy: newOrderBy });\n\n // Now state reflects the prop\n expect(result.current.sorting).toEqual([\n { id: \"age\", desc: true },\n ]);\n });\n });\n\n describe(\"multisort scenarios\", () => {\n it(\"supports sorting by multiple columns simultaneously\", () => {\n const onOrderByChanged = vi.fn();\n const { result } = renderHook(() =>\n useTableSorting<TestObject>({\n onOrderByChanged,\n })\n );\n\n act(() => {\n result.current.onSortingChange([\n { id: \"name\", desc: false },\n { id: \"age\", desc: true },\n { id: \"email\", desc: false },\n ]);\n });\n\n expect(result.current.sorting).toEqual([\n { id: \"name\", desc: false },\n { id: \"age\", desc: true },\n { id: \"email\", desc: false },\n ]);\n\n expect(onOrderByChanged).toHaveBeenCalledWith([\n { property: \"name\", direction: \"asc\" },\n { property: \"age\", direction: \"desc\" },\n { property: \"email\", direction: \"asc\" },\n ]);\n });\n\n it(\"initializes with multiple columns in defaultOrderBy\", () => {\n const defaultOrderBy: Array<{\n property: PropertyKeys<TestObject>;\n direction: \"asc\" | \"desc\";\n }> = [\n { property: \"name\" as PropertyKeys<TestObject>, direction: \"asc\" },\n { property: \"age\" as PropertyKeys<TestObject>, direction: \"desc\" },\n { property: \"email\" as PropertyKeys<TestObject>, direction: \"asc\" },\n ];\n\n const { result } = renderHook(() =>\n useTableSorting<TestObject>({\n defaultOrderBy,\n })\n );\n\n expect(result.current.sorting).toEqual([\n { id: \"name\", desc: false },\n { id: \"age\", desc: true },\n { id: \"email\", desc: false },\n ]);\n });\n\n it(\"preserves order of sort columns when adding a new sort\", () => {\n const onOrderByChanged = vi.fn();\n const { result } = renderHook(() =>\n useTableSorting<TestObject>({\n defaultOrderBy: [\n { property: \"name\" as PropertyKeys<TestObject>, direction: \"asc\" },\n ],\n onOrderByChanged,\n })\n );\n\n // Add a second sort column\n act(() => {\n result.current.onSortingChange([\n { id: \"name\", desc: false },\n { id: \"age\", desc: true },\n ]);\n });\n\n expect(result.current.sorting).toEqual([\n { id: \"name\", desc: false },\n { id: \"age\", desc: true },\n ]);\n\n expect(onOrderByChanged).toHaveBeenCalledWith([\n { property: \"name\", direction: \"asc\" },\n { property: \"age\", direction: \"desc\" },\n ]);\n });\n\n it(\"supports removing a column from multisort\", () => {\n const onOrderByChanged = vi.fn();\n const { result } = renderHook(() =>\n useTableSorting<TestObject>({\n defaultOrderBy: [\n { property: \"name\" as PropertyKeys<TestObject>, direction: \"asc\" },\n { property: \"age\" as PropertyKeys<TestObject>, direction: \"desc\" },\n { property: \"email\" as PropertyKeys<TestObject>, direction: \"asc\" },\n ],\n onOrderByChanged,\n })\n );\n\n // Remove the middle sort column\n act(() => {\n result.current.onSortingChange([\n { id: \"name\", desc: false },\n { id: \"email\", desc: false },\n ]);\n });\n\n expect(result.current.sorting).toEqual([\n { id: \"name\", desc: false },\n { id: \"email\", desc: false },\n ]);\n\n expect(onOrderByChanged).toHaveBeenCalledWith([\n { property: \"name\", direction: \"asc\" },\n { property: \"email\", direction: \"asc\" },\n ]);\n });\n\n it(\"supports changing direction of one column in multisort\", () => {\n const onOrderByChanged = vi.fn();\n const { result } = renderHook(() =>\n useTableSorting<TestObject>({\n defaultOrderBy: [\n { property: \"name\" as PropertyKeys<TestObject>, direction: \"asc\" },\n { property: \"age\" as PropertyKeys<TestObject>, direction: \"asc\" },\n ],\n onOrderByChanged,\n })\n );\n\n // Change direction of second column\n act(() => {\n result.current.onSortingChange([\n { id: \"name\", desc: false },\n { id: \"age\", desc: true },\n ]);\n });\n\n expect(result.current.sorting).toEqual([\n { id: \"name\", desc: false },\n { id: \"age\", desc: true },\n ]);\n\n expect(onOrderByChanged).toHaveBeenCalledWith([\n { property: \"name\", direction: \"asc\" },\n { property: \"age\", direction: \"desc\" },\n ]);\n });\n\n it(\"supports reordering sort columns\", () => {\n const onOrderByChanged = vi.fn();\n const { result } = renderHook(() =>\n useTableSorting<TestObject>({\n defaultOrderBy: [\n { property: \"name\" as PropertyKeys<TestObject>, direction: \"asc\" },\n { property: \"age\" as PropertyKeys<TestObject>, direction: \"desc\" },\n ],\n onOrderByChanged,\n })\n );\n\n // Reorder: age becomes primary, name becomes secondary\n act(() => {\n result.current.onSortingChange([\n { id: \"age\", desc: true },\n { id: \"name\", desc: false },\n ]);\n });\n\n expect(result.current.sorting).toEqual([\n { id: \"age\", desc: true },\n { id: \"name\", desc: false },\n ]);\n\n expect(onOrderByChanged).toHaveBeenCalledWith([\n { property: \"age\", direction: \"desc\" },\n { property: \"name\", direction: \"asc\" },\n ]);\n });\n\n it(\"controlled mode with multisort reflects orderBy changes\", () => {\n const onOrderByChanged = vi.fn();\n const initialOrderBy: Array<{\n property: PropertyKeys<TestObject>;\n direction: \"asc\" | \"desc\";\n }> = [\n { property: \"name\" as PropertyKeys<TestObject>, direction: \"asc\" },\n ];\n\n const { result, rerender } = renderHook(\n ({ orderBy }) =>\n useTableSorting<TestObject>({\n orderBy,\n onOrderByChanged,\n }),\n {\n initialProps: { orderBy: initialOrderBy },\n },\n );\n\n expect(result.current.sorting).toEqual([\n { id: \"name\", desc: false },\n ]);\n\n // Parent adds more sort columns\n const newOrderBy: Array<{\n property: PropertyKeys<TestObject>;\n direction: \"asc\" | \"desc\";\n }> = [\n { property: \"name\" as PropertyKeys<TestObject>, direction: \"asc\" },\n { property: \"age\" as PropertyKeys<TestObject>, direction: \"desc\" },\n { property: \"email\" as PropertyKeys<TestObject>, direction: \"asc\" },\n ];\n rerender({ orderBy: newOrderBy });\n\n expect(result.current.sorting).toEqual([\n { id: \"name\", desc: false },\n { id: \"age\", desc: true },\n { id: \"email\", desc: false },\n ]);\n });\n });\n});\n"],"mappings":"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","ignoreList":[]}