@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,128 +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 { afterEach, beforeEach, describe, expect, it, vi } from "vitest";
19
- import { createPropertyFilterDef, createSelectState, createToggleState, MockObjectType } from "../../__tests__/testUtils.js";
20
- import { getFilterKey } from "../../utils/getFilterKey.js";
21
- import { useFilterListState } from "../useFilterListState.js";
22
- function createMockObjectSet() {
23
- return {
24
- $objectSetInternals: {
25
- def: MockObjectType
26
- }
27
- };
28
- }
29
- function createProps(overrides = {}) {
30
- return {
31
- objectSet: createMockObjectSet(),
32
- ...overrides
33
- };
34
- }
35
- describe("useFilterListState", () => {
36
- beforeEach(() => {
37
- vi.clearAllMocks();
38
- });
39
- afterEach(() => {
40
- vi.clearAllMocks();
41
- });
42
- it("initializes with empty filter states when no definitions", () => {
43
- const props = createProps({
44
- filterDefinitions: undefined
45
- });
46
- const {
47
- result
48
- } = renderHook(() => useFilterListState(props));
49
- expect(result.current.filterStates.size).toBe(0);
50
- });
51
- it("initializes filter states from filterState for property filters", () => {
52
- const initialState = createSelectState([]);
53
- const nameDef = createPropertyFilterDef("name", "CHECKBOX_LIST", initialState);
54
- const props = createProps({
55
- filterDefinitions: [nameDef]
56
- });
57
- const {
58
- result
59
- } = renderHook(() => useFilterListState(props));
60
- expect(result.current.filterStates.get(getFilterKey(nameDef))).toEqual(initialState);
61
- });
62
- it("updates filter state via setFilterState", () => {
63
- const nameDef = createPropertyFilterDef("name", "CHECKBOX_LIST", createSelectState([]));
64
- const props = createProps({
65
- filterDefinitions: [nameDef]
66
- });
67
- const {
68
- result
69
- } = renderHook(() => useFilterListState(props));
70
- act(() => {
71
- result.current.setFilterState(getFilterKey(nameDef), createSelectState(["selected"]));
72
- });
73
- expect(result.current.filterStates.get(getFilterKey(nameDef))).toEqual(createSelectState(["selected"]));
74
- });
75
- it("calls onFilterStateChanged callback", () => {
76
- const onFilterStateChanged = vi.fn();
77
- const nameDef = createPropertyFilterDef("name", "CHECKBOX_LIST", createSelectState([]));
78
- const props = createProps({
79
- filterDefinitions: [nameDef],
80
- onFilterStateChanged
81
- });
82
- const {
83
- result
84
- } = renderHook(() => useFilterListState(props));
85
- const newState = createSelectState(["selected"]);
86
- act(() => {
87
- result.current.setFilterState(getFilterKey(nameDef), newState);
88
- });
89
- expect(onFilterStateChanged).toHaveBeenCalledWith(nameDef, newState);
90
- });
91
- it("builds whereClause from filter states", () => {
92
- const nameDef = createPropertyFilterDef("name", "CHECKBOX_LIST", createSelectState([]));
93
- const props = createProps({
94
- filterDefinitions: [nameDef]
95
- });
96
- const {
97
- result
98
- } = renderHook(() => useFilterListState(props));
99
- act(() => {
100
- result.current.setFilterState(getFilterKey(nameDef), createSelectState(["John"]));
101
- });
102
- expect(result.current.whereClause).toEqual({
103
- name: "John"
104
- });
105
- });
106
- it("handles multiple filter definitions", () => {
107
- const nameDef = createPropertyFilterDef("name", "CHECKBOX_LIST", createSelectState([]));
108
- const activeDef = createPropertyFilterDef("active", "TOGGLE", createToggleState(false));
109
- const props = createProps({
110
- filterDefinitions: [nameDef, activeDef]
111
- });
112
- const {
113
- result
114
- } = renderHook(() => useFilterListState(props));
115
- act(() => {
116
- result.current.setFilterState(getFilterKey(nameDef), createSelectState(["John"]));
117
- result.current.setFilterState(getFilterKey(activeDef), createToggleState(true));
118
- });
119
- expect(result.current.whereClause).toEqual({
120
- $and: [{
121
- name: "John"
122
- }, {
123
- active: true
124
- }]
125
- });
126
- });
127
- });
128
- //# sourceMappingURL=useFilterListState.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"useFilterListState.test.js","names":["act","renderHook","afterEach","beforeEach","describe","expect","it","vi","createPropertyFilterDef","createSelectState","createToggleState","MockObjectType","getFilterKey","useFilterListState","createMockObjectSet","$objectSetInternals","def","createProps","overrides","objectSet","clearAllMocks","props","filterDefinitions","undefined","result","current","filterStates","size","toBe","initialState","nameDef","get","toEqual","setFilterState","onFilterStateChanged","fn","newState","toHaveBeenCalledWith","whereClause","name","activeDef","$and","active"],"sources":["useFilterListState.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 { ObjectSet } from \"@osdk/api\";\nimport { act, renderHook } from \"@testing-library/react\";\nimport { afterEach, beforeEach, describe, expect, it, vi } from \"vitest\";\nimport {\n createPropertyFilterDef,\n createSelectState,\n createToggleState,\n MockObjectType,\n} from \"../../__tests__/testUtils.js\";\nimport type { FilterListProps } from \"../../FilterListApi.js\";\nimport { getFilterKey } from \"../../utils/getFilterKey.js\";\nimport { useFilterListState } from \"../useFilterListState.js\";\n\nfunction createMockObjectSet(): ObjectSet<typeof MockObjectType> {\n return {\n $objectSetInternals: {\n def: MockObjectType,\n },\n } as ObjectSet<typeof MockObjectType>;\n}\n\nfunction createProps(\n overrides: Partial<FilterListProps<typeof MockObjectType>> = {},\n): FilterListProps<typeof MockObjectType> {\n return {\n objectSet: createMockObjectSet(),\n ...overrides,\n };\n}\n\ndescribe(\"useFilterListState\", () => {\n beforeEach(() => {\n vi.clearAllMocks();\n });\n\n afterEach(() => {\n vi.clearAllMocks();\n });\n\n it(\"initializes with empty filter states when no definitions\", () => {\n const props = createProps({ filterDefinitions: undefined });\n const { result } = renderHook(() => useFilterListState(props));\n expect(result.current.filterStates.size).toBe(0);\n });\n\n it(\"initializes filter states from filterState for property filters\", () => {\n const initialState = createSelectState([]);\n const nameDef = createPropertyFilterDef(\n \"name\",\n \"CHECKBOX_LIST\",\n initialState,\n );\n const props = createProps({\n filterDefinitions: [nameDef],\n });\n const { result } = renderHook(() => useFilterListState(props));\n expect(result.current.filterStates.get(getFilterKey(nameDef))).toEqual(\n initialState,\n );\n });\n\n it(\"updates filter state via setFilterState\", () => {\n const nameDef = createPropertyFilterDef(\n \"name\",\n \"CHECKBOX_LIST\",\n createSelectState([]),\n );\n const props = createProps({\n filterDefinitions: [nameDef],\n });\n const { result } = renderHook(() => useFilterListState(props));\n act(() => {\n result.current.setFilterState(\n getFilterKey(nameDef),\n createSelectState([\"selected\"]),\n );\n });\n expect(result.current.filterStates.get(getFilterKey(nameDef))).toEqual(\n createSelectState([\"selected\"]),\n );\n });\n\n it(\"calls onFilterStateChanged callback\", () => {\n const onFilterStateChanged = vi.fn();\n const nameDef = createPropertyFilterDef(\n \"name\",\n \"CHECKBOX_LIST\",\n createSelectState([]),\n );\n const props = createProps({\n filterDefinitions: [nameDef],\n onFilterStateChanged,\n });\n const { result } = renderHook(() => useFilterListState(props));\n const newState = createSelectState([\"selected\"]);\n act(() => {\n result.current.setFilterState(getFilterKey(nameDef), newState);\n });\n expect(onFilterStateChanged).toHaveBeenCalledWith(nameDef, newState);\n });\n\n it(\"builds whereClause from filter states\", () => {\n const nameDef = createPropertyFilterDef(\n \"name\",\n \"CHECKBOX_LIST\",\n createSelectState([]),\n );\n const props = createProps({\n filterDefinitions: [nameDef],\n });\n const { result } = renderHook(() => useFilterListState(props));\n act(() => {\n result.current.setFilterState(\n getFilterKey(nameDef),\n createSelectState([\"John\"]),\n );\n });\n expect(result.current.whereClause).toEqual({ name: \"John\" });\n });\n\n it(\"handles multiple filter definitions\", () => {\n const nameDef = createPropertyFilterDef(\n \"name\",\n \"CHECKBOX_LIST\",\n createSelectState([]),\n );\n const activeDef = createPropertyFilterDef(\n \"active\",\n \"TOGGLE\",\n createToggleState(false),\n );\n const props = createProps({\n filterDefinitions: [nameDef, activeDef],\n });\n const { result } = renderHook(() => useFilterListState(props));\n act(() => {\n result.current.setFilterState(\n getFilterKey(nameDef),\n createSelectState([\"John\"]),\n );\n result.current.setFilterState(\n getFilterKey(activeDef),\n createToggleState(true),\n );\n });\n expect(result.current.whereClause).toEqual({\n $and: [{ name: \"John\" }, { active: true }],\n });\n });\n});\n"],"mappings":"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","ignoreList":[]}
@@ -1,197 +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 { useEditableTable } from "../hooks/useEditableTable.js";
20
- import { getCellId } from "../utils/getCellId.js";
21
- describe("useEditableTable", () => {
22
- it("adds cell to cellEdits when edited", () => {
23
- const onCellValueChanged = vi.fn();
24
- const {
25
- result
26
- } = renderHook(() => useEditableTable({
27
- onCellValueChanged
28
- }));
29
- const cellIdentifier = {
30
- rowId: "row-1",
31
- columnId: "col-1"
32
- };
33
- const cellId = getCellId(cellIdentifier);
34
- act(() => {
35
- result.current.handleCellEdit(cellId, {
36
- newValue: "new value",
37
- oldValue: "old value"
38
- });
39
- });
40
- expect(result.current.cellEdits).toEqual({
41
- [cellId]: {
42
- newValue: "new value",
43
- oldValue: "old value"
44
- }
45
- });
46
- expect(onCellValueChanged).toHaveBeenCalledWith(cellIdentifier, {
47
- newValue: "new value",
48
- oldValue: "old value"
49
- });
50
- });
51
- it("removes cell from cellEdits when edited back to original value", () => {
52
- const onCellValueChanged = vi.fn();
53
- const {
54
- result
55
- } = renderHook(() => useEditableTable({
56
- onCellValueChanged
57
- }));
58
- const cellId = getCellId({
59
- rowId: "row-1",
60
- columnId: "col-1"
61
- });
62
-
63
- // First edit
64
- act(() => {
65
- result.current.handleCellEdit(cellId, {
66
- newValue: "new value",
67
- oldValue: "original"
68
- });
69
- });
70
- expect(result.current.cellEdits).toEqual({
71
- [cellId]: {
72
- newValue: "new value",
73
- oldValue: "original"
74
- }
75
- });
76
-
77
- // Edit back to original
78
- act(() => {
79
- result.current.handleCellEdit(cellId, {
80
- newValue: "original",
81
- oldValue: "original"
82
- });
83
- });
84
-
85
- // Should remove the cell from cellEdits
86
- expect(result.current.cellEdits).toEqual({});
87
- });
88
- it("handles multiple cell edits", () => {
89
- const {
90
- result
91
- } = renderHook(() => useEditableTable({}));
92
- const cellId1 = getCellId({
93
- rowId: "row-1",
94
- columnId: "col-1"
95
- });
96
- const cellId2 = getCellId({
97
- rowId: "row-2",
98
- columnId: "col-2"
99
- });
100
- const cellId3 = getCellId({
101
- rowId: "row-3",
102
- columnId: "col-3"
103
- });
104
- act(() => {
105
- result.current.handleCellEdit(cellId1, {
106
- newValue: "new1",
107
- oldValue: "old1"
108
- });
109
- result.current.handleCellEdit(cellId2, {
110
- newValue: "new2",
111
- oldValue: "old2"
112
- });
113
- result.current.handleCellEdit(cellId3, {
114
- newValue: "new3",
115
- oldValue: "old3"
116
- });
117
- });
118
- expect(Object.keys(result.current.cellEdits).length).toBe(3);
119
-
120
- // Edit one back to original
121
- act(() => {
122
- result.current.handleCellEdit(cellId2, {
123
- newValue: "old2",
124
- oldValue: "old2"
125
- });
126
- });
127
- expect(Object.keys(result.current.cellEdits).length).toBe(2);
128
- expect(result.current.cellEdits[cellId2]).toBeUndefined();
129
- });
130
- it("clears all edits", () => {
131
- const {
132
- result
133
- } = renderHook(() => useEditableTable({}));
134
- const cellId1 = getCellId({
135
- rowId: "row-1",
136
- columnId: "col-1"
137
- });
138
- const cellId2 = getCellId({
139
- rowId: "row-2",
140
- columnId: "col-2"
141
- });
142
- act(() => {
143
- result.current.handleCellEdit(cellId1, {
144
- newValue: "new1",
145
- oldValue: "old1"
146
- });
147
- result.current.handleCellEdit(cellId2, {
148
- newValue: "new2",
149
- oldValue: "old2"
150
- });
151
- });
152
- act(() => {
153
- result.current.clearEdits();
154
- });
155
- expect(result.current.cellEdits).toEqual({});
156
- });
157
- it("handles submit edits", async () => {
158
- const onSubmitEdits = vi.fn();
159
- const {
160
- result
161
- } = renderHook(() => useEditableTable({
162
- onSubmitEdits
163
- }));
164
- const cellId1 = getCellId({
165
- rowId: "row-1",
166
- columnId: "col-1"
167
- });
168
- const cellId2 = getCellId({
169
- rowId: "row-2",
170
- columnId: "col-2"
171
- });
172
- act(() => {
173
- result.current.handleCellEdit(cellId1, {
174
- newValue: "new1",
175
- oldValue: "old1"
176
- });
177
- result.current.handleCellEdit(cellId2, {
178
- newValue: "new2",
179
- oldValue: "old2"
180
- });
181
- });
182
- await act(async () => {
183
- await result.current.handleSubmitEdits();
184
- });
185
- expect(onSubmitEdits).toHaveBeenCalledWith({
186
- [cellId1]: {
187
- newValue: "new1",
188
- oldValue: "old1"
189
- },
190
- [cellId2]: {
191
- newValue: "new2",
192
- oldValue: "old2"
193
- }
194
- });
195
- });
196
- });
197
- //# sourceMappingURL=useEditableTable.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"useEditableTable.test.js","names":["act","renderHook","describe","expect","it","vi","useEditableTable","getCellId","onCellValueChanged","fn","result","cellIdentifier","rowId","columnId","cellId","current","handleCellEdit","newValue","oldValue","cellEdits","toEqual","toHaveBeenCalledWith","cellId1","cellId2","cellId3","Object","keys","length","toBe","toBeUndefined","clearEdits","onSubmitEdits","handleSubmitEdits"],"sources":["useEditableTable.test.ts"],"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 { act, renderHook } from \"@testing-library/react\";\nimport { describe, expect, it, vi } from \"vitest\";\nimport { useEditableTable } from \"../hooks/useEditableTable.js\";\nimport { getCellId } from \"../utils/getCellId.js\";\n\ndescribe(\"useEditableTable\", () => {\n it(\"adds cell to cellEdits when edited\", () => {\n const onCellValueChanged = vi.fn();\n const { result } = renderHook(() =>\n useEditableTable({ onCellValueChanged })\n );\n const cellIdentifier = { rowId: \"row-1\", columnId: \"col-1\" };\n const cellId = getCellId(cellIdentifier);\n\n act(() => {\n result.current.handleCellEdit(cellId, {\n newValue: \"new value\",\n oldValue: \"old value\",\n });\n });\n\n expect(result.current.cellEdits).toEqual({\n [cellId]: { newValue: \"new value\", oldValue: \"old value\" },\n });\n expect(onCellValueChanged).toHaveBeenCalledWith(\n cellIdentifier,\n { newValue: \"new value\", oldValue: \"old value\" },\n );\n });\n\n it(\"removes cell from cellEdits when edited back to original value\", () => {\n const onCellValueChanged = vi.fn();\n const { result } = renderHook(() =>\n useEditableTable({ onCellValueChanged })\n );\n const cellIdentifier = { rowId: \"row-1\", columnId: \"col-1\" };\n const cellId = getCellId(cellIdentifier);\n\n // First edit\n act(() => {\n result.current.handleCellEdit(cellId, {\n newValue: \"new value\",\n oldValue: \"original\",\n });\n });\n\n expect(result.current.cellEdits).toEqual({\n [cellId]: { newValue: \"new value\", oldValue: \"original\" },\n });\n\n // Edit back to original\n act(() => {\n result.current.handleCellEdit(cellId, {\n newValue: \"original\",\n oldValue: \"original\",\n });\n });\n\n // Should remove the cell from cellEdits\n expect(result.current.cellEdits).toEqual({});\n });\n\n it(\"handles multiple cell edits\", () => {\n const { result } = renderHook(() => useEditableTable({}));\n const cellId1 = getCellId({ rowId: \"row-1\", columnId: \"col-1\" });\n const cellId2 = getCellId({ rowId: \"row-2\", columnId: \"col-2\" });\n const cellId3 = getCellId({ rowId: \"row-3\", columnId: \"col-3\" });\n\n act(() => {\n result.current.handleCellEdit(cellId1, {\n newValue: \"new1\",\n oldValue: \"old1\",\n });\n result.current.handleCellEdit(cellId2, {\n newValue: \"new2\",\n oldValue: \"old2\",\n });\n result.current.handleCellEdit(cellId3, {\n newValue: \"new3\",\n oldValue: \"old3\",\n });\n });\n\n expect(Object.keys(result.current.cellEdits).length).toBe(3);\n\n // Edit one back to original\n act(() => {\n result.current.handleCellEdit(cellId2, {\n newValue: \"old2\",\n oldValue: \"old2\",\n });\n });\n\n expect(Object.keys(result.current.cellEdits).length).toBe(2);\n expect(result.current.cellEdits[cellId2]).toBeUndefined();\n });\n\n it(\"clears all edits\", () => {\n const { result } = renderHook(() => useEditableTable({}));\n const cellId1 = getCellId({ rowId: \"row-1\", columnId: \"col-1\" });\n const cellId2 = getCellId({ rowId: \"row-2\", columnId: \"col-2\" });\n\n act(() => {\n result.current.handleCellEdit(cellId1, {\n newValue: \"new1\",\n oldValue: \"old1\",\n });\n result.current.handleCellEdit(cellId2, {\n newValue: \"new2\",\n oldValue: \"old2\",\n });\n });\n\n act(() => {\n result.current.clearEdits();\n });\n\n expect(result.current.cellEdits).toEqual({});\n });\n\n it(\"handles submit edits\", async () => {\n const onSubmitEdits = vi.fn();\n const { result } = renderHook(() => useEditableTable({ onSubmitEdits }));\n const cellId1 = getCellId({ rowId: \"row-1\", columnId: \"col-1\" });\n const cellId2 = getCellId({ rowId: \"row-2\", columnId: \"col-2\" });\n\n act(() => {\n result.current.handleCellEdit(cellId1, {\n newValue: \"new1\",\n oldValue: \"old1\",\n });\n result.current.handleCellEdit(cellId2, {\n newValue: \"new2\",\n oldValue: \"old2\",\n });\n });\n\n await act(async () => {\n await result.current.handleSubmitEdits();\n });\n\n expect(onSubmitEdits).toHaveBeenCalledWith({\n [cellId1]: { newValue: \"new1\", oldValue: \"old1\" },\n [cellId2]: { newValue: \"new2\", oldValue: \"old2\" },\n });\n });\n});\n"],"mappings":"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","ignoreList":[]}
@@ -1,147 +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 { beforeEach, describe, expect, it, vi } from "vitest";
19
- import { useCellContextMenu } from "../useCellContextMenu.js";
20
- describe("useCellContextMenu", () => {
21
- let mockElement;
22
- beforeEach(() => {
23
- // Create a mock table cell element with getBoundingClientRect
24
- mockElement = document.createElement("td");
25
- vi.spyOn(mockElement, "getBoundingClientRect").mockReturnValue({
26
- left: 100,
27
- top: 200,
28
- bottom: 240,
29
- width: 150,
30
- height: 40,
31
- right: 250,
32
- x: 100,
33
- y: 200,
34
- toJSON: () => ({})
35
- });
36
- });
37
- describe("initial state", () => {
38
- it("returns closed context menu state by default", () => {
39
- const tdRef = {
40
- current: mockElement
41
- };
42
- const {
43
- result
44
- } = renderHook(() => useCellContextMenu({
45
- tdRef
46
- }));
47
- expect(result.current.isContextMenuOpen).toBe(false);
48
- expect(result.current.popoverPosition).toBeNull();
49
- });
50
- });
51
- describe("handleOpenContextMenu", () => {
52
- it("opens context menu and use position from bounding client rect", () => {
53
- const tdRef = {
54
- current: mockElement
55
- };
56
- const {
57
- result
58
- } = renderHook(() => useCellContextMenu({
59
- tdRef
60
- }));
61
- const mockEvent = {
62
- preventDefault: vi.fn(),
63
- stopPropagation: vi.fn()
64
- };
65
- act(() => {
66
- result.current.handleOpenContextMenu(mockEvent);
67
- });
68
- expect(mockEvent.preventDefault).toHaveBeenCalled();
69
- expect(mockEvent.stopPropagation).toHaveBeenCalled();
70
- expect(result.current.isContextMenuOpen).toBe(true);
71
- expect(result.current.popoverPosition).toEqual({
72
- left: 100,
73
- top: 240,
74
- width: 150
75
- });
76
- });
77
- it("does not open context menu if tdRef.current is null", () => {
78
- const tdRef = {
79
- current: null
80
- };
81
- const {
82
- result
83
- } = renderHook(() => useCellContextMenu({
84
- tdRef
85
- }));
86
- const mockEvent = {
87
- preventDefault: vi.fn(),
88
- stopPropagation: vi.fn()
89
- };
90
- act(() => {
91
- result.current.handleOpenContextMenu(mockEvent);
92
- });
93
- expect(mockEvent.preventDefault).toHaveBeenCalled();
94
- expect(mockEvent.stopPropagation).toHaveBeenCalled();
95
- expect(result.current.isContextMenuOpen).toBe(false);
96
- expect(result.current.popoverPosition).toBeNull();
97
- });
98
- });
99
- describe("handleCloseContextMenu", () => {
100
- it("closes context menu and clears position", () => {
101
- const tdRef = {
102
- current: mockElement
103
- };
104
- const {
105
- result
106
- } = renderHook(() => useCellContextMenu({
107
- tdRef
108
- }));
109
- const mockEvent = {
110
- preventDefault: vi.fn(),
111
- stopPropagation: vi.fn()
112
- };
113
-
114
- // Open first
115
- act(() => {
116
- result.current.handleOpenContextMenu(mockEvent);
117
- });
118
- expect(result.current.isContextMenuOpen).toBe(true);
119
- expect(result.current.popoverPosition).not.toBeNull();
120
-
121
- // Close
122
- act(() => {
123
- result.current.handleCloseContextMenu();
124
- });
125
- expect(result.current.isContextMenuOpen).toBe(false);
126
- expect(result.current.popoverPosition).toBeNull();
127
- });
128
- it("is safe to call when already closed", () => {
129
- const tdRef = {
130
- current: mockElement
131
- };
132
- const {
133
- result
134
- } = renderHook(() => useCellContextMenu({
135
- tdRef
136
- }));
137
-
138
- // Close without opening
139
- act(() => {
140
- result.current.handleCloseContextMenu();
141
- });
142
- expect(result.current.isContextMenuOpen).toBe(false);
143
- expect(result.current.popoverPosition).toBeNull();
144
- });
145
- });
146
- });
147
- //# sourceMappingURL=useCellContextMenu.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"useCellContextMenu.test.js","names":["act","renderHook","beforeEach","describe","expect","it","vi","useCellContextMenu","mockElement","document","createElement","spyOn","mockReturnValue","left","top","bottom","width","height","right","x","y","toJSON","tdRef","current","result","isContextMenuOpen","toBe","popoverPosition","toBeNull","mockEvent","preventDefault","fn","stopPropagation","handleOpenContextMenu","toHaveBeenCalled","toEqual","not","handleCloseContextMenu"],"sources":["useCellContextMenu.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 { act, renderHook } from \"@testing-library/react\";\nimport { beforeEach, describe, expect, it, vi } from \"vitest\";\nimport type { PopoverPosition } from \"../useCellContextMenu.js\";\nimport { useCellContextMenu } from \"../useCellContextMenu.js\";\n\ndescribe(\"useCellContextMenu\", () => {\n let mockElement: HTMLTableCellElement;\n\n beforeEach(() => {\n // Create a mock table cell element with getBoundingClientRect\n mockElement = document.createElement(\"td\");\n\n vi.spyOn(mockElement, \"getBoundingClientRect\").mockReturnValue({\n left: 100,\n top: 200,\n bottom: 240,\n width: 150,\n height: 40,\n right: 250,\n x: 100,\n y: 200,\n toJSON: () => ({}),\n });\n });\n\n describe(\"initial state\", () => {\n it(\"returns closed context menu state by default\", () => {\n const tdRef = { current: mockElement };\n const { result } = renderHook(() => useCellContextMenu({ tdRef }));\n\n expect(result.current.isContextMenuOpen).toBe(false);\n expect(result.current.popoverPosition).toBeNull();\n });\n });\n\n describe(\"handleOpenContextMenu\", () => {\n it(\"opens context menu and use position from bounding client rect\", () => {\n const tdRef = { current: mockElement };\n const { result } = renderHook(() => useCellContextMenu({ tdRef }));\n\n const mockEvent = {\n preventDefault: vi.fn(),\n stopPropagation: vi.fn(),\n } as unknown as React.MouseEvent<HTMLTableCellElement>;\n\n act(() => {\n result.current.handleOpenContextMenu(mockEvent);\n });\n\n expect(mockEvent.preventDefault).toHaveBeenCalled();\n expect(mockEvent.stopPropagation).toHaveBeenCalled();\n expect(result.current.isContextMenuOpen).toBe(true);\n expect(result.current.popoverPosition).toEqual({\n left: 100,\n top: 240,\n width: 150,\n } as PopoverPosition);\n });\n\n it(\"does not open context menu if tdRef.current is null\", () => {\n const tdRef = { current: null };\n const { result } = renderHook(() => useCellContextMenu({ tdRef }));\n\n const mockEvent = {\n preventDefault: vi.fn(),\n stopPropagation: vi.fn(),\n } as unknown as React.MouseEvent<HTMLTableCellElement>;\n\n act(() => {\n result.current.handleOpenContextMenu(mockEvent);\n });\n\n expect(mockEvent.preventDefault).toHaveBeenCalled();\n expect(mockEvent.stopPropagation).toHaveBeenCalled();\n expect(result.current.isContextMenuOpen).toBe(false);\n expect(result.current.popoverPosition).toBeNull();\n });\n });\n\n describe(\"handleCloseContextMenu\", () => {\n it(\"closes context menu and clears position\", () => {\n const tdRef = { current: mockElement };\n const { result } = renderHook(() => useCellContextMenu({ tdRef }));\n\n const mockEvent = {\n preventDefault: vi.fn(),\n stopPropagation: vi.fn(),\n } as unknown as React.MouseEvent<HTMLTableCellElement>;\n\n // Open first\n act(() => {\n result.current.handleOpenContextMenu(mockEvent);\n });\n\n expect(result.current.isContextMenuOpen).toBe(true);\n expect(result.current.popoverPosition).not.toBeNull();\n\n // Close\n act(() => {\n result.current.handleCloseContextMenu();\n });\n\n expect(result.current.isContextMenuOpen).toBe(false);\n expect(result.current.popoverPosition).toBeNull();\n });\n\n it(\"is safe to call when already closed\", () => {\n const tdRef = { current: mockElement };\n const { result } = renderHook(() => useCellContextMenu({ tdRef }));\n\n // Close without opening\n act(() => {\n result.current.handleCloseContextMenu();\n });\n\n expect(result.current.isContextMenuOpen).toBe(false);\n expect(result.current.popoverPosition).toBeNull();\n });\n });\n});\n"],"mappings":"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","ignoreList":[]}