@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.
- package/AGENTS.md +105 -0
- package/CHANGELOG.md +30 -0
- package/build/browser/base-components/draggable-list/DraggableList.module.css +2 -2
- package/build/browser/filter-list/FilterListApi.js.map +1 -1
- package/build/browser/filter-list/base/DragHandleIcon.js +51 -0
- package/build/browser/filter-list/base/DragHandleIcon.js.map +1 -0
- package/build/browser/filter-list/base/FilterList.js +3 -1
- package/build/browser/filter-list/base/FilterList.js.map +1 -1
- package/build/browser/filter-list/base/FilterListContent.js +143 -3
- package/build/browser/filter-list/base/FilterListContent.js.map +1 -1
- package/build/browser/filter-list/base/FilterListContent.module.css +6 -0
- package/build/browser/filter-list/base/FilterListContent.module.css.js +2 -1
- package/build/browser/filter-list/base/FilterListItem.js +11 -18
- package/build/browser/filter-list/base/FilterListItem.js.map +1 -1
- package/build/browser/filter-list/base/FilterListItem.module.css +32 -0
- package/build/browser/filter-list/base/FilterListItem.module.css.js +3 -1
- package/build/browser/filter-list/base/SortableFilterListItem.js +63 -0
- package/build/browser/filter-list/base/SortableFilterListItem.js.map +1 -0
- package/build/browser/filter-list/utils/getFilterLabel.js +36 -0
- package/build/browser/filter-list/utils/getFilterLabel.js.map +1 -0
- package/build/browser/object-table/EditableCell.js +1 -2
- package/build/browser/object-table/EditableCell.js.map +1 -1
- package/build/browser/object-table/TableRow.js +1 -2
- package/build/browser/object-table/TableRow.js.map +1 -1
- package/build/browser/styles.css +40 -2
- package/build/cjs/public/experimental.cjs +905 -677
- package/build/cjs/public/experimental.cjs.map +1 -1
- package/build/cjs/public/experimental.css +34 -2
- package/build/cjs/public/experimental.css.map +1 -1
- package/build/cjs/public/experimental.d.cts +7 -0
- package/build/esm/base-components/draggable-list/DraggableList.module.css +2 -2
- package/build/esm/filter-list/FilterListApi.js.map +1 -1
- package/build/esm/filter-list/base/DragHandleIcon.js +51 -0
- package/build/esm/filter-list/base/DragHandleIcon.js.map +1 -0
- package/build/esm/filter-list/base/FilterList.js +3 -1
- package/build/esm/filter-list/base/FilterList.js.map +1 -1
- package/build/esm/filter-list/base/FilterListContent.js +143 -3
- package/build/esm/filter-list/base/FilterListContent.js.map +1 -1
- package/build/esm/filter-list/base/FilterListContent.module.css +6 -0
- package/build/esm/filter-list/base/FilterListItem.js +11 -18
- package/build/esm/filter-list/base/FilterListItem.js.map +1 -1
- package/build/esm/filter-list/base/FilterListItem.module.css +32 -0
- package/build/esm/filter-list/base/SortableFilterListItem.js +63 -0
- package/build/esm/filter-list/base/SortableFilterListItem.js.map +1 -0
- package/build/esm/filter-list/utils/getFilterLabel.js +36 -0
- package/build/esm/filter-list/utils/getFilterLabel.js.map +1 -0
- package/build/esm/object-table/EditableCell.js +1 -2
- package/build/esm/object-table/EditableCell.js.map +1 -1
- package/build/esm/object-table/TableRow.js +1 -2
- package/build/esm/object-table/TableRow.js.map +1 -1
- package/build/types/filter-list/FilterListApi.d.ts +7 -0
- package/build/types/filter-list/FilterListApi.d.ts.map +1 -1
- package/build/types/filter-list/base/DragHandleIcon.d.ts +2 -0
- package/build/types/filter-list/base/DragHandleIcon.d.ts.map +1 -0
- package/build/types/filter-list/base/FilterListContent.d.ts +2 -1
- package/build/types/filter-list/base/FilterListContent.d.ts.map +1 -1
- package/build/types/filter-list/base/FilterListItem.d.ts +4 -1
- package/build/types/filter-list/base/FilterListItem.d.ts.map +1 -1
- package/build/types/filter-list/base/SortableFilterListItem.d.ts +16 -0
- package/build/types/filter-list/base/SortableFilterListItem.d.ts.map +1 -0
- package/build/types/filter-list/utils/getFilterLabel.d.ts +3 -0
- package/build/types/filter-list/utils/getFilterLabel.d.ts.map +1 -0
- package/build/types/object-table/EditableCell.d.ts +1 -3
- package/build/types/object-table/EditableCell.d.ts.map +1 -1
- package/build/types/object-table/TableRow.d.ts +1 -2
- package/build/types/object-table/TableRow.d.ts.map +1 -1
- package/package.json +6 -5
- package/build/browser/filter-list/__tests__/LinkedPropertyInput.test.js +0 -202
- package/build/browser/filter-list/__tests__/LinkedPropertyInput.test.js.map +0 -1
- package/build/browser/filter-list/__tests__/dateUtils.test.js +0 -55
- package/build/browser/filter-list/__tests__/dateUtils.test.js.map +0 -1
- package/build/browser/filter-list/__tests__/filterStateToWhereClause.test.js +0 -296
- package/build/browser/filter-list/__tests__/filterStateToWhereClause.test.js.map +0 -1
- package/build/browser/filter-list/__tests__/getFilterKey.test.js +0 -53
- package/build/browser/filter-list/__tests__/getFilterKey.test.js.map +0 -1
- package/build/browser/filter-list/__tests__/testUtils.js +0 -203
- package/build/browser/filter-list/__tests__/testUtils.js.map +0 -1
- package/build/browser/filter-list/hooks/__tests__/useFilterListState.test.js +0 -128
- package/build/browser/filter-list/hooks/__tests__/useFilterListState.test.js.map +0 -1
- package/build/browser/object-table/hooks/__tests__/useCellContextMenu.test.js +0 -147
- package/build/browser/object-table/hooks/__tests__/useCellContextMenu.test.js.map +0 -1
- package/build/browser/object-table/hooks/__tests__/useColumnDefs.test.js +0 -520
- package/build/browser/object-table/hooks/__tests__/useColumnDefs.test.js.map +0 -1
- package/build/browser/object-table/hooks/__tests__/useColumnPinning.test.js +0 -266
- package/build/browser/object-table/hooks/__tests__/useColumnPinning.test.js.map +0 -1
- package/build/browser/object-table/hooks/__tests__/useColumnVisibility.test.js +0 -200
- package/build/browser/object-table/hooks/__tests__/useColumnVisibility.test.js.map +0 -1
- package/build/browser/object-table/hooks/__tests__/useEditableTable.test.js +0 -292
- package/build/browser/object-table/hooks/__tests__/useEditableTable.test.js.map +0 -1
- package/build/browser/object-table/hooks/__tests__/useObjectTableData.test.js +0 -315
- package/build/browser/object-table/hooks/__tests__/useObjectTableData.test.js.map +0 -1
- package/build/browser/object-table/hooks/__tests__/useRowSelection.test.js +0 -596
- package/build/browser/object-table/hooks/__tests__/useRowSelection.test.js.map +0 -1
- package/build/browser/object-table/hooks/__tests__/useSelectionColumn.test.js +0 -220
- package/build/browser/object-table/hooks/__tests__/useSelectionColumn.test.js.map +0 -1
- package/build/browser/object-table/hooks/__tests__/useTableSorting.test.js +0 -501
- package/build/browser/object-table/hooks/__tests__/useTableSorting.test.js.map +0 -1
- package/build/esm/filter-list/__tests__/LinkedPropertyInput.test.js +0 -202
- package/build/esm/filter-list/__tests__/LinkedPropertyInput.test.js.map +0 -1
- package/build/esm/filter-list/__tests__/dateUtils.test.js +0 -55
- package/build/esm/filter-list/__tests__/dateUtils.test.js.map +0 -1
- package/build/esm/filter-list/__tests__/filterStateToWhereClause.test.js +0 -296
- package/build/esm/filter-list/__tests__/filterStateToWhereClause.test.js.map +0 -1
- package/build/esm/filter-list/__tests__/getFilterKey.test.js +0 -53
- package/build/esm/filter-list/__tests__/getFilterKey.test.js.map +0 -1
- package/build/esm/filter-list/__tests__/testUtils.js +0 -203
- package/build/esm/filter-list/__tests__/testUtils.js.map +0 -1
- package/build/esm/filter-list/hooks/__tests__/useFilterListState.test.js +0 -128
- package/build/esm/filter-list/hooks/__tests__/useFilterListState.test.js.map +0 -1
- package/build/esm/object-table/hooks/__tests__/useCellContextMenu.test.js +0 -147
- package/build/esm/object-table/hooks/__tests__/useCellContextMenu.test.js.map +0 -1
- package/build/esm/object-table/hooks/__tests__/useColumnDefs.test.js +0 -520
- package/build/esm/object-table/hooks/__tests__/useColumnDefs.test.js.map +0 -1
- package/build/esm/object-table/hooks/__tests__/useColumnPinning.test.js +0 -266
- package/build/esm/object-table/hooks/__tests__/useColumnPinning.test.js.map +0 -1
- package/build/esm/object-table/hooks/__tests__/useColumnVisibility.test.js +0 -200
- package/build/esm/object-table/hooks/__tests__/useColumnVisibility.test.js.map +0 -1
- package/build/esm/object-table/hooks/__tests__/useEditableTable.test.js +0 -292
- package/build/esm/object-table/hooks/__tests__/useEditableTable.test.js.map +0 -1
- package/build/esm/object-table/hooks/__tests__/useObjectTableData.test.js +0 -315
- package/build/esm/object-table/hooks/__tests__/useObjectTableData.test.js.map +0 -1
- package/build/esm/object-table/hooks/__tests__/useRowSelection.test.js +0 -596
- package/build/esm/object-table/hooks/__tests__/useRowSelection.test.js.map +0 -1
- package/build/esm/object-table/hooks/__tests__/useSelectionColumn.test.js +0 -220
- package/build/esm/object-table/hooks/__tests__/useSelectionColumn.test.js.map +0 -1
- package/build/esm/object-table/hooks/__tests__/useTableSorting.test.js +0 -501
- package/build/esm/object-table/hooks/__tests__/useTableSorting.test.js.map +0 -1
- package/build/types/filter-list/__tests__/LinkedPropertyInput.test.d.ts +0 -1
- package/build/types/filter-list/__tests__/LinkedPropertyInput.test.d.ts.map +0 -1
- package/build/types/filter-list/__tests__/dateUtils.test.d.ts +0 -1
- package/build/types/filter-list/__tests__/dateUtils.test.d.ts.map +0 -1
- package/build/types/filter-list/__tests__/filterStateToWhereClause.test.d.ts +0 -1
- package/build/types/filter-list/__tests__/filterStateToWhereClause.test.d.ts.map +0 -1
- package/build/types/filter-list/__tests__/getFilterKey.test.d.ts +0 -1
- package/build/types/filter-list/__tests__/getFilterKey.test.d.ts.map +0 -1
- package/build/types/filter-list/__tests__/testUtils.d.ts +0 -65
- package/build/types/filter-list/__tests__/testUtils.d.ts.map +0 -1
- package/build/types/filter-list/hooks/__tests__/useFilterListState.test.d.ts +0 -1
- package/build/types/filter-list/hooks/__tests__/useFilterListState.test.d.ts.map +0 -1
- package/build/types/object-table/hooks/__tests__/useCellContextMenu.test.d.ts +0 -1
- package/build/types/object-table/hooks/__tests__/useCellContextMenu.test.d.ts.map +0 -1
- package/build/types/object-table/hooks/__tests__/useColumnDefs.test.d.ts +0 -1
- package/build/types/object-table/hooks/__tests__/useColumnDefs.test.d.ts.map +0 -1
- package/build/types/object-table/hooks/__tests__/useColumnPinning.test.d.ts +0 -1
- package/build/types/object-table/hooks/__tests__/useColumnPinning.test.d.ts.map +0 -1
- package/build/types/object-table/hooks/__tests__/useColumnVisibility.test.d.ts +0 -1
- package/build/types/object-table/hooks/__tests__/useColumnVisibility.test.d.ts.map +0 -1
- package/build/types/object-table/hooks/__tests__/useEditableTable.test.d.ts +0 -1
- package/build/types/object-table/hooks/__tests__/useEditableTable.test.d.ts.map +0 -1
- package/build/types/object-table/hooks/__tests__/useObjectTableData.test.d.ts +0 -1
- package/build/types/object-table/hooks/__tests__/useObjectTableData.test.d.ts.map +0 -1
- package/build/types/object-table/hooks/__tests__/useRowSelection.test.d.ts +0 -1
- package/build/types/object-table/hooks/__tests__/useRowSelection.test.d.ts.map +0 -1
- package/build/types/object-table/hooks/__tests__/useSelectionColumn.test.d.ts +0 -1
- package/build/types/object-table/hooks/__tests__/useSelectionColumn.test.d.ts.map +0 -1
- package/build/types/object-table/hooks/__tests__/useTableSorting.test.d.ts +0 -1
- package/build/types/object-table/hooks/__tests__/useTableSorting.test.d.ts.map +0 -1
|
@@ -1,292 +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 { getCellId } from "../../utils/getCellId.js";
|
|
20
|
-
import { useEditableTable } from "../useEditableTable.js";
|
|
21
|
-
function createMockObjectInstance(id, additionalProps = {}) {
|
|
22
|
-
return {
|
|
23
|
-
$apiName: "mock-object",
|
|
24
|
-
$primaryKey: id,
|
|
25
|
-
id,
|
|
26
|
-
...additionalProps
|
|
27
|
-
};
|
|
28
|
-
}
|
|
29
|
-
describe("useEditableTable", () => {
|
|
30
|
-
it("adds cell to cellEdits when edited", () => {
|
|
31
|
-
const onCellValueChanged = vi.fn();
|
|
32
|
-
const {
|
|
33
|
-
result
|
|
34
|
-
} = renderHook(() => useEditableTable({
|
|
35
|
-
editMode: "always",
|
|
36
|
-
onCellValueChanged
|
|
37
|
-
}));
|
|
38
|
-
const cellId = getCellId({
|
|
39
|
-
rowId: "row-1",
|
|
40
|
-
columnId: "col-1"
|
|
41
|
-
});
|
|
42
|
-
const mockRowData = createMockObjectInstance("row-1", {
|
|
43
|
-
name: "Test"
|
|
44
|
-
});
|
|
45
|
-
const editEvent = {
|
|
46
|
-
rowId: "row-1",
|
|
47
|
-
columnId: "col-1",
|
|
48
|
-
newValue: "new value",
|
|
49
|
-
oldValue: "old value",
|
|
50
|
-
originalRowData: mockRowData
|
|
51
|
-
};
|
|
52
|
-
act(() => {
|
|
53
|
-
result.current.onCellEdit(cellId, editEvent);
|
|
54
|
-
});
|
|
55
|
-
expect(result.current.cellEdits).toEqual({
|
|
56
|
-
[cellId]: editEvent
|
|
57
|
-
});
|
|
58
|
-
expect(onCellValueChanged).toHaveBeenCalledWith(editEvent);
|
|
59
|
-
});
|
|
60
|
-
it("removes cell from cellEdits when edited back to original value", () => {
|
|
61
|
-
const onCellValueChanged = vi.fn();
|
|
62
|
-
const {
|
|
63
|
-
result
|
|
64
|
-
} = renderHook(() => useEditableTable({
|
|
65
|
-
editMode: "always",
|
|
66
|
-
onCellValueChanged
|
|
67
|
-
}));
|
|
68
|
-
const cellId = getCellId({
|
|
69
|
-
rowId: "row-1",
|
|
70
|
-
columnId: "col-1"
|
|
71
|
-
});
|
|
72
|
-
const mockRowData = createMockObjectInstance("row-1", {
|
|
73
|
-
name: "Test"
|
|
74
|
-
});
|
|
75
|
-
|
|
76
|
-
// First edit
|
|
77
|
-
const firstEdit = {
|
|
78
|
-
rowId: "row-1",
|
|
79
|
-
columnId: "col-1",
|
|
80
|
-
newValue: "new value",
|
|
81
|
-
oldValue: "original",
|
|
82
|
-
originalRowData: mockRowData
|
|
83
|
-
};
|
|
84
|
-
act(() => {
|
|
85
|
-
result.current.onCellEdit(cellId, firstEdit);
|
|
86
|
-
});
|
|
87
|
-
expect(result.current.cellEdits).toEqual({
|
|
88
|
-
[cellId]: firstEdit
|
|
89
|
-
});
|
|
90
|
-
|
|
91
|
-
// Edit back to original
|
|
92
|
-
const revertEdit = {
|
|
93
|
-
rowId: "row-1",
|
|
94
|
-
columnId: "col-1",
|
|
95
|
-
newValue: "original",
|
|
96
|
-
oldValue: "original",
|
|
97
|
-
originalRowData: mockRowData
|
|
98
|
-
};
|
|
99
|
-
act(() => {
|
|
100
|
-
result.current.onCellEdit(cellId, revertEdit);
|
|
101
|
-
});
|
|
102
|
-
|
|
103
|
-
// Should remove the cell from cellEdits
|
|
104
|
-
expect(result.current.cellEdits).toEqual({});
|
|
105
|
-
});
|
|
106
|
-
it("handles multiple cell edits", () => {
|
|
107
|
-
const {
|
|
108
|
-
result
|
|
109
|
-
} = renderHook(() => useEditableTable({
|
|
110
|
-
editMode: "always"
|
|
111
|
-
}));
|
|
112
|
-
const cellId1 = getCellId({
|
|
113
|
-
rowId: "row-1",
|
|
114
|
-
columnId: "col-1"
|
|
115
|
-
});
|
|
116
|
-
const cellId2 = getCellId({
|
|
117
|
-
rowId: "row-2",
|
|
118
|
-
columnId: "col-2"
|
|
119
|
-
});
|
|
120
|
-
const cellId3 = getCellId({
|
|
121
|
-
rowId: "row-3",
|
|
122
|
-
columnId: "col-3"
|
|
123
|
-
});
|
|
124
|
-
const edit1 = {
|
|
125
|
-
rowId: "row-1",
|
|
126
|
-
columnId: "col-1",
|
|
127
|
-
newValue: "new1",
|
|
128
|
-
oldValue: "old1",
|
|
129
|
-
originalRowData: createMockObjectInstance("row-1")
|
|
130
|
-
};
|
|
131
|
-
const edit2 = {
|
|
132
|
-
rowId: "row-2",
|
|
133
|
-
columnId: "col-2",
|
|
134
|
-
newValue: "new2",
|
|
135
|
-
oldValue: "old2",
|
|
136
|
-
originalRowData: createMockObjectInstance("row-2")
|
|
137
|
-
};
|
|
138
|
-
const edit3 = {
|
|
139
|
-
rowId: "row-3",
|
|
140
|
-
columnId: "col-3",
|
|
141
|
-
newValue: "new3",
|
|
142
|
-
oldValue: "old3",
|
|
143
|
-
originalRowData: createMockObjectInstance("row-3")
|
|
144
|
-
};
|
|
145
|
-
act(() => {
|
|
146
|
-
result.current.onCellEdit(cellId1, edit1);
|
|
147
|
-
result.current.onCellEdit(cellId2, edit2);
|
|
148
|
-
result.current.onCellEdit(cellId3, edit3);
|
|
149
|
-
});
|
|
150
|
-
expect(Object.keys(result.current.cellEdits).length).toBe(3);
|
|
151
|
-
|
|
152
|
-
// Edit one back to original
|
|
153
|
-
const revertEdit2 = {
|
|
154
|
-
rowId: "row-2",
|
|
155
|
-
columnId: "col-2",
|
|
156
|
-
newValue: "old2",
|
|
157
|
-
oldValue: "old2",
|
|
158
|
-
originalRowData: createMockObjectInstance("row-2")
|
|
159
|
-
};
|
|
160
|
-
act(() => {
|
|
161
|
-
result.current.onCellEdit(cellId2, revertEdit2);
|
|
162
|
-
});
|
|
163
|
-
expect(Object.keys(result.current.cellEdits).length).toBe(2);
|
|
164
|
-
expect(result.current.cellEdits[cellId2]).toBeUndefined();
|
|
165
|
-
});
|
|
166
|
-
it("clears all edits", () => {
|
|
167
|
-
const {
|
|
168
|
-
result
|
|
169
|
-
} = renderHook(() => useEditableTable({
|
|
170
|
-
editMode: "always"
|
|
171
|
-
}));
|
|
172
|
-
const cellId1 = getCellId({
|
|
173
|
-
rowId: "row-1",
|
|
174
|
-
columnId: "col-1"
|
|
175
|
-
});
|
|
176
|
-
const cellId2 = getCellId({
|
|
177
|
-
rowId: "row-2",
|
|
178
|
-
columnId: "col-2"
|
|
179
|
-
});
|
|
180
|
-
const edit1 = {
|
|
181
|
-
rowId: "row-1",
|
|
182
|
-
columnId: "col-1",
|
|
183
|
-
newValue: "new1",
|
|
184
|
-
oldValue: "old1",
|
|
185
|
-
originalRowData: createMockObjectInstance("row-1")
|
|
186
|
-
};
|
|
187
|
-
const edit2 = {
|
|
188
|
-
rowId: "row-2",
|
|
189
|
-
columnId: "col-2",
|
|
190
|
-
newValue: "new2",
|
|
191
|
-
oldValue: "old2",
|
|
192
|
-
originalRowData: createMockObjectInstance("row-2")
|
|
193
|
-
};
|
|
194
|
-
act(() => {
|
|
195
|
-
result.current.onCellEdit(cellId1, edit1);
|
|
196
|
-
result.current.onCellEdit(cellId2, edit2);
|
|
197
|
-
});
|
|
198
|
-
act(() => {
|
|
199
|
-
result.current.clearEdits();
|
|
200
|
-
});
|
|
201
|
-
expect(result.current.cellEdits).toEqual({});
|
|
202
|
-
});
|
|
203
|
-
it("handles submit edits", async () => {
|
|
204
|
-
const onSubmitEdits = vi.fn();
|
|
205
|
-
const {
|
|
206
|
-
result
|
|
207
|
-
} = renderHook(() => useEditableTable({
|
|
208
|
-
editMode: "always",
|
|
209
|
-
onSubmitEdits
|
|
210
|
-
}));
|
|
211
|
-
const cellId1 = getCellId({
|
|
212
|
-
rowId: "row-1",
|
|
213
|
-
columnId: "col-1"
|
|
214
|
-
});
|
|
215
|
-
const cellId2 = getCellId({
|
|
216
|
-
rowId: "row-2",
|
|
217
|
-
columnId: "col-2"
|
|
218
|
-
});
|
|
219
|
-
const edit1 = {
|
|
220
|
-
rowId: "row-1",
|
|
221
|
-
columnId: "col-1",
|
|
222
|
-
newValue: "new1",
|
|
223
|
-
oldValue: "old1",
|
|
224
|
-
originalRowData: createMockObjectInstance("row-1")
|
|
225
|
-
};
|
|
226
|
-
const edit2 = {
|
|
227
|
-
rowId: "row-2",
|
|
228
|
-
columnId: "col-2",
|
|
229
|
-
newValue: "new2",
|
|
230
|
-
oldValue: "old2",
|
|
231
|
-
originalRowData: createMockObjectInstance("row-2")
|
|
232
|
-
};
|
|
233
|
-
act(() => {
|
|
234
|
-
result.current.onCellEdit(cellId1, edit1);
|
|
235
|
-
result.current.onCellEdit(cellId2, edit2);
|
|
236
|
-
});
|
|
237
|
-
await act(async () => {
|
|
238
|
-
await result.current.onSubmitEdits?.();
|
|
239
|
-
});
|
|
240
|
-
expect(onSubmitEdits).toHaveBeenCalledWith([edit1, edit2]);
|
|
241
|
-
});
|
|
242
|
-
it("when submit edits is undefined, onSubmitEdits is undefined", async () => {
|
|
243
|
-
const {
|
|
244
|
-
result
|
|
245
|
-
} = renderHook(() => useEditableTable({
|
|
246
|
-
editMode: "always",
|
|
247
|
-
onSubmitEdits: undefined
|
|
248
|
-
}));
|
|
249
|
-
expect(result.current.onSubmitEdits).toBeUndefined();
|
|
250
|
-
});
|
|
251
|
-
it("when editMode is manual, isActive is false initially", () => {
|
|
252
|
-
const {
|
|
253
|
-
result
|
|
254
|
-
} = renderHook(() => useEditableTable({
|
|
255
|
-
editMode: "manual"
|
|
256
|
-
}));
|
|
257
|
-
expect(result.current.editMode.type).toBe("manual");
|
|
258
|
-
if (result.current.editMode.type === "manual") {
|
|
259
|
-
expect(result.current.editMode.isActive).toBe(false);
|
|
260
|
-
expect(result.current.editMode.setActive).toBeDefined();
|
|
261
|
-
act(() => {
|
|
262
|
-
result.current.editMode.type === "manual" && result.current.editMode.setActive(true);
|
|
263
|
-
});
|
|
264
|
-
expect(result.current.editMode.type === "manual" && result.current.editMode.isActive).toBe(true);
|
|
265
|
-
act(() => {
|
|
266
|
-
result.current.editMode.type === "manual" && result.current.editMode.setActive(false);
|
|
267
|
-
});
|
|
268
|
-
expect(result.current.editMode.type === "manual" && result.current.editMode.isActive).toBe(false);
|
|
269
|
-
}
|
|
270
|
-
});
|
|
271
|
-
it("when editMode is always, the type is always and isActive is true", () => {
|
|
272
|
-
const {
|
|
273
|
-
result
|
|
274
|
-
} = renderHook(() => useEditableTable({
|
|
275
|
-
editMode: "always"
|
|
276
|
-
}));
|
|
277
|
-
expect(result.current.editMode.type).toBe("always");
|
|
278
|
-
expect(result.current.editMode.isActive).toBe(true);
|
|
279
|
-
});
|
|
280
|
-
it("when editMode is manual with default settings, it starts as inactive", () => {
|
|
281
|
-
const {
|
|
282
|
-
result
|
|
283
|
-
} = renderHook(() => useEditableTable({
|
|
284
|
-
editMode: "manual"
|
|
285
|
-
}));
|
|
286
|
-
expect(result.current.editMode.type).toBe("manual");
|
|
287
|
-
if (result.current.editMode.type === "manual") {
|
|
288
|
-
expect(result.current.editMode.isActive).toBe(false);
|
|
289
|
-
}
|
|
290
|
-
});
|
|
291
|
-
});
|
|
292
|
-
//# sourceMappingURL=useEditableTable.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"useEditableTable.test.js","names":["act","renderHook","describe","expect","it","vi","getCellId","useEditableTable","createMockObjectInstance","id","additionalProps","$apiName","$primaryKey","onCellValueChanged","fn","result","editMode","cellId","rowId","columnId","mockRowData","name","editEvent","newValue","oldValue","originalRowData","current","onCellEdit","cellEdits","toEqual","toHaveBeenCalledWith","firstEdit","revertEdit","cellId1","cellId2","cellId3","edit1","edit2","edit3","Object","keys","length","toBe","revertEdit2","toBeUndefined","clearEdits","onSubmitEdits","undefined","type","isActive","setActive","toBeDefined"],"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 type { ObjectOrInterfaceDefinition, Osdk } from \"@osdk/api\";\nimport { act, renderHook } from \"@testing-library/react\";\nimport { describe, expect, it, vi } from \"vitest\";\nimport { getCellId } from \"../../utils/getCellId.js\";\nimport { useEditableTable } from \"../useEditableTable.js\";\n\ntype MockObjectDef = ObjectOrInterfaceDefinition;\ntype MockInstance = Osdk.Instance<MockObjectDef, \"$allBaseProperties\", string>;\n\nfunction createMockObjectInstance(\n id: string,\n additionalProps = {},\n): MockInstance {\n return {\n $apiName: \"mock-object\" as const,\n $primaryKey: id,\n id,\n ...additionalProps,\n } as unknown as MockInstance;\n}\n\ndescribe(\"useEditableTable\", () => {\n it(\"adds cell to cellEdits when edited\", () => {\n const onCellValueChanged = vi.fn();\n const { result } = renderHook(() =>\n useEditableTable({ editMode: \"always\", onCellValueChanged })\n );\n const cellIdentifier = { rowId: \"row-1\", columnId: \"col-1\" };\n const cellId = getCellId(cellIdentifier);\n const mockRowData = createMockObjectInstance(\"row-1\", { name: \"Test\" });\n\n const editEvent = {\n rowId: \"row-1\",\n columnId: \"col-1\",\n newValue: \"new value\",\n oldValue: \"old value\",\n originalRowData: mockRowData,\n };\n\n act(() => {\n result.current.onCellEdit(cellId, editEvent);\n });\n\n expect(result.current.cellEdits).toEqual({\n [cellId]: editEvent,\n });\n expect(onCellValueChanged).toHaveBeenCalledWith(editEvent);\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({ editMode: \"always\", onCellValueChanged })\n );\n const cellIdentifier = { rowId: \"row-1\", columnId: \"col-1\" };\n const cellId = getCellId(cellIdentifier);\n const mockRowData = createMockObjectInstance(\"row-1\", { name: \"Test\" });\n\n // First edit\n const firstEdit = {\n rowId: \"row-1\",\n columnId: \"col-1\",\n newValue: \"new value\",\n oldValue: \"original\",\n originalRowData: mockRowData,\n };\n\n act(() => {\n result.current.onCellEdit(cellId, firstEdit);\n });\n\n expect(result.current.cellEdits).toEqual({\n [cellId]: firstEdit,\n });\n\n // Edit back to original\n const revertEdit = {\n rowId: \"row-1\",\n columnId: \"col-1\",\n newValue: \"original\",\n oldValue: \"original\",\n originalRowData: mockRowData,\n };\n\n act(() => {\n result.current.onCellEdit(cellId, revertEdit);\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(() =>\n useEditableTable({ editMode: \"always\" })\n );\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 const edit1 = {\n rowId: \"row-1\",\n columnId: \"col-1\",\n newValue: \"new1\",\n oldValue: \"old1\",\n originalRowData: createMockObjectInstance(\"row-1\"),\n };\n\n const edit2 = {\n rowId: \"row-2\",\n columnId: \"col-2\",\n newValue: \"new2\",\n oldValue: \"old2\",\n originalRowData: createMockObjectInstance(\"row-2\"),\n };\n\n const edit3 = {\n rowId: \"row-3\",\n columnId: \"col-3\",\n newValue: \"new3\",\n oldValue: \"old3\",\n originalRowData: createMockObjectInstance(\"row-3\"),\n };\n\n act(() => {\n result.current.onCellEdit(cellId1, edit1);\n result.current.onCellEdit(cellId2, edit2);\n result.current.onCellEdit(cellId3, edit3);\n });\n\n expect(Object.keys(result.current.cellEdits).length).toBe(3);\n\n // Edit one back to original\n const revertEdit2 = {\n rowId: \"row-2\",\n columnId: \"col-2\",\n newValue: \"old2\",\n oldValue: \"old2\",\n originalRowData: createMockObjectInstance(\"row-2\"),\n };\n\n act(() => {\n result.current.onCellEdit(cellId2, revertEdit2);\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(() =>\n useEditableTable({ editMode: \"always\" })\n );\n const cellId1 = getCellId({ rowId: \"row-1\", columnId: \"col-1\" });\n const cellId2 = getCellId({ rowId: \"row-2\", columnId: \"col-2\" });\n\n const edit1 = {\n rowId: \"row-1\",\n columnId: \"col-1\",\n newValue: \"new1\",\n oldValue: \"old1\",\n originalRowData: createMockObjectInstance(\"row-1\"),\n };\n\n const edit2 = {\n rowId: \"row-2\",\n columnId: \"col-2\",\n newValue: \"new2\",\n oldValue: \"old2\",\n originalRowData: createMockObjectInstance(\"row-2\"),\n };\n\n act(() => {\n result.current.onCellEdit(cellId1, edit1);\n result.current.onCellEdit(cellId2, edit2);\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(() =>\n useEditableTable({ editMode: \"always\", onSubmitEdits })\n );\n const cellId1 = getCellId({ rowId: \"row-1\", columnId: \"col-1\" });\n const cellId2 = getCellId({ rowId: \"row-2\", columnId: \"col-2\" });\n\n const edit1 = {\n rowId: \"row-1\",\n columnId: \"col-1\",\n newValue: \"new1\",\n oldValue: \"old1\",\n originalRowData: createMockObjectInstance(\"row-1\"),\n };\n\n const edit2 = {\n rowId: \"row-2\",\n columnId: \"col-2\",\n newValue: \"new2\",\n oldValue: \"old2\",\n originalRowData: createMockObjectInstance(\"row-2\"),\n };\n\n act(() => {\n result.current.onCellEdit(cellId1, edit1);\n result.current.onCellEdit(cellId2, edit2);\n });\n\n await act(async () => {\n await result.current.onSubmitEdits?.();\n });\n\n expect(onSubmitEdits).toHaveBeenCalledWith([edit1, edit2]);\n });\n\n it(\"when submit edits is undefined, onSubmitEdits is undefined\", async () => {\n const { result } = renderHook(() =>\n useEditableTable({\n editMode: \"always\",\n onSubmitEdits: undefined,\n })\n );\n\n expect(result.current.onSubmitEdits).toBeUndefined();\n });\n\n it(\"when editMode is manual, isActive is false initially\", () => {\n const { result } = renderHook(() =>\n useEditableTable({ editMode: \"manual\" })\n );\n\n expect(result.current.editMode.type).toBe(\"manual\");\n if (result.current.editMode.type === \"manual\") {\n expect(result.current.editMode.isActive).toBe(false);\n expect(result.current.editMode.setActive).toBeDefined();\n\n act(() => {\n result.current.editMode.type === \"manual\"\n && result.current.editMode.setActive(true);\n });\n\n expect(\n result.current.editMode.type === \"manual\"\n && result.current.editMode.isActive,\n ).toBe(true);\n\n act(() => {\n result.current.editMode.type === \"manual\"\n && result.current.editMode.setActive(false);\n });\n\n expect(\n result.current.editMode.type === \"manual\"\n && result.current.editMode.isActive,\n ).toBe(false);\n }\n });\n\n it(\"when editMode is always, the type is always and isActive is true\", () => {\n const { result } = renderHook(() =>\n useEditableTable({ editMode: \"always\" })\n );\n\n expect(result.current.editMode.type).toBe(\"always\");\n expect(result.current.editMode.isActive).toBe(true);\n });\n\n it(\"when editMode is manual with default settings, it starts as inactive\", () => {\n const { result } = renderHook(() =>\n useEditableTable({ editMode: \"manual\" })\n );\n\n expect(result.current.editMode.type).toBe(\"manual\");\n if (result.current.editMode.type === \"manual\") {\n expect(result.current.editMode.isActive).toBe(false);\n }\n });\n});\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1,315 +0,0 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* Copyright 2025 Palantir Technologies, Inc. All rights reserved.
|
|
3
|
-
*
|
|
4
|
-
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
-
* you may not use this file except in compliance with the License.
|
|
6
|
-
* You may obtain a copy of the License at
|
|
7
|
-
*
|
|
8
|
-
* http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
-
*
|
|
10
|
-
* Unless required by applicable law or agreed to in writing, software
|
|
11
|
-
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
-
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
-
* See the License for the specific language governing permissions and
|
|
14
|
-
* limitations under the License.
|
|
15
|
-
*/
|
|
16
|
-
|
|
17
|
-
import { OsdkProvider } from "@osdk/react";
|
|
18
|
-
import { useObjectSet, useOsdkObjects } from "@osdk/react/experimental";
|
|
19
|
-
import { renderHook } from "@testing-library/react";
|
|
20
|
-
import * as React from "react";
|
|
21
|
-
import { beforeEach, describe, expect, it, vi } from "vitest";
|
|
22
|
-
import { useObjectTableData } from "../useObjectTableData.js";
|
|
23
|
-
const TestObjectType = {
|
|
24
|
-
type: "object",
|
|
25
|
-
apiName: "TestObject"
|
|
26
|
-
};
|
|
27
|
-
vi.mock("@osdk/react/experimental", () => ({
|
|
28
|
-
useOsdkObjects: vi.fn((objectType, options) => {
|
|
29
|
-
return {
|
|
30
|
-
data: [],
|
|
31
|
-
isLoading: false,
|
|
32
|
-
error: undefined,
|
|
33
|
-
fetchMore: undefined,
|
|
34
|
-
isOptimistic: false,
|
|
35
|
-
// Return the options to verify they were passed correctly
|
|
36
|
-
_testOptions: options
|
|
37
|
-
};
|
|
38
|
-
}),
|
|
39
|
-
useObjectSet: vi.fn((objectSet, options) => {
|
|
40
|
-
return {
|
|
41
|
-
data: [],
|
|
42
|
-
isLoading: false,
|
|
43
|
-
error: undefined,
|
|
44
|
-
fetchMore: vi.fn(),
|
|
45
|
-
totalCount: undefined,
|
|
46
|
-
// Return the options to verify they were passed correctly
|
|
47
|
-
_testOptions: options,
|
|
48
|
-
isOptimistic: false
|
|
49
|
-
};
|
|
50
|
-
})
|
|
51
|
-
}));
|
|
52
|
-
const TestInterfaceType = {
|
|
53
|
-
type: "interface",
|
|
54
|
-
apiName: "TestInterface"
|
|
55
|
-
};
|
|
56
|
-
describe(useObjectTableData, () => {
|
|
57
|
-
beforeEach(() => {
|
|
58
|
-
vi.mocked(useOsdkObjects).mockClear();
|
|
59
|
-
vi.mocked(useObjectSet).mockClear();
|
|
60
|
-
});
|
|
61
|
-
const wrapper = (client => {
|
|
62
|
-
return ({
|
|
63
|
-
children
|
|
64
|
-
}) => {
|
|
65
|
-
return /*#__PURE__*/React.createElement(OsdkProvider, {
|
|
66
|
-
client: client
|
|
67
|
-
}, children);
|
|
68
|
-
};
|
|
69
|
-
})({});
|
|
70
|
-
const mockObjectSet = {
|
|
71
|
-
$objectSetInternals: {
|
|
72
|
-
def: TestObjectType
|
|
73
|
-
}
|
|
74
|
-
};
|
|
75
|
-
it("calls useOsdkObjects with filter clause and orderBy provided", () => {
|
|
76
|
-
const filterClause = {
|
|
77
|
-
name: "John"
|
|
78
|
-
};
|
|
79
|
-
const orderBy = [{
|
|
80
|
-
id: "name",
|
|
81
|
-
desc: false
|
|
82
|
-
}];
|
|
83
|
-
const {
|
|
84
|
-
result
|
|
85
|
-
} = renderHook(() => useObjectTableData(TestObjectType, undefined, filterClause, orderBy), {
|
|
86
|
-
wrapper
|
|
87
|
-
});
|
|
88
|
-
const mockResult = result.current;
|
|
89
|
-
expect(mockResult._testOptions.where).toEqual(filterClause);
|
|
90
|
-
expect(mockResult._testOptions.orderBy).toEqual({
|
|
91
|
-
"name": "asc"
|
|
92
|
-
});
|
|
93
|
-
});
|
|
94
|
-
it("calls useOsdkObjects without withProperties when no columnDefinitions provided", () => {
|
|
95
|
-
const {
|
|
96
|
-
result
|
|
97
|
-
} = renderHook(() => useObjectTableData(TestObjectType, undefined), {
|
|
98
|
-
wrapper
|
|
99
|
-
});
|
|
100
|
-
const mockResult = result.current;
|
|
101
|
-
expect(mockResult._testOptions.withProperties).toBeUndefined();
|
|
102
|
-
expect(mockResult._testOptions.pageSize).toBe(50);
|
|
103
|
-
});
|
|
104
|
-
it("calls useOsdkObjects without withProperties when columnDefinitions have no RDP columns", () => {
|
|
105
|
-
const columnDefinitions = [{
|
|
106
|
-
locator: {
|
|
107
|
-
type: "property",
|
|
108
|
-
id: "name"
|
|
109
|
-
}
|
|
110
|
-
}, {
|
|
111
|
-
locator: {
|
|
112
|
-
type: "property",
|
|
113
|
-
id: "email"
|
|
114
|
-
}
|
|
115
|
-
}];
|
|
116
|
-
const {
|
|
117
|
-
result
|
|
118
|
-
} = renderHook(() => useObjectTableData(TestObjectType, columnDefinitions), {
|
|
119
|
-
wrapper
|
|
120
|
-
});
|
|
121
|
-
const mockResult = result.current;
|
|
122
|
-
expect(mockResult._testOptions.withProperties).toBeUndefined();
|
|
123
|
-
expect(mockResult._testOptions.pageSize).toBe(50);
|
|
124
|
-
});
|
|
125
|
-
it("extracts RDP creators and passes them to useOsdkObjects", () => {
|
|
126
|
-
const mockRdpCreator1 = vi.fn();
|
|
127
|
-
const mockRdpCreator2 = vi.fn();
|
|
128
|
-
const columnDefinitions = [{
|
|
129
|
-
locator: {
|
|
130
|
-
type: "property",
|
|
131
|
-
id: "name"
|
|
132
|
-
}
|
|
133
|
-
}, {
|
|
134
|
-
locator: {
|
|
135
|
-
type: "rdp",
|
|
136
|
-
id: "rdp1",
|
|
137
|
-
creator: mockRdpCreator1
|
|
138
|
-
}
|
|
139
|
-
}, {
|
|
140
|
-
locator: {
|
|
141
|
-
type: "rdp",
|
|
142
|
-
id: "rdp2",
|
|
143
|
-
creator: mockRdpCreator2
|
|
144
|
-
}
|
|
145
|
-
}, {
|
|
146
|
-
locator: {
|
|
147
|
-
type: "function",
|
|
148
|
-
id: "myFunction"
|
|
149
|
-
}
|
|
150
|
-
}];
|
|
151
|
-
const {
|
|
152
|
-
result
|
|
153
|
-
} = renderHook(() => useObjectTableData(TestObjectType, columnDefinitions), {
|
|
154
|
-
wrapper
|
|
155
|
-
});
|
|
156
|
-
const mockResult = result.current;
|
|
157
|
-
expect(mockResult._testOptions.withProperties).toEqual({
|
|
158
|
-
rdp1: mockRdpCreator1,
|
|
159
|
-
rdp2: mockRdpCreator2
|
|
160
|
-
});
|
|
161
|
-
});
|
|
162
|
-
it("memoizes withProperties based on columnDefinitions", () => {
|
|
163
|
-
const mockRdpCreator = vi.fn();
|
|
164
|
-
const columnDefinitions = [{
|
|
165
|
-
locator: {
|
|
166
|
-
type: "rdp",
|
|
167
|
-
id: "myRdp",
|
|
168
|
-
creator: mockRdpCreator
|
|
169
|
-
}
|
|
170
|
-
}];
|
|
171
|
-
const {
|
|
172
|
-
result,
|
|
173
|
-
rerender
|
|
174
|
-
} = renderHook(({
|
|
175
|
-
colDefs
|
|
176
|
-
}) => useObjectTableData(TestObjectType, colDefs), {
|
|
177
|
-
initialProps: {
|
|
178
|
-
colDefs: columnDefinitions
|
|
179
|
-
},
|
|
180
|
-
wrapper
|
|
181
|
-
});
|
|
182
|
-
const firstMockResult = result.current;
|
|
183
|
-
const firstWithProperties = firstMockResult._testOptions.withProperties;
|
|
184
|
-
|
|
185
|
-
// Rerender with same columnDefinitions reference
|
|
186
|
-
rerender({
|
|
187
|
-
colDefs: columnDefinitions
|
|
188
|
-
});
|
|
189
|
-
|
|
190
|
-
// Should be the same reference (memoized)
|
|
191
|
-
const secondMockResult = result.current;
|
|
192
|
-
expect(secondMockResult._testOptions.withProperties).toBe(firstWithProperties);
|
|
193
|
-
});
|
|
194
|
-
it("updates withProperties when columnDefinitions change", () => {
|
|
195
|
-
const mockRdpCreator1 = vi.fn();
|
|
196
|
-
const mockRdpCreator2 = vi.fn();
|
|
197
|
-
const {
|
|
198
|
-
result,
|
|
199
|
-
rerender
|
|
200
|
-
} = renderHook(({
|
|
201
|
-
colDefs
|
|
202
|
-
}) => useObjectTableData(TestObjectType, colDefs), {
|
|
203
|
-
initialProps: {
|
|
204
|
-
colDefs: [{
|
|
205
|
-
locator: {
|
|
206
|
-
type: "rdp",
|
|
207
|
-
id: "rdp1",
|
|
208
|
-
creator: mockRdpCreator1
|
|
209
|
-
}
|
|
210
|
-
}]
|
|
211
|
-
},
|
|
212
|
-
wrapper
|
|
213
|
-
});
|
|
214
|
-
const firstMockResult = result.current;
|
|
215
|
-
expect(firstMockResult._testOptions.withProperties).toEqual({
|
|
216
|
-
rdp1: mockRdpCreator1
|
|
217
|
-
});
|
|
218
|
-
rerender({
|
|
219
|
-
colDefs: [{
|
|
220
|
-
locator: {
|
|
221
|
-
type: "rdp",
|
|
222
|
-
id: "rdp2",
|
|
223
|
-
creator: mockRdpCreator2
|
|
224
|
-
}
|
|
225
|
-
}]
|
|
226
|
-
});
|
|
227
|
-
const secondMockResult = result.current;
|
|
228
|
-
expect(secondMockResult._testOptions.withProperties).toEqual({
|
|
229
|
-
rdp2: mockRdpCreator2
|
|
230
|
-
});
|
|
231
|
-
});
|
|
232
|
-
it("returns useOsdkObjects result structure", () => {
|
|
233
|
-
const {
|
|
234
|
-
result
|
|
235
|
-
} = renderHook(() => useObjectTableData(TestObjectType), {
|
|
236
|
-
wrapper
|
|
237
|
-
});
|
|
238
|
-
expect(result.current).toHaveProperty("data");
|
|
239
|
-
expect(result.current).toHaveProperty("isLoading");
|
|
240
|
-
expect(result.current).toHaveProperty("error");
|
|
241
|
-
expect(result.current).toHaveProperty("fetchMore");
|
|
242
|
-
});
|
|
243
|
-
it("when no objectSet provided, only enables useOsdkObjects", () => {
|
|
244
|
-
const {
|
|
245
|
-
result
|
|
246
|
-
} = renderHook(() => useObjectTableData(TestObjectType), {
|
|
247
|
-
wrapper
|
|
248
|
-
});
|
|
249
|
-
expect(useOsdkObjects).toHaveBeenCalledWith(TestObjectType, expect.objectContaining({
|
|
250
|
-
enabled: true,
|
|
251
|
-
pageSize: 50
|
|
252
|
-
}));
|
|
253
|
-
expect(useObjectSet).toHaveBeenCalledWith(undefined, expect.objectContaining({
|
|
254
|
-
enabled: false,
|
|
255
|
-
pageSize: 50
|
|
256
|
-
}));
|
|
257
|
-
});
|
|
258
|
-
it(" when objectSet is provided, only enables useObjectSet", () => {
|
|
259
|
-
const {
|
|
260
|
-
result
|
|
261
|
-
} = renderHook(() => useObjectTableData(TestObjectType, undefined, undefined, undefined, mockObjectSet), {
|
|
262
|
-
wrapper
|
|
263
|
-
});
|
|
264
|
-
expect(useOsdkObjects).toHaveBeenCalledWith(TestObjectType, expect.objectContaining({
|
|
265
|
-
enabled: false,
|
|
266
|
-
pageSize: 50
|
|
267
|
-
}));
|
|
268
|
-
expect(useObjectSet).toHaveBeenCalledWith(expect.anything(), expect.objectContaining({
|
|
269
|
-
enabled: true,
|
|
270
|
-
pageSize: 50
|
|
271
|
-
}));
|
|
272
|
-
});
|
|
273
|
-
it("when objectSet is provided but type is interface, only enables useOsdkObjects ", () => {
|
|
274
|
-
renderHook(() => useObjectTableData(TestInterfaceType, undefined, undefined, undefined, mockObjectSet), {
|
|
275
|
-
wrapper
|
|
276
|
-
});
|
|
277
|
-
expect(useOsdkObjects).toHaveBeenCalledWith(TestInterfaceType, expect.objectContaining({
|
|
278
|
-
enabled: true,
|
|
279
|
-
pageSize: 50
|
|
280
|
-
}));
|
|
281
|
-
expect(useObjectSet).toHaveBeenCalledWith(undefined, expect.objectContaining({
|
|
282
|
-
enabled: false,
|
|
283
|
-
pageSize: 50
|
|
284
|
-
}));
|
|
285
|
-
});
|
|
286
|
-
it("passes filter, orderBy and objectSetOptions to useObjectSet", () => {
|
|
287
|
-
const filterClause = {
|
|
288
|
-
name: "John"
|
|
289
|
-
};
|
|
290
|
-
const sorting = [{
|
|
291
|
-
id: "name",
|
|
292
|
-
desc: false
|
|
293
|
-
}];
|
|
294
|
-
const objectSetOptions = {
|
|
295
|
-
union: [mockObjectSet],
|
|
296
|
-
intersect: [],
|
|
297
|
-
subtract: []
|
|
298
|
-
};
|
|
299
|
-
renderHook(() => useObjectTableData(TestObjectType, undefined, filterClause, sorting, mockObjectSet, objectSetOptions), {
|
|
300
|
-
wrapper
|
|
301
|
-
});
|
|
302
|
-
expect(useObjectSet).toHaveBeenCalledWith(expect.anything(), expect.objectContaining({
|
|
303
|
-
enabled: true,
|
|
304
|
-
pageSize: 50,
|
|
305
|
-
where: filterClause,
|
|
306
|
-
orderBy: {
|
|
307
|
-
name: "asc"
|
|
308
|
-
},
|
|
309
|
-
union: objectSetOptions.union,
|
|
310
|
-
intersect: objectSetOptions.intersect,
|
|
311
|
-
subtract: objectSetOptions.subtract
|
|
312
|
-
}));
|
|
313
|
-
});
|
|
314
|
-
});
|
|
315
|
-
//# sourceMappingURL=useObjectTableData.test.js.map
|