@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 +0,0 @@
1
- {"version":3,"file":"useRowSelection.test.js","names":["act","renderHook","describe","expect","it","vi","useRowSelection","TestObjectType","type","apiName","createMockData","count","Array","from","length","_","i","$primaryKey","$objectType","$apiName","$title","data","result","selectionMode","current","rowSelection","toEqual","isAllSelected","toBe","hasSelection","enableRowSelection","onToggleRow","onToggleAll","onRowSelection","fn","toHaveBeenCalledWith","toHaveBeenLastCalledWith","selectedRows","rerender","initialProps","undefined"],"sources":["useRowSelection.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, Osdk, PrimaryKeyType } from \"@osdk/api\";\nimport { act, renderHook } from \"@testing-library/react\";\nimport { describe, expect, it, vi } from \"vitest\";\nimport { useRowSelection } from \"../useRowSelection.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 data\nfunction createMockData(\n count: number,\n): Array<\n Osdk.Instance<TestObject, \"$allBaseProperties\", never, Record<string, never>>\n> {\n return Array.from({ length: count }, (_, i) => ({\n $primaryKey: `item-${i}` as PrimaryKeyType<TestObject>,\n $objectType: \"TestObject\",\n $apiName: \"TestObject\",\n $title: `Item ${i}`,\n } as Osdk.Instance<\n TestObject,\n \"$allBaseProperties\",\n never,\n Record<string, never>\n >));\n}\n\ndescribe(\"useRowSelection\", () => {\n describe(\"disabled mode (selectionMode: 'none')\", () => {\n it(\"returns empty selection state\", () => {\n const data = createMockData(5);\n const { result } = renderHook(() =>\n useRowSelection({\n selectionMode: \"none\",\n data,\n })\n );\n\n expect(result.current.rowSelection).toEqual({});\n expect(result.current.isAllSelected).toBe(false);\n expect(result.current.hasSelection).toBe(false);\n expect(result.current.enableRowSelection).toBe(false);\n });\n\n it(\"does not respond to toggle operations\", () => {\n const data = createMockData(5);\n const { result } = renderHook(() =>\n useRowSelection({\n selectionMode: \"none\",\n data,\n })\n );\n\n act(() => {\n result.current.onToggleRow(\"item-0\", 0);\n });\n\n expect(result.current.rowSelection).toEqual({});\n expect(result.current.hasSelection).toBe(false);\n\n act(() => {\n result.current.onToggleAll();\n });\n\n expect(result.current.rowSelection).toEqual({});\n expect(result.current.hasSelection).toBe(false);\n });\n });\n\n describe(\"uncontrolled mode\", () => {\n describe(\"single selection mode\", () => {\n it(\"selects a single row and calls onRowSelection\", () => {\n const data = createMockData(5);\n const onRowSelection = vi.fn();\n const { result } = renderHook(() =>\n useRowSelection({\n selectionMode: \"single\",\n onRowSelection,\n data,\n })\n );\n\n act(() => {\n result.current.onToggleRow(\"item-0\", 0);\n });\n\n expect(result.current.enableRowSelection).toBe(true);\n expect(result.current.rowSelection).toEqual({ \"item-0\": true });\n expect(result.current.hasSelection).toBe(true);\n expect(onRowSelection).toHaveBeenCalledWith([data[0].$primaryKey]);\n });\n\n it(\"deselects when toggling selected row and calls onRowSelection\", () => {\n const data = createMockData(5);\n const onRowSelection = vi.fn();\n const { result } = renderHook(() =>\n useRowSelection({\n selectionMode: \"single\",\n onRowSelection,\n data,\n })\n );\n\n // Select\n act(() => {\n result.current.onToggleRow(\"item-0\", 0);\n });\n\n expect(result.current.rowSelection).toEqual({ \"item-0\": true });\n\n // Deselect\n act(() => {\n result.current.onToggleRow(\"item-0\", 0);\n });\n\n expect(result.current.rowSelection).toEqual({});\n expect(result.current.hasSelection).toBe(false);\n expect(onRowSelection).toHaveBeenLastCalledWith([]);\n });\n\n it(\"replaces selection when selecting different row\", () => {\n const data = createMockData(5);\n const { result } = renderHook(() =>\n useRowSelection({\n selectionMode: \"single\",\n data,\n })\n );\n\n act(() => {\n result.current.onToggleRow(\"item-0\", 0);\n });\n\n expect(result.current.rowSelection).toEqual({ \"item-0\": true });\n\n act(() => {\n result.current.onToggleRow(\"item-1\", 1);\n });\n\n expect(result.current.rowSelection).toEqual({ \"item-1\": true });\n expect(result.current.hasSelection).toBe(true);\n });\n\n it(\"treats shift-click as a normal click\", () => {\n const data = createMockData(5);\n const { result } = renderHook(() =>\n useRowSelection({\n selectionMode: \"single\",\n data,\n })\n );\n // First click as the lastSelectedRow\n act(() => {\n result.current.onToggleRow(\"item-0\", 0);\n });\n\n // Shift-click\n act(() => {\n result.current.onToggleRow(\"item-2\", 2, true);\n });\n\n expect(result.current.rowSelection).toEqual({ \"item-2\": true });\n });\n });\n\n describe(\"multiple selection mode\", () => {\n it(\"selects multiple rows independently and calls onRowSelection\", () => {\n const data = createMockData(5);\n const onRowSelection = vi.fn();\n const { result } = renderHook(() =>\n useRowSelection({\n selectionMode: \"multiple\",\n onRowSelection,\n data,\n })\n );\n\n act(() => {\n result.current.onToggleRow(\"item-0\", 0);\n });\n\n expect(result.current.rowSelection).toEqual({ \"item-0\": true });\n\n act(() => {\n result.current.onToggleRow(\"item-2\", 2);\n });\n\n expect(result.current.enableRowSelection).toBe(true);\n expect(result.current.rowSelection).toEqual({\n \"item-0\": true,\n \"item-2\": true,\n });\n expect(result.current.isAllSelected).toBe(false);\n expect(onRowSelection).toHaveBeenLastCalledWith([\n data[0].$primaryKey,\n data[2].$primaryKey,\n ]);\n });\n\n it(\"deselects individual rows\", () => {\n const data = createMockData(5);\n const { result } = renderHook(() =>\n useRowSelection({\n selectionMode: \"multiple\",\n data,\n })\n );\n\n // Select two rows\n act(() => {\n result.current.onToggleRow(\"item-0\", 0);\n });\n act(() => {\n result.current.onToggleRow(\"item-1\", 1);\n });\n\n expect(result.current.rowSelection).toEqual({\n \"item-0\": true,\n \"item-1\": true,\n });\n\n // Deselect one\n act(() => {\n result.current.onToggleRow(\"item-0\", 0);\n });\n\n expect(result.current.rowSelection).toEqual({ \"item-1\": true });\n });\n\n it(\"selects range with shift-click and calls onRowSelection\", () => {\n const data = createMockData(5);\n const onRowSelection = vi.fn();\n const { result } = renderHook(() =>\n useRowSelection({\n selectionMode: \"multiple\",\n onRowSelection,\n data,\n })\n );\n\n // First click\n act(() => {\n result.current.onToggleRow(\"item-1\", 1);\n });\n\n // Shift-click to select range\n act(() => {\n result.current.onToggleRow(\"item-3\", 3, true);\n });\n\n expect(result.current.rowSelection).toEqual({\n \"item-1\": true,\n \"item-2\": true,\n \"item-3\": true,\n });\n expect(onRowSelection).toHaveBeenLastCalledWith([\n data[1].$primaryKey,\n data[2].$primaryKey,\n data[3].$primaryKey,\n ]);\n });\n\n it(\"selects range in reverse order (shift-click up)\", () => {\n const data = createMockData(5);\n const { result } = renderHook(() =>\n useRowSelection({\n selectionMode: \"multiple\",\n data,\n })\n );\n\n // First click on row 3\n act(() => {\n result.current.onToggleRow(\"item-3\", 3);\n });\n\n // Shift-click to row 1 (upward)\n act(() => {\n result.current.onToggleRow(\"item-1\", 1, true);\n });\n\n expect(result.current.rowSelection).toEqual({\n \"item-1\": true,\n \"item-2\": true,\n \"item-3\": true,\n });\n });\n\n it(\"shift-click without previous selection does not select range\", () => {\n const data = createMockData(5);\n const { result } = renderHook(() =>\n useRowSelection({\n selectionMode: \"multiple\",\n data,\n })\n );\n\n // Shift-click without previous selection\n act(() => {\n result.current.onToggleRow(\"item-2\", 2, true);\n });\n\n expect(result.current.rowSelection).toEqual({ \"item-2\": true });\n });\n\n it(\"merges range selection with existing selections\", () => {\n const data = createMockData(10);\n const { result } = renderHook(() =>\n useRowSelection({\n selectionMode: \"multiple\",\n data,\n })\n );\n\n // Select row 0\n act(() => {\n result.current.onToggleRow(\"item-0\", 0);\n });\n\n // Select row 5\n act(() => {\n result.current.onToggleRow(\"item-5\", 5);\n });\n\n // Shift-click to row 7 (should keep row 0)\n act(() => {\n result.current.onToggleRow(\"item-7\", 7, true);\n });\n\n expect(result.current.rowSelection).toEqual({\n \"item-0\": true,\n \"item-5\": true,\n \"item-6\": true,\n \"item-7\": true,\n });\n });\n\n it(\"shift-click after deselection should select from the last selected row\", () => {\n const data = createMockData(7);\n const { result } = renderHook(() =>\n useRowSelection({\n selectionMode: \"multiple\",\n data,\n })\n );\n\n // Select rows 0, 1, 2\n act(() => {\n result.current.onToggleRow(\"item-0\", 0);\n });\n act(() => {\n result.current.onToggleRow(\"item-1\", 1);\n });\n act(() => {\n result.current.onToggleRow(\"item-2\", 2);\n });\n expect(result.current.rowSelection).toEqual({\n \"item-0\": true,\n \"item-1\": true,\n \"item-2\": true,\n });\n\n // Deselect row 1 (clears lastSelectedRowIndex)\n act(() => {\n result.current.onToggleRow(\"item-1\", 1);\n });\n expect(result.current.rowSelection).toEqual({\n \"item-0\": true,\n \"item-2\": true,\n });\n\n // Shift-click row 4 - should select from row 2 to row 4\n act(() => {\n result.current.onToggleRow(\"item-4\", 4, true);\n });\n expect(result.current.rowSelection).toEqual({\n \"item-0\": true,\n \"item-2\": true,\n \"item-3\": true,\n \"item-4\": true,\n });\n });\n\n it(\"toggles all rows\", () => {\n const data = createMockData(3);\n const onRowSelection = vi.fn();\n const { result } = renderHook(() =>\n useRowSelection({\n selectionMode: \"multiple\",\n onRowSelection,\n data,\n })\n );\n\n expect(result.current.isAllSelected).toBe(false);\n\n // Select all\n act(() => {\n result.current.onToggleAll();\n });\n\n expect(result.current.rowSelection).toEqual({\n \"item-0\": true,\n \"item-1\": true,\n \"item-2\": true,\n });\n expect(result.current.isAllSelected).toBe(true);\n expect(onRowSelection).toHaveBeenCalledWith([\n data[0].$primaryKey,\n data[1].$primaryKey,\n data[2].$primaryKey,\n ]);\n\n // Deselect all\n act(() => {\n result.current.onToggleAll();\n });\n\n expect(result.current.rowSelection).toEqual({});\n expect(result.current.isAllSelected).toBe(false);\n expect(onRowSelection).toHaveBeenLastCalledWith([]);\n });\n });\n });\n\n describe(\"controlled mode\", () => {\n describe(\"single selection mode\", () => {\n it(\"uses selectedRows prop for selection state\", () => {\n const data = createMockData(5);\n const { result } = renderHook(() =>\n useRowSelection({\n selectionMode: \"single\",\n selectedRows: [data[1].$primaryKey],\n data,\n })\n );\n\n expect(result.current.rowSelection).toEqual({ \"item-1\": true });\n expect(result.current.hasSelection).toBe(true);\n });\n\n it(\"calls onRowSelection when toggling but does not update internal state\", () => {\n const data = createMockData(5);\n const onRowSelection = vi.fn();\n const { result, rerender } = renderHook(\n ({ selectedRows }) =>\n useRowSelection({\n selectionMode: \"single\",\n selectedRows,\n onRowSelection,\n data,\n }),\n {\n initialProps: { selectedRows: [] as PrimaryKeyType<TestObject>[] },\n },\n );\n\n expect(result.current.rowSelection).toEqual({});\n\n // Click row\n act(() => {\n result.current.onToggleRow(\"item-0\", 0);\n });\n\n // Callback is called\n expect(onRowSelection).toHaveBeenCalledWith([data[0].$primaryKey]);\n\n // State doesn't change (controlled)\n expect(result.current.rowSelection).toEqual({});\n\n // Parent updates prop\n rerender({ selectedRows: [data[0].$primaryKey] });\n\n // Now state reflects the prop\n expect(result.current.rowSelection).toEqual({ \"item-0\": true });\n });\n });\n\n describe(\"multiple selection mode\", () => {\n it(\"uses selectedRows prop for selection state\", () => {\n const data = createMockData(5);\n const { result } = renderHook(() =>\n useRowSelection({\n selectionMode: \"multiple\",\n selectedRows: [data[0].$primaryKey, data[2].$primaryKey],\n data,\n })\n );\n\n expect(result.current.rowSelection).toEqual({\n \"item-0\": true,\n \"item-2\": true,\n });\n });\n\n it(\"calls onRowSelection when toggling rows\", () => {\n const data = createMockData(5);\n const onRowSelection = vi.fn();\n const { result } = renderHook(() =>\n useRowSelection({\n selectionMode: \"multiple\",\n selectedRows: [data[0].$primaryKey],\n onRowSelection,\n data,\n })\n );\n\n // Add selection to selectedRows\n act(() => {\n result.current.onToggleRow(\"item-2\", 2);\n });\n\n expect(onRowSelection).toHaveBeenCalledWith([\n data[0].$primaryKey,\n data[2].$primaryKey,\n ]);\n\n // Remove selection from selectedRows\n act(() => {\n result.current.onToggleRow(\"item-0\", 0);\n });\n\n expect(onRowSelection).toHaveBeenCalledWith([]);\n });\n\n it(\"calls onRowSelection for shift-click range selection\", () => {\n const data = createMockData(5);\n const onRowSelection = vi.fn();\n const { result } = renderHook(() =>\n useRowSelection({\n selectionMode: \"multiple\",\n selectedRows: [],\n onRowSelection,\n data,\n })\n );\n\n // First click\n act(() => {\n result.current.onToggleRow(\"item-1\", 1);\n });\n\n // Shift-click\n act(() => {\n result.current.onToggleRow(\"item-3\", 3, true);\n });\n\n expect(onRowSelection).toHaveBeenLastCalledWith([\n data[1].$primaryKey,\n data[2].$primaryKey,\n data[3].$primaryKey,\n ]);\n });\n\n it(\"calls onRowSelection when toggling all rows\", () => {\n const data = createMockData(3);\n const onRowSelection = vi.fn();\n const { result } = renderHook(() =>\n useRowSelection({\n selectionMode: \"multiple\",\n selectedRows: [],\n onRowSelection,\n data,\n })\n );\n\n act(() => {\n result.current.onToggleAll();\n });\n\n expect(onRowSelection).toHaveBeenCalledWith([\n data[0].$primaryKey,\n data[1].$primaryKey,\n data[2].$primaryKey,\n ]);\n });\n\n it(\"updates when selectedRows prop changes\", () => {\n const data = createMockData(5);\n const { result, rerender } = renderHook(\n ({ selectedRows }) =>\n useRowSelection({\n selectionMode: \"multiple\",\n selectedRows,\n data,\n }),\n {\n initialProps: {\n selectedRows: [data[0].$primaryKey] as PrimaryKeyType<\n TestObject\n >[],\n },\n },\n );\n\n expect(result.current.rowSelection).toEqual({ \"item-0\": true });\n\n rerender({\n selectedRows: [data[1].$primaryKey, data[2].$primaryKey],\n });\n\n expect(result.current.rowSelection).toEqual({\n \"item-1\": true,\n \"item-2\": true,\n });\n });\n });\n });\n describe(\"edge cases\", () => {\n it(\"handles undefined data gracefully\", () => {\n const { result } = renderHook(() =>\n useRowSelection({\n selectionMode: \"multiple\",\n data: undefined,\n })\n );\n\n expect(result.current.rowSelection).toEqual({});\n expect(result.current.isAllSelected).toBe(false);\n expect(result.current.hasSelection).toBe(false);\n\n // Should not crash\n act(() => {\n result.current.onToggleAll();\n result.current.onToggleRow(\"item-0\", 0);\n });\n });\n\n it(\"handles empty data array\", () => {\n const { result } = renderHook(() =>\n useRowSelection({\n selectionMode: \"multiple\",\n data: [],\n })\n );\n\n expect(result.current.rowSelection).toEqual({});\n expect(result.current.isAllSelected).toBe(false);\n\n act(() => {\n result.current.onToggleAll();\n });\n\n expect(result.current.rowSelection).toEqual({});\n });\n });\n});\n"],"mappings":"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","ignoreList":[]}
@@ -1,220 +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 { renderHook } from "@testing-library/react";
18
- import { describe, expect, it, vi } from "vitest";
19
- import { SELECTION_COLUMN_ID } from "../../utils/constants.js";
20
- import { useSelectionColumn } from "../useSelectionColumn.js";
21
- const TestObjectType = {
22
- type: "object",
23
- apiName: "TestObject"
24
- };
25
- describe("useSelectionColumn", () => {
26
- describe("selectionMode: 'none'", () => {
27
- it("returns null when selection is disabled", () => {
28
- const {
29
- result
30
- } = renderHook(() => useSelectionColumn({
31
- selectionMode: "none",
32
- isAllSelected: false,
33
- hasSelection: false,
34
- onToggleAll: vi.fn(),
35
- onToggleRow: vi.fn()
36
- }));
37
- expect(result.current).toBeNull();
38
- });
39
- it("returns null even with selection state", () => {
40
- const {
41
- result
42
- } = renderHook(() => useSelectionColumn({
43
- selectionMode: "none",
44
- isAllSelected: true,
45
- hasSelection: true,
46
- onToggleAll: vi.fn(),
47
- onToggleRow: vi.fn()
48
- }));
49
- expect(result.current).toBeNull();
50
- });
51
- });
52
- describe("selectionMode: 'single'", () => {
53
- it("returns column definition with correct properties", () => {
54
- const {
55
- result
56
- } = renderHook(() => useSelectionColumn({
57
- selectionMode: "single",
58
- isAllSelected: false,
59
- hasSelection: false,
60
- onToggleAll: vi.fn(),
61
- onToggleRow: vi.fn()
62
- }));
63
- expect(result.current).not.toBeNull();
64
- expect(result.current).toMatchObject({
65
- id: SELECTION_COLUMN_ID,
66
- size: 50,
67
- minSize: 50,
68
- maxSize: 50,
69
- enableSorting: false,
70
- enableResizing: false
71
- });
72
- });
73
- it("has header function that returns null for single mode", () => {
74
- const {
75
- result
76
- } = renderHook(() => useSelectionColumn({
77
- selectionMode: "single",
78
- isAllSelected: false,
79
- hasSelection: false,
80
- onToggleAll: vi.fn(),
81
- onToggleRow: vi.fn()
82
- }));
83
- const columnDef = result.current;
84
- expect(columnDef).not.toBeNull();
85
-
86
- // Call header function
87
- const headerResult = typeof columnDef?.header === "function" ? columnDef.header({}) : null;
88
- expect(headerResult).toBeNull();
89
- });
90
- it("has cell function defined", () => {
91
- const onToggleRow = vi.fn();
92
- const {
93
- result
94
- } = renderHook(() => useSelectionColumn({
95
- selectionMode: "single",
96
- isAllSelected: false,
97
- hasSelection: false,
98
- onToggleAll: vi.fn(),
99
- onToggleRow
100
- }));
101
- const columnDef = result.current;
102
- expect(columnDef).not.toBeNull();
103
- expect(columnDef?.cell).toBeDefined();
104
- });
105
- it("when dependencies other than selectionMode changed, the column definition should not update", () => {
106
- const onToggleRow = vi.fn();
107
- const onToggleAll = vi.fn();
108
- const {
109
- result,
110
- rerender
111
- } = renderHook(({
112
- isAllSelected,
113
- hasSelection
114
- }) => useSelectionColumn({
115
- selectionMode: "single",
116
- isAllSelected,
117
- hasSelection,
118
- onToggleAll,
119
- onToggleRow
120
- }), {
121
- initialProps: {
122
- isAllSelected: false,
123
- hasSelection: false
124
- }
125
- });
126
- const firstResult = result.current;
127
-
128
- // Rerender with different isAllSelected and hasSelection
129
- rerender({
130
- isAllSelected: true,
131
- hasSelection: true
132
- });
133
- expect(result.current).toBe(firstResult);
134
- });
135
- it("when selectionMode changed, the column definition should update", () => {
136
- const onToggleRow = vi.fn();
137
- const onToggleAll = vi.fn();
138
- const {
139
- result,
140
- rerender
141
- } = renderHook(({
142
- selectionMode
143
- }) => useSelectionColumn({
144
- selectionMode,
145
- isAllSelected: false,
146
- hasSelection: true,
147
- onToggleAll,
148
- onToggleRow
149
- }), {
150
- initialProps: {
151
- selectionMode: "single"
152
- }
153
- });
154
- const firstResult = result.current;
155
-
156
- // Rerender with different selectionMode
157
- rerender({
158
- selectionMode: "multiple"
159
- });
160
- expect(result.current).not.toBe(firstResult);
161
- });
162
- });
163
- describe("selectionMode: 'multiple'", () => {
164
- it("returns column definition with correct properties", () => {
165
- const {
166
- result
167
- } = renderHook(() => useSelectionColumn({
168
- selectionMode: "multiple",
169
- isAllSelected: false,
170
- hasSelection: false,
171
- onToggleAll: vi.fn(),
172
- onToggleRow: vi.fn()
173
- }));
174
- expect(result.current).not.toBeNull();
175
- expect(result.current).toMatchObject({
176
- id: SELECTION_COLUMN_ID,
177
- size: 50,
178
- minSize: 50,
179
- maxSize: 50,
180
- enableSorting: false,
181
- enableResizing: false
182
- });
183
- });
184
- it("has header function that renders SelectionHeaderCell", () => {
185
- const onToggleAll = vi.fn();
186
- const {
187
- result
188
- } = renderHook(() => useSelectionColumn({
189
- selectionMode: "multiple",
190
- isAllSelected: false,
191
- hasSelection: false,
192
- onToggleAll,
193
- onToggleRow: vi.fn()
194
- }));
195
- const columnDef = result.current;
196
- expect(columnDef).not.toBeNull();
197
-
198
- // Render header
199
- const headerResult = typeof columnDef?.header === "function" ? columnDef.header({}) : null;
200
- expect(headerResult).not.toBeNull();
201
- });
202
- });
203
- describe("column definition structure", () => {
204
- it("disables sorting and resizing", () => {
205
- const {
206
- result
207
- } = renderHook(() => useSelectionColumn({
208
- selectionMode: "multiple",
209
- isAllSelected: false,
210
- hasSelection: false,
211
- onToggleAll: vi.fn(),
212
- onToggleRow: vi.fn()
213
- }));
214
- const columnDef = result.current;
215
- expect(columnDef?.enableSorting).toBe(false);
216
- expect(columnDef?.enableResizing).toBe(false);
217
- });
218
- });
219
- });
220
- //# sourceMappingURL=useSelectionColumn.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"useSelectionColumn.test.js","names":["renderHook","describe","expect","it","vi","SELECTION_COLUMN_ID","useSelectionColumn","TestObjectType","type","apiName","result","selectionMode","isAllSelected","hasSelection","onToggleAll","fn","onToggleRow","current","toBeNull","not","toMatchObject","id","size","minSize","maxSize","enableSorting","enableResizing","columnDef","headerResult","header","cell","toBeDefined","rerender","initialProps","firstResult","toBe"],"sources":["useSelectionColumn.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 { renderHook } from \"@testing-library/react\";\nimport { describe, expect, it, vi } from \"vitest\";\nimport { SELECTION_COLUMN_ID } from \"../../utils/constants.js\";\nimport { useSelectionColumn } from \"../useSelectionColumn.js\";\n\nconst TestObjectType = {\n type: \"object\",\n apiName: \"TestObject\",\n} as const satisfies ObjectTypeDefinition;\n\ntype TestObject = typeof TestObjectType;\n\ndescribe(\"useSelectionColumn\", () => {\n describe(\"selectionMode: 'none'\", () => {\n it(\"returns null when selection is disabled\", () => {\n const { result } = renderHook(() =>\n useSelectionColumn<TestObject>({\n selectionMode: \"none\",\n isAllSelected: false,\n hasSelection: false,\n onToggleAll: vi.fn(),\n onToggleRow: vi.fn(),\n })\n );\n\n expect(result.current).toBeNull();\n });\n\n it(\"returns null even with selection state\", () => {\n const { result } = renderHook(() =>\n useSelectionColumn<TestObject>({\n selectionMode: \"none\",\n isAllSelected: true,\n hasSelection: true,\n onToggleAll: vi.fn(),\n onToggleRow: vi.fn(),\n })\n );\n\n expect(result.current).toBeNull();\n });\n });\n\n describe(\"selectionMode: 'single'\", () => {\n it(\"returns column definition with correct properties\", () => {\n const { result } = renderHook(() =>\n useSelectionColumn<TestObject>({\n selectionMode: \"single\",\n isAllSelected: false,\n hasSelection: false,\n onToggleAll: vi.fn(),\n onToggleRow: vi.fn(),\n })\n );\n\n expect(result.current).not.toBeNull();\n expect(result.current).toMatchObject({\n id: SELECTION_COLUMN_ID,\n size: 50,\n minSize: 50,\n maxSize: 50,\n enableSorting: false,\n enableResizing: false,\n });\n });\n\n it(\"has header function that returns null for single mode\", () => {\n const { result } = renderHook(() =>\n useSelectionColumn<TestObject>({\n selectionMode: \"single\",\n isAllSelected: false,\n hasSelection: false,\n onToggleAll: vi.fn(),\n onToggleRow: vi.fn(),\n })\n );\n\n const columnDef = result.current;\n expect(columnDef).not.toBeNull();\n\n // Call header function\n const headerResult = typeof columnDef?.header === \"function\"\n ? columnDef.header({} as any)\n : null;\n\n expect(headerResult).toBeNull();\n });\n\n it(\"has cell function defined\", () => {\n const onToggleRow = vi.fn();\n const { result } = renderHook(() =>\n useSelectionColumn<TestObject>({\n selectionMode: \"single\",\n isAllSelected: false,\n hasSelection: false,\n onToggleAll: vi.fn(),\n onToggleRow,\n })\n );\n\n const columnDef = result.current;\n expect(columnDef).not.toBeNull();\n expect(columnDef?.cell).toBeDefined();\n });\n\n it(\"when dependencies other than selectionMode changed, the column definition should not update\", () => {\n const onToggleRow = vi.fn();\n const onToggleAll = vi.fn();\n\n const { result, rerender } = renderHook(\n ({ isAllSelected, hasSelection }) =>\n useSelectionColumn<TestObject>({\n selectionMode: \"single\",\n isAllSelected,\n hasSelection,\n onToggleAll,\n onToggleRow,\n }),\n {\n initialProps: { isAllSelected: false, hasSelection: false },\n },\n );\n\n const firstResult = result.current;\n\n // Rerender with different isAllSelected and hasSelection\n rerender({ isAllSelected: true, hasSelection: true });\n expect(result.current).toBe(firstResult);\n });\n\n it(\"when selectionMode changed, the column definition should update\", () => {\n const onToggleRow = vi.fn();\n const onToggleAll = vi.fn();\n\n const { result, rerender } = renderHook(\n (\n { selectionMode }: { selectionMode: \"single\" | \"multiple\" | \"none\" },\n ) =>\n useSelectionColumn<TestObject>({\n selectionMode,\n isAllSelected: false,\n hasSelection: true,\n onToggleAll,\n onToggleRow,\n }),\n {\n initialProps: { selectionMode: \"single\" },\n },\n );\n\n const firstResult = result.current;\n\n // Rerender with different selectionMode\n rerender({ selectionMode: \"multiple\" });\n expect(result.current).not.toBe(firstResult);\n });\n });\n\n describe(\"selectionMode: 'multiple'\", () => {\n it(\"returns column definition with correct properties\", () => {\n const { result } = renderHook(() =>\n useSelectionColumn<TestObject>({\n selectionMode: \"multiple\",\n isAllSelected: false,\n hasSelection: false,\n onToggleAll: vi.fn(),\n onToggleRow: vi.fn(),\n })\n );\n\n expect(result.current).not.toBeNull();\n expect(result.current).toMatchObject({\n id: SELECTION_COLUMN_ID,\n size: 50,\n minSize: 50,\n maxSize: 50,\n enableSorting: false,\n enableResizing: false,\n });\n });\n\n it(\"has header function that renders SelectionHeaderCell\", () => {\n const onToggleAll = vi.fn();\n const { result } = renderHook(() =>\n useSelectionColumn<TestObject>({\n selectionMode: \"multiple\",\n isAllSelected: false,\n hasSelection: false,\n onToggleAll,\n onToggleRow: vi.fn(),\n })\n );\n\n const columnDef = result.current;\n expect(columnDef).not.toBeNull();\n\n // Render header\n const headerResult = typeof columnDef?.header === \"function\"\n ? columnDef.header({} as any)\n : null;\n\n expect(headerResult).not.toBeNull();\n });\n });\n\n describe(\"column definition structure\", () => {\n it(\"disables sorting and resizing\", () => {\n const { result } = renderHook(() =>\n useSelectionColumn<TestObject>({\n selectionMode: \"multiple\",\n isAllSelected: false,\n hasSelection: false,\n onToggleAll: vi.fn(),\n onToggleRow: vi.fn(),\n })\n );\n\n const columnDef = result.current;\n expect(columnDef?.enableSorting).toBe(false);\n expect(columnDef?.enableResizing).toBe(false);\n });\n });\n});\n"],"mappings":"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","ignoreList":[]}