@gooddata/sdk-ui-pivot 11.9.0-alpha.4 → 11.9.0-alpha.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/esm/next/components/Header/AttributeHeader.d.ts.map +1 -1
- package/esm/next/components/Header/AttributeHeader.js +14 -1
- package/esm/next/components/Header/AttributeHeader.js.map +1 -1
- package/esm/next/components/Header/HeaderCell/HeaderMenu.d.ts +6 -1
- package/esm/next/components/Header/HeaderCell/HeaderMenu.d.ts.map +1 -1
- package/esm/next/components/Header/HeaderCell/HeaderMenu.js +16 -3
- package/esm/next/components/Header/HeaderCell/HeaderMenu.js.map +1 -1
- package/esm/next/components/Header/MeasureGroupHeader.d.ts.map +1 -1
- package/esm/next/components/Header/MeasureGroupHeader.js +12 -1
- package/esm/next/components/Header/MeasureGroupHeader.js.map +1 -1
- package/esm/next/components/Header/MeasureHeader.d.ts.map +1 -1
- package/esm/next/components/Header/MeasureHeader.js +14 -1
- package/esm/next/components/Header/MeasureHeader.js.map +1 -1
- package/esm/next/components/Header/PivotGroupHeader.d.ts.map +1 -1
- package/esm/next/components/Header/PivotGroupHeader.js +14 -1
- package/esm/next/components/Header/PivotGroupHeader.js.map +1 -1
- package/esm/next/constants/agGridDefaultProps.d.ts.map +1 -1
- package/esm/next/constants/agGridDefaultProps.js +13 -2
- package/esm/next/constants/agGridDefaultProps.js.map +1 -1
- package/esm/next/hooks/header/useHeaderDrilling.d.ts +1 -1
- package/esm/next/hooks/header/useHeaderDrilling.d.ts.map +1 -1
- package/esm/next/hooks/header/useHeaderDrilling.js.map +1 -1
- package/esm/next/hooks/header/useHeaderGroupDrilling.d.ts +1 -1
- package/esm/next/hooks/header/useHeaderGroupDrilling.d.ts.map +1 -1
- package/esm/next/hooks/header/useHeaderGroupDrilling.js.map +1 -1
- package/esm/next/hooks/header/useHeaderMenu.d.ts +5 -5
- package/esm/next/hooks/header/useHeaderMenu.d.ts.map +1 -1
- package/esm/next/hooks/header/useHeaderMenu.js +2 -2
- package/esm/next/hooks/header/useHeaderMenu.js.map +1 -1
- package/esm/next/hooks/header/useHeaderMenuKeyboard.d.ts +20 -0
- package/esm/next/hooks/header/useHeaderMenuKeyboard.d.ts.map +1 -0
- package/esm/next/hooks/header/useHeaderMenuKeyboard.js +44 -0
- package/esm/next/hooks/header/useHeaderMenuKeyboard.js.map +1 -0
- package/esm/next/hooks/header/useHeaderMenuSorting.d.ts +2 -1
- package/esm/next/hooks/header/useHeaderMenuSorting.d.ts.map +1 -1
- package/esm/next/hooks/header/useHeaderMenuSorting.js +6 -3
- package/esm/next/hooks/header/useHeaderMenuSorting.js.map +1 -1
- package/esm/next/hooks/header/useHeaderSpaceKey.d.ts +20 -0
- package/esm/next/hooks/header/useHeaderSpaceKey.d.ts.map +1 -0
- package/esm/next/hooks/header/useHeaderSpaceKey.js +42 -0
- package/esm/next/hooks/header/useHeaderSpaceKey.js.map +1 -0
- package/esm/next/hooks/useAgGridReactProps.d.ts.map +1 -1
- package/esm/next/hooks/useAgGridReactProps.js +4 -0
- package/esm/next/hooks/useAgGridReactProps.js.map +1 -1
- package/esm/next/hooks/useFocusManagementProps.d.ts +16 -0
- package/esm/next/hooks/useFocusManagementProps.d.ts.map +1 -0
- package/esm/next/hooks/useFocusManagementProps.js +88 -0
- package/esm/next/hooks/useFocusManagementProps.js.map +1 -0
- package/esm/next/hooks/useInteractionProps.d.ts +8 -2
- package/esm/next/hooks/useInteractionProps.d.ts.map +1 -1
- package/esm/next/hooks/useInteractionProps.js +140 -5
- package/esm/next/hooks/useInteractionProps.js.map +1 -1
- package/package.json +12 -12
- package/styles/css/main.css +27 -11
- package/styles/css/main.css.map +1 -1
- package/styles/css/pivotTableNext.css +27 -11
- package/styles/css/pivotTableNext.css.map +1 -1
- package/styles/scss/pivotTableNext.scss +36 -17
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useHeaderMenuKeyboard.js","sourceRoot":"","sources":["../../../../src/next/hooks/header/useHeaderMenuKeyboard.ts"],"names":[],"mappings":"AAAA,gCAAgC;AAEhC,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAIlC;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,UAAU,qBAAqB,CACjC,MAAoD,EACpD,UAAsB,EACtB,YAAqB;IAErB,SAAS,CAAC,GAAG,EAAE;QACX,IAAI,CAAC,YAAY,EAAE,CAAC;YAChB,OAAO;QACX,CAAC;QAED,sFAAsF;QACtF,MAAM,aAAa,GAAG,MAAM,CAAC,WAAW,CAAC;QACzC,IAAI,CAAC,aAAa,EAAE,CAAC;YACjB,OAAO;QACX,CAAC;QAED,MAAM,aAAa,GAAG,CAAC,CAAgB,EAAE,EAAE;YACvC,kCAAkC;YAClC,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,GAAG,KAAK,WAAW,IAAI,CAAC,CAAC,GAAG,KAAK,MAAM,CAAC,EAAE,CAAC;gBAC1D,CAAC,CAAC,cAAc,EAAE,CAAC;gBACnB,CAAC,CAAC,eAAe,EAAE,CAAC;gBACpB,UAAU,EAAE,CAAC;YACjB,CAAC;QACL,CAAC,CAAC;QAEF,aAAa,CAAC,gBAAgB,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC;QACzD,OAAO,GAAG,EAAE;YACR,aAAa,CAAC,mBAAmB,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC;QAChE,CAAC,CAAC;IACN,CAAC,EAAE,CAAC,MAAM,EAAE,UAAU,EAAE,YAAY,CAAC,CAAC,CAAC;AAC3C,CAAC"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { MouseEvent } from "react";
|
|
1
2
|
import { AgGridHeaderGroupParams, AgGridHeaderParams } from "../../types/agGrid.js";
|
|
2
3
|
import { ISortingMenuItem } from "../../types/menu.js";
|
|
3
4
|
/**
|
|
@@ -8,6 +9,6 @@ export declare function useHeaderMenuSorting(params: AgGridHeaderParams | AgGrid
|
|
|
8
9
|
sortIndex: number | undefined;
|
|
9
10
|
sortingItems: ISortingMenuItem[];
|
|
10
11
|
handleSortingItemClick: (item: ISortingMenuItem) => void;
|
|
11
|
-
handleProgressSort: () => void;
|
|
12
|
+
handleProgressSort: (event: MouseEvent<HTMLDivElement> | KeyboardEvent) => void;
|
|
12
13
|
};
|
|
13
14
|
//# sourceMappingURL=useHeaderMenuSorting.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useHeaderMenuSorting.d.ts","sourceRoot":"","sources":["../../../../src/next/hooks/header/useHeaderMenuSorting.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"useHeaderMenuSorting.d.ts","sourceRoot":"","sources":["../../../../src/next/hooks/header/useHeaderMenuSorting.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAe,MAAM,OAAO,CAAC;AAMhD,OAAO,EAEH,uBAAuB,EACvB,kBAAkB,EAErB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAEvD;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,kBAAkB,GAAG,uBAAuB,GAAG,IAAI;;;;mCA6CjF,gBAAgB;gCAiBf,UAAU,CAAC,cAAc,CAAC,GAAG,aAAa;EAiBzD"}
|
|
@@ -18,7 +18,7 @@ export function useHeaderMenuSorting(params) {
|
|
|
18
18
|
const sortModel = isRegularHeader ? getSortModel(params.api) : [];
|
|
19
19
|
const sortIndex = isRegularHeader ? (params.column.getSortIndex() ?? undefined) : undefined;
|
|
20
20
|
const sanitizedSortIndex = sortModel.length > 1 ? sortIndex : undefined; // Show sort index only in case there is multi-sort
|
|
21
|
-
// Direct sort setter for menu interactions
|
|
21
|
+
// Direct sort setter for menu interactions (always multisort)
|
|
22
22
|
const handleSetSort = useCallback((direction) => {
|
|
23
23
|
if (isRegularHeader) {
|
|
24
24
|
params.setSort(direction, true);
|
|
@@ -52,9 +52,12 @@ export function useHeaderMenuSorting(params) {
|
|
|
52
52
|
}
|
|
53
53
|
handleSetSort(item.direction);
|
|
54
54
|
}, [allowSorting, sortDirection, handleSetSort]);
|
|
55
|
-
|
|
55
|
+
// Progress sort for header clicks (respects AG Grid default: regular sort, Shift+click for multisort)
|
|
56
|
+
const handleProgressSort = useCallback((event) => {
|
|
56
57
|
if (isRegularHeader) {
|
|
57
|
-
|
|
58
|
+
// Check if Shift key is pressed to enable multisort
|
|
59
|
+
const isShiftPressed = "shiftKey" in event ? event.shiftKey : false;
|
|
60
|
+
params.progressSort(isShiftPressed);
|
|
58
61
|
}
|
|
59
62
|
}, [params, isRegularHeader]);
|
|
60
63
|
return {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useHeaderMenuSorting.js","sourceRoot":"","sources":["../../../../src/next/hooks/header/useHeaderMenuSorting.ts"],"names":[],"mappings":"AAAA,gCAAgC;AAEhC,OAAO,
|
|
1
|
+
{"version":3,"file":"useHeaderMenuSorting.js","sourceRoot":"","sources":["../../../../src/next/hooks/header/useHeaderMenuSorting.ts"],"names":[],"mappings":"AAAA,gCAAgC;AAEhC,OAAO,EAAc,WAAW,EAAE,MAAM,OAAO,CAAC;AAEhD,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAErC,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,4CAA4C,CAAC;AAC1E,OAAO,EAIH,oBAAoB,GACvB,MAAM,uBAAuB,CAAC;AAG/B;;GAEG;AACH,MAAM,UAAU,oBAAoB,CAAC,MAA2D;IAC5F,MAAM,IAAI,GAAG,OAAO,EAAE,CAAC;IAEvB,iEAAiE;IACjE,MAAM,eAAe,GAAG,oBAAoB,CAAC,MAAM,CAAC,CAAC;IAErD,MAAM,MAAM,GAAG,eAAe,CAAC,CAAC,CAAE,MAAM,CAAC,MAAM,CAAC,SAAS,EAAsB,CAAC,CAAC,CAAC,SAAS,CAAC;IAC5F,MAAM,YAAY,GAAG,CAAC,CAAC,MAAM,EAAE,QAAQ,CAAC;IAExC,qCAAqC;IACrC,MAAM,aAAa,GAAG,eAAe,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;IAC5E,MAAM,SAAS,GAAG,eAAe,CAAC,CAAC,CAAC,YAAY,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAClE,MAAM,SAAS,GAAG,eAAe,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,YAAY,EAAE,IAAI,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAC5F,MAAM,kBAAkB,GAAG,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,mDAAmD;IAE5H,8DAA8D;IAC9D,MAAM,aAAa,GAAG,WAAW,CAC7B,CAAC,SAAgC,EAAE,EAAE;QACjC,IAAI,eAAe,EAAE,CAAC;YAClB,MAAM,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;QACpC,CAAC;IACL,CAAC,EACD,CAAC,MAAM,EAAE,eAAe,CAAC,CAC5B,CAAC;IAEF,MAAM,YAAY,GAAuB,YAAY;QACjD,CAAC,CAAC;YACI;gBACI,IAAI,EAAE,SAAS;gBACf,EAAE,EAAE,UAAU;gBACd,SAAS,EAAE,KAAK;gBAChB,KAAK,EAAE,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC;gBACpD,QAAQ,EAAE,aAAa,KAAK,KAAK;aACpC;YACD;gBACI,IAAI,EAAE,SAAS;gBACf,EAAE,EAAE,WAAW;gBACf,SAAS,EAAE,MAAM;gBACjB,KAAK,EAAE,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC;gBACrD,QAAQ,EAAE,aAAa,KAAK,MAAM;aACrC;SACJ;QACH,CAAC,CAAC,EAAE,CAAC;IAET,MAAM,sBAAsB,GAAG,WAAW,CACtC,CAAC,IAAsB,EAAE,EAAE;QACvB,IAAI,CAAC,YAAY,EAAE,CAAC;YAChB,OAAO;QACX,CAAC;QAED,IAAI,IAAI,CAAC,SAAS,KAAK,aAAa,EAAE,CAAC;YACnC,aAAa,CAAC,IAAI,CAAC,CAAC;YACpB,OAAO;QACX,CAAC;QAED,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAClC,CAAC,EACD,CAAC,YAAY,EAAE,aAAa,EAAE,aAAa,CAAC,CAC/C,CAAC;IAEF,sGAAsG;IACtG,MAAM,kBAAkB,GAAG,WAAW,CAClC,CAAC,KAAiD,EAAE,EAAE;QAClD,IAAI,eAAe,EAAE,CAAC;YAClB,oDAAoD;YACpD,MAAM,cAAc,GAAG,UAAU,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC;YACpE,MAAM,CAAC,YAAY,CAAC,cAAc,CAAC,CAAC;QACxC,CAAC;IACL,CAAC,EACD,CAAC,MAAM,EAAE,eAAe,CAAC,CAC5B,CAAC;IAEF,OAAO;QACH,aAAa;QACb,SAAS,EAAE,kBAAkB;QAC7B,YAAY;QACZ,sBAAsB;QACtB,kBAAkB;KACrB,CAAC;AACN,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { type MouseEvent } from "react";
|
|
2
|
+
import { AgGridHeaderGroupParams, AgGridHeaderParams } from "../../types/agGrid.js";
|
|
3
|
+
/**
|
|
4
|
+
* Hook that handles Space and Enter key press on header cells.
|
|
5
|
+
*
|
|
6
|
+
* AG Grid manages focus on the header cell wrapper element, not on our custom
|
|
7
|
+
* header component's clickable areas. This hook attaches a keydown listener to
|
|
8
|
+
* the AG Grid header cell wrapper to handle Space and Enter key presses for the specific
|
|
9
|
+
* header cell only.
|
|
10
|
+
*
|
|
11
|
+
* - Space or Enter: Triggers sort/drill actions
|
|
12
|
+
* - Shift + Space or Shift + Enter: Triggers multi-sort (when Shift is pressed)
|
|
13
|
+
*
|
|
14
|
+
* @param params - AG Grid header params containing eGridHeader reference
|
|
15
|
+
* @param action - Handler to invoke when Space or Enter is pressed. Can accept either MouseEvent (from actual clicks) or KeyboardEvent (from keyboard)
|
|
16
|
+
*
|
|
17
|
+
* @internal
|
|
18
|
+
*/
|
|
19
|
+
export declare function useHeaderSpaceKey(params: AgGridHeaderParams | AgGridHeaderGroupParams, action: (event: MouseEvent<HTMLDivElement> | KeyboardEvent) => void): void;
|
|
20
|
+
//# sourceMappingURL=useHeaderSpaceKey.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useHeaderSpaceKey.d.ts","sourceRoot":"","sources":["../../../../src/next/hooks/header/useHeaderSpaceKey.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,UAAU,EAAa,MAAM,OAAO,CAAC;AAEnD,OAAO,EAAE,uBAAuB,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAEpF;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,iBAAiB,CAC7B,MAAM,EAAE,kBAAkB,GAAG,uBAAuB,EACpD,MAAM,EAAE,CAAC,KAAK,EAAE,UAAU,CAAC,cAAc,CAAC,GAAG,aAAa,KAAK,IAAI,GACpE,IAAI,CA0BN"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
// (C) 2025 GoodData Corporation
|
|
2
|
+
import { useEffect } from "react";
|
|
3
|
+
/**
|
|
4
|
+
* Hook that handles Space and Enter key press on header cells.
|
|
5
|
+
*
|
|
6
|
+
* AG Grid manages focus on the header cell wrapper element, not on our custom
|
|
7
|
+
* header component's clickable areas. This hook attaches a keydown listener to
|
|
8
|
+
* the AG Grid header cell wrapper to handle Space and Enter key presses for the specific
|
|
9
|
+
* header cell only.
|
|
10
|
+
*
|
|
11
|
+
* - Space or Enter: Triggers sort/drill actions
|
|
12
|
+
* - Shift + Space or Shift + Enter: Triggers multi-sort (when Shift is pressed)
|
|
13
|
+
*
|
|
14
|
+
* @param params - AG Grid header params containing eGridHeader reference
|
|
15
|
+
* @param action - Handler to invoke when Space or Enter is pressed. Can accept either MouseEvent (from actual clicks) or KeyboardEvent (from keyboard)
|
|
16
|
+
*
|
|
17
|
+
* @internal
|
|
18
|
+
*/
|
|
19
|
+
export function useHeaderSpaceKey(params, action) {
|
|
20
|
+
useEffect(() => {
|
|
21
|
+
// params.eGridHeader is provided by AG Grid and points to our custom header component
|
|
22
|
+
const headerElement = params.eGridHeader;
|
|
23
|
+
if (!headerElement) {
|
|
24
|
+
return;
|
|
25
|
+
}
|
|
26
|
+
const handleKeyDown = (e) => {
|
|
27
|
+
const isSpace = e.key === " " || e.key === "Space";
|
|
28
|
+
const isEnter = e.key === "Enter";
|
|
29
|
+
if (isSpace || isEnter) {
|
|
30
|
+
e.preventDefault();
|
|
31
|
+
e.stopPropagation();
|
|
32
|
+
// Pass the actual keyboard event (which includes shiftKey state for multi-sort)
|
|
33
|
+
action(e);
|
|
34
|
+
}
|
|
35
|
+
};
|
|
36
|
+
headerElement.addEventListener("keydown", handleKeyDown);
|
|
37
|
+
return () => {
|
|
38
|
+
headerElement.removeEventListener("keydown", handleKeyDown);
|
|
39
|
+
};
|
|
40
|
+
}, [params, action]);
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=useHeaderSpaceKey.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useHeaderSpaceKey.js","sourceRoot":"","sources":["../../../../src/next/hooks/header/useHeaderSpaceKey.ts"],"names":[],"mappings":"AAAA,gCAAgC;AAEhC,OAAO,EAAmB,SAAS,EAAE,MAAM,OAAO,CAAC;AAInD;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,iBAAiB,CAC7B,MAAoD,EACpD,MAAmE;IAEnE,SAAS,CAAC,GAAG,EAAE;QACX,sFAAsF;QACtF,MAAM,aAAa,GAAG,MAAM,CAAC,WAAW,CAAC;QACzC,IAAI,CAAC,aAAa,EAAE,CAAC;YACjB,OAAO;QACX,CAAC;QAED,MAAM,aAAa,GAAG,CAAC,CAAgB,EAAE,EAAE;YACvC,MAAM,OAAO,GAAG,CAAC,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,CAAC,GAAG,KAAK,OAAO,CAAC;YACnD,MAAM,OAAO,GAAG,CAAC,CAAC,GAAG,KAAK,OAAO,CAAC;YAElC,IAAI,OAAO,IAAI,OAAO,EAAE,CAAC;gBACrB,CAAC,CAAC,cAAc,EAAE,CAAC;gBACnB,CAAC,CAAC,eAAe,EAAE,CAAC;gBAEpB,gFAAgF;gBAChF,MAAM,CAAC,CAAC,CAAC,CAAC;YACd,CAAC;QACL,CAAC,CAAC;QAEF,aAAa,CAAC,gBAAgB,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC;QACzD,OAAO,GAAG,EAAE;YACR,aAAa,CAAC,mBAAmB,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC;QAChE,CAAC,CAAC;IACN,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;AACzB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useAgGridReactProps.d.ts","sourceRoot":"","sources":["../../../src/next/hooks/useAgGridReactProps.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"useAgGridReactProps.d.ts","sourceRoot":"","sources":["../../../src/next/hooks/useAgGridReactProps.ts"],"names":[],"mappings":"AAqBA,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEjD;;;;GAIG;AACH,wBAAgB,mBAAmB,gBAuDlC"}
|
|
@@ -9,6 +9,7 @@ import { useCellSelectionProps } from "./useCellSelectionProps.js";
|
|
|
9
9
|
import { useClipboardProps } from "./useClipboardProps.js";
|
|
10
10
|
import { useColumnDefsProps } from "./useColumnDefsProps.js";
|
|
11
11
|
import { useDataLoadingProps } from "./useDataLoadingProps.js";
|
|
12
|
+
import { useFocusManagementProps } from "./useFocusManagementProps.js";
|
|
12
13
|
import { useHeaderComponents } from "./useHeaderComponents.js";
|
|
13
14
|
import { useInteractionProps } from "./useInteractionProps.js";
|
|
14
15
|
import { usePivotingProps } from "./usePivotingProps.js";
|
|
@@ -37,6 +38,7 @@ export function useAgGridReactProps() {
|
|
|
37
38
|
const enhanceWithHeaderComponents = useHeaderComponents();
|
|
38
39
|
const enhanceWithAfterRender = useAfterRenderCallback();
|
|
39
40
|
const enhanceWithVirtualColumnAutoResize = useVirtualColumnAutoResize();
|
|
41
|
+
const enhanceWithFocusManagement = useFocusManagementProps();
|
|
40
42
|
return useMemo(() => {
|
|
41
43
|
return [
|
|
42
44
|
enhanceWithAgGridApi,
|
|
@@ -54,6 +56,7 @@ export function useAgGridReactProps() {
|
|
|
54
56
|
enhanceWithHeaderComponents,
|
|
55
57
|
enhanceWithAfterRender,
|
|
56
58
|
enhanceWithVirtualColumnAutoResize,
|
|
59
|
+
enhanceWithFocusManagement,
|
|
57
60
|
].reduce((acc, fn) => fn(acc), AG_GRID_DEFAULT_PROPS);
|
|
58
61
|
}, [
|
|
59
62
|
enhanceWithAgGridApi,
|
|
@@ -71,6 +74,7 @@ export function useAgGridReactProps() {
|
|
|
71
74
|
enhanceWithHeaderComponents,
|
|
72
75
|
enhanceWithAfterRender,
|
|
73
76
|
enhanceWithVirtualColumnAutoResize,
|
|
77
|
+
enhanceWithFocusManagement,
|
|
74
78
|
]);
|
|
75
79
|
}
|
|
76
80
|
//# sourceMappingURL=useAgGridReactProps.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useAgGridReactProps.js","sourceRoot":"","sources":["../../../src/next/hooks/useAgGridReactProps.ts"],"names":[],"mappings":"AAAA,gCAAgC;AAEhC,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAEhC,OAAO,EAAE,oBAAoB,EAAE,MAAM,oCAAoC,CAAC;AAC1E,OAAO,EAAE,0BAA0B,EAAE,MAAM,0CAA0C,CAAC;AACtF,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AACrE,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AACnE,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,qBAAqB,EAAE,MAAM,oCAAoC,CAAC;AAG3E;;;;GAIG;AACH,MAAM,UAAU,mBAAmB;IAC/B,MAAM,oBAAoB,GAAG,iBAAiB,EAAE,CAAC;IACjD,MAAM,6BAA6B,GAAG,mBAAmB,EAAE,CAAC;IAC5D,MAAM,qBAAqB,GAAG,kBAAkB,EAAE,CAAC;IACnD,MAAM,mBAAmB,GAAG,gBAAgB,EAAE,CAAC;IAC/C,MAAM,uBAAuB,GAAG,oBAAoB,EAAE,CAAC;IACvD,MAAM,kBAAkB,GAAG,eAAe,EAAE,CAAC;IAC7C,MAAM,uBAAuB,GAAG,mBAAmB,EAAE,CAAC;IACtD,MAAM,wBAAwB,GAAG,qBAAqB,EAAE,CAAC;IACzD,MAAM,oBAAoB,GAAG,iBAAiB,EAAE,CAAC;IACjD,MAAM,uBAAuB,GAAG,oBAAoB,EAAE,CAAC;IACvD,MAAM,qBAAqB,GAAG,aAAa,EAAE,CAAC;IAC9C,MAAM,gBAAgB,GAAG,aAAa,EAAE,CAAC;IACzC,MAAM,2BAA2B,GAAG,mBAAmB,EAAE,CAAC;IAC1D,MAAM,sBAAsB,GAAG,sBAAsB,EAAE,CAAC;IACxD,MAAM,kCAAkC,GAAG,0BAA0B,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"useAgGridReactProps.js","sourceRoot":"","sources":["../../../src/next/hooks/useAgGridReactProps.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { AgGridProps } from "../types/agGrid.js";
|
|
2
|
+
/**
|
|
3
|
+
* Hook that provides AG Grid props for keyboard navigation and focus management.
|
|
4
|
+
*
|
|
5
|
+
* This hook handles:
|
|
6
|
+
* - Tab key behavior: Tab exits the grid (browser handles it), does not navigate between cells
|
|
7
|
+
* - Arrow keys: Standard cell-to-cell navigation within grid boundaries
|
|
8
|
+
* - Page Up/Down: Scrolls by visible page of rows
|
|
9
|
+
* - Home/End: Moves to first/last cell in current row
|
|
10
|
+
* - Ctrl+Home/End: Moves to first/last cell in entire grid
|
|
11
|
+
* - Header focus: Clears body cell selection when focus moves to header
|
|
12
|
+
*
|
|
13
|
+
* @alpha
|
|
14
|
+
*/
|
|
15
|
+
export declare function useFocusManagementProps(): (agGridReactProps: AgGridProps) => AgGridProps;
|
|
16
|
+
//# sourceMappingURL=useFocusManagementProps.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useFocusManagementProps.d.ts","sourceRoot":"","sources":["../../../src/next/hooks/useFocusManagementProps.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAGjD;;;;;;;;;;;;GAYG;AACH,wBAAgB,uBAAuB,IAAI,CAAC,gBAAgB,EAAE,WAAW,KAAK,WAAW,CA+FxF"}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
// (C) 2025 GoodData Corporation
|
|
2
|
+
import { useCallback } from "react";
|
|
3
|
+
import { UnexpectedSdkError } from "@gooddata/sdk-ui";
|
|
4
|
+
import { useClearCellSelection } from "./useClearCellSelection.js";
|
|
5
|
+
/**
|
|
6
|
+
* Hook that provides AG Grid props for keyboard navigation and focus management.
|
|
7
|
+
*
|
|
8
|
+
* This hook handles:
|
|
9
|
+
* - Tab key behavior: Tab exits the grid (browser handles it), does not navigate between cells
|
|
10
|
+
* - Arrow keys: Standard cell-to-cell navigation within grid boundaries
|
|
11
|
+
* - Page Up/Down: Scrolls by visible page of rows
|
|
12
|
+
* - Home/End: Moves to first/last cell in current row
|
|
13
|
+
* - Ctrl+Home/End: Moves to first/last cell in entire grid
|
|
14
|
+
* - Header focus: Clears body cell selection when focus moves to header
|
|
15
|
+
*
|
|
16
|
+
* @alpha
|
|
17
|
+
*/
|
|
18
|
+
export function useFocusManagementProps() {
|
|
19
|
+
const clearCellSelection = useClearCellSelection();
|
|
20
|
+
/**
|
|
21
|
+
* AG Grid's suppressKeyboardEvent allows us to control which keyboard events
|
|
22
|
+
* AG Grid processes vs which ones should bubble up to the browser.
|
|
23
|
+
*
|
|
24
|
+
* Returning true = suppress AG Grid's handling, let custom handler process it
|
|
25
|
+
* Returning false = let AG Grid handle the event
|
|
26
|
+
*/
|
|
27
|
+
const suppressKeyboardEvent = useCallback((params) => {
|
|
28
|
+
const { event } = params;
|
|
29
|
+
const { key } = event;
|
|
30
|
+
// Prevent Space key from scrolling the page
|
|
31
|
+
if (key === " " || key === "Space") {
|
|
32
|
+
event.preventDefault();
|
|
33
|
+
}
|
|
34
|
+
// Suppress Tab - handled in onCellKeyDown (useInteractionProps.ts)
|
|
35
|
+
if (key === "Tab") {
|
|
36
|
+
return true;
|
|
37
|
+
}
|
|
38
|
+
// Suppress custom navigation keys - handled in onCellKeyDown (useInteractionProps.ts):
|
|
39
|
+
// - Home/End (custom row navigation)
|
|
40
|
+
// - Ctrl+Home/End (jump to first/last cell in grid)
|
|
41
|
+
const isCustomNavigationKey = key === "Home" || key === "End";
|
|
42
|
+
if (isCustomNavigationKey) {
|
|
43
|
+
return true;
|
|
44
|
+
}
|
|
45
|
+
// Let AG Grid handle standard navigation keys:
|
|
46
|
+
const isStandardNavigationKey = key === "ArrowUp" ||
|
|
47
|
+
key === "ArrowDown" ||
|
|
48
|
+
key === "ArrowLeft" ||
|
|
49
|
+
key === "ArrowRight" ||
|
|
50
|
+
key === "PageUp" ||
|
|
51
|
+
key === "PageDown";
|
|
52
|
+
return !isStandardNavigationKey;
|
|
53
|
+
}, []);
|
|
54
|
+
const suppressHeaderKeyboardEvent = useCallback((params) => {
|
|
55
|
+
const { event } = params;
|
|
56
|
+
const { key } = event;
|
|
57
|
+
// Prevent Space key from scrolling the page
|
|
58
|
+
// The actual Space key handling for actions is done in header components via useEffect
|
|
59
|
+
if (key === " " || key === "Space") {
|
|
60
|
+
event.preventDefault();
|
|
61
|
+
}
|
|
62
|
+
// Let AG Grid handle all events normally
|
|
63
|
+
return false;
|
|
64
|
+
}, []);
|
|
65
|
+
const onHeaderFocused = useCallback(() => {
|
|
66
|
+
// Clear body cell selection when header receives focus
|
|
67
|
+
clearCellSelection();
|
|
68
|
+
}, [clearCellSelection]);
|
|
69
|
+
return useCallback((agGridReactProps) => {
|
|
70
|
+
if ("suppressKeyboardEvent" in agGridReactProps && agGridReactProps.suppressKeyboardEvent) {
|
|
71
|
+
throw new UnexpectedSdkError("suppressKeyboardEvent is already set");
|
|
72
|
+
}
|
|
73
|
+
if ("suppressHeaderKeyboardEvent" in agGridReactProps &&
|
|
74
|
+
agGridReactProps.suppressHeaderKeyboardEvent) {
|
|
75
|
+
throw new UnexpectedSdkError("suppressHeaderKeyboardEvent is already set");
|
|
76
|
+
}
|
|
77
|
+
if (agGridReactProps.onHeaderFocused) {
|
|
78
|
+
throw new UnexpectedSdkError("onHeaderFocused is already set");
|
|
79
|
+
}
|
|
80
|
+
return {
|
|
81
|
+
...agGridReactProps,
|
|
82
|
+
suppressKeyboardEvent,
|
|
83
|
+
suppressHeaderKeyboardEvent,
|
|
84
|
+
onHeaderFocused,
|
|
85
|
+
};
|
|
86
|
+
}, [suppressKeyboardEvent, suppressHeaderKeyboardEvent, onHeaderFocused]);
|
|
87
|
+
}
|
|
88
|
+
//# sourceMappingURL=useFocusManagementProps.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useFocusManagementProps.js","sourceRoot":"","sources":["../../../src/next/hooks/useFocusManagementProps.ts"],"names":[],"mappings":"AAAA,gCAAgC;AAEhC,OAAO,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AAIpC,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAEtD,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AAInE;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,uBAAuB;IACnC,MAAM,kBAAkB,GAAG,qBAAqB,EAAE,CAAC;IACnD;;;;;;OAMG;IACH,MAAM,qBAAqB,GAAG,WAAW,CACrC,CAAC,MAAiE,EAAW,EAAE;QAC3E,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,CAAC;QACzB,MAAM,EAAE,GAAG,EAAE,GAAG,KAAK,CAAC;QAEtB,4CAA4C;QAC5C,IAAI,GAAG,KAAK,GAAG,IAAI,GAAG,KAAK,OAAO,EAAE,CAAC;YACjC,KAAK,CAAC,cAAc,EAAE,CAAC;QAC3B,CAAC;QAED,mEAAmE;QACnE,IAAI,GAAG,KAAK,KAAK,EAAE,CAAC;YAChB,OAAO,IAAI,CAAC;QAChB,CAAC;QAED,uFAAuF;QACvF,qCAAqC;QACrC,oDAAoD;QACpD,MAAM,qBAAqB,GAAG,GAAG,KAAK,MAAM,IAAI,GAAG,KAAK,KAAK,CAAC;QAE9D,IAAI,qBAAqB,EAAE,CAAC;YACxB,OAAO,IAAI,CAAC;QAChB,CAAC;QAED,+CAA+C;QAC/C,MAAM,uBAAuB,GACzB,GAAG,KAAK,SAAS;YACjB,GAAG,KAAK,WAAW;YACnB,GAAG,KAAK,WAAW;YACnB,GAAG,KAAK,YAAY;YACpB,GAAG,KAAK,QAAQ;YAChB,GAAG,KAAK,UAAU,CAAC;QAEvB,OAAO,CAAC,uBAAuB,CAAC;IACpC,CAAC,EACD,EAAE,CACL,CAAC;IAEF,MAAM,2BAA2B,GAAG,WAAW,CAC3C,CAAC,MAAiE,EAAW,EAAE;QAC3E,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,CAAC;QACzB,MAAM,EAAE,GAAG,EAAE,GAAG,KAAK,CAAC;QAEtB,4CAA4C;QAC5C,uFAAuF;QACvF,IAAI,GAAG,KAAK,GAAG,IAAI,GAAG,KAAK,OAAO,EAAE,CAAC;YACjC,KAAK,CAAC,cAAc,EAAE,CAAC;QAC3B,CAAC;QAED,yCAAyC;QACzC,OAAO,KAAK,CAAC;IACjB,CAAC,EACD,EAAE,CACL,CAAC;IAEF,MAAM,eAAe,GAAG,WAAW,CAAC,GAAG,EAAE;QACrC,uDAAuD;QACvD,kBAAkB,EAAE,CAAC;IACzB,CAAC,EAAE,CAAC,kBAAkB,CAAC,CAAC,CAAC;IAEzB,OAAO,WAAW,CACd,CAAC,gBAA6B,EAAe,EAAE;QAC3C,IAAI,uBAAuB,IAAI,gBAAgB,IAAI,gBAAgB,CAAC,qBAAqB,EAAE,CAAC;YACxF,MAAM,IAAI,kBAAkB,CAAC,sCAAsC,CAAC,CAAC;QACzE,CAAC;QAED,IACI,6BAA6B,IAAI,gBAAgB;YACjD,gBAAgB,CAAC,2BAA2B,EAC9C,CAAC;YACC,MAAM,IAAI,kBAAkB,CAAC,4CAA4C,CAAC,CAAC;QAC/E,CAAC;QAED,IAAI,gBAAgB,CAAC,eAAe,EAAE,CAAC;YACnC,MAAM,IAAI,kBAAkB,CAAC,gCAAgC,CAAC,CAAC;QACnE,CAAC;QAED,OAAO;YACH,GAAG,gBAAgB;YACnB,qBAAqB;YACrB,2BAA2B;YAC3B,eAAe;SACH,CAAC;IACrB,CAAC,EACD,CAAC,qBAAqB,EAAE,2BAA2B,EAAE,eAAe,CAAC,CACxE,CAAC;AACN,CAAC"}
|
|
@@ -2,8 +2,14 @@ import { AgGridProps } from "../types/agGrid.js";
|
|
|
2
2
|
/**
|
|
3
3
|
* Returns ag-grid props with interactions applied.
|
|
4
4
|
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
5
|
+
* Handles:
|
|
6
|
+
* - Cell drilling on click and keyboard (Enter/Space without modifiers)
|
|
7
|
+
* - Mouse drag detection for cell selection
|
|
8
|
+
* - Custom keyboard navigation (ArrowUp, PageUp/Down, Home/End, Ctrl+Home/End)
|
|
9
|
+
* - Column selection (Ctrl+Space)
|
|
10
|
+
* - Row selection (Shift+Space)
|
|
11
|
+
* - Tab key to exit grid
|
|
12
|
+
* - Escape key to blur
|
|
7
13
|
*
|
|
8
14
|
* @alpha
|
|
9
15
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useInteractionProps.d.ts","sourceRoot":"","sources":["../../../src/next/hooks/useInteractionProps.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"useInteractionProps.d.ts","sourceRoot":"","sources":["../../../src/next/hooks/useInteractionProps.ts"],"names":[],"mappings":"AA8BA,OAAO,EAA4C,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAqB3F;;;;;;;;;;;;;GAaG;AACH,wBAAgB,mBAAmB,IAAI,CAAC,gBAAgB,EAAE,WAAW,KAAK,WAAW,CAoTpF"}
|
|
@@ -1,17 +1,40 @@
|
|
|
1
1
|
// (C) 2025 GoodData Corporation
|
|
2
2
|
import { useCallback, useRef } from "react";
|
|
3
3
|
import { UnexpectedSdkError, VisualizationTypes, } from "@gooddata/sdk-ui";
|
|
4
|
-
import { isEnterKey, isEscapeKey, isSpaceKey } from "@gooddata/sdk-ui-kit";
|
|
4
|
+
import { findFocusableElementOutsideContainer, isEnterKey, isEscapeKey, isSpaceKey, makeKeyboardNavigation, } from "@gooddata/sdk-ui-kit";
|
|
5
5
|
import { useCurrentDataView } from "../context/CurrentDataViewContext.js";
|
|
6
6
|
import { usePivotTableProps } from "../context/PivotTablePropsContext.js";
|
|
7
7
|
import { createCustomDrillEvent } from "../features/drilling/events.js";
|
|
8
8
|
import { createDrillIntersection } from "../features/drilling/intersection.js";
|
|
9
9
|
import { isCellDrillable } from "../features/drilling/isDrillable.js";
|
|
10
|
+
/**
|
|
11
|
+
* Keyboard navigation action map for pivot table
|
|
12
|
+
*/
|
|
13
|
+
const tableKeyboardNavigation = makeKeyboardNavigation({
|
|
14
|
+
onHomeNormal: [{ code: "Home", modifiers: ["!Control", "!Meta"] }],
|
|
15
|
+
onHomeWithModifier: [
|
|
16
|
+
{ code: "Home", modifiers: ["Control"] },
|
|
17
|
+
{ code: "Home", modifiers: ["Meta"] },
|
|
18
|
+
],
|
|
19
|
+
onEndNormal: [{ code: "End", modifiers: ["!Control", "!Meta"] }],
|
|
20
|
+
onEndWithModifier: [
|
|
21
|
+
{ code: "End", modifiers: ["Control"] },
|
|
22
|
+
{ code: "End", modifiers: ["Meta"] },
|
|
23
|
+
],
|
|
24
|
+
onSelectColumn: [{ code: "Space", modifiers: ["Control"] }],
|
|
25
|
+
onSelectRow: [{ code: "Space", modifiers: ["Shift", "!Control", "!Meta"] }],
|
|
26
|
+
});
|
|
10
27
|
/**
|
|
11
28
|
* Returns ag-grid props with interactions applied.
|
|
12
29
|
*
|
|
13
|
-
*
|
|
14
|
-
*
|
|
30
|
+
* Handles:
|
|
31
|
+
* - Cell drilling on click and keyboard (Enter/Space without modifiers)
|
|
32
|
+
* - Mouse drag detection for cell selection
|
|
33
|
+
* - Custom keyboard navigation (ArrowUp, PageUp/Down, Home/End, Ctrl+Home/End)
|
|
34
|
+
* - Column selection (Ctrl+Space)
|
|
35
|
+
* - Row selection (Shift+Space)
|
|
36
|
+
* - Tab key to exit grid
|
|
37
|
+
* - Escape key to blur
|
|
15
38
|
*
|
|
16
39
|
* @alpha
|
|
17
40
|
*/
|
|
@@ -95,6 +118,82 @@ export function useInteractionProps() {
|
|
|
95
118
|
// Mark that a range selection occurred
|
|
96
119
|
isDraggingRef.current = true;
|
|
97
120
|
}, []);
|
|
121
|
+
/**
|
|
122
|
+
* Navigate to first column (and optionally first row with modifier)
|
|
123
|
+
*/
|
|
124
|
+
const navigateToHome = useCallback((api, row, withModifier) => {
|
|
125
|
+
const allColumns = api.getAllDisplayedColumns();
|
|
126
|
+
if (allColumns && allColumns.length > 0) {
|
|
127
|
+
const firstColumn = allColumns[0];
|
|
128
|
+
const targetRow = withModifier ? 0 : row;
|
|
129
|
+
api.clearCellSelection();
|
|
130
|
+
if (withModifier) {
|
|
131
|
+
api.ensureIndexVisible(0);
|
|
132
|
+
}
|
|
133
|
+
api.ensureColumnVisible(firstColumn);
|
|
134
|
+
api.setFocusedCell(targetRow, firstColumn);
|
|
135
|
+
api.addCellRange({
|
|
136
|
+
rowStartIndex: targetRow,
|
|
137
|
+
rowEndIndex: targetRow,
|
|
138
|
+
columns: [firstColumn],
|
|
139
|
+
});
|
|
140
|
+
}
|
|
141
|
+
}, []);
|
|
142
|
+
/**
|
|
143
|
+
* Navigate to last column (and optionally last row with modifier)
|
|
144
|
+
*/
|
|
145
|
+
const navigateToEnd = useCallback((api, row, withModifier) => {
|
|
146
|
+
const allColumns = api.getAllDisplayedColumns();
|
|
147
|
+
if (allColumns && allColumns.length > 0) {
|
|
148
|
+
const lastColumn = allColumns[allColumns.length - 1];
|
|
149
|
+
let targetRow = row;
|
|
150
|
+
if (withModifier) {
|
|
151
|
+
const displayedRowCount = api.getDisplayedRowCount();
|
|
152
|
+
if (displayedRowCount > 0) {
|
|
153
|
+
targetRow = displayedRowCount - 1;
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
api.clearCellSelection();
|
|
157
|
+
if (withModifier) {
|
|
158
|
+
api.ensureIndexVisible(targetRow);
|
|
159
|
+
}
|
|
160
|
+
api.ensureColumnVisible(lastColumn);
|
|
161
|
+
api.setFocusedCell(targetRow, lastColumn);
|
|
162
|
+
api.addCellRange({
|
|
163
|
+
rowStartIndex: targetRow,
|
|
164
|
+
rowEndIndex: targetRow,
|
|
165
|
+
columns: [lastColumn],
|
|
166
|
+
});
|
|
167
|
+
}
|
|
168
|
+
}, []);
|
|
169
|
+
/**
|
|
170
|
+
* Select entire column containing the focused cell
|
|
171
|
+
*/
|
|
172
|
+
const selectColumn = useCallback((api, column) => {
|
|
173
|
+
const displayedRowCount = api.getDisplayedRowCount();
|
|
174
|
+
if (displayedRowCount > 0) {
|
|
175
|
+
api.clearCellSelection();
|
|
176
|
+
api.addCellRange({
|
|
177
|
+
rowStartIndex: 0,
|
|
178
|
+
rowEndIndex: displayedRowCount - 1,
|
|
179
|
+
columns: [column],
|
|
180
|
+
});
|
|
181
|
+
}
|
|
182
|
+
}, []);
|
|
183
|
+
/**
|
|
184
|
+
* Select entire row containing the focused cell
|
|
185
|
+
*/
|
|
186
|
+
const selectRow = useCallback((api, row) => {
|
|
187
|
+
const allColumns = api.getAllDisplayedColumns();
|
|
188
|
+
if (allColumns && allColumns.length > 0) {
|
|
189
|
+
api.clearCellSelection();
|
|
190
|
+
api.addCellRange({
|
|
191
|
+
rowStartIndex: row,
|
|
192
|
+
rowEndIndex: row,
|
|
193
|
+
columns: allColumns,
|
|
194
|
+
});
|
|
195
|
+
}
|
|
196
|
+
}, []);
|
|
98
197
|
const onCellKeyDown = useCallback((event) => {
|
|
99
198
|
// Check if it's a keyboard event
|
|
100
199
|
if (!event.event || !(event.event instanceof KeyboardEvent)) {
|
|
@@ -102,21 +201,57 @@ export function useInteractionProps() {
|
|
|
102
201
|
}
|
|
103
202
|
// Cast to ReactKeyboardEvent for helpers that expect React's typing shape
|
|
104
203
|
const keyboardEvent = event.event;
|
|
204
|
+
// Handle Tab key: find next/previous focusable element outside grid and focus it
|
|
205
|
+
if (keyboardEvent.key === "Tab") {
|
|
206
|
+
// Prevent default Tab behavior
|
|
207
|
+
keyboardEvent.preventDefault();
|
|
208
|
+
keyboardEvent.stopPropagation();
|
|
209
|
+
// Clear AG Grid's internal focus state
|
|
210
|
+
event.api.clearFocusedCell();
|
|
211
|
+
const eventTarget = keyboardEvent.target;
|
|
212
|
+
if (!eventTarget) {
|
|
213
|
+
return;
|
|
214
|
+
}
|
|
215
|
+
// Find the next/previous focusable element outside the grid
|
|
216
|
+
const direction = keyboardEvent.shiftKey ? "backward" : "forward";
|
|
217
|
+
const targetElement = findFocusableElementOutsideContainer(eventTarget, direction);
|
|
218
|
+
if (targetElement) {
|
|
219
|
+
targetElement.focus();
|
|
220
|
+
}
|
|
221
|
+
return;
|
|
222
|
+
}
|
|
105
223
|
// Blur focused element when Escape is pressed, which will trigger onBlur and clear selection
|
|
106
224
|
if (isEscapeKey(keyboardEvent)) {
|
|
107
225
|
const activeElement = document.activeElement;
|
|
108
226
|
activeElement?.blur();
|
|
109
227
|
return;
|
|
110
228
|
}
|
|
229
|
+
// Handle custom keyboard navigation (Home/End with and without modifiers, column/row selection)
|
|
230
|
+
const { api, rowIndex, column } = event;
|
|
231
|
+
if (column && rowIndex !== null && rowIndex !== undefined) {
|
|
232
|
+
tableKeyboardNavigation({
|
|
233
|
+
onHomeNormal: () => navigateToHome(api, rowIndex, false),
|
|
234
|
+
onHomeWithModifier: () => navigateToHome(api, rowIndex, true),
|
|
235
|
+
onEndNormal: () => navigateToEnd(api, rowIndex, false),
|
|
236
|
+
onEndWithModifier: () => navigateToEnd(api, rowIndex, true),
|
|
237
|
+
onSelectColumn: () => selectColumn(api, column),
|
|
238
|
+
onSelectRow: () => selectRow(api, rowIndex),
|
|
239
|
+
}, { shouldPreventDefault: true, shouldStopPropagation: true })(keyboardEvent);
|
|
240
|
+
}
|
|
111
241
|
// Handle drilling only if there are drillable items
|
|
112
242
|
if (!onDrill || drillableItems.length === 0) {
|
|
113
243
|
return;
|
|
114
244
|
}
|
|
115
245
|
// Drill via keyboard: ENTER or SPACE pressed on a drillable cell
|
|
116
|
-
if (
|
|
246
|
+
// Only drill if no modifier keys are pressed (to avoid conflicts with selection shortcuts)
|
|
247
|
+
const hasModifiers = keyboardEvent.ctrlKey ||
|
|
248
|
+
keyboardEvent.metaKey ||
|
|
249
|
+
keyboardEvent.shiftKey ||
|
|
250
|
+
keyboardEvent.altKey;
|
|
251
|
+
if ((isEnterKey(keyboardEvent) || isSpaceKey(keyboardEvent)) && !hasModifiers) {
|
|
117
252
|
drillFromCellEvent(event);
|
|
118
253
|
}
|
|
119
|
-
}, [drillFromCellEvent, onDrill, drillableItems]);
|
|
254
|
+
}, [drillFromCellEvent, onDrill, drillableItems, navigateToHome, navigateToEnd, selectColumn, selectRow]);
|
|
120
255
|
return useCallback((agGridReactProps) => {
|
|
121
256
|
if (agGridReactProps.onCellClicked) {
|
|
122
257
|
throw new UnexpectedSdkError("onCellClicked is already set");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useInteractionProps.js","sourceRoot":"","sources":["../../../src/next/hooks/useInteractionProps.ts"],"names":[],"mappings":"AAAA,gCAAgC;AAEhC,OAAO,EAAuC,WAAW,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AASjF,OAAO,EAGH,kBAAkB,EAClB,kBAAkB,GACrB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,
|
|
1
|
+
{"version":3,"file":"useInteractionProps.js","sourceRoot":"","sources":["../../../src/next/hooks/useInteractionProps.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@gooddata/sdk-ui-pivot",
|
|
3
|
-
"version": "11.9.0-alpha.
|
|
3
|
+
"version": "11.9.0-alpha.5",
|
|
4
4
|
"description": "GoodData.UI SDK - Pivot Table",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -43,12 +43,12 @@
|
|
|
43
43
|
"ts-invariant": "^0.7.5",
|
|
44
44
|
"tslib": "2.8.1",
|
|
45
45
|
"uuid": "^11.1.0",
|
|
46
|
-
"@gooddata/sdk-
|
|
47
|
-
"@gooddata/sdk-model": "11.9.0-alpha.
|
|
48
|
-
"@gooddata/sdk-ui-kit": "11.9.0-alpha.
|
|
49
|
-
"@gooddata/sdk-ui
|
|
50
|
-
"@gooddata/sdk-ui-
|
|
51
|
-
"@gooddata/sdk-
|
|
46
|
+
"@gooddata/sdk-backend-spi": "11.9.0-alpha.5",
|
|
47
|
+
"@gooddata/sdk-model": "11.9.0-alpha.5",
|
|
48
|
+
"@gooddata/sdk-ui-kit": "11.9.0-alpha.5",
|
|
49
|
+
"@gooddata/sdk-ui": "11.9.0-alpha.5",
|
|
50
|
+
"@gooddata/sdk-ui-theme-provider": "11.9.0-alpha.5",
|
|
51
|
+
"@gooddata/sdk-ui-vis-commons": "11.9.0-alpha.5"
|
|
52
52
|
},
|
|
53
53
|
"devDependencies": {
|
|
54
54
|
"@gooddata/stylelint-config": "^5.0.0",
|
|
@@ -84,17 +84,17 @@
|
|
|
84
84
|
"raf": "^3.4.1",
|
|
85
85
|
"react": "19.1.1",
|
|
86
86
|
"react-dom": "19.1.1",
|
|
87
|
-
"sass": "1.
|
|
87
|
+
"sass": "1.70.0",
|
|
88
88
|
"stylelint": "^13.8.0",
|
|
89
89
|
"stylelint-checkstyle-formatter": "^0.1.2",
|
|
90
90
|
"stylelint-config-prettier": "^9.0.5",
|
|
91
91
|
"typescript": "5.8.3",
|
|
92
92
|
"vitest": "3.2.4",
|
|
93
93
|
"vitest-dom": "0.1.1",
|
|
94
|
-
"@gooddata/eslint-config": "11.9.0-alpha.
|
|
95
|
-
"@gooddata/reference-workspace": "11.9.0-alpha.
|
|
96
|
-
"@gooddata/sdk-backend-base": "11.9.0-alpha.
|
|
97
|
-
"@gooddata/sdk-backend-mockingbird": "11.9.0-alpha.
|
|
94
|
+
"@gooddata/eslint-config": "11.9.0-alpha.5",
|
|
95
|
+
"@gooddata/reference-workspace": "11.9.0-alpha.5",
|
|
96
|
+
"@gooddata/sdk-backend-base": "11.9.0-alpha.5",
|
|
97
|
+
"@gooddata/sdk-backend-mockingbird": "11.9.0-alpha.5"
|
|
98
98
|
},
|
|
99
99
|
"peerDependencies": {
|
|
100
100
|
"react": "^18.0.0 || ^19.0.0",
|