@osdk/react-components 0.2.0-beta.10 → 0.2.0-beta.12

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 (182) hide show
  1. package/AGENTS.md +105 -0
  2. package/CHANGELOG.md +22 -0
  3. package/build/browser/object-table/DefaultCellRenderer.js +5 -2
  4. package/build/browser/object-table/DefaultCellRenderer.js.map +1 -1
  5. package/build/browser/object-table/EditableCell.js +16 -6
  6. package/build/browser/object-table/EditableCell.js.map +1 -1
  7. package/build/browser/object-table/EditableCell.module.css +30 -2
  8. package/build/browser/object-table/EditableCell.module.css.js +2 -1
  9. package/build/browser/object-table/ObjectTable.js +9 -22
  10. package/build/browser/object-table/ObjectTable.js.map +1 -1
  11. package/build/browser/object-table/ObjectTableApi.js.map +1 -1
  12. package/build/browser/object-table/Table.js +23 -15
  13. package/build/browser/object-table/Table.js.map +1 -1
  14. package/build/browser/object-table/Table.module.css +0 -8
  15. package/build/browser/object-table/Table.module.css.js +1 -2
  16. package/build/browser/object-table/TableBody.js +8 -2
  17. package/build/browser/object-table/TableBody.js.map +1 -1
  18. package/build/browser/object-table/TableCell.module.css +0 -8
  19. package/build/browser/object-table/TableEditContainer.js +79 -0
  20. package/build/browser/object-table/TableEditContainer.js.map +1 -0
  21. package/build/browser/object-table/TableEditContainer.module.css +44 -0
  22. package/build/browser/object-table/TableEditContainer.module.css.js +9 -0
  23. package/build/browser/object-table/TableRow.js +12 -4
  24. package/build/browser/object-table/TableRow.js.map +1 -1
  25. package/build/browser/object-table/TableRow.module.css +2 -1
  26. package/build/browser/object-table/hooks/useEditableTable.js +20 -11
  27. package/build/browser/object-table/hooks/useEditableTable.js.map +1 -1
  28. package/build/browser/object-table/hooks/useObjectTableData.js +0 -5
  29. package/build/browser/object-table/hooks/useObjectTableData.js.map +1 -1
  30. package/build/browser/object-table/utils/getCellId.js +0 -7
  31. package/build/browser/object-table/utils/getCellId.js.map +1 -1
  32. package/build/browser/object-table/utils/types.js.map +1 -1
  33. package/build/browser/public/experimental.js.map +1 -1
  34. package/build/browser/styles.css +79 -19
  35. package/build/cjs/public/experimental.cjs +179 -90
  36. package/build/cjs/public/experimental.cjs.map +1 -1
  37. package/build/cjs/public/experimental.css +96 -57
  38. package/build/cjs/public/experimental.css.map +1 -1
  39. package/build/cjs/public/experimental.d.cts +40 -18
  40. package/build/esm/object-table/DefaultCellRenderer.js +5 -2
  41. package/build/esm/object-table/DefaultCellRenderer.js.map +1 -1
  42. package/build/esm/object-table/EditableCell.js +16 -6
  43. package/build/esm/object-table/EditableCell.js.map +1 -1
  44. package/build/esm/object-table/EditableCell.module.css +30 -2
  45. package/build/esm/object-table/ObjectTable.js +9 -22
  46. package/build/esm/object-table/ObjectTable.js.map +1 -1
  47. package/build/esm/object-table/ObjectTableApi.js.map +1 -1
  48. package/build/esm/object-table/Table.js +23 -15
  49. package/build/esm/object-table/Table.js.map +1 -1
  50. package/build/esm/object-table/Table.module.css +0 -8
  51. package/build/esm/object-table/TableBody.js +8 -2
  52. package/build/esm/object-table/TableBody.js.map +1 -1
  53. package/build/esm/object-table/TableCell.module.css +0 -8
  54. package/build/esm/object-table/TableEditContainer.js +79 -0
  55. package/build/esm/object-table/TableEditContainer.js.map +1 -0
  56. package/build/esm/object-table/TableEditContainer.module.css +44 -0
  57. package/build/esm/object-table/TableRow.js +12 -4
  58. package/build/esm/object-table/TableRow.js.map +1 -1
  59. package/build/esm/object-table/TableRow.module.css +2 -1
  60. package/build/esm/object-table/hooks/useEditableTable.js +20 -11
  61. package/build/esm/object-table/hooks/useEditableTable.js.map +1 -1
  62. package/build/esm/object-table/hooks/useObjectTableData.js +0 -5
  63. package/build/esm/object-table/hooks/useObjectTableData.js.map +1 -1
  64. package/build/esm/object-table/utils/getCellId.js +0 -7
  65. package/build/esm/object-table/utils/getCellId.js.map +1 -1
  66. package/build/esm/object-table/utils/types.js.map +1 -1
  67. package/build/esm/public/experimental.js.map +1 -1
  68. package/build/types/object-table/DefaultCellRenderer.d.ts +2 -2
  69. package/build/types/object-table/DefaultCellRenderer.d.ts.map +1 -1
  70. package/build/types/object-table/EditableCell.d.ts +18 -6
  71. package/build/types/object-table/EditableCell.d.ts.map +1 -1
  72. package/build/types/object-table/ObjectTable.d.ts +1 -1
  73. package/build/types/object-table/ObjectTable.d.ts.map +1 -1
  74. package/build/types/object-table/ObjectTableApi.d.ts +16 -6
  75. package/build/types/object-table/ObjectTableApi.d.ts.map +1 -1
  76. package/build/types/object-table/Table.d.ts +5 -10
  77. package/build/types/object-table/Table.d.ts.map +1 -1
  78. package/build/types/object-table/TableBody.d.ts +4 -1
  79. package/build/types/object-table/TableBody.d.ts.map +1 -1
  80. package/build/types/object-table/TableEditContainer.d.ts +9 -0
  81. package/build/types/object-table/TableEditContainer.d.ts.map +1 -0
  82. package/build/types/object-table/TableRow.d.ts +5 -1
  83. package/build/types/object-table/TableRow.d.ts.map +1 -1
  84. package/build/types/object-table/hooks/useEditableTable.d.ts +4 -9
  85. package/build/types/object-table/hooks/useEditableTable.d.ts.map +1 -1
  86. package/build/types/object-table/utils/getCellId.d.ts +0 -1
  87. package/build/types/object-table/utils/getCellId.d.ts.map +1 -1
  88. package/build/types/object-table/utils/types.d.ts +25 -3
  89. package/build/types/object-table/utils/types.d.ts.map +1 -1
  90. package/build/types/public/experimental.d.ts +1 -1
  91. package/build/types/public/experimental.d.ts.map +1 -1
  92. package/package.json +7 -6
  93. package/build/browser/filter-list/__tests__/LinkedPropertyInput.test.js +0 -202
  94. package/build/browser/filter-list/__tests__/LinkedPropertyInput.test.js.map +0 -1
  95. package/build/browser/filter-list/__tests__/dateUtils.test.js +0 -55
  96. package/build/browser/filter-list/__tests__/dateUtils.test.js.map +0 -1
  97. package/build/browser/filter-list/__tests__/filterStateToWhereClause.test.js +0 -296
  98. package/build/browser/filter-list/__tests__/filterStateToWhereClause.test.js.map +0 -1
  99. package/build/browser/filter-list/__tests__/getFilterKey.test.js +0 -53
  100. package/build/browser/filter-list/__tests__/getFilterKey.test.js.map +0 -1
  101. package/build/browser/filter-list/__tests__/testUtils.js +0 -203
  102. package/build/browser/filter-list/__tests__/testUtils.js.map +0 -1
  103. package/build/browser/filter-list/hooks/__tests__/useFilterListState.test.js +0 -128
  104. package/build/browser/filter-list/hooks/__tests__/useFilterListState.test.js.map +0 -1
  105. package/build/browser/object-table/__tests__/useEditableTable.test.js +0 -197
  106. package/build/browser/object-table/__tests__/useEditableTable.test.js.map +0 -1
  107. package/build/browser/object-table/hooks/__tests__/useCellContextMenu.test.js +0 -147
  108. package/build/browser/object-table/hooks/__tests__/useCellContextMenu.test.js.map +0 -1
  109. package/build/browser/object-table/hooks/__tests__/useColumnDefs.test.js +0 -520
  110. package/build/browser/object-table/hooks/__tests__/useColumnDefs.test.js.map +0 -1
  111. package/build/browser/object-table/hooks/__tests__/useColumnPinning.test.js +0 -266
  112. package/build/browser/object-table/hooks/__tests__/useColumnPinning.test.js.map +0 -1
  113. package/build/browser/object-table/hooks/__tests__/useColumnVisibility.test.js +0 -200
  114. package/build/browser/object-table/hooks/__tests__/useColumnVisibility.test.js.map +0 -1
  115. package/build/browser/object-table/hooks/__tests__/useObjectTableData.test.js +0 -315
  116. package/build/browser/object-table/hooks/__tests__/useObjectTableData.test.js.map +0 -1
  117. package/build/browser/object-table/hooks/__tests__/useRowSelection.test.js +0 -596
  118. package/build/browser/object-table/hooks/__tests__/useRowSelection.test.js.map +0 -1
  119. package/build/browser/object-table/hooks/__tests__/useSelectionColumn.test.js +0 -220
  120. package/build/browser/object-table/hooks/__tests__/useSelectionColumn.test.js.map +0 -1
  121. package/build/browser/object-table/hooks/__tests__/useTableSorting.test.js +0 -501
  122. package/build/browser/object-table/hooks/__tests__/useTableSorting.test.js.map +0 -1
  123. package/build/esm/filter-list/__tests__/LinkedPropertyInput.test.js +0 -202
  124. package/build/esm/filter-list/__tests__/LinkedPropertyInput.test.js.map +0 -1
  125. package/build/esm/filter-list/__tests__/dateUtils.test.js +0 -55
  126. package/build/esm/filter-list/__tests__/dateUtils.test.js.map +0 -1
  127. package/build/esm/filter-list/__tests__/filterStateToWhereClause.test.js +0 -296
  128. package/build/esm/filter-list/__tests__/filterStateToWhereClause.test.js.map +0 -1
  129. package/build/esm/filter-list/__tests__/getFilterKey.test.js +0 -53
  130. package/build/esm/filter-list/__tests__/getFilterKey.test.js.map +0 -1
  131. package/build/esm/filter-list/__tests__/testUtils.js +0 -203
  132. package/build/esm/filter-list/__tests__/testUtils.js.map +0 -1
  133. package/build/esm/filter-list/hooks/__tests__/useFilterListState.test.js +0 -128
  134. package/build/esm/filter-list/hooks/__tests__/useFilterListState.test.js.map +0 -1
  135. package/build/esm/object-table/__tests__/useEditableTable.test.js +0 -197
  136. package/build/esm/object-table/__tests__/useEditableTable.test.js.map +0 -1
  137. package/build/esm/object-table/hooks/__tests__/useCellContextMenu.test.js +0 -147
  138. package/build/esm/object-table/hooks/__tests__/useCellContextMenu.test.js.map +0 -1
  139. package/build/esm/object-table/hooks/__tests__/useColumnDefs.test.js +0 -520
  140. package/build/esm/object-table/hooks/__tests__/useColumnDefs.test.js.map +0 -1
  141. package/build/esm/object-table/hooks/__tests__/useColumnPinning.test.js +0 -266
  142. package/build/esm/object-table/hooks/__tests__/useColumnPinning.test.js.map +0 -1
  143. package/build/esm/object-table/hooks/__tests__/useColumnVisibility.test.js +0 -200
  144. package/build/esm/object-table/hooks/__tests__/useColumnVisibility.test.js.map +0 -1
  145. package/build/esm/object-table/hooks/__tests__/useObjectTableData.test.js +0 -315
  146. package/build/esm/object-table/hooks/__tests__/useObjectTableData.test.js.map +0 -1
  147. package/build/esm/object-table/hooks/__tests__/useRowSelection.test.js +0 -596
  148. package/build/esm/object-table/hooks/__tests__/useRowSelection.test.js.map +0 -1
  149. package/build/esm/object-table/hooks/__tests__/useSelectionColumn.test.js +0 -220
  150. package/build/esm/object-table/hooks/__tests__/useSelectionColumn.test.js.map +0 -1
  151. package/build/esm/object-table/hooks/__tests__/useTableSorting.test.js +0 -501
  152. package/build/esm/object-table/hooks/__tests__/useTableSorting.test.js.map +0 -1
  153. package/build/types/filter-list/__tests__/LinkedPropertyInput.test.d.ts +0 -1
  154. package/build/types/filter-list/__tests__/LinkedPropertyInput.test.d.ts.map +0 -1
  155. package/build/types/filter-list/__tests__/dateUtils.test.d.ts +0 -1
  156. package/build/types/filter-list/__tests__/dateUtils.test.d.ts.map +0 -1
  157. package/build/types/filter-list/__tests__/filterStateToWhereClause.test.d.ts +0 -1
  158. package/build/types/filter-list/__tests__/filterStateToWhereClause.test.d.ts.map +0 -1
  159. package/build/types/filter-list/__tests__/getFilterKey.test.d.ts +0 -1
  160. package/build/types/filter-list/__tests__/getFilterKey.test.d.ts.map +0 -1
  161. package/build/types/filter-list/__tests__/testUtils.d.ts +0 -65
  162. package/build/types/filter-list/__tests__/testUtils.d.ts.map +0 -1
  163. package/build/types/filter-list/hooks/__tests__/useFilterListState.test.d.ts +0 -1
  164. package/build/types/filter-list/hooks/__tests__/useFilterListState.test.d.ts.map +0 -1
  165. package/build/types/object-table/__tests__/useEditableTable.test.d.ts +0 -1
  166. package/build/types/object-table/__tests__/useEditableTable.test.d.ts.map +0 -1
  167. package/build/types/object-table/hooks/__tests__/useCellContextMenu.test.d.ts +0 -1
  168. package/build/types/object-table/hooks/__tests__/useCellContextMenu.test.d.ts.map +0 -1
  169. package/build/types/object-table/hooks/__tests__/useColumnDefs.test.d.ts +0 -1
  170. package/build/types/object-table/hooks/__tests__/useColumnDefs.test.d.ts.map +0 -1
  171. package/build/types/object-table/hooks/__tests__/useColumnPinning.test.d.ts +0 -1
  172. package/build/types/object-table/hooks/__tests__/useColumnPinning.test.d.ts.map +0 -1
  173. package/build/types/object-table/hooks/__tests__/useColumnVisibility.test.d.ts +0 -1
  174. package/build/types/object-table/hooks/__tests__/useColumnVisibility.test.d.ts.map +0 -1
  175. package/build/types/object-table/hooks/__tests__/useObjectTableData.test.d.ts +0 -1
  176. package/build/types/object-table/hooks/__tests__/useObjectTableData.test.d.ts.map +0 -1
  177. package/build/types/object-table/hooks/__tests__/useRowSelection.test.d.ts +0 -1
  178. package/build/types/object-table/hooks/__tests__/useRowSelection.test.d.ts.map +0 -1
  179. package/build/types/object-table/hooks/__tests__/useSelectionColumn.test.d.ts +0 -1
  180. package/build/types/object-table/hooks/__tests__/useSelectionColumn.test.d.ts.map +0 -1
  181. package/build/types/object-table/hooks/__tests__/useTableSorting.test.d.ts +0 -1
  182. package/build/types/object-table/hooks/__tests__/useTableSorting.test.d.ts.map +0 -1
@@ -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":[]}
@@ -1,266 +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 { SELECTION_COLUMN_ID } from "../../utils/constants.js";
20
- import { useColumnPinning } from "../useColumnPinning.js";
21
- const TestObjectType = {
22
- type: "object",
23
- apiName: "TestObject"
24
- };
25
- function createColumnDef(id, pinned) {
26
- return {
27
- locator: {
28
- type: "property",
29
- id: id
30
- },
31
- pinned
32
- };
33
- }
34
- describe("useColumnPinning", () => {
35
- describe("initialization", () => {
36
- it("initializes with empty pinning state when no columnDefinitions provided", () => {
37
- const {
38
- result
39
- } = renderHook(() => useColumnPinning({
40
- columnDefinitions: undefined
41
- }));
42
- expect(result.current.columnPinning).toEqual({
43
- left: [],
44
- right: []
45
- });
46
- });
47
- it("initializes with empty pinning state when columnDefinitions has no pinned columns", () => {
48
- const columnDefinitions = [createColumnDef("name")];
49
- const {
50
- result
51
- } = renderHook(() => useColumnPinning({
52
- columnDefinitions
53
- }));
54
- expect(result.current.columnPinning).toEqual({
55
- left: [],
56
- right: []
57
- });
58
- });
59
- it("initializes with default pinning from columnDefinitions", () => {
60
- const columnDefinitions = [createColumnDef("firstName", "left"), createColumnDef("lastName", "left"), createColumnDef("age", "none"), createColumnDef("email", "right")];
61
- const {
62
- result
63
- } = renderHook(() => useColumnPinning({
64
- columnDefinitions
65
- }));
66
- expect(result.current.columnPinning).toEqual({
67
- left: ["firstName", "lastName"],
68
- right: ["email"]
69
- });
70
- });
71
- it("adds selection column to left pinning when hasSelectionColumn is true", () => {
72
- const columnDefinitions = [createColumnDef("name", "left")];
73
- const {
74
- result
75
- } = renderHook(() => useColumnPinning({
76
- columnDefinitions,
77
- hasSelectionColumn: true
78
- }));
79
- expect(result.current.columnPinning).toEqual({
80
- left: [SELECTION_COLUMN_ID, "name"],
81
- right: []
82
- });
83
- });
84
- it("does not add selection column when hasSelectionColumn is false", () => {
85
- const columnDefinitions = [createColumnDef("name", "left")];
86
- const {
87
- result
88
- } = renderHook(() => useColumnPinning({
89
- columnDefinitions,
90
- hasSelectionColumn: false
91
- }));
92
- expect(result.current.columnPinning).toEqual({
93
- left: ["name"],
94
- right: []
95
- });
96
- });
97
- });
98
- describe("onColumnPinningChange", () => {
99
- it("updates column pinning state when called", () => {
100
- const {
101
- result
102
- } = renderHook(() => useColumnPinning({
103
- columnDefinitions: undefined
104
- }));
105
- expect(result.current.columnPinning).toEqual({
106
- left: [],
107
- right: []
108
- });
109
- act(() => {
110
- result.current.onColumnPinningChange({
111
- left: ["name"],
112
- right: ["email"]
113
- });
114
- });
115
- expect(result.current.columnPinning).toEqual({
116
- left: ["name"],
117
- right: ["email"]
118
- });
119
- });
120
- it("calls onColumnsPinnedChanged with converted format when pinning changes", () => {
121
- const onColumnsPinnedChanged = vi.fn();
122
- const {
123
- result
124
- } = renderHook(() => useColumnPinning({
125
- columnDefinitions: undefined,
126
- onColumnsPinnedChanged
127
- }));
128
- act(() => {
129
- result.current.onColumnPinningChange({
130
- left: ["name", "age"],
131
- right: ["email"]
132
- });
133
- });
134
- expect(onColumnsPinnedChanged).toHaveBeenCalledWith([{
135
- columnId: "name",
136
- pinned: "left"
137
- }, {
138
- columnId: "age",
139
- pinned: "left"
140
- }, {
141
- columnId: "email",
142
- pinned: "right"
143
- }]);
144
- });
145
- it("filters out selection column from onColumnsPinnedChanged callback", () => {
146
- const onColumnsPinnedChanged = vi.fn();
147
- const {
148
- result
149
- } = renderHook(() => useColumnPinning({
150
- columnDefinitions: undefined,
151
- onColumnsPinnedChanged
152
- }));
153
- act(() => {
154
- result.current.onColumnPinningChange({
155
- left: [SELECTION_COLUMN_ID, "name"],
156
- right: ["email"]
157
- });
158
- });
159
- expect(onColumnsPinnedChanged).toHaveBeenCalledWith([{
160
- columnId: "name",
161
- pinned: "left"
162
- }, {
163
- columnId: "email",
164
- pinned: "right"
165
- }]);
166
- });
167
- it("handles updater function in onColumnPinningChange", () => {
168
- const onColumnsPinnedChanged = vi.fn();
169
- const {
170
- result
171
- } = renderHook(() => useColumnPinning({
172
- columnDefinitions: undefined,
173
- onColumnsPinnedChanged
174
- }));
175
-
176
- // Set initial pinning
177
- act(() => {
178
- result.current.onColumnPinningChange({
179
- left: ["name"],
180
- right: []
181
- });
182
- });
183
-
184
- // Pin second column
185
- act(() => {
186
- result.current.onColumnPinningChange(prev => ({
187
- ...prev,
188
- right: ["email"]
189
- }));
190
- });
191
- expect(result.current.columnPinning).toEqual({
192
- left: ["name"],
193
- right: ["email"]
194
- });
195
- expect(onColumnsPinnedChanged).toHaveBeenLastCalledWith([{
196
- columnId: "name",
197
- pinned: "left"
198
- }, {
199
- columnId: "email",
200
- pinned: "right"
201
- }]);
202
-
203
- // Unpin first column
204
- act(() => {
205
- result.current.onColumnPinningChange(prev => ({
206
- ...prev,
207
- left: []
208
- }));
209
- });
210
- expect(result.current.columnPinning).toEqual({
211
- left: [],
212
- right: ["email"]
213
- });
214
- expect(onColumnsPinnedChanged).toHaveBeenLastCalledWith([{
215
- columnId: "email",
216
- pinned: "right"
217
- }]);
218
- });
219
- });
220
- describe("updates when props change", () => {
221
- it("updates pinning state when columnDefinitions change", () => {
222
- const {
223
- result,
224
- rerender
225
- } = renderHook(({
226
- columnDefinitions
227
- }) => useColumnPinning({
228
- columnDefinitions
229
- }), {
230
- initialProps: {
231
- columnDefinitions: [{
232
- locator: {
233
- type: "property",
234
- id: "name"
235
- },
236
- pinned: "left"
237
- }]
238
- }
239
- });
240
- expect(result.current.columnPinning).toEqual({
241
- left: ["name"],
242
- right: []
243
- });
244
- rerender({
245
- columnDefinitions: [{
246
- locator: {
247
- type: "property",
248
- id: "name"
249
- },
250
- pinned: "left"
251
- }, {
252
- locator: {
253
- type: "property",
254
- id: "age"
255
- },
256
- pinned: "right"
257
- }]
258
- });
259
- expect(result.current.columnPinning).toEqual({
260
- left: ["name"],
261
- right: ["age"]
262
- });
263
- });
264
- });
265
- });
266
- //# sourceMappingURL=useColumnPinning.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"useColumnPinning.test.js","names":["act","renderHook","describe","expect","it","vi","SELECTION_COLUMN_ID","useColumnPinning","TestObjectType","type","apiName","createColumnDef","id","pinned","locator","result","columnDefinitions","undefined","current","columnPinning","toEqual","left","right","hasSelectionColumn","onColumnPinningChange","onColumnsPinnedChanged","fn","toHaveBeenCalledWith","columnId","prev","toHaveBeenLastCalledWith","rerender","initialProps"],"sources":["useColumnPinning.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 type {\n ColumnDefinition,\n ObjectTableProps,\n} from \"../../ObjectTableApi.js\";\nimport { SELECTION_COLUMN_ID } from \"../../utils/constants.js\";\nimport { useColumnPinning } from \"../useColumnPinning.js\";\n\nconst TestObjectType = {\n type: \"object\",\n apiName: \"TestObject\",\n} as const satisfies ObjectTypeDefinition;\n\ntype TestObject = typeof TestObjectType;\n\nfunction createColumnDef(\n id: string,\n pinned?: \"left\" | \"right\" | \"none\",\n): ColumnDefinition<TestObject> {\n return {\n locator: { type: \"property\", id: id as PropertyKeys<TestObject> },\n pinned,\n };\n}\n\ndescribe(\"useColumnPinning\", () => {\n describe(\"initialization\", () => {\n it(\"initializes with empty pinning state when no columnDefinitions provided\", () => {\n const { result } = renderHook(() =>\n useColumnPinning<TestObject>({\n columnDefinitions: undefined,\n })\n );\n\n expect(result.current.columnPinning).toEqual({\n left: [],\n right: [],\n });\n });\n\n it(\"initializes with empty pinning state when columnDefinitions has no pinned columns\", () => {\n const columnDefinitions = [\n createColumnDef(\"name\"),\n ];\n\n const { result } = renderHook(() =>\n useColumnPinning<TestObject>({\n columnDefinitions,\n })\n );\n\n expect(result.current.columnPinning).toEqual({\n left: [],\n right: [],\n });\n });\n\n it(\"initializes with default pinning from columnDefinitions\", () => {\n const columnDefinitions = [\n createColumnDef(\"firstName\", \"left\"),\n createColumnDef(\"lastName\", \"left\"),\n createColumnDef(\"age\", \"none\"),\n createColumnDef(\"email\", \"right\"),\n ];\n\n const { result } = renderHook(() =>\n useColumnPinning<TestObject>({\n columnDefinitions,\n })\n );\n\n expect(result.current.columnPinning).toEqual({\n left: [\"firstName\", \"lastName\"],\n right: [\"email\"],\n });\n });\n\n it(\"adds selection column to left pinning when hasSelectionColumn is true\", () => {\n const columnDefinitions = [\n createColumnDef(\"name\", \"left\"),\n ];\n\n const { result } = renderHook(() =>\n useColumnPinning<TestObject>({\n columnDefinitions,\n hasSelectionColumn: true,\n })\n );\n\n expect(result.current.columnPinning).toEqual({\n left: [SELECTION_COLUMN_ID, \"name\"],\n right: [],\n });\n });\n\n it(\"does not add selection column when hasSelectionColumn is false\", () => {\n const columnDefinitions = [\n createColumnDef(\"name\", \"left\"),\n ];\n\n const { result } = renderHook(() =>\n useColumnPinning<TestObject>({\n columnDefinitions,\n hasSelectionColumn: false,\n })\n );\n\n expect(result.current.columnPinning).toEqual({\n left: [\"name\"],\n right: [],\n });\n });\n });\n\n describe(\"onColumnPinningChange\", () => {\n it(\"updates column pinning state when called\", () => {\n const { result } = renderHook(() =>\n useColumnPinning<TestObject>({\n columnDefinitions: undefined,\n })\n );\n\n expect(result.current.columnPinning).toEqual({\n left: [],\n right: [],\n });\n\n act(() => {\n result.current.onColumnPinningChange({\n left: [\"name\"],\n right: [\"email\"],\n });\n });\n\n expect(result.current.columnPinning).toEqual({\n left: [\"name\"],\n right: [\"email\"],\n });\n });\n\n it(\"calls onColumnsPinnedChanged with converted format when pinning changes\", () => {\n const onColumnsPinnedChanged = vi.fn();\n const { result } = renderHook(() =>\n useColumnPinning<TestObject>({\n columnDefinitions: undefined,\n onColumnsPinnedChanged,\n })\n );\n\n act(() => {\n result.current.onColumnPinningChange({\n left: [\"name\", \"age\"],\n right: [\"email\"],\n });\n });\n\n expect(onColumnsPinnedChanged).toHaveBeenCalledWith([\n { columnId: \"name\", pinned: \"left\" },\n { columnId: \"age\", pinned: \"left\" },\n { columnId: \"email\", pinned: \"right\" },\n ]);\n });\n\n it(\"filters out selection column from onColumnsPinnedChanged callback\", () => {\n const onColumnsPinnedChanged = vi.fn();\n const { result } = renderHook(() =>\n useColumnPinning<TestObject>({\n columnDefinitions: undefined,\n onColumnsPinnedChanged,\n })\n );\n\n act(() => {\n result.current.onColumnPinningChange({\n left: [SELECTION_COLUMN_ID, \"name\"],\n right: [\"email\"],\n });\n });\n\n expect(onColumnsPinnedChanged).toHaveBeenCalledWith([\n { columnId: \"name\", pinned: \"left\" },\n { columnId: \"email\", pinned: \"right\" },\n ]);\n });\n\n it(\"handles updater function in onColumnPinningChange\", () => {\n const onColumnsPinnedChanged = vi.fn();\n const { result } = renderHook(() =>\n useColumnPinning<TestObject>({\n columnDefinitions: undefined,\n onColumnsPinnedChanged,\n })\n );\n\n // Set initial pinning\n act(() => {\n result.current.onColumnPinningChange({\n left: [\"name\"],\n right: [],\n });\n });\n\n // Pin second column\n act(() => {\n result.current.onColumnPinningChange((prev) => ({\n ...prev,\n right: [\"email\"],\n }));\n });\n\n expect(result.current.columnPinning).toEqual({\n left: [\"name\"],\n right: [\"email\"],\n });\n\n expect(onColumnsPinnedChanged).toHaveBeenLastCalledWith([\n { columnId: \"name\", pinned: \"left\" },\n { columnId: \"email\", pinned: \"right\" },\n ]);\n\n // Unpin first column\n act(() => {\n result.current.onColumnPinningChange((prev) => ({\n ...prev,\n left: [],\n }));\n });\n\n expect(result.current.columnPinning).toEqual({\n left: [],\n right: [\"email\"],\n });\n\n expect(onColumnsPinnedChanged).toHaveBeenLastCalledWith([\n { columnId: \"email\", pinned: \"right\" },\n ]);\n });\n });\n\n describe(\"updates when props change\", () => {\n it(\"updates pinning state when columnDefinitions change\", () => {\n const initialColumnDefinitions: ObjectTableProps<\n TestObject\n >[\"columnDefinitions\"] = [\n {\n locator: { type: \"property\", id: \"name\" as PropertyKeys<TestObject> },\n pinned: \"left\",\n },\n ];\n\n const { result, rerender } = renderHook(\n ({ columnDefinitions }) =>\n useColumnPinning<TestObject>({\n columnDefinitions,\n }),\n {\n initialProps: { columnDefinitions: initialColumnDefinitions },\n },\n );\n\n expect(result.current.columnPinning).toEqual({\n left: [\"name\"],\n right: [],\n });\n\n const newColumnDefinitions: ObjectTableProps<\n TestObject\n >[\"columnDefinitions\"] = [\n {\n locator: { type: \"property\", id: \"name\" as PropertyKeys<TestObject> },\n pinned: \"left\",\n },\n {\n locator: { type: \"property\", id: \"age\" as PropertyKeys<TestObject> },\n pinned: \"right\",\n },\n ];\n\n rerender({ columnDefinitions: newColumnDefinitions });\n\n expect(result.current.columnPinning).toEqual({\n left: [\"name\"],\n right: [\"age\"],\n });\n });\n });\n});\n"],"mappings":"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","ignoreList":[]}
@@ -1,200 +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 { SELECTION_COLUMN_ID } from "../../utils/constants.js";
20
- import { useColumnVisibility } from "../useColumnVisibility.js";
21
- const TestObjectType = {
22
- type: "object",
23
- apiName: "TestObject"
24
- };
25
- // Helper to create mock ColumnDef objects that mirror what useColumnDefs would produce
26
- function createMockColumn(id, isVisible) {
27
- return {
28
- id,
29
- meta: isVisible !== undefined ? {
30
- isVisible
31
- } : undefined
32
- };
33
- }
34
- describe(useColumnVisibility, () => {
35
- describe("column visibility", () => {
36
- it("returns empty columnVisibility when no columnDefinitions provided", () => {
37
- const allColumns = [];
38
- const {
39
- result
40
- } = renderHook(() => useColumnVisibility({
41
- allColumns
42
- }));
43
- expect(result.current.columnVisibility).toEqual({});
44
- });
45
- it("initializes all columns as visible by default", () => {
46
- const allColumns = [createMockColumn("name"), createMockColumn("email")];
47
- const {
48
- result
49
- } = renderHook(() => useColumnVisibility({
50
- allColumns
51
- }));
52
- expect(result.current.columnVisibility).toEqual({
53
- name: true,
54
- email: true
55
- });
56
- });
57
- it("handles mixed column types with different visibility states", () => {
58
- const allColumns = [createMockColumn("name", true), createMockColumn("myFunction", false), createMockColumn("myRdp", true), createMockColumn("email")];
59
- const {
60
- result
61
- } = renderHook(() => useColumnVisibility({
62
- allColumns
63
- }));
64
- expect(result.current.columnVisibility).toEqual({
65
- name: true,
66
- myFunction: false,
67
- myRdp: true,
68
- email: true
69
- });
70
- });
71
- it("updates columnVisibility when columnDefinitions change", () => {
72
- const initialColumns = [createMockColumn("name", true)];
73
- const {
74
- result,
75
- rerender
76
- } = renderHook(({
77
- allColumns
78
- }) => useColumnVisibility({
79
- allColumns
80
- }), {
81
- initialProps: {
82
- allColumns: initialColumns
83
- }
84
- });
85
- expect(result.current.columnVisibility).toEqual({
86
- name: true
87
- });
88
- const updatedColumns = [createMockColumn("name", false), createMockColumn("email", true)];
89
- rerender({
90
- allColumns: updatedColumns
91
- });
92
- expect(result.current.columnVisibility).toEqual({
93
- name: false,
94
- email: true
95
- });
96
- });
97
- });
98
- describe("onColumnVisibilityChanged callback", () => {
99
- it("calls onColumnVisibilityChanged when visibility changed", () => {
100
- const onColumnVisibilityChanged = vi.fn();
101
- const allColumns = [createMockColumn("name", true), createMockColumn("email", true)];
102
- const {
103
- result
104
- } = renderHook(() => useColumnVisibility({
105
- allColumns,
106
- onColumnVisibilityChanged
107
- }));
108
- act(() => {
109
- result.current.onColumnVisibilityChange(prev => ({
110
- ...prev,
111
- email: false
112
- }));
113
- });
114
- expect(result.current.columnVisibility).toEqual({
115
- name: true,
116
- email: false
117
- });
118
- expect(onColumnVisibilityChanged).toHaveBeenCalledWith([{
119
- columnId: "name",
120
- isVisible: true
121
- }, {
122
- columnId: "email",
123
- isVisible: false
124
- }]);
125
- });
126
- it("does not call callback when callback is not provided", () => {
127
- const allColumns = [createMockColumn("name", true)];
128
- const {
129
- result
130
- } = renderHook(() => useColumnVisibility({
131
- allColumns
132
- }));
133
-
134
- // Should not throw
135
- act(() => {
136
- result.current.onColumnVisibilityChange({
137
- name: false
138
- });
139
- });
140
- expect(result.current.columnVisibility).toEqual({
141
- name: false
142
- });
143
- });
144
- });
145
- describe("column ordering", () => {
146
- it("initializes column order from column definitions", () => {
147
- const allColumns = [createMockColumn("name"), createMockColumn("email"), createMockColumn("age")];
148
- const {
149
- result
150
- } = renderHook(() => useColumnVisibility({
151
- allColumns
152
- }));
153
- expect(result.current.columnOrder).toEqual(["name", "email", "age"]);
154
- });
155
- it("includes selection column first when hasSelectionColumn is true", () => {
156
- const allColumns = [createMockColumn(SELECTION_COLUMN_ID), createMockColumn("name"), createMockColumn("email")];
157
- const {
158
- result
159
- } = renderHook(() => useColumnVisibility({
160
- allColumns
161
- }));
162
- expect(result.current.columnOrder).toEqual([SELECTION_COLUMN_ID, "name", "email"]);
163
- });
164
- it("updates column order when onColumnOrderChange is called", () => {
165
- const allColumns = [createMockColumn("name"), createMockColumn("email"), createMockColumn("age")];
166
- const {
167
- result
168
- } = renderHook(() => useColumnVisibility({
169
- allColumns
170
- }));
171
- expect(result.current.columnOrder).toEqual(["name", "email", "age"]);
172
- act(() => {
173
- result.current.onColumnOrderChange(["email", "age", "name"]);
174
- });
175
- expect(result.current.columnOrder).toEqual(["email", "age", "name"]);
176
- });
177
- it("updates column order when columnDefinitions change", () => {
178
- const initialColumns = [createMockColumn("name"), createMockColumn("email")];
179
- const {
180
- result,
181
- rerender
182
- } = renderHook(({
183
- allColumns
184
- }) => useColumnVisibility({
185
- allColumns
186
- }), {
187
- initialProps: {
188
- allColumns: initialColumns
189
- }
190
- });
191
- expect(result.current.columnOrder).toEqual(["name", "email"]);
192
- const updatedColumns = [createMockColumn("age"), createMockColumn("name"), createMockColumn("email")];
193
- rerender({
194
- allColumns: updatedColumns
195
- });
196
- expect(result.current.columnOrder).toEqual(["age", "name", "email"]);
197
- });
198
- });
199
- });
200
- //# sourceMappingURL=useColumnVisibility.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"useColumnVisibility.test.js","names":["act","renderHook","describe","expect","it","vi","SELECTION_COLUMN_ID","useColumnVisibility","TestObjectType","type","apiName","createMockColumn","id","isVisible","meta","undefined","allColumns","result","current","columnVisibility","toEqual","name","email","myFunction","myRdp","initialColumns","rerender","initialProps","updatedColumns","onColumnVisibilityChanged","fn","onColumnVisibilityChange","prev","toHaveBeenCalledWith","columnId","columnOrder","onColumnOrderChange"],"sources":["useColumnVisibility.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 } from \"@osdk/api\";\nimport type { ColumnDef } from \"@tanstack/react-table\";\nimport { act, renderHook } from \"@testing-library/react\";\nimport { describe, expect, it, vi } from \"vitest\";\nimport { SELECTION_COLUMN_ID } from \"../../utils/constants.js\";\nimport { useColumnVisibility } from \"../useColumnVisibility.js\";\n\nconst TestObjectType = {\n type: \"object\",\n apiName: \"TestObject\",\n} as const satisfies ObjectTypeDefinition;\n\ntype TestObject = typeof TestObjectType;\n\n// Helper to create mock ColumnDef objects that mirror what useColumnDefs would produce\nfunction createMockColumn<T>(\n id: string,\n isVisible?: boolean,\n): ColumnDef<T> {\n return {\n id,\n meta: isVisible !== undefined ? { isVisible } : undefined,\n } as ColumnDef<T>;\n}\n\ndescribe(useColumnVisibility, () => {\n describe(\"column visibility\", () => {\n it(\"returns empty columnVisibility when no columnDefinitions provided\", () => {\n const allColumns: ColumnDef<unknown>[] = [];\n const { result } = renderHook(() =>\n useColumnVisibility<TestObject>({\n allColumns,\n })\n );\n\n expect(result.current.columnVisibility).toEqual({});\n });\n\n it(\"initializes all columns as visible by default\", () => {\n const allColumns: ColumnDef<unknown>[] = [\n createMockColumn(\"name\"),\n createMockColumn(\"email\"),\n ];\n\n const { result } = renderHook(() =>\n useColumnVisibility<TestObject>({\n allColumns,\n })\n );\n\n expect(result.current.columnVisibility).toEqual({\n name: true,\n email: true,\n });\n });\n\n it(\"handles mixed column types with different visibility states\", () => {\n const allColumns: ColumnDef<unknown>[] = [\n createMockColumn(\"name\", true),\n createMockColumn(\"myFunction\", false),\n createMockColumn(\"myRdp\", true),\n createMockColumn(\"email\"),\n ];\n\n const { result } = renderHook(() =>\n useColumnVisibility<TestObject>({\n allColumns,\n })\n );\n\n expect(result.current.columnVisibility).toEqual({\n name: true,\n myFunction: false,\n myRdp: true,\n email: true,\n });\n });\n\n it(\"updates columnVisibility when columnDefinitions change\", () => {\n const initialColumns: ColumnDef<unknown>[] = [\n createMockColumn(\"name\", true),\n ];\n\n const { result, rerender } = renderHook(\n ({ allColumns }) =>\n useColumnVisibility<TestObject>({\n allColumns,\n }),\n {\n initialProps: { allColumns: initialColumns },\n },\n );\n\n expect(result.current.columnVisibility).toEqual({\n name: true,\n });\n\n const updatedColumns: ColumnDef<unknown>[] = [\n createMockColumn(\"name\", false),\n createMockColumn(\"email\", true),\n ];\n\n rerender({ allColumns: updatedColumns });\n\n expect(result.current.columnVisibility).toEqual({\n name: false,\n email: true,\n });\n });\n });\n\n describe(\"onColumnVisibilityChanged callback\", () => {\n it(\"calls onColumnVisibilityChanged when visibility changed\", () => {\n const onColumnVisibilityChanged = vi.fn();\n const allColumns: ColumnDef<unknown>[] = [\n createMockColumn(\"name\", true),\n createMockColumn(\"email\", true),\n ];\n\n const { result } = renderHook(() =>\n useColumnVisibility<TestObject>({\n allColumns,\n onColumnVisibilityChanged,\n })\n );\n\n act(() => {\n result.current.onColumnVisibilityChange((prev) => ({\n ...prev,\n email: false,\n }));\n });\n\n expect(result.current.columnVisibility).toEqual({\n name: true,\n email: false,\n });\n\n expect(onColumnVisibilityChanged).toHaveBeenCalledWith([\n { columnId: \"name\", isVisible: true },\n { columnId: \"email\", isVisible: false },\n ]);\n });\n\n it(\"does not call callback when callback is not provided\", () => {\n const allColumns: ColumnDef<unknown>[] = [\n createMockColumn(\"name\", true),\n ];\n\n const { result } = renderHook(() =>\n useColumnVisibility<TestObject>({\n allColumns,\n })\n );\n\n // Should not throw\n act(() => {\n result.current.onColumnVisibilityChange({\n name: false,\n });\n });\n\n expect(result.current.columnVisibility).toEqual({\n name: false,\n });\n });\n });\n\n describe(\"column ordering\", () => {\n it(\"initializes column order from column definitions\", () => {\n const allColumns: ColumnDef<unknown>[] = [\n createMockColumn(\"name\"),\n createMockColumn(\"email\"),\n createMockColumn(\"age\"),\n ];\n\n const { result } = renderHook(() =>\n useColumnVisibility<TestObject>({\n allColumns,\n })\n );\n\n expect(result.current.columnOrder).toEqual([\"name\", \"email\", \"age\"]);\n });\n\n it(\"includes selection column first when hasSelectionColumn is true\", () => {\n const allColumns: ColumnDef<unknown>[] = [\n createMockColumn(SELECTION_COLUMN_ID),\n createMockColumn(\"name\"),\n createMockColumn(\"email\"),\n ];\n\n const { result } = renderHook(() =>\n useColumnVisibility<TestObject>({\n allColumns,\n })\n );\n\n expect(result.current.columnOrder).toEqual([\n SELECTION_COLUMN_ID,\n \"name\",\n \"email\",\n ]);\n });\n\n it(\"updates column order when onColumnOrderChange is called\", () => {\n const allColumns: ColumnDef<unknown>[] = [\n createMockColumn(\"name\"),\n createMockColumn(\"email\"),\n createMockColumn(\"age\"),\n ];\n\n const { result } = renderHook(() =>\n useColumnVisibility<TestObject>({\n allColumns,\n })\n );\n\n expect(result.current.columnOrder).toEqual([\"name\", \"email\", \"age\"]);\n\n act(() => {\n result.current.onColumnOrderChange([\"email\", \"age\", \"name\"]);\n });\n\n expect(result.current.columnOrder).toEqual([\"email\", \"age\", \"name\"]);\n });\n\n it(\"updates column order when columnDefinitions change\", () => {\n const initialColumns: ColumnDef<unknown>[] = [\n createMockColumn(\"name\"),\n createMockColumn(\"email\"),\n ];\n\n const { result, rerender } = renderHook(\n ({ allColumns }) =>\n useColumnVisibility<TestObject>({\n allColumns,\n }),\n {\n initialProps: { allColumns: initialColumns },\n },\n );\n\n expect(result.current.columnOrder).toEqual([\"name\", \"email\"]);\n\n const updatedColumns: ColumnDef<unknown>[] = [\n createMockColumn(\"age\"),\n createMockColumn(\"name\"),\n createMockColumn(\"email\"),\n ];\n\n rerender({ allColumns: updatedColumns });\n\n expect(result.current.columnOrder).toEqual([\"age\", \"name\", \"email\"]);\n });\n });\n});\n"],"mappings":"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","ignoreList":[]}