@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.
- package/AGENTS.md +105 -0
- package/CHANGELOG.md +22 -0
- package/build/browser/object-table/DefaultCellRenderer.js +5 -2
- package/build/browser/object-table/DefaultCellRenderer.js.map +1 -1
- package/build/browser/object-table/EditableCell.js +16 -6
- package/build/browser/object-table/EditableCell.js.map +1 -1
- package/build/browser/object-table/EditableCell.module.css +30 -2
- package/build/browser/object-table/EditableCell.module.css.js +2 -1
- package/build/browser/object-table/ObjectTable.js +9 -22
- package/build/browser/object-table/ObjectTable.js.map +1 -1
- package/build/browser/object-table/ObjectTableApi.js.map +1 -1
- package/build/browser/object-table/Table.js +23 -15
- package/build/browser/object-table/Table.js.map +1 -1
- package/build/browser/object-table/Table.module.css +0 -8
- package/build/browser/object-table/Table.module.css.js +1 -2
- package/build/browser/object-table/TableBody.js +8 -2
- package/build/browser/object-table/TableBody.js.map +1 -1
- package/build/browser/object-table/TableCell.module.css +0 -8
- package/build/browser/object-table/TableEditContainer.js +79 -0
- package/build/browser/object-table/TableEditContainer.js.map +1 -0
- package/build/browser/object-table/TableEditContainer.module.css +44 -0
- package/build/browser/object-table/TableEditContainer.module.css.js +9 -0
- package/build/browser/object-table/TableRow.js +12 -4
- package/build/browser/object-table/TableRow.js.map +1 -1
- package/build/browser/object-table/TableRow.module.css +2 -1
- package/build/browser/object-table/hooks/useEditableTable.js +20 -11
- package/build/browser/object-table/hooks/useEditableTable.js.map +1 -1
- package/build/browser/object-table/hooks/useObjectTableData.js +0 -5
- package/build/browser/object-table/hooks/useObjectTableData.js.map +1 -1
- package/build/browser/object-table/utils/getCellId.js +0 -7
- package/build/browser/object-table/utils/getCellId.js.map +1 -1
- package/build/browser/object-table/utils/types.js.map +1 -1
- package/build/browser/public/experimental.js.map +1 -1
- package/build/browser/styles.css +79 -19
- package/build/cjs/public/experimental.cjs +179 -90
- package/build/cjs/public/experimental.cjs.map +1 -1
- package/build/cjs/public/experimental.css +96 -57
- package/build/cjs/public/experimental.css.map +1 -1
- package/build/cjs/public/experimental.d.cts +40 -18
- package/build/esm/object-table/DefaultCellRenderer.js +5 -2
- package/build/esm/object-table/DefaultCellRenderer.js.map +1 -1
- package/build/esm/object-table/EditableCell.js +16 -6
- package/build/esm/object-table/EditableCell.js.map +1 -1
- package/build/esm/object-table/EditableCell.module.css +30 -2
- package/build/esm/object-table/ObjectTable.js +9 -22
- package/build/esm/object-table/ObjectTable.js.map +1 -1
- package/build/esm/object-table/ObjectTableApi.js.map +1 -1
- package/build/esm/object-table/Table.js +23 -15
- package/build/esm/object-table/Table.js.map +1 -1
- package/build/esm/object-table/Table.module.css +0 -8
- package/build/esm/object-table/TableBody.js +8 -2
- package/build/esm/object-table/TableBody.js.map +1 -1
- package/build/esm/object-table/TableCell.module.css +0 -8
- package/build/esm/object-table/TableEditContainer.js +79 -0
- package/build/esm/object-table/TableEditContainer.js.map +1 -0
- package/build/esm/object-table/TableEditContainer.module.css +44 -0
- package/build/esm/object-table/TableRow.js +12 -4
- package/build/esm/object-table/TableRow.js.map +1 -1
- package/build/esm/object-table/TableRow.module.css +2 -1
- package/build/esm/object-table/hooks/useEditableTable.js +20 -11
- package/build/esm/object-table/hooks/useEditableTable.js.map +1 -1
- package/build/esm/object-table/hooks/useObjectTableData.js +0 -5
- package/build/esm/object-table/hooks/useObjectTableData.js.map +1 -1
- package/build/esm/object-table/utils/getCellId.js +0 -7
- package/build/esm/object-table/utils/getCellId.js.map +1 -1
- package/build/esm/object-table/utils/types.js.map +1 -1
- package/build/esm/public/experimental.js.map +1 -1
- package/build/types/object-table/DefaultCellRenderer.d.ts +2 -2
- package/build/types/object-table/DefaultCellRenderer.d.ts.map +1 -1
- package/build/types/object-table/EditableCell.d.ts +18 -6
- package/build/types/object-table/EditableCell.d.ts.map +1 -1
- package/build/types/object-table/ObjectTable.d.ts +1 -1
- package/build/types/object-table/ObjectTable.d.ts.map +1 -1
- package/build/types/object-table/ObjectTableApi.d.ts +16 -6
- package/build/types/object-table/ObjectTableApi.d.ts.map +1 -1
- package/build/types/object-table/Table.d.ts +5 -10
- package/build/types/object-table/Table.d.ts.map +1 -1
- package/build/types/object-table/TableBody.d.ts +4 -1
- package/build/types/object-table/TableBody.d.ts.map +1 -1
- package/build/types/object-table/TableEditContainer.d.ts +9 -0
- package/build/types/object-table/TableEditContainer.d.ts.map +1 -0
- package/build/types/object-table/TableRow.d.ts +5 -1
- package/build/types/object-table/TableRow.d.ts.map +1 -1
- package/build/types/object-table/hooks/useEditableTable.d.ts +4 -9
- package/build/types/object-table/hooks/useEditableTable.d.ts.map +1 -1
- package/build/types/object-table/utils/getCellId.d.ts +0 -1
- package/build/types/object-table/utils/getCellId.d.ts.map +1 -1
- package/build/types/object-table/utils/types.d.ts +25 -3
- package/build/types/object-table/utils/types.d.ts.map +1 -1
- package/build/types/public/experimental.d.ts +1 -1
- package/build/types/public/experimental.d.ts.map +1 -1
- package/package.json +7 -6
- 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/__tests__/useEditableTable.test.js +0 -197
- package/build/browser/object-table/__tests__/useEditableTable.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__/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/__tests__/useEditableTable.test.js +0 -197
- package/build/esm/object-table/__tests__/useEditableTable.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__/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/__tests__/useEditableTable.test.d.ts +0 -1
- package/build/types/object-table/__tests__/useEditableTable.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__/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,53 +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 { describe, expect, it } from "vitest";
|
|
18
|
-
import { getFilterKey } from "../utils/getFilterKey.js";
|
|
19
|
-
import { createCustomFilterDef, createHasLinkFilterDef, createKeywordSearchFilterDef, createLinkedPropertyFilterDef, createPropertyFilterDef, createSelectState } from "./testUtils.js";
|
|
20
|
-
describe("getFilterKey", () => {
|
|
21
|
-
it("returns key for property filter", () => {
|
|
22
|
-
const definition = createPropertyFilterDef("name", "CHECKBOX_LIST", createSelectState([]));
|
|
23
|
-
expect(getFilterKey(definition)).toBe("name");
|
|
24
|
-
});
|
|
25
|
-
it("returns id over key for property filter when id is set", () => {
|
|
26
|
-
const definition = {
|
|
27
|
-
...createPropertyFilterDef("name", "CHECKBOX_LIST", createSelectState([])),
|
|
28
|
-
id: "name-filter-1"
|
|
29
|
-
};
|
|
30
|
-
expect(getFilterKey(definition)).toBe("name-filter-1");
|
|
31
|
-
});
|
|
32
|
-
it("returns hasLink:{linkName} for hasLink filter", () => {
|
|
33
|
-
const definition = createHasLinkFilterDef("employees");
|
|
34
|
-
expect(getFilterKey(definition)).toBe("hasLink:employees");
|
|
35
|
-
});
|
|
36
|
-
it("returns linkedProperty:{link}:{prop} for linkedProperty filter", () => {
|
|
37
|
-
const definition = createLinkedPropertyFilterDef("department", "name");
|
|
38
|
-
expect(getFilterKey(definition)).toBe("linkedProperty:department:name");
|
|
39
|
-
});
|
|
40
|
-
it("returns keywordSearch-{props} for array properties", () => {
|
|
41
|
-
const definition = createKeywordSearchFilterDef(["name", "email"]);
|
|
42
|
-
expect(getFilterKey(definition)).toBe("keywordSearch-name-email");
|
|
43
|
-
});
|
|
44
|
-
it("returns keywordSearch-all for 'all' properties", () => {
|
|
45
|
-
const definition = createKeywordSearchFilterDef("all");
|
|
46
|
-
expect(getFilterKey(definition)).toBe("keywordSearch-all");
|
|
47
|
-
});
|
|
48
|
-
it("returns key for custom filter", () => {
|
|
49
|
-
const definition = createCustomFilterDef("myCustomFilter");
|
|
50
|
-
expect(getFilterKey(definition)).toBe("myCustomFilter");
|
|
51
|
-
});
|
|
52
|
-
});
|
|
53
|
-
//# sourceMappingURL=getFilterKey.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"getFilterKey.test.js","names":["describe","expect","it","getFilterKey","createCustomFilterDef","createHasLinkFilterDef","createKeywordSearchFilterDef","createLinkedPropertyFilterDef","createPropertyFilterDef","createSelectState","definition","toBe","id"],"sources":["getFilterKey.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 { describe, expect, it } from \"vitest\";\nimport type { FilterDefinitionUnion } from \"../FilterListApi.js\";\nimport { getFilterKey } from \"../utils/getFilterKey.js\";\nimport type { MockObjectType } from \"./testUtils.js\";\nimport {\n createCustomFilterDef,\n createHasLinkFilterDef,\n createKeywordSearchFilterDef,\n createLinkedPropertyFilterDef,\n createPropertyFilterDef,\n createSelectState,\n} from \"./testUtils.js\";\n\ndescribe(\"getFilterKey\", () => {\n it(\"returns key for property filter\", () => {\n const definition = createPropertyFilterDef(\n \"name\",\n \"CHECKBOX_LIST\",\n createSelectState([]),\n );\n expect(getFilterKey(definition)).toBe(\"name\");\n });\n\n it(\"returns id over key for property filter when id is set\", () => {\n const definition = {\n ...createPropertyFilterDef(\n \"name\",\n \"CHECKBOX_LIST\",\n createSelectState([]),\n ),\n id: \"name-filter-1\",\n } as FilterDefinitionUnion<typeof MockObjectType>;\n expect(getFilterKey(definition)).toBe(\"name-filter-1\");\n });\n\n it(\"returns hasLink:{linkName} for hasLink filter\", () => {\n const definition = createHasLinkFilterDef(\"employees\");\n expect(getFilterKey(definition)).toBe(\"hasLink:employees\");\n });\n\n it(\"returns linkedProperty:{link}:{prop} for linkedProperty filter\", () => {\n const definition = createLinkedPropertyFilterDef(\"department\", \"name\");\n expect(getFilterKey(definition)).toBe(\"linkedProperty:department:name\");\n });\n\n it(\"returns keywordSearch-{props} for array properties\", () => {\n const definition = createKeywordSearchFilterDef([\"name\", \"email\"]);\n expect(getFilterKey(definition)).toBe(\"keywordSearch-name-email\");\n });\n\n it(\"returns keywordSearch-all for 'all' properties\", () => {\n const definition = createKeywordSearchFilterDef(\"all\");\n expect(getFilterKey(definition)).toBe(\"keywordSearch-all\");\n });\n\n it(\"returns key for custom filter\", () => {\n const definition = createCustomFilterDef(\"myCustomFilter\");\n expect(getFilterKey(definition)).toBe(\"myCustomFilter\");\n });\n});\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAASA,QAAQ,EAAEC,MAAM,EAAEC,EAAE,QAAQ,QAAQ;AAE7C,SAASC,YAAY,QAAQ,0BAA0B;AAEvD,SACEC,qBAAqB,EACrBC,sBAAsB,EACtBC,4BAA4B,EAC5BC,6BAA6B,EAC7BC,uBAAuB,EACvBC,iBAAiB,QACZ,gBAAgB;AAEvBT,QAAQ,CAAC,cAAc,EAAE,MAAM;EAC7BE,EAAE,CAAC,iCAAiC,EAAE,MAAM;IAC1C,MAAMQ,UAAU,GAAGF,uBAAuB,CACxC,MAAM,EACN,eAAe,EACfC,iBAAiB,CAAC,EAAE,CACtB,CAAC;IACDR,MAAM,CAACE,YAAY,CAACO,UAAU,CAAC,CAAC,CAACC,IAAI,CAAC,MAAM,CAAC;EAC/C,CAAC,CAAC;EAEFT,EAAE,CAAC,wDAAwD,EAAE,MAAM;IACjE,MAAMQ,UAAU,GAAG;MACjB,GAAGF,uBAAuB,CACxB,MAAM,EACN,eAAe,EACfC,iBAAiB,CAAC,EAAE,CACtB,CAAC;MACDG,EAAE,EAAE;IACN,CAAiD;IACjDX,MAAM,CAACE,YAAY,CAACO,UAAU,CAAC,CAAC,CAACC,IAAI,CAAC,eAAe,CAAC;EACxD,CAAC,CAAC;EAEFT,EAAE,CAAC,+CAA+C,EAAE,MAAM;IACxD,MAAMQ,UAAU,GAAGL,sBAAsB,CAAC,WAAW,CAAC;IACtDJ,MAAM,CAACE,YAAY,CAACO,UAAU,CAAC,CAAC,CAACC,IAAI,CAAC,mBAAmB,CAAC;EAC5D,CAAC,CAAC;EAEFT,EAAE,CAAC,gEAAgE,EAAE,MAAM;IACzE,MAAMQ,UAAU,GAAGH,6BAA6B,CAAC,YAAY,EAAE,MAAM,CAAC;IACtEN,MAAM,CAACE,YAAY,CAACO,UAAU,CAAC,CAAC,CAACC,IAAI,CAAC,gCAAgC,CAAC;EACzE,CAAC,CAAC;EAEFT,EAAE,CAAC,oDAAoD,EAAE,MAAM;IAC7D,MAAMQ,UAAU,GAAGJ,4BAA4B,CAAC,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClEL,MAAM,CAACE,YAAY,CAACO,UAAU,CAAC,CAAC,CAACC,IAAI,CAAC,0BAA0B,CAAC;EACnE,CAAC,CAAC;EAEFT,EAAE,CAAC,gDAAgD,EAAE,MAAM;IACzD,MAAMQ,UAAU,GAAGJ,4BAA4B,CAAC,KAAK,CAAC;IACtDL,MAAM,CAACE,YAAY,CAACO,UAAU,CAAC,CAAC,CAACC,IAAI,CAAC,mBAAmB,CAAC;EAC5D,CAAC,CAAC;EAEFT,EAAE,CAAC,+BAA+B,EAAE,MAAM;IACxC,MAAMQ,UAAU,GAAGN,qBAAqB,CAAC,gBAAgB,CAAC;IAC1DH,MAAM,CAACE,YAAY,CAACO,UAAU,CAAC,CAAC,CAACC,IAAI,CAAC,gBAAgB,CAAC;EACzD,CAAC,CAAC;AACJ,CAAC,CAAC","ignoreList":[]}
|
|
@@ -1,203 +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
|
-
export const MockObjectType = {
|
|
18
|
-
apiName: "TestObject",
|
|
19
|
-
type: "object",
|
|
20
|
-
__DefinitionMetadata: {
|
|
21
|
-
primaryKeyApiName: "id",
|
|
22
|
-
primaryKeyType: "string",
|
|
23
|
-
properties: {
|
|
24
|
-
id: {
|
|
25
|
-
type: "string",
|
|
26
|
-
multiplicity: false
|
|
27
|
-
},
|
|
28
|
-
name: {
|
|
29
|
-
type: "string",
|
|
30
|
-
multiplicity: false
|
|
31
|
-
},
|
|
32
|
-
age: {
|
|
33
|
-
type: "integer",
|
|
34
|
-
multiplicity: false
|
|
35
|
-
},
|
|
36
|
-
active: {
|
|
37
|
-
type: "boolean",
|
|
38
|
-
multiplicity: false
|
|
39
|
-
},
|
|
40
|
-
createdAt: {
|
|
41
|
-
type: "timestamp",
|
|
42
|
-
multiplicity: false
|
|
43
|
-
},
|
|
44
|
-
score: {
|
|
45
|
-
type: "double",
|
|
46
|
-
multiplicity: false
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
}
|
|
50
|
-
};
|
|
51
|
-
|
|
52
|
-
/**
|
|
53
|
-
* Create a property filter definition for testing
|
|
54
|
-
*/
|
|
55
|
-
export function createPropertyFilterDef(key, filterComponent, filterState) {
|
|
56
|
-
return {
|
|
57
|
-
type: "PROPERTY",
|
|
58
|
-
key,
|
|
59
|
-
filterComponent,
|
|
60
|
-
filterState
|
|
61
|
-
};
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
/**
|
|
65
|
-
* Create a hasLink filter definition for testing
|
|
66
|
-
*/
|
|
67
|
-
export function createHasLinkFilterDef(linkName) {
|
|
68
|
-
return {
|
|
69
|
-
type: "HAS_LINK",
|
|
70
|
-
linkName,
|
|
71
|
-
filterState: {
|
|
72
|
-
type: "hasLink",
|
|
73
|
-
hasLink: false
|
|
74
|
-
}
|
|
75
|
-
};
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
/**
|
|
79
|
-
* Create a linkedProperty filter definition for testing.
|
|
80
|
-
* Cast required because LinkedPropertyFilterDefinition has complex generic constraints
|
|
81
|
-
* that can't be satisfied with literal link names.
|
|
82
|
-
*/
|
|
83
|
-
export function createLinkedPropertyFilterDef(linkName, linkedPropertyKey) {
|
|
84
|
-
return {
|
|
85
|
-
type: "LINKED_PROPERTY",
|
|
86
|
-
linkName,
|
|
87
|
-
linkedPropertyKey,
|
|
88
|
-
linkedFilterComponent: "CHECKBOX_LIST",
|
|
89
|
-
linkedFilterState: {
|
|
90
|
-
type: "SELECT",
|
|
91
|
-
selectedValues: []
|
|
92
|
-
},
|
|
93
|
-
filterState: {
|
|
94
|
-
type: "linkedProperty",
|
|
95
|
-
linkedFilterState: {
|
|
96
|
-
type: "SELECT",
|
|
97
|
-
selectedValues: []
|
|
98
|
-
}
|
|
99
|
-
}
|
|
100
|
-
};
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
/**
|
|
104
|
-
* Create a keywordSearch filter definition for testing
|
|
105
|
-
*/
|
|
106
|
-
export function createKeywordSearchFilterDef(properties) {
|
|
107
|
-
return {
|
|
108
|
-
type: "KEYWORD_SEARCH",
|
|
109
|
-
properties,
|
|
110
|
-
filterState: {
|
|
111
|
-
type: "keywordSearch",
|
|
112
|
-
searchTerm: "",
|
|
113
|
-
operator: "AND"
|
|
114
|
-
}
|
|
115
|
-
};
|
|
116
|
-
}
|
|
117
|
-
|
|
118
|
-
/**
|
|
119
|
-
* Create a custom filter definition for testing.
|
|
120
|
-
* Cast required because CustomFilterDefinition expects specific callback signatures.
|
|
121
|
-
*/
|
|
122
|
-
export function createCustomFilterDef(key) {
|
|
123
|
-
return {
|
|
124
|
-
type: "CUSTOM",
|
|
125
|
-
key,
|
|
126
|
-
filterComponent: "CUSTOM",
|
|
127
|
-
filterState: {
|
|
128
|
-
type: "custom",
|
|
129
|
-
customState: {}
|
|
130
|
-
},
|
|
131
|
-
renderInput: () => null,
|
|
132
|
-
toWhereClause: () => ({})
|
|
133
|
-
};
|
|
134
|
-
}
|
|
135
|
-
|
|
136
|
-
/**
|
|
137
|
-
* Helper to create a SelectFilterState
|
|
138
|
-
*/
|
|
139
|
-
export function createSelectState(selectedValues, options) {
|
|
140
|
-
return {
|
|
141
|
-
type: "SELECT",
|
|
142
|
-
selectedValues,
|
|
143
|
-
isExcluding: options?.isExcluding,
|
|
144
|
-
includeNull: options?.includeNull
|
|
145
|
-
};
|
|
146
|
-
}
|
|
147
|
-
|
|
148
|
-
/**
|
|
149
|
-
* Helper to create a ContainsTextFilterState
|
|
150
|
-
*/
|
|
151
|
-
export function createContainsTextState(value, options) {
|
|
152
|
-
return {
|
|
153
|
-
type: "CONTAINS_TEXT",
|
|
154
|
-
value,
|
|
155
|
-
isExcluding: options?.isExcluding
|
|
156
|
-
};
|
|
157
|
-
}
|
|
158
|
-
|
|
159
|
-
/**
|
|
160
|
-
* Helper to create a ToggleFilterState
|
|
161
|
-
*/
|
|
162
|
-
export function createToggleState(enabled) {
|
|
163
|
-
return {
|
|
164
|
-
type: "TOGGLE",
|
|
165
|
-
enabled
|
|
166
|
-
};
|
|
167
|
-
}
|
|
168
|
-
|
|
169
|
-
/**
|
|
170
|
-
* Helper to create a NumberRangeFilterState
|
|
171
|
-
*/
|
|
172
|
-
export function createNumberRangeState(minValue, maxValue, options) {
|
|
173
|
-
return {
|
|
174
|
-
type: "NUMBER_RANGE",
|
|
175
|
-
minValue,
|
|
176
|
-
maxValue,
|
|
177
|
-
includeNull: options?.includeNull
|
|
178
|
-
};
|
|
179
|
-
}
|
|
180
|
-
|
|
181
|
-
/**
|
|
182
|
-
* Helper to create a DateRangeFilterState
|
|
183
|
-
*/
|
|
184
|
-
export function createDateRangeState(minValue, maxValue, options) {
|
|
185
|
-
return {
|
|
186
|
-
type: "DATE_RANGE",
|
|
187
|
-
minValue,
|
|
188
|
-
maxValue,
|
|
189
|
-
includeNull: options?.includeNull
|
|
190
|
-
};
|
|
191
|
-
}
|
|
192
|
-
|
|
193
|
-
/**
|
|
194
|
-
* Helper to create an ExactMatchFilterState
|
|
195
|
-
*/
|
|
196
|
-
export function createExactMatchState(values, options) {
|
|
197
|
-
return {
|
|
198
|
-
type: "EXACT_MATCH",
|
|
199
|
-
values,
|
|
200
|
-
isExcluding: options?.isExcluding
|
|
201
|
-
};
|
|
202
|
-
}
|
|
203
|
-
//# sourceMappingURL=testUtils.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"testUtils.js","names":["MockObjectType","apiName","type","__DefinitionMetadata","primaryKeyApiName","primaryKeyType","properties","id","multiplicity","name","age","active","createdAt","score","createPropertyFilterDef","key","filterComponent","filterState","createHasLinkFilterDef","linkName","hasLink","createLinkedPropertyFilterDef","linkedPropertyKey","linkedFilterComponent","linkedFilterState","selectedValues","createKeywordSearchFilterDef","searchTerm","operator","createCustomFilterDef","customState","renderInput","toWhereClause","createSelectState","options","isExcluding","includeNull","createContainsTextState","value","createToggleState","enabled","createNumberRangeState","minValue","maxValue","createDateRangeState","createExactMatchState","values"],"sources":["testUtils.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 { ObjectTypeDefinition } from \"@osdk/api\";\nimport type { FilterDefinitionUnion } from \"../FilterListApi.js\";\nimport type {\n ContainsTextFilterState,\n DateRangeFilterState,\n ExactMatchFilterState,\n FilterComponentType,\n FilterState,\n NumberRangeFilterState,\n SelectFilterState,\n ToggleFilterState,\n} from \"../FilterListItemApi.js\";\n\nexport const MockObjectType = {\n apiName: \"TestObject\",\n type: \"object\",\n __DefinitionMetadata: {\n primaryKeyApiName: \"id\",\n primaryKeyType: \"string\",\n properties: {\n id: { type: \"string\", multiplicity: false },\n name: { type: \"string\", multiplicity: false },\n age: { type: \"integer\", multiplicity: false },\n active: { type: \"boolean\", multiplicity: false },\n createdAt: { type: \"timestamp\", multiplicity: false },\n score: { type: \"double\", multiplicity: false },\n },\n },\n} as unknown as ObjectTypeDefinition;\n\n/**\n * Create a property filter definition for testing\n */\nexport function createPropertyFilterDef<\n K extends string = string,\n C extends FilterComponentType = FilterComponentType,\n>(\n key: K,\n filterComponent: C,\n filterState: FilterState,\n): FilterDefinitionUnion<typeof MockObjectType> {\n return {\n type: \"PROPERTY\",\n key,\n filterComponent,\n filterState,\n } as FilterDefinitionUnion<typeof MockObjectType>;\n}\n\n/**\n * Create a hasLink filter definition for testing\n */\nexport function createHasLinkFilterDef(\n linkName: string,\n): FilterDefinitionUnion<typeof MockObjectType> {\n return {\n type: \"HAS_LINK\",\n linkName,\n filterState: { type: \"hasLink\", hasLink: false },\n } as FilterDefinitionUnion<typeof MockObjectType>;\n}\n\n/**\n * Create a linkedProperty filter definition for testing.\n * Cast required because LinkedPropertyFilterDefinition has complex generic constraints\n * that can't be satisfied with literal link names.\n */\nexport function createLinkedPropertyFilterDef(\n linkName: string,\n linkedPropertyKey: string,\n): FilterDefinitionUnion<typeof MockObjectType> {\n return {\n type: \"LINKED_PROPERTY\",\n linkName,\n linkedPropertyKey,\n linkedFilterComponent: \"CHECKBOX_LIST\",\n linkedFilterState: { type: \"SELECT\", selectedValues: [] },\n filterState: {\n type: \"linkedProperty\",\n linkedFilterState: { type: \"SELECT\", selectedValues: [] },\n },\n } as FilterDefinitionUnion<typeof MockObjectType>;\n}\n\n/**\n * Create a keywordSearch filter definition for testing\n */\nexport function createKeywordSearchFilterDef(\n properties: string[] | \"all\",\n): FilterDefinitionUnion<typeof MockObjectType> {\n return {\n type: \"KEYWORD_SEARCH\",\n properties,\n filterState: { type: \"keywordSearch\", searchTerm: \"\", operator: \"AND\" },\n } as FilterDefinitionUnion<typeof MockObjectType>;\n}\n\n/**\n * Create a custom filter definition for testing.\n * Cast required because CustomFilterDefinition expects specific callback signatures.\n */\nexport function createCustomFilterDef(\n key: string,\n): FilterDefinitionUnion<typeof MockObjectType> {\n return {\n type: \"CUSTOM\",\n key,\n filterComponent: \"CUSTOM\",\n filterState: { type: \"custom\", customState: {} },\n renderInput: () => null,\n toWhereClause: () => ({}),\n } as FilterDefinitionUnion<typeof MockObjectType>;\n}\n\n/**\n * Helper to create a SelectFilterState\n */\nexport function createSelectState<T = string>(\n selectedValues: T[],\n options?: {\n isExcluding?: boolean;\n includeNull?: boolean;\n },\n): SelectFilterState<T> {\n return {\n type: \"SELECT\",\n selectedValues,\n isExcluding: options?.isExcluding,\n includeNull: options?.includeNull,\n };\n}\n\n/**\n * Helper to create a ContainsTextFilterState\n */\nexport function createContainsTextState(\n value?: string,\n options?: { isExcluding?: boolean },\n): ContainsTextFilterState {\n return {\n type: \"CONTAINS_TEXT\",\n value,\n isExcluding: options?.isExcluding,\n };\n}\n\n/**\n * Helper to create a ToggleFilterState\n */\nexport function createToggleState(enabled: boolean): ToggleFilterState {\n return {\n type: \"TOGGLE\",\n enabled,\n };\n}\n\n/**\n * Helper to create a NumberRangeFilterState\n */\nexport function createNumberRangeState(\n minValue?: number,\n maxValue?: number,\n options?: { includeNull?: boolean },\n): NumberRangeFilterState {\n return {\n type: \"NUMBER_RANGE\",\n minValue,\n maxValue,\n includeNull: options?.includeNull,\n };\n}\n\n/**\n * Helper to create a DateRangeFilterState\n */\nexport function createDateRangeState(\n minValue?: Date,\n maxValue?: Date,\n options?: { includeNull?: boolean },\n): DateRangeFilterState {\n return {\n type: \"DATE_RANGE\",\n minValue,\n maxValue,\n includeNull: options?.includeNull,\n };\n}\n\n/**\n * Helper to create an ExactMatchFilterState\n */\nexport function createExactMatchState(\n values: Array<string | boolean>,\n options?: { isExcluding?: boolean },\n): ExactMatchFilterState<string | boolean> {\n return {\n type: \"EXACT_MATCH\",\n values,\n isExcluding: options?.isExcluding,\n };\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -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":[]}
|