@osdk/react-components 0.1.0-beta.3 → 0.1.0-beta.5
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/CHANGELOG.md +28 -0
- package/build/browser/base-components/checkbox/Checkbox.module.css +11 -10
- package/build/browser/object-table/CellContextMenu.js +2 -2
- package/build/browser/object-table/CellContextMenu.js.map +1 -1
- package/build/browser/object-table/CellContextMenu.module.css +20 -0
- package/build/browser/object-table/ObjectTable.js +37 -10
- 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 +7 -16
- package/build/browser/object-table/Table.js.map +1 -1
- package/build/browser/object-table/Table.module.css +22 -0
- package/build/browser/object-table/TableBody.js +2 -2
- package/build/browser/object-table/TableBody.js.map +1 -1
- package/build/browser/object-table/TableBody.module.css +20 -0
- package/build/browser/object-table/TableCell.js +12 -7
- package/build/browser/object-table/TableCell.js.map +1 -1
- package/build/browser/object-table/TableCell.module.css +63 -0
- package/build/browser/object-table/TableHeader.js +35 -38
- package/build/browser/object-table/TableHeader.js.map +1 -1
- package/build/browser/object-table/TableHeader.module.css +95 -0
- package/build/browser/object-table/TableHeaderContent.js +27 -0
- package/build/browser/object-table/TableHeaderContent.js.map +1 -0
- package/build/browser/object-table/TableHeaderContent.module.css +30 -0
- package/build/browser/object-table/TableHeaderWithPopover.js +155 -0
- package/build/browser/object-table/TableHeaderWithPopover.js.map +1 -0
- package/build/browser/object-table/TableHeaderWithPopover.module.css +105 -0
- package/build/browser/object-table/TableRow.js +4 -3
- package/build/browser/object-table/TableRow.js.map +1 -1
- package/build/browser/object-table/TableRow.module.css +60 -0
- package/build/browser/object-table/hooks/__tests__/useColumnPinning.test.js +266 -0
- package/build/browser/object-table/hooks/__tests__/useColumnPinning.test.js.map +1 -0
- package/build/browser/object-table/hooks/__tests__/{useDefaultTableStates.test.js → useColumnVisibility.test.js} +16 -16
- package/build/browser/object-table/hooks/__tests__/useColumnVisibility.test.js.map +1 -0
- package/build/browser/object-table/hooks/__tests__/useSelectionColumn.test.js +2 -1
- package/build/browser/object-table/hooks/__tests__/useSelectionColumn.test.js.map +1 -1
- package/build/browser/object-table/hooks/__tests__/useTableSorting.test.js +211 -0
- package/build/browser/object-table/hooks/__tests__/useTableSorting.test.js.map +1 -0
- package/build/browser/object-table/hooks/useColumnPinning.js +95 -0
- package/build/browser/object-table/hooks/useColumnPinning.js.map +1 -0
- package/build/{esm/object-table/hooks/useDefaultTableStates.js → browser/object-table/hooks/useColumnVisibility.js} +3 -5
- package/build/browser/object-table/hooks/useColumnVisibility.js.map +1 -0
- package/build/browser/object-table/hooks/useObjectTableData.js +15 -3
- package/build/browser/object-table/hooks/useObjectTableData.js.map +1 -1
- package/build/browser/object-table/hooks/useSelectionColumn.js +3 -2
- package/build/browser/object-table/hooks/useSelectionColumn.js.map +1 -1
- package/build/browser/object-table/hooks/useTableSorting.js +66 -0
- package/build/browser/object-table/hooks/useTableSorting.js.map +1 -0
- package/build/browser/object-table/utils/constants.js +18 -0
- package/build/browser/object-table/utils/constants.js.map +1 -0
- package/build/browser/object-table/utils/getColumnPinningStyles.js +27 -0
- package/build/browser/object-table/utils/getColumnPinningStyles.js.map +1 -0
- package/build/browser/public/experimental.js +4 -0
- package/build/browser/public/experimental.js.map +1 -1
- package/build/cjs/public/experimental.cjs +446 -129
- package/build/cjs/public/experimental.cjs.map +1 -1
- package/build/cjs/public/experimental.css +248 -4
- package/build/cjs/public/experimental.css.map +1 -1
- package/build/cjs/public/experimental.d.cts +26 -3
- package/build/esm/base-components/checkbox/Checkbox.module.css +11 -10
- package/build/esm/object-table/CellContextMenu.js +2 -2
- package/build/esm/object-table/CellContextMenu.js.map +1 -1
- package/build/esm/object-table/CellContextMenu.module.css +20 -0
- package/build/esm/object-table/ObjectTable.js +37 -10
- 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 +7 -16
- package/build/esm/object-table/Table.js.map +1 -1
- package/build/esm/object-table/Table.module.css +22 -0
- package/build/esm/object-table/TableBody.js +2 -2
- package/build/esm/object-table/TableBody.js.map +1 -1
- package/build/esm/object-table/TableBody.module.css +20 -0
- package/build/esm/object-table/TableCell.js +12 -7
- package/build/esm/object-table/TableCell.js.map +1 -1
- package/build/esm/object-table/TableCell.module.css +63 -0
- package/build/esm/object-table/TableHeader.js +35 -38
- package/build/esm/object-table/TableHeader.js.map +1 -1
- package/build/esm/object-table/TableHeader.module.css +95 -0
- package/build/esm/object-table/TableHeaderContent.js +27 -0
- package/build/esm/object-table/TableHeaderContent.js.map +1 -0
- package/build/esm/object-table/TableHeaderContent.module.css +30 -0
- package/build/esm/object-table/TableHeaderWithPopover.js +155 -0
- package/build/esm/object-table/TableHeaderWithPopover.js.map +1 -0
- package/build/esm/object-table/TableHeaderWithPopover.module.css +105 -0
- package/build/esm/object-table/TableRow.js +4 -3
- package/build/esm/object-table/TableRow.js.map +1 -1
- package/build/esm/object-table/TableRow.module.css +60 -0
- package/build/esm/object-table/hooks/__tests__/useColumnPinning.test.js +266 -0
- package/build/esm/object-table/hooks/__tests__/useColumnPinning.test.js.map +1 -0
- package/build/esm/object-table/hooks/__tests__/{useDefaultTableStates.test.js → useColumnVisibility.test.js} +16 -16
- package/build/esm/object-table/hooks/__tests__/useColumnVisibility.test.js.map +1 -0
- package/build/esm/object-table/hooks/__tests__/useSelectionColumn.test.js +2 -1
- package/build/esm/object-table/hooks/__tests__/useSelectionColumn.test.js.map +1 -1
- package/build/esm/object-table/hooks/__tests__/useTableSorting.test.js +211 -0
- package/build/esm/object-table/hooks/__tests__/useTableSorting.test.js.map +1 -0
- package/build/esm/object-table/hooks/useColumnPinning.js +95 -0
- package/build/esm/object-table/hooks/useColumnPinning.js.map +1 -0
- package/build/{browser/object-table/hooks/useDefaultTableStates.js → esm/object-table/hooks/useColumnVisibility.js} +3 -5
- package/build/esm/object-table/hooks/useColumnVisibility.js.map +1 -0
- package/build/esm/object-table/hooks/useObjectTableData.js +15 -3
- package/build/esm/object-table/hooks/useObjectTableData.js.map +1 -1
- package/build/esm/object-table/hooks/useSelectionColumn.js +3 -2
- package/build/esm/object-table/hooks/useSelectionColumn.js.map +1 -1
- package/build/esm/object-table/hooks/useTableSorting.js +66 -0
- package/build/esm/object-table/hooks/useTableSorting.js.map +1 -0
- package/build/esm/object-table/utils/constants.js +18 -0
- package/build/esm/object-table/utils/constants.js.map +1 -0
- package/build/esm/object-table/utils/getColumnPinningStyles.js +27 -0
- package/build/esm/object-table/utils/getColumnPinningStyles.js.map +1 -0
- package/build/esm/public/experimental.js +4 -0
- package/build/esm/public/experimental.js.map +1 -1
- package/build/types/object-table/CellContextMenu.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 +11 -0
- package/build/types/object-table/ObjectTableApi.d.ts.map +1 -1
- package/build/types/object-table/Table.d.ts +3 -3
- package/build/types/object-table/Table.d.ts.map +1 -1
- package/build/types/object-table/TableBody.d.ts.map +1 -1
- package/build/types/object-table/TableCell.d.ts.map +1 -1
- package/build/types/object-table/TableHeader.d.ts.map +1 -1
- package/build/types/object-table/TableHeaderContent.d.ts +7 -0
- package/build/types/object-table/TableHeaderContent.d.ts.map +1 -0
- package/build/types/object-table/TableHeaderWithPopover.d.ts +13 -0
- package/build/types/object-table/TableHeaderWithPopover.d.ts.map +1 -0
- package/build/types/object-table/TableRow.d.ts.map +1 -1
- package/build/types/object-table/hooks/__tests__/useColumnPinning.test.d.ts.map +1 -0
- package/build/types/object-table/hooks/__tests__/useColumnVisibility.test.d.ts +1 -0
- package/build/types/object-table/hooks/__tests__/useColumnVisibility.test.d.ts.map +1 -0
- package/build/types/object-table/hooks/__tests__/useTableSorting.test.d.ts +1 -0
- package/build/types/object-table/hooks/__tests__/useTableSorting.test.d.ts.map +1 -0
- package/build/types/object-table/hooks/useColumnPinning.d.ts +22 -0
- package/build/types/object-table/hooks/useColumnPinning.d.ts.map +1 -0
- package/build/types/object-table/hooks/{useDefaultTableStates.d.ts → useColumnVisibility.d.ts} +3 -6
- package/build/types/object-table/hooks/useColumnVisibility.d.ts.map +1 -0
- package/build/types/object-table/hooks/useObjectTableData.d.ts +2 -1
- package/build/types/object-table/hooks/useObjectTableData.d.ts.map +1 -1
- package/build/types/object-table/hooks/useSelectionColumn.d.ts +0 -1
- package/build/types/object-table/hooks/useSelectionColumn.d.ts.map +1 -1
- package/build/types/object-table/hooks/useTableSorting.d.ts +22 -0
- package/build/types/object-table/hooks/useTableSorting.d.ts.map +1 -0
- package/build/types/object-table/utils/constants.d.ts +1 -0
- package/build/types/object-table/utils/constants.d.ts.map +1 -0
- package/build/types/object-table/utils/getColumnPinningStyles.d.ts +7 -0
- package/build/types/object-table/utils/getColumnPinningStyles.d.ts.map +1 -0
- package/build/types/public/experimental.d.ts +2 -0
- package/build/types/public/experimental.d.ts.map +1 -1
- package/package.json +8 -8
- package/build/browser/object-table/hooks/__tests__/useDefaultTableStates.test.js.map +0 -1
- package/build/browser/object-table/hooks/useDefaultTableStates.js.map +0 -1
- package/build/esm/object-table/hooks/__tests__/useDefaultTableStates.test.js.map +0 -1
- package/build/esm/object-table/hooks/useDefaultTableStates.js.map +0 -1
- package/build/types/object-table/hooks/__tests__/useDefaultTableStates.test.d.ts.map +0 -1
- package/build/types/object-table/hooks/useDefaultTableStates.d.ts.map +0 -1
- /package/build/types/object-table/hooks/__tests__/{useDefaultTableStates.test.d.ts → useColumnPinning.test.d.ts} +0 -0
|
@@ -16,6 +16,7 @@
|
|
|
16
16
|
|
|
17
17
|
import React, { useCallback } from "react";
|
|
18
18
|
import { TableCell } from "./TableCell.js";
|
|
19
|
+
import styles from "./TableRow.module.css";
|
|
19
20
|
export function TableRow({
|
|
20
21
|
row,
|
|
21
22
|
virtualRow,
|
|
@@ -26,11 +27,11 @@ export function TableRow({
|
|
|
26
27
|
onRowClick?.(row.original);
|
|
27
28
|
}, [onRowClick, row.original]);
|
|
28
29
|
return /*#__PURE__*/React.createElement("tr", {
|
|
30
|
+
"data-selected": row.getIsSelected(),
|
|
31
|
+
className: styles.osdkTableRow,
|
|
29
32
|
style: {
|
|
30
|
-
position: "absolute",
|
|
31
33
|
height: `${virtualRow.size}px`,
|
|
32
|
-
transform: `translateY(${virtualRow.start}px)
|
|
33
|
-
display: "flex"
|
|
34
|
+
transform: `translateY(${virtualRow.start}px)`
|
|
34
35
|
},
|
|
35
36
|
onClick: handleClick
|
|
36
37
|
}, row.getVisibleCells().map(cell => /*#__PURE__*/React.createElement(TableCell, {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TableRow.js","names":["React","useCallback","TableCell","TableRow","row","virtualRow","onRowClick","renderCellContextMenu","handleClick","original","createElement","
|
|
1
|
+
{"version":3,"file":"TableRow.js","names":["React","useCallback","TableCell","styles","TableRow","row","virtualRow","onRowClick","renderCellContextMenu","handleClick","original","createElement","getIsSelected","className","osdkTableRow","style","height","size","transform","start","onClick","getVisibleCells","map","cell","key","id"],"sources":["TableRow.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 { Cell, Row, RowData } from \"@tanstack/react-table\";\nimport type { VirtualItem } from \"@tanstack/react-virtual\";\nimport React, { useCallback } from \"react\";\nimport { TableCell } from \"./TableCell.js\";\nimport styles from \"./TableRow.module.css\";\n\ninterface TableRowProps<TData extends RowData> {\n row: Row<TData>;\n virtualRow: VirtualItem;\n onRowClick?: (row: TData) => void;\n renderCellContextMenu?: (\n row: TData,\n cell: Cell<TData, unknown>,\n ) => React.ReactNode;\n}\n\nexport function TableRow<TData extends RowData>({\n row,\n virtualRow,\n onRowClick,\n renderCellContextMenu,\n}: TableRowProps<TData>): React.ReactElement {\n const handleClick = useCallback(() => {\n onRowClick?.(row.original);\n }, [onRowClick, row.original]);\n\n return (\n <tr\n data-selected={row.getIsSelected()}\n className={styles.osdkTableRow}\n style={{\n height: `${virtualRow.size}px`,\n transform: `translateY(${virtualRow.start}px)`,\n }}\n onClick={handleClick}\n >\n {row.getVisibleCells().map((cell) => (\n <TableCell\n key={cell.id}\n cell={cell}\n renderCellContextMenu={renderCellContextMenu}\n />\n ))}\n </tr>\n );\n}\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAIA,OAAOA,KAAK,IAAIC,WAAW,QAAQ,OAAO;AAC1C,SAASC,SAAS,QAAQ,gBAAgB;AAC1C,OAAOC,MAAM,MAAM,uBAAuB;AAY1C,OAAO,SAASC,QAAQA,CAAwB;EAC9CC,GAAG;EACHC,UAAU;EACVC,UAAU;EACVC;AACoB,CAAC,EAAsB;EAC3C,MAAMC,WAAW,GAAGR,WAAW,CAAC,MAAM;IACpCM,UAAU,GAAGF,GAAG,CAACK,QAAQ,CAAC;EAC5B,CAAC,EAAE,CAACH,UAAU,EAAEF,GAAG,CAACK,QAAQ,CAAC,CAAC;EAE9B,oBACEV,KAAA,CAAAW,aAAA;IACE,iBAAeN,GAAG,CAACO,aAAa,CAAC,CAAE;IACnCC,SAAS,EAAEV,MAAM,CAACW,YAAa;IAC/BC,KAAK,EAAE;MACLC,MAAM,EAAE,GAAGV,UAAU,CAACW,IAAI,IAAI;MAC9BC,SAAS,EAAE,cAAcZ,UAAU,CAACa,KAAK;IAC3C,CAAE;IACFC,OAAO,EAAEX;EAAY,GAEpBJ,GAAG,CAACgB,eAAe,CAAC,CAAC,CAACC,GAAG,CAAEC,IAAI,iBAC9BvB,KAAA,CAAAW,aAAA,CAACT,SAAS;IACRsB,GAAG,EAAED,IAAI,CAACE,EAAG;IACbF,IAAI,EAAEA,IAAK;IACXf,qBAAqB,EAAEA;EAAsB,CAC9C,CACF,CACC,CAAC;AAET","ignoreList":[]}
|
|
@@ -0,0 +1,60 @@
|
|
|
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
|
+
.osdkTableRow {
|
|
18
|
+
position: absolute;
|
|
19
|
+
display: flex;
|
|
20
|
+
background-color: var(--osdk-table-row-bg-default);
|
|
21
|
+
border-top: var(--osdk-table-row-divider);
|
|
22
|
+
border-bottom: var(--osdk-table-border-width) solid transparent;
|
|
23
|
+
|
|
24
|
+
&:last-child {
|
|
25
|
+
border-bottom: var(--osdk-table-border);
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
/* Zebra rows */
|
|
29
|
+
&:nth-child(even) {
|
|
30
|
+
background-color: var(
|
|
31
|
+
--osdk-table-row-bg-alternate,
|
|
32
|
+
var(--osdk-table-row-bg-default)
|
|
33
|
+
);
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
&:hover {
|
|
37
|
+
z-index: 1;
|
|
38
|
+
background-color: var(
|
|
39
|
+
--osdk-table-row-bg-hover,
|
|
40
|
+
var(--bp-surface-colorHover-default)
|
|
41
|
+
);
|
|
42
|
+
border-top-color: var(--osdk-table-row-border-color-hover);
|
|
43
|
+
border-bottom-color: var(--osdk-table-row-border-color-hover);
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
&[data-selected="true"] {
|
|
47
|
+
z-index: 2;
|
|
48
|
+
background-color: var(--osdk-table-row-bg-active);
|
|
49
|
+
border-top-color: var(--osdk-table-row-border-color-active);
|
|
50
|
+
border-bottom-color: var(--osdk-table-row-border-color-active);
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
&[data-selected="true"] + &[data-selected="true"] {
|
|
54
|
+
border-top-color: transparent;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
&[data-selected="true"]:has(+ &[data-selected="true"]) {
|
|
58
|
+
border-bottom-color: transparent;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
@@ -0,0 +1,266 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright 2025 Palantir Technologies, Inc. All rights reserved.
|
|
3
|
+
*
|
|
4
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
* you may not use this file except in compliance with the License.
|
|
6
|
+
* You may obtain a copy of the License at
|
|
7
|
+
*
|
|
8
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
*
|
|
10
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
* See the License for the specific language governing permissions and
|
|
14
|
+
* limitations under the License.
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
import { act, renderHook } from "@testing-library/react";
|
|
18
|
+
import { describe, expect, it, vi } from "vitest";
|
|
19
|
+
import { SELECTION_COLUMN_ID } from "../../utils/constants.js";
|
|
20
|
+
import { useColumnPinning } from "../useColumnPinning.js";
|
|
21
|
+
const TestObjectType = {
|
|
22
|
+
type: "object",
|
|
23
|
+
apiName: "TestObject"
|
|
24
|
+
};
|
|
25
|
+
function createColumnDef(id, pinned) {
|
|
26
|
+
return {
|
|
27
|
+
locator: {
|
|
28
|
+
type: "property",
|
|
29
|
+
id: id
|
|
30
|
+
},
|
|
31
|
+
pinned
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
describe("useColumnPinning", () => {
|
|
35
|
+
describe("initialization", () => {
|
|
36
|
+
it("initializes with empty pinning state when no columnDefinitions provided", () => {
|
|
37
|
+
const {
|
|
38
|
+
result
|
|
39
|
+
} = renderHook(() => useColumnPinning({
|
|
40
|
+
columnDefinitions: undefined
|
|
41
|
+
}));
|
|
42
|
+
expect(result.current.columnPinning).toEqual({
|
|
43
|
+
left: [],
|
|
44
|
+
right: []
|
|
45
|
+
});
|
|
46
|
+
});
|
|
47
|
+
it("initializes with empty pinning state when columnDefinitions has no pinned columns", () => {
|
|
48
|
+
const columnDefinitions = [createColumnDef("name")];
|
|
49
|
+
const {
|
|
50
|
+
result
|
|
51
|
+
} = renderHook(() => useColumnPinning({
|
|
52
|
+
columnDefinitions
|
|
53
|
+
}));
|
|
54
|
+
expect(result.current.columnPinning).toEqual({
|
|
55
|
+
left: [],
|
|
56
|
+
right: []
|
|
57
|
+
});
|
|
58
|
+
});
|
|
59
|
+
it("initializes with default pinning from columnDefinitions", () => {
|
|
60
|
+
const columnDefinitions = [createColumnDef("firstName", "left"), createColumnDef("lastName", "left"), createColumnDef("age", "none"), createColumnDef("email", "right")];
|
|
61
|
+
const {
|
|
62
|
+
result
|
|
63
|
+
} = renderHook(() => useColumnPinning({
|
|
64
|
+
columnDefinitions
|
|
65
|
+
}));
|
|
66
|
+
expect(result.current.columnPinning).toEqual({
|
|
67
|
+
left: ["firstName", "lastName"],
|
|
68
|
+
right: ["email"]
|
|
69
|
+
});
|
|
70
|
+
});
|
|
71
|
+
it("adds selection column to left pinning when hasSelectionColumn is true", () => {
|
|
72
|
+
const columnDefinitions = [createColumnDef("name", "left")];
|
|
73
|
+
const {
|
|
74
|
+
result
|
|
75
|
+
} = renderHook(() => useColumnPinning({
|
|
76
|
+
columnDefinitions,
|
|
77
|
+
hasSelectionColumn: true
|
|
78
|
+
}));
|
|
79
|
+
expect(result.current.columnPinning).toEqual({
|
|
80
|
+
left: [SELECTION_COLUMN_ID, "name"],
|
|
81
|
+
right: []
|
|
82
|
+
});
|
|
83
|
+
});
|
|
84
|
+
it("does not add selection column when hasSelectionColumn is false", () => {
|
|
85
|
+
const columnDefinitions = [createColumnDef("name", "left")];
|
|
86
|
+
const {
|
|
87
|
+
result
|
|
88
|
+
} = renderHook(() => useColumnPinning({
|
|
89
|
+
columnDefinitions,
|
|
90
|
+
hasSelectionColumn: false
|
|
91
|
+
}));
|
|
92
|
+
expect(result.current.columnPinning).toEqual({
|
|
93
|
+
left: ["name"],
|
|
94
|
+
right: []
|
|
95
|
+
});
|
|
96
|
+
});
|
|
97
|
+
});
|
|
98
|
+
describe("onColumnPinningChange", () => {
|
|
99
|
+
it("updates column pinning state when called", () => {
|
|
100
|
+
const {
|
|
101
|
+
result
|
|
102
|
+
} = renderHook(() => useColumnPinning({
|
|
103
|
+
columnDefinitions: undefined
|
|
104
|
+
}));
|
|
105
|
+
expect(result.current.columnPinning).toEqual({
|
|
106
|
+
left: [],
|
|
107
|
+
right: []
|
|
108
|
+
});
|
|
109
|
+
act(() => {
|
|
110
|
+
result.current.onColumnPinningChange({
|
|
111
|
+
left: ["name"],
|
|
112
|
+
right: ["email"]
|
|
113
|
+
});
|
|
114
|
+
});
|
|
115
|
+
expect(result.current.columnPinning).toEqual({
|
|
116
|
+
left: ["name"],
|
|
117
|
+
right: ["email"]
|
|
118
|
+
});
|
|
119
|
+
});
|
|
120
|
+
it("calls onColumnsPinnedChanged with converted format when pinning changes", () => {
|
|
121
|
+
const onColumnsPinnedChanged = vi.fn();
|
|
122
|
+
const {
|
|
123
|
+
result
|
|
124
|
+
} = renderHook(() => useColumnPinning({
|
|
125
|
+
columnDefinitions: undefined,
|
|
126
|
+
onColumnsPinnedChanged
|
|
127
|
+
}));
|
|
128
|
+
act(() => {
|
|
129
|
+
result.current.onColumnPinningChange({
|
|
130
|
+
left: ["name", "age"],
|
|
131
|
+
right: ["email"]
|
|
132
|
+
});
|
|
133
|
+
});
|
|
134
|
+
expect(onColumnsPinnedChanged).toHaveBeenCalledWith([{
|
|
135
|
+
columnId: "name",
|
|
136
|
+
pinned: "left"
|
|
137
|
+
}, {
|
|
138
|
+
columnId: "age",
|
|
139
|
+
pinned: "left"
|
|
140
|
+
}, {
|
|
141
|
+
columnId: "email",
|
|
142
|
+
pinned: "right"
|
|
143
|
+
}]);
|
|
144
|
+
});
|
|
145
|
+
it("filters out selection column from onColumnsPinnedChanged callback", () => {
|
|
146
|
+
const onColumnsPinnedChanged = vi.fn();
|
|
147
|
+
const {
|
|
148
|
+
result
|
|
149
|
+
} = renderHook(() => useColumnPinning({
|
|
150
|
+
columnDefinitions: undefined,
|
|
151
|
+
onColumnsPinnedChanged
|
|
152
|
+
}));
|
|
153
|
+
act(() => {
|
|
154
|
+
result.current.onColumnPinningChange({
|
|
155
|
+
left: [SELECTION_COLUMN_ID, "name"],
|
|
156
|
+
right: ["email"]
|
|
157
|
+
});
|
|
158
|
+
});
|
|
159
|
+
expect(onColumnsPinnedChanged).toHaveBeenCalledWith([{
|
|
160
|
+
columnId: "name",
|
|
161
|
+
pinned: "left"
|
|
162
|
+
}, {
|
|
163
|
+
columnId: "email",
|
|
164
|
+
pinned: "right"
|
|
165
|
+
}]);
|
|
166
|
+
});
|
|
167
|
+
it("handles updater function in onColumnPinningChange", () => {
|
|
168
|
+
const onColumnsPinnedChanged = vi.fn();
|
|
169
|
+
const {
|
|
170
|
+
result
|
|
171
|
+
} = renderHook(() => useColumnPinning({
|
|
172
|
+
columnDefinitions: undefined,
|
|
173
|
+
onColumnsPinnedChanged
|
|
174
|
+
}));
|
|
175
|
+
|
|
176
|
+
// Set initial pinning
|
|
177
|
+
act(() => {
|
|
178
|
+
result.current.onColumnPinningChange({
|
|
179
|
+
left: ["name"],
|
|
180
|
+
right: []
|
|
181
|
+
});
|
|
182
|
+
});
|
|
183
|
+
|
|
184
|
+
// Pin second column
|
|
185
|
+
act(() => {
|
|
186
|
+
result.current.onColumnPinningChange(prev => ({
|
|
187
|
+
...prev,
|
|
188
|
+
right: ["email"]
|
|
189
|
+
}));
|
|
190
|
+
});
|
|
191
|
+
expect(result.current.columnPinning).toEqual({
|
|
192
|
+
left: ["name"],
|
|
193
|
+
right: ["email"]
|
|
194
|
+
});
|
|
195
|
+
expect(onColumnsPinnedChanged).toHaveBeenLastCalledWith([{
|
|
196
|
+
columnId: "name",
|
|
197
|
+
pinned: "left"
|
|
198
|
+
}, {
|
|
199
|
+
columnId: "email",
|
|
200
|
+
pinned: "right"
|
|
201
|
+
}]);
|
|
202
|
+
|
|
203
|
+
// Unpin first column
|
|
204
|
+
act(() => {
|
|
205
|
+
result.current.onColumnPinningChange(prev => ({
|
|
206
|
+
...prev,
|
|
207
|
+
left: []
|
|
208
|
+
}));
|
|
209
|
+
});
|
|
210
|
+
expect(result.current.columnPinning).toEqual({
|
|
211
|
+
left: [],
|
|
212
|
+
right: ["email"]
|
|
213
|
+
});
|
|
214
|
+
expect(onColumnsPinnedChanged).toHaveBeenLastCalledWith([{
|
|
215
|
+
columnId: "email",
|
|
216
|
+
pinned: "right"
|
|
217
|
+
}]);
|
|
218
|
+
});
|
|
219
|
+
});
|
|
220
|
+
describe("updates when props change", () => {
|
|
221
|
+
it("updates pinning state when columnDefinitions change", () => {
|
|
222
|
+
const {
|
|
223
|
+
result,
|
|
224
|
+
rerender
|
|
225
|
+
} = renderHook(({
|
|
226
|
+
columnDefinitions
|
|
227
|
+
}) => useColumnPinning({
|
|
228
|
+
columnDefinitions
|
|
229
|
+
}), {
|
|
230
|
+
initialProps: {
|
|
231
|
+
columnDefinitions: [{
|
|
232
|
+
locator: {
|
|
233
|
+
type: "property",
|
|
234
|
+
id: "name"
|
|
235
|
+
},
|
|
236
|
+
pinned: "left"
|
|
237
|
+
}]
|
|
238
|
+
}
|
|
239
|
+
});
|
|
240
|
+
expect(result.current.columnPinning).toEqual({
|
|
241
|
+
left: ["name"],
|
|
242
|
+
right: []
|
|
243
|
+
});
|
|
244
|
+
rerender({
|
|
245
|
+
columnDefinitions: [{
|
|
246
|
+
locator: {
|
|
247
|
+
type: "property",
|
|
248
|
+
id: "name"
|
|
249
|
+
},
|
|
250
|
+
pinned: "left"
|
|
251
|
+
}, {
|
|
252
|
+
locator: {
|
|
253
|
+
type: "property",
|
|
254
|
+
id: "age"
|
|
255
|
+
},
|
|
256
|
+
pinned: "right"
|
|
257
|
+
}]
|
|
258
|
+
});
|
|
259
|
+
expect(result.current.columnPinning).toEqual({
|
|
260
|
+
left: ["name"],
|
|
261
|
+
right: ["age"]
|
|
262
|
+
});
|
|
263
|
+
});
|
|
264
|
+
});
|
|
265
|
+
});
|
|
266
|
+
//# sourceMappingURL=useColumnPinning.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useColumnPinning.test.js","names":["act","renderHook","describe","expect","it","vi","SELECTION_COLUMN_ID","useColumnPinning","TestObjectType","type","apiName","createColumnDef","id","pinned","locator","result","columnDefinitions","undefined","current","columnPinning","toEqual","left","right","hasSelectionColumn","onColumnPinningChange","onColumnsPinnedChanged","fn","toHaveBeenCalledWith","columnId","prev","toHaveBeenLastCalledWith","rerender","initialProps"],"sources":["useColumnPinning.test.tsx"],"sourcesContent":["/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport type { ObjectTypeDefinition, PropertyKeys } from \"@osdk/api\";\nimport { act, renderHook } from \"@testing-library/react\";\nimport { describe, expect, it, vi } from \"vitest\";\nimport type {\n ColumnDefinition,\n ObjectTableProps,\n} from \"../../ObjectTableApi.js\";\nimport { SELECTION_COLUMN_ID } from \"../../utils/constants.js\";\nimport { useColumnPinning } from \"../useColumnPinning.js\";\n\nconst TestObjectType = {\n type: \"object\",\n apiName: \"TestObject\",\n} as const satisfies ObjectTypeDefinition;\n\ntype TestObject = typeof TestObjectType;\n\nfunction createColumnDef(\n id: string,\n pinned?: \"left\" | \"right\" | \"none\",\n): ColumnDefinition<TestObject> {\n return {\n locator: { type: \"property\", id: id as PropertyKeys<TestObject> },\n pinned,\n };\n}\n\ndescribe(\"useColumnPinning\", () => {\n describe(\"initialization\", () => {\n it(\"initializes with empty pinning state when no columnDefinitions provided\", () => {\n const { result } = renderHook(() =>\n useColumnPinning<TestObject>({\n columnDefinitions: undefined,\n })\n );\n\n expect(result.current.columnPinning).toEqual({\n left: [],\n right: [],\n });\n });\n\n it(\"initializes with empty pinning state when columnDefinitions has no pinned columns\", () => {\n const columnDefinitions = [\n createColumnDef(\"name\"),\n ];\n\n const { result } = renderHook(() =>\n useColumnPinning<TestObject>({\n columnDefinitions,\n })\n );\n\n expect(result.current.columnPinning).toEqual({\n left: [],\n right: [],\n });\n });\n\n it(\"initializes with default pinning from columnDefinitions\", () => {\n const columnDefinitions = [\n createColumnDef(\"firstName\", \"left\"),\n createColumnDef(\"lastName\", \"left\"),\n createColumnDef(\"age\", \"none\"),\n createColumnDef(\"email\", \"right\"),\n ];\n\n const { result } = renderHook(() =>\n useColumnPinning<TestObject>({\n columnDefinitions,\n })\n );\n\n expect(result.current.columnPinning).toEqual({\n left: [\"firstName\", \"lastName\"],\n right: [\"email\"],\n });\n });\n\n it(\"adds selection column to left pinning when hasSelectionColumn is true\", () => {\n const columnDefinitions = [\n createColumnDef(\"name\", \"left\"),\n ];\n\n const { result } = renderHook(() =>\n useColumnPinning<TestObject>({\n columnDefinitions,\n hasSelectionColumn: true,\n })\n );\n\n expect(result.current.columnPinning).toEqual({\n left: [SELECTION_COLUMN_ID, \"name\"],\n right: [],\n });\n });\n\n it(\"does not add selection column when hasSelectionColumn is false\", () => {\n const columnDefinitions = [\n createColumnDef(\"name\", \"left\"),\n ];\n\n const { result } = renderHook(() =>\n useColumnPinning<TestObject>({\n columnDefinitions,\n hasSelectionColumn: false,\n })\n );\n\n expect(result.current.columnPinning).toEqual({\n left: [\"name\"],\n right: [],\n });\n });\n });\n\n describe(\"onColumnPinningChange\", () => {\n it(\"updates column pinning state when called\", () => {\n const { result } = renderHook(() =>\n useColumnPinning<TestObject>({\n columnDefinitions: undefined,\n })\n );\n\n expect(result.current.columnPinning).toEqual({\n left: [],\n right: [],\n });\n\n act(() => {\n result.current.onColumnPinningChange({\n left: [\"name\"],\n right: [\"email\"],\n });\n });\n\n expect(result.current.columnPinning).toEqual({\n left: [\"name\"],\n right: [\"email\"],\n });\n });\n\n it(\"calls onColumnsPinnedChanged with converted format when pinning changes\", () => {\n const onColumnsPinnedChanged = vi.fn();\n const { result } = renderHook(() =>\n useColumnPinning<TestObject>({\n columnDefinitions: undefined,\n onColumnsPinnedChanged,\n })\n );\n\n act(() => {\n result.current.onColumnPinningChange({\n left: [\"name\", \"age\"],\n right: [\"email\"],\n });\n });\n\n expect(onColumnsPinnedChanged).toHaveBeenCalledWith([\n { columnId: \"name\", pinned: \"left\" },\n { columnId: \"age\", pinned: \"left\" },\n { columnId: \"email\", pinned: \"right\" },\n ]);\n });\n\n it(\"filters out selection column from onColumnsPinnedChanged callback\", () => {\n const onColumnsPinnedChanged = vi.fn();\n const { result } = renderHook(() =>\n useColumnPinning<TestObject>({\n columnDefinitions: undefined,\n onColumnsPinnedChanged,\n })\n );\n\n act(() => {\n result.current.onColumnPinningChange({\n left: [SELECTION_COLUMN_ID, \"name\"],\n right: [\"email\"],\n });\n });\n\n expect(onColumnsPinnedChanged).toHaveBeenCalledWith([\n { columnId: \"name\", pinned: \"left\" },\n { columnId: \"email\", pinned: \"right\" },\n ]);\n });\n\n it(\"handles updater function in onColumnPinningChange\", () => {\n const onColumnsPinnedChanged = vi.fn();\n const { result } = renderHook(() =>\n useColumnPinning<TestObject>({\n columnDefinitions: undefined,\n onColumnsPinnedChanged,\n })\n );\n\n // Set initial pinning\n act(() => {\n result.current.onColumnPinningChange({\n left: [\"name\"],\n right: [],\n });\n });\n\n // Pin second column\n act(() => {\n result.current.onColumnPinningChange((prev) => ({\n ...prev,\n right: [\"email\"],\n }));\n });\n\n expect(result.current.columnPinning).toEqual({\n left: [\"name\"],\n right: [\"email\"],\n });\n\n expect(onColumnsPinnedChanged).toHaveBeenLastCalledWith([\n { columnId: \"name\", pinned: \"left\" },\n { columnId: \"email\", pinned: \"right\" },\n ]);\n\n // Unpin first column\n act(() => {\n result.current.onColumnPinningChange((prev) => ({\n ...prev,\n left: [],\n }));\n });\n\n expect(result.current.columnPinning).toEqual({\n left: [],\n right: [\"email\"],\n });\n\n expect(onColumnsPinnedChanged).toHaveBeenLastCalledWith([\n { columnId: \"email\", pinned: \"right\" },\n ]);\n });\n });\n\n describe(\"updates when props change\", () => {\n it(\"updates pinning state when columnDefinitions change\", () => {\n const initialColumnDefinitions: ObjectTableProps<\n TestObject\n >[\"columnDefinitions\"] = [\n {\n locator: { type: \"property\", id: \"name\" as PropertyKeys<TestObject> },\n pinned: \"left\",\n },\n ];\n\n const { result, rerender } = renderHook(\n ({ columnDefinitions }) =>\n useColumnPinning<TestObject>({\n columnDefinitions,\n }),\n {\n initialProps: { columnDefinitions: initialColumnDefinitions },\n },\n );\n\n expect(result.current.columnPinning).toEqual({\n left: [\"name\"],\n right: [],\n });\n\n const newColumnDefinitions: ObjectTableProps<\n TestObject\n >[\"columnDefinitions\"] = [\n {\n locator: { type: \"property\", id: \"name\" as PropertyKeys<TestObject> },\n pinned: \"left\",\n },\n {\n locator: { type: \"property\", id: \"age\" as PropertyKeys<TestObject> },\n pinned: \"right\",\n },\n ];\n\n rerender({ columnDefinitions: newColumnDefinitions });\n\n expect(result.current.columnPinning).toEqual({\n left: [\"name\"],\n right: [\"age\"],\n });\n });\n });\n});\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAGA,SAASA,GAAG,EAAEC,UAAU,QAAQ,wBAAwB;AACxD,SAASC,QAAQ,EAAEC,MAAM,EAAEC,EAAE,EAAEC,EAAE,QAAQ,QAAQ;AAKjD,SAASC,mBAAmB,QAAQ,0BAA0B;AAC9D,SAASC,gBAAgB,QAAQ,wBAAwB;AAEzD,MAAMC,cAAc,GAAG;EACrBC,IAAI,EAAE,QAAQ;EACdC,OAAO,EAAE;AACX,CAAyC;AAIzC,SAASC,eAAeA,CACtBC,EAAU,EACVC,MAAkC,EACJ;EAC9B,OAAO;IACLC,OAAO,EAAE;MAAEL,IAAI,EAAE,UAAU;MAAEG,EAAE,EAAEA;IAA+B,CAAC;IACjEC;EACF,CAAC;AACH;AAEAX,QAAQ,CAAC,kBAAkB,EAAE,MAAM;EACjCA,QAAQ,CAAC,gBAAgB,EAAE,MAAM;IAC/BE,EAAE,CAAC,yEAAyE,EAAE,MAAM;MAClF,MAAM;QAAEW;MAAO,CAAC,GAAGd,UAAU,CAAC,MAC5BM,gBAAgB,CAAa;QAC3BS,iBAAiB,EAAEC;MACrB,CAAC,CACH,CAAC;MAEDd,MAAM,CAACY,MAAM,CAACG,OAAO,CAACC,aAAa,CAAC,CAACC,OAAO,CAAC;QAC3CC,IAAI,EAAE,EAAE;QACRC,KAAK,EAAE;MACT,CAAC,CAAC;IACJ,CAAC,CAAC;IAEFlB,EAAE,CAAC,mFAAmF,EAAE,MAAM;MAC5F,MAAMY,iBAAiB,GAAG,CACxBL,eAAe,CAAC,MAAM,CAAC,CACxB;MAED,MAAM;QAAEI;MAAO,CAAC,GAAGd,UAAU,CAAC,MAC5BM,gBAAgB,CAAa;QAC3BS;MACF,CAAC,CACH,CAAC;MAEDb,MAAM,CAACY,MAAM,CAACG,OAAO,CAACC,aAAa,CAAC,CAACC,OAAO,CAAC;QAC3CC,IAAI,EAAE,EAAE;QACRC,KAAK,EAAE;MACT,CAAC,CAAC;IACJ,CAAC,CAAC;IAEFlB,EAAE,CAAC,yDAAyD,EAAE,MAAM;MAClE,MAAMY,iBAAiB,GAAG,CACxBL,eAAe,CAAC,WAAW,EAAE,MAAM,CAAC,EACpCA,eAAe,CAAC,UAAU,EAAE,MAAM,CAAC,EACnCA,eAAe,CAAC,KAAK,EAAE,MAAM,CAAC,EAC9BA,eAAe,CAAC,OAAO,EAAE,OAAO,CAAC,CAClC;MAED,MAAM;QAAEI;MAAO,CAAC,GAAGd,UAAU,CAAC,MAC5BM,gBAAgB,CAAa;QAC3BS;MACF,CAAC,CACH,CAAC;MAEDb,MAAM,CAACY,MAAM,CAACG,OAAO,CAACC,aAAa,CAAC,CAACC,OAAO,CAAC;QAC3CC,IAAI,EAAE,CAAC,WAAW,EAAE,UAAU,CAAC;QAC/BC,KAAK,EAAE,CAAC,OAAO;MACjB,CAAC,CAAC;IACJ,CAAC,CAAC;IAEFlB,EAAE,CAAC,uEAAuE,EAAE,MAAM;MAChF,MAAMY,iBAAiB,GAAG,CACxBL,eAAe,CAAC,MAAM,EAAE,MAAM,CAAC,CAChC;MAED,MAAM;QAAEI;MAAO,CAAC,GAAGd,UAAU,CAAC,MAC5BM,gBAAgB,CAAa;QAC3BS,iBAAiB;QACjBO,kBAAkB,EAAE;MACtB,CAAC,CACH,CAAC;MAEDpB,MAAM,CAACY,MAAM,CAACG,OAAO,CAACC,aAAa,CAAC,CAACC,OAAO,CAAC;QAC3CC,IAAI,EAAE,CAACf,mBAAmB,EAAE,MAAM,CAAC;QACnCgB,KAAK,EAAE;MACT,CAAC,CAAC;IACJ,CAAC,CAAC;IAEFlB,EAAE,CAAC,gEAAgE,EAAE,MAAM;MACzE,MAAMY,iBAAiB,GAAG,CACxBL,eAAe,CAAC,MAAM,EAAE,MAAM,CAAC,CAChC;MAED,MAAM;QAAEI;MAAO,CAAC,GAAGd,UAAU,CAAC,MAC5BM,gBAAgB,CAAa;QAC3BS,iBAAiB;QACjBO,kBAAkB,EAAE;MACtB,CAAC,CACH,CAAC;MAEDpB,MAAM,CAACY,MAAM,CAACG,OAAO,CAACC,aAAa,CAAC,CAACC,OAAO,CAAC;QAC3CC,IAAI,EAAE,CAAC,MAAM,CAAC;QACdC,KAAK,EAAE;MACT,CAAC,CAAC;IACJ,CAAC,CAAC;EACJ,CAAC,CAAC;EAEFpB,QAAQ,CAAC,uBAAuB,EAAE,MAAM;IACtCE,EAAE,CAAC,0CAA0C,EAAE,MAAM;MACnD,MAAM;QAAEW;MAAO,CAAC,GAAGd,UAAU,CAAC,MAC5BM,gBAAgB,CAAa;QAC3BS,iBAAiB,EAAEC;MACrB,CAAC,CACH,CAAC;MAEDd,MAAM,CAACY,MAAM,CAACG,OAAO,CAACC,aAAa,CAAC,CAACC,OAAO,CAAC;QAC3CC,IAAI,EAAE,EAAE;QACRC,KAAK,EAAE;MACT,CAAC,CAAC;MAEFtB,GAAG,CAAC,MAAM;QACRe,MAAM,CAACG,OAAO,CAACM,qBAAqB,CAAC;UACnCH,IAAI,EAAE,CAAC,MAAM,CAAC;UACdC,KAAK,EAAE,CAAC,OAAO;QACjB,CAAC,CAAC;MACJ,CAAC,CAAC;MAEFnB,MAAM,CAACY,MAAM,CAACG,OAAO,CAACC,aAAa,CAAC,CAACC,OAAO,CAAC;QAC3CC,IAAI,EAAE,CAAC,MAAM,CAAC;QACdC,KAAK,EAAE,CAAC,OAAO;MACjB,CAAC,CAAC;IACJ,CAAC,CAAC;IAEFlB,EAAE,CAAC,yEAAyE,EAAE,MAAM;MAClF,MAAMqB,sBAAsB,GAAGpB,EAAE,CAACqB,EAAE,CAAC,CAAC;MACtC,MAAM;QAAEX;MAAO,CAAC,GAAGd,UAAU,CAAC,MAC5BM,gBAAgB,CAAa;QAC3BS,iBAAiB,EAAEC,SAAS;QAC5BQ;MACF,CAAC,CACH,CAAC;MAEDzB,GAAG,CAAC,MAAM;QACRe,MAAM,CAACG,OAAO,CAACM,qBAAqB,CAAC;UACnCH,IAAI,EAAE,CAAC,MAAM,EAAE,KAAK,CAAC;UACrBC,KAAK,EAAE,CAAC,OAAO;QACjB,CAAC,CAAC;MACJ,CAAC,CAAC;MAEFnB,MAAM,CAACsB,sBAAsB,CAAC,CAACE,oBAAoB,CAAC,CAClD;QAAEC,QAAQ,EAAE,MAAM;QAAEf,MAAM,EAAE;MAAO,CAAC,EACpC;QAAEe,QAAQ,EAAE,KAAK;QAAEf,MAAM,EAAE;MAAO,CAAC,EACnC;QAAEe,QAAQ,EAAE,OAAO;QAAEf,MAAM,EAAE;MAAQ,CAAC,CACvC,CAAC;IACJ,CAAC,CAAC;IAEFT,EAAE,CAAC,mEAAmE,EAAE,MAAM;MAC5E,MAAMqB,sBAAsB,GAAGpB,EAAE,CAACqB,EAAE,CAAC,CAAC;MACtC,MAAM;QAAEX;MAAO,CAAC,GAAGd,UAAU,CAAC,MAC5BM,gBAAgB,CAAa;QAC3BS,iBAAiB,EAAEC,SAAS;QAC5BQ;MACF,CAAC,CACH,CAAC;MAEDzB,GAAG,CAAC,MAAM;QACRe,MAAM,CAACG,OAAO,CAACM,qBAAqB,CAAC;UACnCH,IAAI,EAAE,CAACf,mBAAmB,EAAE,MAAM,CAAC;UACnCgB,KAAK,EAAE,CAAC,OAAO;QACjB,CAAC,CAAC;MACJ,CAAC,CAAC;MAEFnB,MAAM,CAACsB,sBAAsB,CAAC,CAACE,oBAAoB,CAAC,CAClD;QAAEC,QAAQ,EAAE,MAAM;QAAEf,MAAM,EAAE;MAAO,CAAC,EACpC;QAAEe,QAAQ,EAAE,OAAO;QAAEf,MAAM,EAAE;MAAQ,CAAC,CACvC,CAAC;IACJ,CAAC,CAAC;IAEFT,EAAE,CAAC,mDAAmD,EAAE,MAAM;MAC5D,MAAMqB,sBAAsB,GAAGpB,EAAE,CAACqB,EAAE,CAAC,CAAC;MACtC,MAAM;QAAEX;MAAO,CAAC,GAAGd,UAAU,CAAC,MAC5BM,gBAAgB,CAAa;QAC3BS,iBAAiB,EAAEC,SAAS;QAC5BQ;MACF,CAAC,CACH,CAAC;;MAED;MACAzB,GAAG,CAAC,MAAM;QACRe,MAAM,CAACG,OAAO,CAACM,qBAAqB,CAAC;UACnCH,IAAI,EAAE,CAAC,MAAM,CAAC;UACdC,KAAK,EAAE;QACT,CAAC,CAAC;MACJ,CAAC,CAAC;;MAEF;MACAtB,GAAG,CAAC,MAAM;QACRe,MAAM,CAACG,OAAO,CAACM,qBAAqB,CAAEK,IAAI,KAAM;UAC9C,GAAGA,IAAI;UACPP,KAAK,EAAE,CAAC,OAAO;QACjB,CAAC,CAAC,CAAC;MACL,CAAC,CAAC;MAEFnB,MAAM,CAACY,MAAM,CAACG,OAAO,CAACC,aAAa,CAAC,CAACC,OAAO,CAAC;QAC3CC,IAAI,EAAE,CAAC,MAAM,CAAC;QACdC,KAAK,EAAE,CAAC,OAAO;MACjB,CAAC,CAAC;MAEFnB,MAAM,CAACsB,sBAAsB,CAAC,CAACK,wBAAwB,CAAC,CACtD;QAAEF,QAAQ,EAAE,MAAM;QAAEf,MAAM,EAAE;MAAO,CAAC,EACpC;QAAEe,QAAQ,EAAE,OAAO;QAAEf,MAAM,EAAE;MAAQ,CAAC,CACvC,CAAC;;MAEF;MACAb,GAAG,CAAC,MAAM;QACRe,MAAM,CAACG,OAAO,CAACM,qBAAqB,CAAEK,IAAI,KAAM;UAC9C,GAAGA,IAAI;UACPR,IAAI,EAAE;QACR,CAAC,CAAC,CAAC;MACL,CAAC,CAAC;MAEFlB,MAAM,CAACY,MAAM,CAACG,OAAO,CAACC,aAAa,CAAC,CAACC,OAAO,CAAC;QAC3CC,IAAI,EAAE,EAAE;QACRC,KAAK,EAAE,CAAC,OAAO;MACjB,CAAC,CAAC;MAEFnB,MAAM,CAACsB,sBAAsB,CAAC,CAACK,wBAAwB,CAAC,CACtD;QAAEF,QAAQ,EAAE,OAAO;QAAEf,MAAM,EAAE;MAAQ,CAAC,CACvC,CAAC;IACJ,CAAC,CAAC;EACJ,CAAC,CAAC;EAEFX,QAAQ,CAAC,2BAA2B,EAAE,MAAM;IAC1CE,EAAE,CAAC,qDAAqD,EAAE,MAAM;MAU9D,MAAM;QAAEW,MAAM;QAAEgB;MAAS,CAAC,GAAG9B,UAAU,CACrC,CAAC;QAAEe;MAAkB,CAAC,KACpBT,gBAAgB,CAAa;QAC3BS;MACF,CAAC,CAAC,EACJ;QACEgB,YAAY,EAAE;UAAEhB,iBAAiB,EAbZ,CACvB;YACEF,OAAO,EAAE;cAAEL,IAAI,EAAE,UAAU;cAAEG,EAAE,EAAE;YAAmC,CAAC;YACrEC,MAAM,EAAE;UACV,CAAC;QAS6D;MAC9D,CACF,CAAC;MAEDV,MAAM,CAACY,MAAM,CAACG,OAAO,CAACC,aAAa,CAAC,CAACC,OAAO,CAAC;QAC3CC,IAAI,EAAE,CAAC,MAAM,CAAC;QACdC,KAAK,EAAE;MACT,CAAC,CAAC;MAeFS,QAAQ,CAAC;QAAEf,iBAAiB,EAXH,CACvB;UACEF,OAAO,EAAE;YAAEL,IAAI,EAAE,UAAU;YAAEG,EAAE,EAAE;UAAmC,CAAC;UACrEC,MAAM,EAAE;QACV,CAAC,EACD;UACEC,OAAO,EAAE;YAAEL,IAAI,EAAE,UAAU;YAAEG,EAAE,EAAE;UAAkC,CAAC;UACpEC,MAAM,EAAE;QACV,CAAC;MAGgD,CAAC,CAAC;MAErDV,MAAM,CAACY,MAAM,CAACG,OAAO,CAACC,aAAa,CAAC,CAACC,OAAO,CAAC;QAC3CC,IAAI,EAAE,CAAC,MAAM,CAAC;QACdC,KAAK,EAAE,CAAC,KAAK;MACf,CAAC,CAAC;IACJ,CAAC,CAAC;EACJ,CAAC,CAAC;AACJ,CAAC,CAAC","ignoreList":[]}
|
|
@@ -16,19 +16,19 @@
|
|
|
16
16
|
|
|
17
17
|
import { renderHook, waitFor } from "@testing-library/react";
|
|
18
18
|
import { describe, expect, it } from "vitest";
|
|
19
|
-
import {
|
|
19
|
+
import { useColumnVisibility } from "../useColumnVisibility.js";
|
|
20
20
|
const TestObjectType = {
|
|
21
21
|
type: "object",
|
|
22
22
|
apiName: "TestObject"
|
|
23
23
|
};
|
|
24
|
-
describe(
|
|
24
|
+
describe(useColumnVisibility, () => {
|
|
25
25
|
it("returns undefined columnVisibility when no columnDefinitions provided", () => {
|
|
26
26
|
const {
|
|
27
27
|
result
|
|
28
|
-
} = renderHook(() =>
|
|
28
|
+
} = renderHook(() => useColumnVisibility({
|
|
29
29
|
columnDefinitions: undefined
|
|
30
30
|
}));
|
|
31
|
-
expect(result.current
|
|
31
|
+
expect(result.current).toBeUndefined();
|
|
32
32
|
});
|
|
33
33
|
it("returns empty columnVisibility when columnDefinitions have no isVisible properties", () => {
|
|
34
34
|
const columnDefinitions = [{
|
|
@@ -44,10 +44,10 @@ describe(useDefaultTableStates, () => {
|
|
|
44
44
|
}];
|
|
45
45
|
const {
|
|
46
46
|
result
|
|
47
|
-
} = renderHook(() =>
|
|
47
|
+
} = renderHook(() => useColumnVisibility({
|
|
48
48
|
columnDefinitions
|
|
49
49
|
}));
|
|
50
|
-
expect(result.current
|
|
50
|
+
expect(result.current).toEqual({});
|
|
51
51
|
});
|
|
52
52
|
it("handles mixed column types with different visibility states", async () => {
|
|
53
53
|
const columnDefinitions = [{
|
|
@@ -77,11 +77,11 @@ describe(useDefaultTableStates, () => {
|
|
|
77
77
|
}];
|
|
78
78
|
const {
|
|
79
79
|
result
|
|
80
|
-
} = renderHook(() =>
|
|
80
|
+
} = renderHook(() => useColumnVisibility({
|
|
81
81
|
columnDefinitions
|
|
82
82
|
}));
|
|
83
83
|
await waitFor(() => {
|
|
84
|
-
expect(result.current
|
|
84
|
+
expect(result.current).toEqual({
|
|
85
85
|
name: true,
|
|
86
86
|
myFunction: false,
|
|
87
87
|
myRdp: true
|
|
@@ -94,7 +94,7 @@ describe(useDefaultTableStates, () => {
|
|
|
94
94
|
rerender
|
|
95
95
|
} = renderHook(({
|
|
96
96
|
columnDefinitions
|
|
97
|
-
}) =>
|
|
97
|
+
}) => useColumnVisibility({
|
|
98
98
|
columnDefinitions
|
|
99
99
|
}), {
|
|
100
100
|
initialProps: {
|
|
@@ -108,7 +108,7 @@ describe(useDefaultTableStates, () => {
|
|
|
108
108
|
}
|
|
109
109
|
});
|
|
110
110
|
await waitFor(() => {
|
|
111
|
-
expect(result.current
|
|
111
|
+
expect(result.current).toEqual({
|
|
112
112
|
name: true
|
|
113
113
|
});
|
|
114
114
|
});
|
|
@@ -128,7 +128,7 @@ describe(useDefaultTableStates, () => {
|
|
|
128
128
|
}]
|
|
129
129
|
});
|
|
130
130
|
await waitFor(() => {
|
|
131
|
-
expect(result.current
|
|
131
|
+
expect(result.current).toEqual({
|
|
132
132
|
name: false,
|
|
133
133
|
email: true
|
|
134
134
|
});
|
|
@@ -160,19 +160,19 @@ describe(useDefaultTableStates, () => {
|
|
|
160
160
|
}];
|
|
161
161
|
const {
|
|
162
162
|
result
|
|
163
|
-
} = renderHook(() =>
|
|
163
|
+
} = renderHook(() => useColumnVisibility({
|
|
164
164
|
columnDefinitions
|
|
165
165
|
}));
|
|
166
166
|
await waitFor(() => {
|
|
167
|
-
expect(result.current
|
|
167
|
+
expect(result.current).toEqual({
|
|
168
168
|
name: true,
|
|
169
169
|
age: false
|
|
170
170
|
});
|
|
171
171
|
});
|
|
172
172
|
|
|
173
173
|
// Verify that columns without isVisible are not in the state
|
|
174
|
-
expect(result.current
|
|
175
|
-
expect(result.current
|
|
174
|
+
expect(result.current).not.toHaveProperty("email");
|
|
175
|
+
expect(result.current).not.toHaveProperty("id");
|
|
176
176
|
});
|
|
177
177
|
});
|
|
178
|
-
//# sourceMappingURL=
|
|
178
|
+
//# sourceMappingURL=useColumnVisibility.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useColumnVisibility.test.js","names":["renderHook","waitFor","describe","expect","it","useColumnVisibility","TestObjectType","type","apiName","result","columnDefinitions","undefined","current","toBeUndefined","locator","id","toEqual","isVisible","creator","name","myFunction","myRdp","rerender","initialProps","email","age","not","toHaveProperty"],"sources":["useColumnVisibility.test.tsx"],"sourcesContent":["/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport type {\n DerivedProperty,\n ObjectTypeDefinition,\n PropertyKeys,\n QueryDefinition,\n SimplePropertyDef,\n} from \"@osdk/api\";\nimport { renderHook, waitFor } from \"@testing-library/react\";\nimport { describe, expect, it } from \"vitest\";\nimport type { ColumnDefinition } from \"../../ObjectTableApi.js\";\nimport { useColumnVisibility } from \"../useColumnVisibility.js\";\n\nconst TestObjectType = {\n type: \"object\",\n apiName: \"TestObject\",\n} as const satisfies ObjectTypeDefinition;\n\ntype TestObject = typeof TestObjectType;\ntype TestObjectKeys = PropertyKeys<TestObject>;\n\ndescribe(useColumnVisibility, () => {\n it(\"returns undefined columnVisibility when no columnDefinitions provided\", () => {\n const { result } = renderHook(() =>\n useColumnVisibility({\n columnDefinitions: undefined,\n })\n );\n\n expect(result.current).toBeUndefined();\n });\n\n it(\"returns empty columnVisibility when columnDefinitions have no isVisible properties\", () => {\n const columnDefinitions: Array<ColumnDefinition<TestObject, {}, {}>> = [\n {\n locator: { type: \"property\", id: \"name\" as TestObjectKeys },\n },\n {\n locator: { type: \"property\", id: \"email\" as TestObjectKeys },\n },\n ];\n\n const { result } = renderHook(() =>\n useColumnVisibility({\n columnDefinitions,\n })\n );\n\n expect(result.current).toEqual({});\n });\n\n it(\"handles mixed column types with different visibility states\", async () => {\n const mockRdpCreator = (() => ({})) as unknown as DerivedProperty.Creator<\n TestObject,\n SimplePropertyDef\n >;\n\n const columnDefinitions: Array<\n ColumnDefinition<\n TestObject,\n { myRdp: SimplePropertyDef },\n { myFunction: QueryDefinition<{}> }\n >\n > = [\n {\n locator: { type: \"property\", id: \"name\" as TestObjectKeys },\n isVisible: true,\n },\n {\n locator: { type: \"function\", id: \"myFunction\" },\n isVisible: false,\n },\n {\n locator: { type: \"rdp\", id: \"myRdp\", creator: mockRdpCreator },\n isVisible: true,\n },\n {\n locator: { type: \"property\", id: \"email\" as TestObjectKeys },\n },\n ];\n\n const { result } = renderHook(() =>\n useColumnVisibility({\n columnDefinitions,\n })\n );\n\n await waitFor(() => {\n expect(result.current).toEqual({\n name: true,\n myFunction: false,\n myRdp: true,\n });\n });\n });\n\n it(\"updates columnVisibility when columnDefinitions change\", async () => {\n const initialColumnDefinitions: Array<\n ColumnDefinition<TestObject, {}, {}>\n > = [\n {\n locator: { type: \"property\", id: \"name\" as TestObjectKeys },\n isVisible: true,\n },\n ];\n\n const { result, rerender } = renderHook(\n ({ columnDefinitions }) =>\n useColumnVisibility({\n columnDefinitions,\n }),\n {\n initialProps: { columnDefinitions: initialColumnDefinitions },\n },\n );\n\n await waitFor(() => {\n expect(result.current).toEqual({\n name: true,\n });\n });\n\n const updatedColumnDefinitions: Array<\n ColumnDefinition<TestObject, {}, {}>\n > = [\n {\n locator: { type: \"property\", id: \"name\" as TestObjectKeys },\n isVisible: false,\n },\n {\n locator: { type: \"property\", id: \"email\" as TestObjectKeys },\n isVisible: true,\n },\n ];\n\n rerender({ columnDefinitions: updatedColumnDefinitions });\n\n await waitFor(() => {\n expect(result.current).toEqual({\n name: false,\n email: true,\n });\n });\n });\n\n it(\"only includes columns with explicit isVisible in the visibility state\", async () => {\n const columnDefinitions: Array<ColumnDefinition<TestObject, {}, {}>> = [\n {\n locator: { type: \"property\", id: \"name\" as TestObjectKeys },\n isVisible: true,\n },\n {\n locator: { type: \"property\", id: \"email\" as TestObjectKeys },\n },\n {\n locator: { type: \"property\", id: \"age\" as TestObjectKeys },\n isVisible: false,\n },\n {\n locator: { type: \"property\", id: \"id\" as TestObjectKeys },\n },\n ];\n\n const { result } = renderHook(() =>\n useColumnVisibility({\n columnDefinitions,\n })\n );\n\n await waitFor(() => {\n expect(result.current).toEqual({\n name: true,\n age: false,\n });\n });\n\n // Verify that columns without isVisible are not in the state\n expect(result.current).not.toHaveProperty(\"email\");\n expect(result.current).not.toHaveProperty(\"id\");\n });\n});\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -16,7 +16,8 @@
|
|
|
16
16
|
|
|
17
17
|
import { renderHook } from "@testing-library/react";
|
|
18
18
|
import { describe, expect, it, vi } from "vitest";
|
|
19
|
-
import { SELECTION_COLUMN_ID
|
|
19
|
+
import { SELECTION_COLUMN_ID } from "../../utils/constants.js";
|
|
20
|
+
import { useSelectionColumn } from "../useSelectionColumn.js";
|
|
20
21
|
const TestObjectType = {
|
|
21
22
|
type: "object",
|
|
22
23
|
apiName: "TestObject"
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useSelectionColumn.test.js","names":["renderHook","describe","expect","it","vi","SELECTION_COLUMN_ID","useSelectionColumn","TestObjectType","type","apiName","result","selectionMode","isAllSelected","hasSelection","onToggleAll","fn","onToggleRow","current","toBeNull","not","toMatchObject","id","size","minSize","maxSize","enableSorting","enableResizing","columnDef","headerResult","header","cell","toBeDefined","rerender","initialProps","firstResult","toBe"],"sources":["useSelectionColumn.test.tsx"],"sourcesContent":["/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport type { ObjectTypeDefinition } from \"@osdk/api\";\nimport { renderHook } from \"@testing-library/react\";\nimport { describe, expect, it, vi } from \"vitest\";\nimport {\n SELECTION_COLUMN_ID,\n useSelectionColumn,\n} from \"../useSelectionColumn.js\";\n\nconst TestObjectType = {\n type: \"object\",\n apiName: \"TestObject\",\n} as const satisfies ObjectTypeDefinition;\n\ntype TestObject = typeof TestObjectType;\n\ndescribe(\"useSelectionColumn\", () => {\n describe(\"selectionMode: 'none'\", () => {\n it(\"returns null when selection is disabled\", () => {\n const { result } = renderHook(() =>\n useSelectionColumn<TestObject>({\n selectionMode: \"none\",\n isAllSelected: false,\n hasSelection: false,\n onToggleAll: vi.fn(),\n onToggleRow: vi.fn(),\n })\n );\n\n expect(result.current).toBeNull();\n });\n\n it(\"returns null even with selection state\", () => {\n const { result } = renderHook(() =>\n useSelectionColumn<TestObject>({\n selectionMode: \"none\",\n isAllSelected: true,\n hasSelection: true,\n onToggleAll: vi.fn(),\n onToggleRow: vi.fn(),\n })\n );\n\n expect(result.current).toBeNull();\n });\n });\n\n describe(\"selectionMode: 'single'\", () => {\n it(\"returns column definition with correct properties\", () => {\n const { result } = renderHook(() =>\n useSelectionColumn<TestObject>({\n selectionMode: \"single\",\n isAllSelected: false,\n hasSelection: false,\n onToggleAll: vi.fn(),\n onToggleRow: vi.fn(),\n })\n );\n\n expect(result.current).not.toBeNull();\n expect(result.current).toMatchObject({\n id: SELECTION_COLUMN_ID,\n size: 50,\n minSize: 50,\n maxSize: 50,\n enableSorting: false,\n enableResizing: false,\n });\n });\n\n it(\"has header function that returns null for single mode\", () => {\n const { result } = renderHook(() =>\n useSelectionColumn<TestObject>({\n selectionMode: \"single\",\n isAllSelected: false,\n hasSelection: false,\n onToggleAll: vi.fn(),\n onToggleRow: vi.fn(),\n })\n );\n\n const columnDef = result.current;\n expect(columnDef).not.toBeNull();\n\n // Call header function\n const headerResult = typeof columnDef?.header === \"function\"\n ? columnDef.header({} as any)\n : null;\n\n expect(headerResult).toBeNull();\n });\n\n it(\"has cell function defined\", () => {\n const onToggleRow = vi.fn();\n const { result } = renderHook(() =>\n useSelectionColumn<TestObject>({\n selectionMode: \"single\",\n isAllSelected: false,\n hasSelection: false,\n onToggleAll: vi.fn(),\n onToggleRow,\n })\n );\n\n const columnDef = result.current;\n expect(columnDef).not.toBeNull();\n expect(columnDef?.cell).toBeDefined();\n });\n\n it(\"memoizes column definition based on dependencies\", () => {\n const onToggleRow = vi.fn();\n const onToggleAll = vi.fn();\n\n const { result, rerender } = renderHook(\n ({ isAllSelected, hasSelection }) =>\n useSelectionColumn<TestObject>({\n selectionMode: \"single\",\n isAllSelected,\n hasSelection,\n onToggleAll,\n onToggleRow,\n }),\n {\n initialProps: { isAllSelected: false, hasSelection: false },\n },\n );\n\n const firstResult = result.current;\n\n // Rerender with same props\n rerender({ isAllSelected: false, hasSelection: false });\n expect(result.current).toBe(firstResult);\n\n // Rerender with different hasSelection\n rerender({ isAllSelected: false, hasSelection: true });\n expect(result.current).not.toBe(firstResult);\n });\n });\n\n describe(\"selectionMode: 'multiple'\", () => {\n it(\"returns column definition with correct properties\", () => {\n const { result } = renderHook(() =>\n useSelectionColumn<TestObject>({\n selectionMode: \"multiple\",\n isAllSelected: false,\n hasSelection: false,\n onToggleAll: vi.fn(),\n onToggleRow: vi.fn(),\n })\n );\n\n expect(result.current).not.toBeNull();\n expect(result.current).toMatchObject({\n id: SELECTION_COLUMN_ID,\n size: 50,\n minSize: 50,\n maxSize: 50,\n enableSorting: false,\n enableResizing: false,\n });\n });\n\n it(\"has header function that renders SelectionHeaderCell\", () => {\n const onToggleAll = vi.fn();\n const { result } = renderHook(() =>\n useSelectionColumn<TestObject>({\n selectionMode: \"multiple\",\n isAllSelected: false,\n hasSelection: false,\n onToggleAll,\n onToggleRow: vi.fn(),\n })\n );\n\n const columnDef = result.current;\n expect(columnDef).not.toBeNull();\n\n // Render header\n const headerResult = typeof columnDef?.header === \"function\"\n ? columnDef.header({} as any)\n : null;\n\n expect(headerResult).not.toBeNull();\n });\n\n it(\"has cell function defined\", () => {\n const onToggleRow = vi.fn();\n const { result } = renderHook(() =>\n useSelectionColumn<TestObject>({\n selectionMode: \"multiple\",\n isAllSelected: false,\n hasSelection: false,\n onToggleAll: vi.fn(),\n onToggleRow,\n })\n );\n\n const columnDef = result.current;\n expect(columnDef).not.toBeNull();\n expect(columnDef?.cell).toBeDefined();\n });\n\n it(\"memoizes column when dependencies don't change\", () => {\n const onToggleRow = vi.fn();\n const onToggleAll = vi.fn();\n\n const { result, rerender } = renderHook(\n ({ isAllSelected, hasSelection }) =>\n useSelectionColumn<TestObject>({\n selectionMode: \"multiple\",\n isAllSelected,\n hasSelection,\n onToggleAll,\n onToggleRow,\n }),\n {\n initialProps: { isAllSelected: false, hasSelection: false },\n },\n );\n\n const firstResult = result.current;\n\n // Rerender with same props\n rerender({ isAllSelected: false, hasSelection: false });\n expect(result.current).toBe(firstResult);\n });\n\n it(\"updates column when dependencies change\", () => {\n const onToggleRow = vi.fn();\n const onToggleAll = vi.fn();\n\n const { result, rerender } = renderHook(\n ({ isAllSelected, hasSelection }) =>\n useSelectionColumn<TestObject>({\n selectionMode: \"multiple\",\n isAllSelected,\n hasSelection,\n onToggleAll,\n onToggleRow,\n }),\n {\n initialProps: { isAllSelected: false, hasSelection: false },\n },\n );\n\n const firstResult = result.current;\n\n // Change isAllSelected\n rerender({ isAllSelected: true, hasSelection: true });\n expect(result.current).not.toBe(firstResult);\n });\n });\n\n describe(\"column definition structure\", () => {\n it(\"disables sorting and resizing\", () => {\n const { result } = renderHook(() =>\n useSelectionColumn<TestObject>({\n selectionMode: \"multiple\",\n isAllSelected: false,\n hasSelection: false,\n onToggleAll: vi.fn(),\n onToggleRow: vi.fn(),\n })\n );\n\n const columnDef = result.current;\n expect(columnDef?.enableSorting).toBe(false);\n expect(columnDef?.enableResizing).toBe(false);\n });\n });\n});\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"useSelectionColumn.test.js","names":["renderHook","describe","expect","it","vi","SELECTION_COLUMN_ID","useSelectionColumn","TestObjectType","type","apiName","result","selectionMode","isAllSelected","hasSelection","onToggleAll","fn","onToggleRow","current","toBeNull","not","toMatchObject","id","size","minSize","maxSize","enableSorting","enableResizing","columnDef","headerResult","header","cell","toBeDefined","rerender","initialProps","firstResult","toBe"],"sources":["useSelectionColumn.test.tsx"],"sourcesContent":["/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport type { ObjectTypeDefinition } from \"@osdk/api\";\nimport { renderHook } from \"@testing-library/react\";\nimport { describe, expect, it, vi } from \"vitest\";\nimport { SELECTION_COLUMN_ID } from \"../../utils/constants.js\";\nimport { useSelectionColumn } from \"../useSelectionColumn.js\";\n\nconst TestObjectType = {\n type: \"object\",\n apiName: \"TestObject\",\n} as const satisfies ObjectTypeDefinition;\n\ntype TestObject = typeof TestObjectType;\n\ndescribe(\"useSelectionColumn\", () => {\n describe(\"selectionMode: 'none'\", () => {\n it(\"returns null when selection is disabled\", () => {\n const { result } = renderHook(() =>\n useSelectionColumn<TestObject>({\n selectionMode: \"none\",\n isAllSelected: false,\n hasSelection: false,\n onToggleAll: vi.fn(),\n onToggleRow: vi.fn(),\n })\n );\n\n expect(result.current).toBeNull();\n });\n\n it(\"returns null even with selection state\", () => {\n const { result } = renderHook(() =>\n useSelectionColumn<TestObject>({\n selectionMode: \"none\",\n isAllSelected: true,\n hasSelection: true,\n onToggleAll: vi.fn(),\n onToggleRow: vi.fn(),\n })\n );\n\n expect(result.current).toBeNull();\n });\n });\n\n describe(\"selectionMode: 'single'\", () => {\n it(\"returns column definition with correct properties\", () => {\n const { result } = renderHook(() =>\n useSelectionColumn<TestObject>({\n selectionMode: \"single\",\n isAllSelected: false,\n hasSelection: false,\n onToggleAll: vi.fn(),\n onToggleRow: vi.fn(),\n })\n );\n\n expect(result.current).not.toBeNull();\n expect(result.current).toMatchObject({\n id: SELECTION_COLUMN_ID,\n size: 50,\n minSize: 50,\n maxSize: 50,\n enableSorting: false,\n enableResizing: false,\n });\n });\n\n it(\"has header function that returns null for single mode\", () => {\n const { result } = renderHook(() =>\n useSelectionColumn<TestObject>({\n selectionMode: \"single\",\n isAllSelected: false,\n hasSelection: false,\n onToggleAll: vi.fn(),\n onToggleRow: vi.fn(),\n })\n );\n\n const columnDef = result.current;\n expect(columnDef).not.toBeNull();\n\n // Call header function\n const headerResult = typeof columnDef?.header === \"function\"\n ? columnDef.header({} as any)\n : null;\n\n expect(headerResult).toBeNull();\n });\n\n it(\"has cell function defined\", () => {\n const onToggleRow = vi.fn();\n const { result } = renderHook(() =>\n useSelectionColumn<TestObject>({\n selectionMode: \"single\",\n isAllSelected: false,\n hasSelection: false,\n onToggleAll: vi.fn(),\n onToggleRow,\n })\n );\n\n const columnDef = result.current;\n expect(columnDef).not.toBeNull();\n expect(columnDef?.cell).toBeDefined();\n });\n\n it(\"memoizes column definition based on dependencies\", () => {\n const onToggleRow = vi.fn();\n const onToggleAll = vi.fn();\n\n const { result, rerender } = renderHook(\n ({ isAllSelected, hasSelection }) =>\n useSelectionColumn<TestObject>({\n selectionMode: \"single\",\n isAllSelected,\n hasSelection,\n onToggleAll,\n onToggleRow,\n }),\n {\n initialProps: { isAllSelected: false, hasSelection: false },\n },\n );\n\n const firstResult = result.current;\n\n // Rerender with same props\n rerender({ isAllSelected: false, hasSelection: false });\n expect(result.current).toBe(firstResult);\n\n // Rerender with different hasSelection\n rerender({ isAllSelected: false, hasSelection: true });\n expect(result.current).not.toBe(firstResult);\n });\n });\n\n describe(\"selectionMode: 'multiple'\", () => {\n it(\"returns column definition with correct properties\", () => {\n const { result } = renderHook(() =>\n useSelectionColumn<TestObject>({\n selectionMode: \"multiple\",\n isAllSelected: false,\n hasSelection: false,\n onToggleAll: vi.fn(),\n onToggleRow: vi.fn(),\n })\n );\n\n expect(result.current).not.toBeNull();\n expect(result.current).toMatchObject({\n id: SELECTION_COLUMN_ID,\n size: 50,\n minSize: 50,\n maxSize: 50,\n enableSorting: false,\n enableResizing: false,\n });\n });\n\n it(\"has header function that renders SelectionHeaderCell\", () => {\n const onToggleAll = vi.fn();\n const { result } = renderHook(() =>\n useSelectionColumn<TestObject>({\n selectionMode: \"multiple\",\n isAllSelected: false,\n hasSelection: false,\n onToggleAll,\n onToggleRow: vi.fn(),\n })\n );\n\n const columnDef = result.current;\n expect(columnDef).not.toBeNull();\n\n // Render header\n const headerResult = typeof columnDef?.header === \"function\"\n ? columnDef.header({} as any)\n : null;\n\n expect(headerResult).not.toBeNull();\n });\n\n it(\"has cell function defined\", () => {\n const onToggleRow = vi.fn();\n const { result } = renderHook(() =>\n useSelectionColumn<TestObject>({\n selectionMode: \"multiple\",\n isAllSelected: false,\n hasSelection: false,\n onToggleAll: vi.fn(),\n onToggleRow,\n })\n );\n\n const columnDef = result.current;\n expect(columnDef).not.toBeNull();\n expect(columnDef?.cell).toBeDefined();\n });\n\n it(\"memoizes column when dependencies don't change\", () => {\n const onToggleRow = vi.fn();\n const onToggleAll = vi.fn();\n\n const { result, rerender } = renderHook(\n ({ isAllSelected, hasSelection }) =>\n useSelectionColumn<TestObject>({\n selectionMode: \"multiple\",\n isAllSelected,\n hasSelection,\n onToggleAll,\n onToggleRow,\n }),\n {\n initialProps: { isAllSelected: false, hasSelection: false },\n },\n );\n\n const firstResult = result.current;\n\n // Rerender with same props\n rerender({ isAllSelected: false, hasSelection: false });\n expect(result.current).toBe(firstResult);\n });\n\n it(\"updates column when dependencies change\", () => {\n const onToggleRow = vi.fn();\n const onToggleAll = vi.fn();\n\n const { result, rerender } = renderHook(\n ({ isAllSelected, hasSelection }) =>\n useSelectionColumn<TestObject>({\n selectionMode: \"multiple\",\n isAllSelected,\n hasSelection,\n onToggleAll,\n onToggleRow,\n }),\n {\n initialProps: { isAllSelected: false, hasSelection: false },\n },\n );\n\n const firstResult = result.current;\n\n // Change isAllSelected\n rerender({ isAllSelected: true, hasSelection: true });\n expect(result.current).not.toBe(firstResult);\n });\n });\n\n describe(\"column definition structure\", () => {\n it(\"disables sorting and resizing\", () => {\n const { result } = renderHook(() =>\n useSelectionColumn<TestObject>({\n selectionMode: \"multiple\",\n isAllSelected: false,\n hasSelection: false,\n onToggleAll: vi.fn(),\n onToggleRow: vi.fn(),\n })\n );\n\n const columnDef = result.current;\n expect(columnDef?.enableSorting).toBe(false);\n expect(columnDef?.enableResizing).toBe(false);\n });\n });\n});\n"],"mappings":"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","ignoreList":[]}
|