@pega/lists-react 9.0.0-build.19.7 → 9.0.0-build.19.8
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/lib/Core/Components/DefaultComponents/EmptyContainer.d.ts +3 -1
- package/lib/Core/Components/DefaultComponents/EmptyContainer.d.ts.map +1 -1
- package/lib/Core/Components/DefaultComponents/EmptyContainer.js +11 -2
- package/lib/Core/Components/DefaultComponents/EmptyContainer.js.map +1 -1
- package/lib/Core/Components/DefaultComponents/index.d.ts +3 -1
- package/lib/Core/Components/DefaultComponents/index.d.ts.map +1 -1
- package/lib/Core/Components/Virtualise/Pagination.d.ts.map +1 -1
- package/lib/Core/Components/Virtualise/Pagination.js +2 -1
- package/lib/Core/Components/Virtualise/Pagination.js.map +1 -1
- package/lib/Core/Components/Virtualise/UseScroll.d.ts +4 -1
- package/lib/Core/Components/Virtualise/UseScroll.d.ts.map +1 -1
- package/lib/Core/Components/Virtualise/UseScroll.js +16 -3
- package/lib/Core/Components/Virtualise/UseScroll.js.map +1 -1
- package/lib/Core/Components/Virtualise/VirtualizeInfinite.js +5 -1
- package/lib/Core/Components/Virtualise/VirtualizeInfinite.js.map +1 -1
- package/lib/Core/Views/Gallery/index.js +1 -1
- package/lib/Core/Views/Gallery/index.js.map +1 -1
- package/lib/Core/Views/Gallery/utils.d.ts.map +1 -1
- package/lib/Core/Views/Gallery/utils.js +3 -2
- package/lib/Core/Views/Gallery/utils.js.map +1 -1
- package/lib/Core/Views/Map/index.d.ts.map +1 -1
- package/lib/Core/Views/Map/index.js +1 -1
- package/lib/Core/Views/Map/index.js.map +1 -1
- package/lib/Core/Views/Table/TableA11y.d.ts +10 -0
- package/lib/Core/Views/Table/TableA11y.d.ts.map +1 -1
- package/lib/Core/Views/Table/TableA11y.js +185 -0
- package/lib/Core/Views/Table/TableA11y.js.map +1 -1
- package/lib/Core/Views/Table/VirtualizeWrapper.d.ts.map +1 -1
- package/lib/Core/Views/Table/VirtualizeWrapper.js +3 -1
- package/lib/Core/Views/Table/VirtualizeWrapper.js.map +1 -1
- package/lib/Core/Views/Table/index.d.ts.map +1 -1
- package/lib/Core/Views/Table/index.js +5 -3
- package/lib/Core/Views/Table/index.js.map +1 -1
- package/lib/Core/Views/Timeline/index.d.ts.map +1 -1
- package/lib/Core/Views/Timeline/index.js +1 -1
- package/lib/Core/Views/Timeline/index.js.map +1 -1
- package/package.json +7 -7
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../Core/Views/Map/index.tsx"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../Core/Views/Map/index.tsx"],"names":[],"mappings":"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","sourcesContent":["import { useEffect, useRef, useMemo } from 'react';\n\nimport type { RsCoreTypes } from 'pega-repeating-structures-core';\nimport {\n Card,\n useTheme,\n Progress,\n useFullscreenContext,\n LocationView\n} from '@pega/cosmos-react-core';\nimport { StyledSummaryListContent } from '@pega/cosmos-react-core/lib/components/SummaryList/SummaryList';\n\nimport { calculateBodyMaxHeight } from '../Timeline/utils';\nimport { EXTERNAL_FILTERS } from '../../constants';\nimport RenderView from '../../Components/RenderingEngine/RenderView';\nimport Toolbar from '../../Components/Toolbar';\nimport EmptyContainer from '../../Components/DefaultComponents/EmptyContainer';\nimport { isFilterApplied } from '../../Utils';\nimport useTranslate from '../../Hooks/useTranslate';\n\nimport StyledViewContainer, { StyledReferencesSummaryList, StyledCardContent } from './Map.styles';\nimport MapItem from './MapItem';\nimport { getValueWithUnit, getMaxHeight, getPins } from './utils';\n\ninterface MapViewProps {\n view: RsCoreTypes.View;\n}\n\nconst Map = ({ view }: MapViewProps) => {\n const { meta, columns, rows, isLoading, bodyHeight, totalItemCount, state, hasNoRecords } = view;\n const { filterExpression, searchText, externalState } = state || {};\n const fullscreen = useFullscreenContext();\n const [translate] = useTranslate();\n const {\n base: {\n 'content-width': { xs }\n }\n } = useTheme();\n\n useEffect(() => {\n view.type.onPaginate({\n startIndex: 0,\n endIndex: view.resultsCount!,\n id: 'rootVirtualiser'\n });\n }, [view.type, view.resultsCount]);\n\n const listRef = useRef<HTMLUListElement>(null);\n const listContentRef = useRef<HTMLDivElement>(null);\n const domContainer = view.getDomContainer();\n\n const height = useMemo(\n () => getValueWithUnit(bodyHeight, meta.basicMode, meta.numberOfRows),\n [bodyHeight, meta.basicMode, meta.numberOfRows]\n );\n\n const maxHeight = useMemo(\n () =>\n getMaxHeight(\n calculateBodyMaxHeight(meta.height?.maxHeight, domContainer, listContentRef.current),\n meta.basicMode\n ),\n [meta.height?.maxHeight, meta.basicMode, domContainer]\n );\n\n const minHeight = useMemo(() => {\n if (meta.basicMode && totalItemCount === 0) {\n return '100px';\n }\n return '25rem';\n }, [meta.basicMode, totalItemCount]);\n\n return (\n <Card>\n <StyledCardContent>\n <Toolbar view={view} />\n <RenderView view={view} type={EXTERNAL_FILTERS} />\n <StyledViewContainer\n container={{\n cols: `repeat(auto-fit, minmax(${xs}, 1fr))`,\n autoRows: 'minmax(50%, 100%)'\n }}\n className='row-container'\n >\n <LocationView\n pins={getPins({\n mapFieldIds: meta.mapFieldIds,\n rows,\n columns\n })}\n height='auto'\n centerMapOnChange\n />\n <StyledReferencesSummaryList\n item={{ grow: 1 }}\n $style={{\n minHeight,\n ...(!fullscreen?.[0] && { height, maxHeight })\n }}\n >\n <StyledSummaryListContent\n loading={isLoading}\n aria-label={meta.title}\n role='region'\n ref={listContentRef}\n >\n {isLoading && <Progress placement='local' />}\n {!isLoading && !!rows?.length && (\n <ul ref={listRef}>\n {rows.map((row, index) => (\n <MapItem\n key={row.reactKey.toString()}\n columns={columns}\n itemIndex={index}\n row={row}\n labelFieldId={meta.mapFieldIds?.label}\n />\n ))}\n </ul>\n )}\n </StyledSummaryListContent>\n {domContainer && hasNoRecords && (\n <EmptyContainer\n message={\n isFilterApplied(\n { filterExpression, searchText, externalState },\n meta.externalFilters\n )\n ? translate('No records found')\n : translate('No records')\n }\n domContainer={domContainer}\n shouldAnnounce={false}\n />\n )}\n </StyledReferencesSummaryList>\n </StyledViewContainer>\n </StyledCardContent>\n </Card>\n );\n};\n\nexport default Map;\n"]}
|
|
@@ -1,5 +1,13 @@
|
|
|
1
1
|
export default TableA11y;
|
|
2
2
|
declare class TableA11y extends BaseA11y {
|
|
3
|
+
/**
|
|
4
|
+
* Checks if the given element is a header row.
|
|
5
|
+
*
|
|
6
|
+
* @param {HTMLElement} element - The element to check.
|
|
7
|
+
* @returns {boolean} True if the element is a header row, false otherwise.
|
|
8
|
+
* @static
|
|
9
|
+
*/
|
|
10
|
+
static isHeaderRow(element: HTMLElement): boolean;
|
|
3
11
|
constructor(selectors: any, focusableSelectors: any, customKeys: {} | undefined, container: any, announcePolite: any, translate: any, actionableSelectors: any, ariaLabel: any);
|
|
4
12
|
nextRowIndex: number | null;
|
|
5
13
|
nextColumnIndex: any;
|
|
@@ -44,6 +52,8 @@ declare class TableA11y extends BaseA11y {
|
|
|
44
52
|
isFirstDataRowInDOM(): boolean;
|
|
45
53
|
getFocusableElementOnCtrlHome(): any;
|
|
46
54
|
toggleStyleFormatAriaDescription(nextCol: any, currentCol: any): void;
|
|
55
|
+
onBlurHandler(event: any): void;
|
|
56
|
+
#private;
|
|
47
57
|
}
|
|
48
58
|
import { BaseA11y } from 'pega-repeating-structures-core';
|
|
49
59
|
//# sourceMappingURL=TableA11y.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TableA11y.d.ts","sourceRoot":"","sources":["../../../../Core/Views/Table/TableA11y.js"],"names":[],"mappings":";
|
|
1
|
+
{"version":3,"file":"TableA11y.d.ts","sourceRoot":"","sources":["../../../../Core/Views/Table/TableA11y.js"],"names":[],"mappings":";AA+BA;IAyxBE;;;;;;OAMG;IACH,4BAJW,WAAW,GACT,OAAO,CAKnB;IAjyBD,gLAoBC;IARC,4BAAwB;IACxB,qBAA2B;IAC3B,oBAAqB;IACrB,4BAA+B;IAC/B,oBAAoC;IACpC,eAA0B;IAC1B,+BAAkC;IAClC,uBAA0B;IAG5B,cAGC;IAED,wEAaC;IAED,8CAEC;IAED,kCAIC;IAED,6EAkBC;IAGD,wEA8BC;IAGD,gFA+BC;IAGD,iFA4BC;IAED,gFAYC;IAGD,wDAkBC;IAED,qGAmCC;IAED,yFASC;IAED,6CAsCC;IAED,+CAWC;IAED,kCAQC;IAED,6EAYC;IAGD,2CAKC;IAED,4GAeC;IAED,2JAkCC;IAGD,sIAmCC;IAED,0CAIC;IAED,qCAwCC;IAED,wFAsBC;IAED,+BAWC;IAED,kCAcC;IAED,sCAeC;IAED,6CAoBC;IAED,qCAkBC;IAGD,8BAkFC;IAmBD,qDAWC;IAED,+CAIC;IAwJD,4BA6CC;IAED,+BAEC;IAED,qCAcC;IAED,sEAqCC;IA2BD,gCAkBC;;CACF;yBAlhC4C,gCAAgC"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
var _a;
|
|
1
2
|
import { BaseA11y, rowErrorColumnMeta } from 'pega-repeating-structures-core';
|
|
2
3
|
const sortOrder = {
|
|
3
4
|
row: 'aria-rowindex',
|
|
@@ -5,12 +6,14 @@ const sortOrder = {
|
|
|
5
6
|
};
|
|
6
7
|
const TAB_INDEX = 'tabindex';
|
|
7
8
|
const DATA_INDEX = 'data-index';
|
|
9
|
+
const DATA_KEY = 'data-key';
|
|
8
10
|
const HEADER_MENU = '.header-menu';
|
|
9
11
|
const HEADER = 'header';
|
|
10
12
|
const ARIA_DESCRIBEDBY = 'aria-describedby';
|
|
11
13
|
function gainFocus(element) {
|
|
12
14
|
element.setAttribute(TAB_INDEX, 0);
|
|
13
15
|
element.focus();
|
|
16
|
+
element.scrollIntoView({ block: 'nearest', inline: 'nearest' });
|
|
14
17
|
}
|
|
15
18
|
function getHeaderColumnToFocusOnCtrlHome(columns) {
|
|
16
19
|
return columns.find(column => {
|
|
@@ -590,12 +593,148 @@ class TableA11y extends BaseA11y {
|
|
|
590
593
|
this.reset();
|
|
591
594
|
}
|
|
592
595
|
}
|
|
596
|
+
/**
|
|
597
|
+
* Finds the target row for focus restoration using a three-level fallback strategy.
|
|
598
|
+
*
|
|
599
|
+
* Note: This method is only called when focus was on a data row (rowIndex is defined).
|
|
600
|
+
* Header row focus is handled separately in #performFocusRestoration.
|
|
601
|
+
*
|
|
602
|
+
* This method attempts to locate a row in the following order:
|
|
603
|
+
* 1. By row key (data-key) - handles cases where row moved but wasn't deleted (e.g., moved between groups)
|
|
604
|
+
* 2. By row index (data-index) - handles same position restoration when row at that position exists
|
|
605
|
+
* 3. Last available row - handles last row deletion by falling back to the new last row (data or header)
|
|
606
|
+
*
|
|
607
|
+
* @param {number} rowIndex - The 0-based index of the row from focus snapshot (always defined when called).
|
|
608
|
+
* @param {string | undefined} rowKey - The unique key of the row from focus snapshot (may be undefined for grouped rows).
|
|
609
|
+
* @returns {HTMLElement | null} The target row element, or null if no rows exist in the table.
|
|
610
|
+
* @private
|
|
611
|
+
*/
|
|
612
|
+
#findTargetRowForRestoration(rowIndex, rowKey) {
|
|
613
|
+
let targetRow = null;
|
|
614
|
+
// If row key exists, it wasn't removed but position might be changed.(e.g. row moved from 1 group to another after edit operation)
|
|
615
|
+
if (rowKey) {
|
|
616
|
+
targetRow = this.container.querySelector(`[${DATA_KEY}="${rowKey}"]`);
|
|
617
|
+
}
|
|
618
|
+
// Try to find the row at the same position.
|
|
619
|
+
if (!targetRow) {
|
|
620
|
+
targetRow = this.container.querySelector(`[${DATA_INDEX}="${rowIndex}"]`);
|
|
621
|
+
}
|
|
622
|
+
// Fall back to the new last available row(it can be header row also if there is no data row)
|
|
623
|
+
if (!targetRow) {
|
|
624
|
+
const allRows = this.container.querySelectorAll(this.selectors.parentElementSelector);
|
|
625
|
+
targetRow = allRows[allRows.length - 1];
|
|
626
|
+
}
|
|
627
|
+
return targetRow;
|
|
628
|
+
}
|
|
629
|
+
/**
|
|
630
|
+
* Extracts a focusable element from the given element or returns the element itself.
|
|
631
|
+
*
|
|
632
|
+
* If the element contains exactly one focusable element, returns that element.
|
|
633
|
+
* Otherwise, returns the element itself for keyboard navigation.
|
|
634
|
+
*
|
|
635
|
+
* @param {HTMLElement | null} element - The element to extract focusable element from.
|
|
636
|
+
* @returns {HTMLElement | null} The focusable element if exactly one exists, otherwise the element itself, or null if element is null.
|
|
637
|
+
* @private
|
|
638
|
+
*/
|
|
639
|
+
#getFocusableOrElement(element) {
|
|
640
|
+
if (!element)
|
|
641
|
+
return null;
|
|
642
|
+
const focusables = this.getFocusableElementsInCell(element);
|
|
643
|
+
return focusables.length === 1 ? focusables[0] : element;
|
|
644
|
+
}
|
|
645
|
+
/**
|
|
646
|
+
* Finds the target cell within a given row.
|
|
647
|
+
*
|
|
648
|
+
* This method handles three types of rows:
|
|
649
|
+
* 1. Header rows - always focuses the first cell (colIndex 1)
|
|
650
|
+
* 2. Grouped rows - focuses the sticky group header element
|
|
651
|
+
* 3. Data rows - focuses the cell at the specified column index
|
|
652
|
+
*
|
|
653
|
+
* @param {HTMLElement} targetRow - The row element to find the cell within.
|
|
654
|
+
* @param {number} [colIndex=1] - The 1-based column index. Defaults to 1 for first column.
|
|
655
|
+
* @returns {HTMLElement | null} The focusable element within the target cell, or null if not found.
|
|
656
|
+
* @private
|
|
657
|
+
*/
|
|
658
|
+
#findTargetCell(targetRow, colIndex = 1) {
|
|
659
|
+
// 1. If it's a header row
|
|
660
|
+
if (_a.isHeaderRow(targetRow)) {
|
|
661
|
+
// If its header row, always move to first cell
|
|
662
|
+
colIndex = 1;
|
|
663
|
+
}
|
|
664
|
+
// 2. Try group header first, then fallback to column cell with colIndex.
|
|
665
|
+
const targetElement = targetRow.querySelector(this.selectors.stickyGroupHeaderSelector) ||
|
|
666
|
+
targetRow.querySelector(`[aria-colindex="${colIndex}"]`);
|
|
667
|
+
return this.#getFocusableOrElement(targetElement);
|
|
668
|
+
}
|
|
669
|
+
/**
|
|
670
|
+
* Checks if the given element is a header row.
|
|
671
|
+
*
|
|
672
|
+
* @param {HTMLElement} element - The element to check.
|
|
673
|
+
* @returns {boolean} True if the element is a header row, false otherwise.
|
|
674
|
+
* @static
|
|
675
|
+
*/
|
|
676
|
+
static isHeaderRow(element) {
|
|
677
|
+
return element.classList.contains(HEADER);
|
|
678
|
+
}
|
|
679
|
+
/**
|
|
680
|
+
* Gets the add button element from the table container.
|
|
681
|
+
*
|
|
682
|
+
* @returns {HTMLElement | null} The add button element, or null if not found.
|
|
683
|
+
* @private
|
|
684
|
+
*/
|
|
685
|
+
#getAddButton() {
|
|
686
|
+
// TODO: Embedded Data add button should be handled via this logic only. Currently being rendered outside of table.
|
|
687
|
+
return this.selectors.addActionSelector
|
|
688
|
+
? this.container.parentElement.querySelector(this.selectors.addActionSelector)
|
|
689
|
+
: null;
|
|
690
|
+
}
|
|
691
|
+
/**
|
|
692
|
+
* Restores focus using the captured focus snapshot.
|
|
693
|
+
*
|
|
694
|
+
* Attempts to restore focus to the most appropriate location:
|
|
695
|
+
* - For header rows: Restores focus to the same column in the header
|
|
696
|
+
* - For empty tables (header only): Focuses the add button if available, otherwise the header
|
|
697
|
+
* - For tables with data: Focuses the same or nearest row and column from the snapshot
|
|
698
|
+
*
|
|
699
|
+
* @private
|
|
700
|
+
*/
|
|
701
|
+
#performFocusRestoration() {
|
|
702
|
+
const { rowIndex, colIndex, rowKey } = this.focusState.focusSnapshot;
|
|
703
|
+
const wasHeaderRow = rowIndex === undefined;
|
|
704
|
+
// Early exit: if focus was on header row, restore to same column in header
|
|
705
|
+
if (wasHeaderRow) {
|
|
706
|
+
const cell = this.container.querySelector(`.${HEADER} [aria-colindex="${colIndex ?? 1}"]`);
|
|
707
|
+
const focusTarget = this.#getFocusableOrElement(cell);
|
|
708
|
+
if (focusTarget) {
|
|
709
|
+
gainFocus(focusTarget);
|
|
710
|
+
return;
|
|
711
|
+
}
|
|
712
|
+
}
|
|
713
|
+
// Handle data rows restoration with multiple fallbacks.
|
|
714
|
+
const targetRow = this.#findTargetRowForRestoration(rowIndex, rowKey);
|
|
715
|
+
if (!targetRow)
|
|
716
|
+
return;
|
|
717
|
+
// If targetRow is headerRow that means no data records available, check for Add action first to set the focus to add action.
|
|
718
|
+
let focusTarget = null;
|
|
719
|
+
if (_a.isHeaderRow(targetRow)) {
|
|
720
|
+
focusTarget = this.#getAddButton();
|
|
721
|
+
}
|
|
722
|
+
// Fallback to cell restoration if no add button was found.
|
|
723
|
+
if (!focusTarget) {
|
|
724
|
+
focusTarget = this.#findTargetCell(targetRow, colIndex);
|
|
725
|
+
}
|
|
726
|
+
if (focusTarget) {
|
|
727
|
+
gainFocus(focusTarget);
|
|
728
|
+
}
|
|
729
|
+
}
|
|
593
730
|
itemsLoadedCallback() {
|
|
731
|
+
// Handle ctrl+Home restoration (highest priority)
|
|
594
732
|
if (this.ctrlHomeKeyPressed) {
|
|
595
733
|
// ctrl+Home keypress happens on any cell but when initial rows are not present in container fetch happens for those rows
|
|
596
734
|
// on rerender of the container focus the row1 data col1 of the table
|
|
597
735
|
this.ctrlHomeKeyPressed = false;
|
|
598
736
|
this.handleCtrlHomeKeypress();
|
|
737
|
+
return;
|
|
599
738
|
}
|
|
600
739
|
// Below if condition is written to announce Loading completed once the table loader is hidden and we are also shifting the
|
|
601
740
|
// focus on firstfocusableelement once the table Loader is hidden
|
|
@@ -606,7 +745,9 @@ class TableA11y extends BaseA11y {
|
|
|
606
745
|
});
|
|
607
746
|
this.focusFirstElement();
|
|
608
747
|
this.isTableLoaderFocussed = false;
|
|
748
|
+
return;
|
|
609
749
|
}
|
|
750
|
+
// Handle dynamic loader restoration (second priority)
|
|
610
751
|
if (this.nextRowIndex && this.nextColumnIndex) {
|
|
611
752
|
const row = this.container.querySelector(`[${sortOrder.row}='${this.nextRowIndex}']`);
|
|
612
753
|
if (row) {
|
|
@@ -618,8 +759,16 @@ class TableA11y extends BaseA11y {
|
|
|
618
759
|
};
|
|
619
760
|
this.reset();
|
|
620
761
|
this.setFocusToCell(restoreFocusRef);
|
|
762
|
+
return;
|
|
621
763
|
}
|
|
622
764
|
}
|
|
765
|
+
// Handle focus restoration after row deletions (third priority)
|
|
766
|
+
const rootNode = this.container.getRootNode();
|
|
767
|
+
const focusOutsideContainer = !this.container.contains(rootNode.activeElement);
|
|
768
|
+
const isFocusLost = focusOutsideContainer && this.focusState.hadFocus;
|
|
769
|
+
if (isFocusLost) {
|
|
770
|
+
this.#performFocusRestoration();
|
|
771
|
+
}
|
|
623
772
|
}
|
|
624
773
|
isFirstDataRowInDOM() {
|
|
625
774
|
return !!this.container.querySelector(`[${DATA_INDEX}='0']`);
|
|
@@ -671,6 +820,42 @@ class TableA11y extends BaseA11y {
|
|
|
671
820
|
}
|
|
672
821
|
}
|
|
673
822
|
}
|
|
823
|
+
onFocusHandler() {
|
|
824
|
+
// Update focus snapshot on every on focus event.
|
|
825
|
+
super.onFocusHandler();
|
|
826
|
+
const rootNode = this.container.getRootNode();
|
|
827
|
+
if (rootNode instanceof Document || rootNode instanceof ShadowRoot) {
|
|
828
|
+
const activeElement = rootNode.activeElement;
|
|
829
|
+
const currentCol = activeElement?.closest(this.selectors.focusElementSelector);
|
|
830
|
+
const currentRow = activeElement?.closest(this.selectors.parentElementSelector);
|
|
831
|
+
// Ignoring header row. Capture snapshot for data rows only as of now.
|
|
832
|
+
if (currentRow) {
|
|
833
|
+
this.focusState.focusSnapshot.rowIndex = currentRow.getAttribute('data-index')
|
|
834
|
+
? parseInt(currentRow.getAttribute('data-index'), 10)
|
|
835
|
+
: undefined;
|
|
836
|
+
this.focusState.focusSnapshot.rowKey = currentRow.getAttribute('data-key') ?? undefined;
|
|
837
|
+
}
|
|
838
|
+
// Column may not be captured on every focus so preserve the last captured column.
|
|
839
|
+
if (currentCol) {
|
|
840
|
+
this.focusState.focusSnapshot.colIndex = parseInt(currentCol.getAttribute('aria-colindex'), 10);
|
|
841
|
+
}
|
|
842
|
+
}
|
|
843
|
+
}
|
|
844
|
+
onBlurHandler(event) {
|
|
845
|
+
const relatedTarget = event.relatedTarget;
|
|
846
|
+
// If focus moved to a loader, preserve hadFocus for restoration after loader completes
|
|
847
|
+
const tableLoader = this.container.querySelector(this.selectors.tableLoader);
|
|
848
|
+
const aboveLoader = this.container.querySelector(this.selectors.aboveLoader);
|
|
849
|
+
const belowLoader = this.container.querySelector(this.selectors.belowLoader);
|
|
850
|
+
if (relatedTarget === tableLoader ||
|
|
851
|
+
relatedTarget === aboveLoader ||
|
|
852
|
+
relatedTarget === belowLoader) {
|
|
853
|
+
return;
|
|
854
|
+
}
|
|
855
|
+
// Delegate to base class for standard blur handling (contains check and hadFocus update)
|
|
856
|
+
super.onBlurHandler(event);
|
|
857
|
+
}
|
|
674
858
|
}
|
|
859
|
+
_a = TableA11y;
|
|
675
860
|
export default TableA11y;
|
|
676
861
|
//# sourceMappingURL=TableA11y.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TableA11y.js","sourceRoot":"","sources":["../../../../Core/Views/Table/TableA11y.js"],"names":[],"mappings":"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","sourcesContent":["import { BaseA11y, rowErrorColumnMeta } from 'pega-repeating-structures-core';\n\nconst sortOrder = {\n row: 'aria-rowindex',\n column: 'aria-colindex'\n};\n\nconst TAB_INDEX = 'tabindex';\nconst DATA_INDEX = 'data-index';\nconst HEADER_MENU = '.header-menu';\nconst HEADER = 'header';\nconst ARIA_DESCRIBEDBY = 'aria-describedby';\n\nfunction gainFocus(element) {\n element.setAttribute(TAB_INDEX, 0);\n element.focus();\n}\n\nfunction getHeaderColumnToFocusOnCtrlHome(columns) {\n return columns.find(column => {\n return !!column.querySelector(HEADER_MENU);\n });\n}\n\nfunction setFocusToFocusableElementOrCell(focusableElements, cell) {\n if (focusableElements.length === 1) focusableElements[0].focus();\n else gainFocus(cell);\n}\n\nclass TableA11y extends BaseA11y {\n constructor(\n selectors,\n focusableSelectors,\n // eslint-disable-next-line default-param-last\n customKeys = {},\n container,\n announcePolite,\n translate,\n actionableSelectors,\n ariaLabel\n ) {\n super(selectors, focusableSelectors, customKeys, container, actionableSelectors, ariaLabel);\n this.nextRowIndex = null;\n this.nextColumnIndex = null;\n this.targetIndex = -2;\n this.ctrlHomeKeyPressed = false;\n this.announcePolite = announcePolite;\n this.translate = translate;\n this.isTableLoaderFocussed = false;\n this.dataEntryMode = false;\n }\n\n reset() {\n this.nextRowIndex = null;\n this.nextColumnIndex = null;\n }\n\n getFocusableElementsInCell(column, isCalledFromEsc = false) {\n if (column) {\n const scalarListTag = '.scalarlist-component';\n const scalarListComponent = column.querySelector(scalarListTag);\n if (scalarListComponent) return [scalarListComponent];\n const elementsInColumn = column.querySelectorAll(\n this.focusableSelectors.concat(this.actionableSelectors).join(',')\n );\n if (!isCalledFromEsc && elementsInColumn.length > 1) {\n return [];\n }\n return column.querySelectorAll(this.focusableSelectors.join(','));\n }\n }\n\n getActionableElementsInCell(column) {\n return column.querySelectorAll(this.actionableSelectors.join(','));\n }\n\n getSortedColumns(row) {\n return [...row.querySelectorAll(this.selectors.focusElementSelector)].sort(\n (colA, colB) => colA.getAttribute(sortOrder.column) - colB.getAttribute(sortOrder.column)\n );\n }\n\n handleRightKeyPressForExpandCollapseAll(selectAllSelector) {\n const row = this.container.querySelector(this.selectors.parentElementSelector);\n let firstActionMenuSelector;\n if (row) {\n const sortedColumns = this.getSortedColumns(row);\n if (sortedColumns.length > 0) {\n const firstSortedColumnSelector = sortedColumns[0];\n firstActionMenuSelector = this.getFocusableElementsInCell(firstSortedColumnSelector);\n if (firstActionMenuSelector.length > 0) {\n return gainFocus(firstActionMenuSelector[0]);\n }\n const selectAllCheckboxSelector = this.container.querySelectorAll(selectAllSelector);\n if (selectAllCheckboxSelector.length === 0 && firstActionMenuSelector.length === 0) {\n return gainFocus(firstSortedColumnSelector);\n }\n }\n }\n return null;\n }\n\n // Below method is added to handle key events for expand and collapse all button\n handleExpandCollapseAllEvents(event, selectAllSelector) {\n const { keyCode, shiftKey } = event;\n switch (keyCode) {\n case this.keys.RIGHT: {\n event.preventDefault();\n this.handleRightKeyPressForExpandCollapseAll(selectAllSelector);\n break;\n }\n case this.keys.DOWN: {\n event.preventDefault();\n const stickyCells = this.container.querySelector(this.selectors.stickyGroupHeaderSelector);\n const nextfirstCell = stickyCells;\n const nextfirstCellChild = nextfirstCell.nextSibling;\n gainFocus(nextfirstCellChild);\n break;\n }\n case this.keys.UP:\n case this.keys.LEFT:\n event.preventDefault();\n break;\n case this.keys.TAB: {\n const currentCol = this.container\n .getRootNode()\n .activeElement.closest(this.selectors.focusElementSelector);\n this.containerTabHandler(event, currentCol, shiftKey);\n break;\n }\n default:\n break;\n }\n }\n\n // Below method is added to add/remove aria-label for rows with errors. Aria-label is added on first focus and removed if traversing in the same row\n handleAnnouncementForErrors(nextItem, currentCol, keyCode) {\n let elementWithErrorMessage = currentCol.querySelector('[data-error-message-set]');\n elementWithErrorMessage = currentCol.dataset.errorMessageSet\n ? currentCol\n : elementWithErrorMessage;\n const ARIA_LABEL = 'aria-label';\n if (elementWithErrorMessage) {\n const { ariaLabel: previousAriaLabel } = elementWithErrorMessage.dataset ?? {};\n if (previousAriaLabel) elementWithErrorMessage.setAttribute(ARIA_LABEL, previousAriaLabel);\n else elementWithErrorMessage.removeAttribute(ARIA_LABEL);\n }\n\n if (\n (keyCode !== this.keys.UP && keyCode !== this.keys.DOWN) ||\n nextItem\n .closest(this.selectors.focusElementSelector)\n ?.classList.contains(rowErrorColumnMeta.options.classList[0])\n )\n return;\n\n let errorMessage = nextItem.closest(this.selectors.parentElementSelector)?.dataset.errorMessage;\n if (errorMessage) {\n if (!nextItem.classList.contains(this.selectors.focusElementSelector.split('.')[1])) {\n if (nextItem.hasAttribute(ARIA_LABEL)) {\n errorMessage += `, ${nextItem.getAttribute(ARIA_LABEL)}`;\n nextItem.dataset.ariaLabel = nextItem.getAttribute(ARIA_LABEL);\n } else errorMessage += `, ${nextItem.textContent}`;\n }\n nextItem.setAttribute(ARIA_LABEL, errorMessage);\n nextItem.dataset.errorMessageSet = true;\n }\n }\n\n // Below method is added to set the focus on expand and collapse all button if left arrow key is pressed from actions button or select all checkbox\n handleKeyleftForButtonMoreSelectAll(event, selectAllSelector) {\n const { keyCode } = event;\n const row = this.container.querySelector(this.selectors.parentElementSelector);\n let firstActionMenuSelector;\n if (row) {\n const sortedColumns = this.getSortedColumns(row);\n if (sortedColumns.length > 0) {\n const firstSortedColumnSelector = sortedColumns[0];\n firstActionMenuSelector = this.getFocusableElementsInCell(firstSortedColumnSelector);\n const selectAllCheckboxSelector = this.container.querySelectorAll(selectAllSelector);\n if (\n ((firstActionMenuSelector.length > 0 && event.target === firstActionMenuSelector[0]) ||\n (selectAllCheckboxSelector.length === 0 &&\n firstActionMenuSelector.length === 0 &&\n event.target === firstSortedColumnSelector)) &&\n keyCode === this.keys.LEFT &&\n this.container.querySelector(this.selectors.expandCollpaseAll)\n ) {\n const expandCollapseSelector = this.container.querySelector(\n this.selectors.expandCollpaseAll\n );\n const expandCollapseButton = this.getFocusableElementsInCell(expandCollapseSelector);\n gainFocus(expandCollapseButton[0]);\n return true;\n }\n }\n }\n return false;\n }\n\n handleScrollOnUpArrowForGroupHeaders(event, pContainerSelector) {\n const pContainer = this.container.querySelector(pContainerSelector);\n if (\n pContainer &&\n event.keyCode === this.keys.UP &&\n event.target.getBoundingClientRect().y -\n (pContainer.firstChild.getBoundingClientRect().y +\n pContainer.firstChild.getBoundingClientRect().height) <\n event.target.getBoundingClientRect().height * 2\n ) {\n pContainer.scrollTop -= event.target.getBoundingClientRect().height * 2;\n }\n }\n\n // Used to update this.targetIndex on keydown which is later used by handleGroupHeaderEvents\n updateTargetColumnIndexForGroupHeader(event) {\n const { target, keyCode } = event;\n if (\n this.targetIndex === null ||\n this.targetIndex === -1 ||\n keyCode === this.keys.UP ||\n keyCode === this.keys.DOWN\n ) {\n if (target.closest(this.selectors.expandCollpaseAll)) {\n this.targetIndex = -1;\n return;\n }\n const cell = target.closest(this.selectors.focusElementSelector);\n let row = target.closest(this.selectors.parentElementSelector);\n row = this.getSortedColumns(row);\n\n this.targetIndex = [...row].indexOf(cell);\n }\n }\n\n handleUpDownKeyPressForGroupHeader(keyCode, target, cellToFocus, event) {\n // If the group header is at the last row and DOWN key is press then\n if (\n keyCode === this.keys.DOWN &&\n target.closest(this.selectors.parentElementSelector).nextElementSibling === null\n ) {\n // if footer exists\n const footer = this.container.querySelector(this.selectors.footer);\n const index = this.targetIndex < 0 ? 0 : this.targetIndex;\n if (footer) {\n const cell = this.getSortedColumns(\n footer.querySelector(this.selectors.parentElementSelector)\n )[index];\n setFocusToFocusableElementOrCell(this.getFocusableElementsInCell(cell), cell);\n }\n return true;\n }\n // If the focus came to the group header from the expand all button\n if (keyCode === this.keys.UP && this.targetIndex === -1) {\n this.container.querySelector(this.selectors.expandCollpaseAll).children[0].focus();\n } else {\n event.preventDefault();\n // If initially the group header is clicked and the keyboard is used\n if (cellToFocus && !cellToFocus.hasAttribute('tabindex')) {\n cellToFocus.setAttribute('tabindex', -1);\n }\n // Flushing the -1 index\n if (keyCode === this.keys.DOWN && this.targetIndex === -1) {\n this.targetIndex = 0;\n }\n if (cellToFocus) {\n cellToFocus.focus();\n }\n }\n return true;\n }\n\n handleLeftRightKeyPressForGroupHeader(keyCode, target, cellToFocus) {\n if (cellToFocus && !cellToFocus.hasAttribute('tabindex')) {\n cellToFocus.setAttribute('tabindex', -1);\n }\n\n if (!this.targetIndex) this.targetIndex = 0;\n if (cellToFocus) {\n setFocusToFocusableElementOrCell(this.getFocusableElementsInCell(cellToFocus), cellToFocus);\n }\n }\n\n handleGroupHeaderEvents(event) {\n const { keyCode, target, ctrlKey } = event;\n const index = this.targetIndex < 0 ? 0 : this.targetIndex;\n const cellToFocus = this.getSortedColumns(target.closest(this.selectors.parentElementSelector))[\n index\n ];\n\n switch (keyCode) {\n case this.keys.UP:\n case this.keys.DOWN: {\n return this.handleUpDownKeyPressForGroupHeader(keyCode, target, cellToFocus, event);\n }\n case this.keys.RIGHT:\n {\n // To Prevent Scrolling\n event.preventDefault();\n const row = target.closest(this.selectors.parentElementSelector);\n if (row.querySelector('.aggregate-button')) {\n const firstFocusableElementInRow = this.getSortedColumns(row)[0];\n this.handleLeftRightKeyPressForGroupHeader(keyCode, target, firstFocusableElementInRow);\n return false;\n }\n }\n break;\n case this.keys.TAB:\n if (cellToFocus) {\n cellToFocus.focus();\n }\n break;\n case this.keys.HOME:\n if (ctrlKey) {\n this.handleCtrlHomeKeypress();\n }\n break;\n default:\n break;\n }\n return true;\n }\n\n checkEventsForGroupHeader(event) {\n if (\n event.target &&\n (event.target.closest(this.selectors.focusElementSelector) ||\n event.target.closest(this.selectors.expandCollpaseAll))\n ) {\n this.updateTargetColumnIndexForGroupHeader(event);\n } else if (event.target && event.target.closest(this.selectors.stickyGroupHeaderSelector)) {\n return this.handleGroupHeaderEvents(event);\n }\n return true;\n }\n\n stopEventHandler(event) {\n return (\n event.target.getAttribute('data-context-menu-active') === 'true' ||\n (!event.target.closest(this.selectors.stickyGroupHeaderSelector) &&\n event.target.getAttribute('aria-expanded')) === 'true' ||\n event.target.closest('.popper') ||\n !Object.values(this.keys).includes(event.keyCode)\n );\n }\n\n handleLeftKeyPressOnAggregateCells(target, aggregateCell) {\n const firstCell = this.getSortedColumns(\n target.closest(this.selectors.parentElementSelector)\n )[0];\n if (firstCell === target.closest(aggregateCell)) {\n const groupHeaderButton = target\n .closest(this.selectors.parentElementSelector)\n ?.querySelector('.stickyGroupHeader > button');\n groupHeaderButton.focus();\n return false;\n }\n return true;\n }\n\n // eslint-disable-next-line class-methods-use-this\n isAccessibleElement(element) {\n return (\n !(element.hasAttribute('aria-hidden') && element.getAttribute('aria-hidden') === 'true') &&\n !(element.hasAttribute(TAB_INDEX) && element.getAttribute(TAB_INDEX) === '-1')\n );\n }\n\n getNextAccessibleElement(cellInputableElements, shiftKey = false, currentElementIndex = -1) {\n if (shiftKey) {\n cellInputableElements = [...cellInputableElements]\n .reverse()\n .slice(\n currentElementIndex !== -1 ? cellInputableElements.length - currentElementIndex : 0,\n cellInputableElements.length\n );\n } else {\n cellInputableElements = [...cellInputableElements].slice(\n currentElementIndex + 1,\n cellInputableElements.length\n );\n }\n return cellInputableElements.find(element => this.isAccessibleElement(element));\n }\n\n getAdjacentColumnCell(\n shiftKey,\n currentColumnIndex,\n currentEleParentIndex,\n sortedColumns,\n parentElements,\n currentCol\n ) {\n let nextColumnCell = null;\n if (shiftKey) {\n if (currentColumnIndex - 1 >= 0) {\n nextColumnCell = sortedColumns[sortedColumns.indexOf(currentCol) - 1];\n } else if (currentEleParentIndex - 1 >= 0) {\n sortedColumns = [\n ...parentElements[currentEleParentIndex - 1].querySelectorAll(\n this.selectors.focusElementSelector\n )\n ];\n currentEleParentIndex -= 1;\n nextColumnCell = sortedColumns[sortedColumns.length - 1];\n }\n } else if (currentColumnIndex + 1 < sortedColumns.length) {\n nextColumnCell = sortedColumns[sortedColumns.indexOf(currentCol) + 1];\n } else if (currentEleParentIndex + 1 < parentElements.length) {\n sortedColumns = [\n ...parentElements[currentEleParentIndex + 1].querySelectorAll(\n this.selectors.focusElementSelector\n )\n ];\n currentEleParentIndex += 1;\n\n nextColumnCell = sortedColumns[0];\n }\n return [nextColumnCell, sortedColumns, currentEleParentIndex];\n }\n\n // This method is to recursively find the next column cell with actionable or focusable elements and skip any empty cells\n getNextColumnCellInTaborder(\n sortedColumns,\n currentCol,\n shiftKey,\n parentElements,\n currentEleParentIndex\n ) {\n if (!currentCol) {\n return null;\n }\n let nextColumnCell = null;\n const currentColumnIndex = sortedColumns.indexOf(currentCol);\n [nextColumnCell, sortedColumns, currentEleParentIndex] = this.getAdjacentColumnCell(\n shiftKey,\n currentColumnIndex,\n currentEleParentIndex,\n sortedColumns,\n parentElements,\n currentCol\n );\n const elements =\n nextColumnCell &&\n nextColumnCell.querySelectorAll(\n [...this.actionableSelectors, ...this.focusableSelectors].join(',')\n );\n if (elements?.length) {\n return nextColumnCell;\n }\n return this.getNextColumnCellInTaborder(\n sortedColumns,\n nextColumnCell,\n shiftKey,\n parentElements,\n currentEleParentIndex\n );\n }\n\n isFocusableElement(element) {\n const colItem = element?.closest(this.selectors.focusElementSelector);\n if (!colItem) return false;\n return [...colItem.querySelectorAll(this.focusableSelectors.join(','))].includes(element);\n }\n\n handleTabKey(shiftKey) {\n const parentElements = this.container.querySelectorAll(this.selectors.parentElementSelector);\n const rootNode = this.container.getRootNode();\n const currentCol = rootNode.activeElement?.closest(this.selectors.focusElementSelector);\n const currentEleParentIndex = [...parentElements].indexOf(\n currentCol.closest(this.selectors.parentElementSelector)\n );\n const currentColumnElements = Array.from(\n currentCol.querySelectorAll(\n [...this.actionableSelectors, ...this.focusableSelectors].join(',')\n )\n );\n const currentEleIndex = currentColumnElements.indexOf(rootNode.activeElement);\n\n const sortedColumns = this.getSortedColumns(\n currentCol.closest(this.selectors.parentElementSelector)\n );\n\n const nextColumnCell = this.getNextColumnCellInTaborder(\n sortedColumns,\n currentCol,\n shiftKey,\n parentElements,\n currentEleParentIndex\n );\n\n if (\n (!shiftKey && currentEleIndex + 1 < currentColumnElements.length) ||\n (shiftKey && currentEleIndex - 1 >= 0)\n ) {\n return false;\n }\n if (nextColumnCell) {\n const nextColumnCellElements = nextColumnCell.querySelectorAll(\n [...this.actionableSelectors, ...this.focusableSelectors].join(',')\n );\n if (nextColumnCellElements.length !== 0) return false;\n }\n this.updateDataEntry();\n return true;\n }\n\n updateDataEntry(updateForHandler, focusElements, nextFocusElement) {\n switch (updateForHandler) {\n case 'click':\n if (focusElements.length === 1) {\n const hasFocusableElement = Array.from(focusElements).some(element =>\n this.focusableSelectors.some(selector => element.matches(selector))\n );\n this.dataEntryMode = !hasFocusableElement;\n } else if (nextFocusElement) {\n this.dataEntryMode = true;\n } else {\n this.dataEntryMode = false;\n }\n break;\n\n case 'enter':\n this.dataEntryMode = true;\n break;\n\n default:\n this.dataEntryMode = false;\n }\n }\n\n clickHandler(event) {\n const cell = event?.target?.closest(this.selectors.focusElementSelector);\n if (cell && cell !== event.target) {\n const focusElements = cell.querySelectorAll(\n this.focusableSelectors.concat(this.actionableSelectors).join(',')\n );\n const nextFocusElement = this.getNextAccessibleElement(focusElements);\n this.updateDataEntry('click', focusElements, nextFocusElement);\n } else {\n this.updateDataEntry();\n }\n }\n\n handleEnterKey(target) {\n const focusElements = target.querySelectorAll(\n this.focusableSelectors.concat(this.actionableSelectors).join(',')\n );\n const nextFocusElement = this.getNextAccessibleElement(focusElements);\n // register escape event for RTE to support event bubbling\n if (nextFocusElement?.nodeName === 'IFRAME') {\n this.registerEscapeEventForRTE(nextFocusElement);\n target.tabIndex = -1;\n } else if (nextFocusElement) {\n this.updateDataEntry('enter');\n gainFocus(nextFocusElement);\n target.tabIndex = -1;\n }\n }\n\n handleEscapeKey(target) {\n const cell = target.closest(this.selectors.focusElementSelector);\n if (\n cell &&\n (this.getFocusableElementsInCell(cell, true).length > 1 ||\n this.getActionableElementsInCell(cell).length >= 1)\n ) {\n this.updateDataEntry();\n gainFocus(cell);\n }\n if (this.getFocusableElementsInCell(cell, true).length === 1) {\n this.updateDataEntry();\n }\n\n return !cell;\n }\n\n registerEscapeEventForRTE(target) {\n const iframeContent = target.contentWindow || target.contentDocument;\n if (iframeContent?.document) {\n this.updateDataEntry('enter');\n iframeContent.document.querySelector(\"[contenteditable='true']\").focus();\n if (!iframeContent.document.escapeKeyHandlerInjected) {\n iframeContent.document.addEventListener('keydown', event => {\n if (event.keyCode === this.keys.ESCAPE) {\n const escapeEvent = new KeyboardEvent('keydown', {\n key: 'Escape',\n code: 'Escape',\n keyCode: this.keys.ESCAPE,\n bubbles: true\n });\n target.dispatchEvent(escapeEvent);\n }\n });\n }\n iframeContent.document.escapeKeyHandlerInjected = true;\n }\n }\n\n tableLoaderHandler(event) {\n const { keyCode } = event;\n switch (keyCode) {\n case this.keys.LEFT:\n case this.keys.RIGHT:\n case this.keys.UP:\n case this.keys.DOWN: {\n event.preventDefault();\n break;\n }\n case this.keys.TAB: {\n this.tabHandler(event);\n this.isTableLoaderFocussed = false;\n break;\n }\n default:\n break;\n }\n }\n\n // Below method is overridden to handle key events for expand and collapse all button, group headers\n a11yHandler(event) {\n const buttonMoreSelector = '.button-more';\n const selectAllSelector = '.select-all-checkbox';\n const selectHeaderWithoutCheckbox = '.row-select-handle';\n const pContainerSelector = '.pContainer';\n const aggregateCell = '.aggregateCell';\n const rootNode = this.container.getRootNode();\n let shouldCallSuper = true;\n const tableLoader = this.container.querySelector(this.selectors.tableLoader);\n const currentCol = rootNode.activeElement.closest(this.selectors.focusElementSelector);\n\n // Handling the key handling events for Loading indicator\n if (tableLoader && tableLoader === event.target) {\n this.tableLoaderHandler(event);\n return;\n }\n\n // Handling events related to group header\n if (this.container.querySelector(this.selectors.stickyGroupHeaderSelector)) {\n shouldCallSuper = this.checkEventsForGroupHeader(event);\n }\n\n // To handle left click from first aggregate cell\n if (event.target && event.target.closest(aggregateCell) && event.keyCode === this.keys.LEFT) {\n shouldCallSuper = this.handleLeftKeyPressOnAggregateCells(event.target, aggregateCell);\n }\n\n // Arrow key handlers restriction for data entry mode\n if (\n event.target &&\n this.dataEntryMode &&\n currentCol !== rootNode.activeElement &&\n (event.keyCode === this.keys.RIGHT ||\n event.keyCode === this.keys.LEFT ||\n event.keyCode === this.keys.UP ||\n event.keyCode === this.keys.DOWN)\n ) {\n return;\n }\n // Enter key handler\n if (event.target && event.keyCode === this.keys.ENTER) {\n this.handleEnterKey(event.target);\n }\n\n // Escape key handler\n if (event.target && event.keyCode === this.keys.ESCAPE) {\n this.handleEscapeKey(event.target);\n }\n\n // Tab key handler\n if (\n event.target &&\n event.keyCode === this.keys.TAB &&\n this.dataEntryMode &&\n currentCol !== rootNode.activeElement\n ) {\n shouldCallSuper = this.handleTabKey(event.shiftKey);\n }\n\n if (!shouldCallSuper) return;\n\n // Handling events for expand and collapse all button & handling scrolling for group header\n if (event.target && event.target.closest(this.selectors.expandCollpaseAll)) {\n this.handleExpandCollapseAllEvents(event, selectAllSelector);\n return;\n }\n if (event.target && event.target.closest(this.selectors.stickyGroupHeaderSelector)) {\n this.handleScrollOnUpArrowForGroupHeaders(event, pContainerSelector);\n }\n if (\n event.target &&\n (event.target.closest(buttonMoreSelector) ||\n event.target.closest(selectAllSelector) ||\n event.target.closest(selectHeaderWithoutCheckbox))\n ) {\n if (!this.handleKeyleftForButtonMoreSelectAll(event, selectAllSelector)) {\n // if focus is not handed in handleKeyLeftForButtonMoreSelectAll then invoke super.a11yHandler\n super.a11yHandler(event);\n }\n return;\n }\n super.a11yHandler(event);\n }\n\n // Below method is overridden to set the focus on expand and collapse all button if grouping is applied, to set the focus on table loader if navigated from toolbar by pressing tab key\n focusFirstElement() {\n if (this.container.querySelector(this.selectors.tableLoader)) {\n const tableLoadingIndicator = this.container.querySelector(this.selectors.tableLoader);\n tableLoadingIndicator.focus();\n this.isTableLoaderFocussed = true;\n return;\n }\n if (this.container.querySelector(this.selectors.expandCollpaseAll)) {\n const expandCollapseSelector = this.container.querySelector(this.selectors.expandCollpaseAll);\n const expandCollapseButton = this.getFocusableElementsInCell(expandCollapseSelector);\n gainFocus(expandCollapseButton[0]);\n return;\n }\n super.focusFirstElement();\n }\n\n setFocusOnLoader(loader, currentCol) {\n super.setFocusOnLoader(loader, currentCol);\n const nextRowIndexDirection = loader.classList.contains(this.selectors.aboveLoader.substr(1))\n ? -1\n : 1;\n this.nextColumnIndex = currentCol.getAttribute(sortOrder.column);\n this.nextRowIndex =\n parseInt(\n currentCol.closest(this.selectors.parentElementSelector).getAttribute(sortOrder.row),\n 10\n ) + nextRowIndexDirection;\n }\n\n dynamicLoadersKeyDownHandler(event) {\n if (super.dynamicLoadersKeyDownHandler(event)) {\n this.reset();\n }\n }\n\n itemsLoadedCallback() {\n if (this.ctrlHomeKeyPressed) {\n // ctrl+Home keypress happens on any cell but when initial rows are not present in container fetch happens for those rows\n // on rerender of the container focus the row1 data col1 of the table\n this.ctrlHomeKeyPressed = false;\n this.handleCtrlHomeKeypress();\n }\n // Below if condition is written to announce Loading completed once the table loader is hidden and we are also shifting the\n // focus on firstfocusableelement once the table Loader is hidden\n if (this.isTableLoaderFocussed && !this.container.querySelector(this.selectors.tableLoader)) {\n this.announcePolite({\n message: this.translate('Loading completed'),\n type: 'info'\n });\n this.focusFirstElement();\n this.isTableLoaderFocussed = false;\n }\n if (this.nextRowIndex && this.nextColumnIndex) {\n const row = this.container.querySelector(`[${sortOrder.row}='${this.nextRowIndex}']`);\n if (row) {\n const column = row.querySelector(`[${sortOrder.column}='${this.nextColumnIndex}']`);\n const restoreFocusRef = {\n columnIndex: [\n ...this.container.querySelectorAll(this.selectors.focusElementSelector)\n ].indexOf(column)\n };\n this.reset();\n this.setFocusToCell(restoreFocusRef);\n }\n }\n }\n\n isFirstDataRowInDOM() {\n return !!this.container.querySelector(`[${DATA_INDEX}='0']`);\n }\n\n getFocusableElementOnCtrlHome() {\n if (this.isFirstDataRowInDOM() && this.selectors.parentElementSelector) {\n const firstRow = this.container.querySelector(this.selectors.parentElementSelector);\n const sortedColumns = this.getSortedColumns(firstRow);\n if (firstRow.classList.contains(HEADER)) {\n // when header row is present focus first data column in the header\n return getHeaderColumnToFocusOnCtrlHome(sortedColumns);\n }\n // when there's no header focus row2 col1 element\n return sortedColumns[0];\n }\n // fetch 1st set of rows by setting scrollTop to 0 & then focus (handled in itemsLoadedCallback)\n this.ctrlHomeKeyPressed = true;\n return null;\n }\n\n toggleStyleFormatAriaDescription(nextCol, currentCol) {\n const nextColFocusableElements = this.getFocusableElementsInCell(nextCol);\n const currentColFocusableElements = this.getFocusableElementsInCell(currentCol);\n\n if (nextColFocusableElements.length === 1) {\n const nextFocusableElement = nextColFocusableElements[0];\n const nextElementAriaDescribedby = nextFocusableElement.getAttribute(ARIA_DESCRIBEDBY);\n\n const styleFormatId = nextCol.getAttribute('data-style-format');\n if (styleFormatId) {\n const combinedAriaDescribedby = [styleFormatId, nextElementAriaDescribedby]\n .filter(Boolean)\n .join(' ');\n nextFocusableElement.setAttribute(ARIA_DESCRIBEDBY, combinedAriaDescribedby);\n }\n }\n\n if (currentColFocusableElements.length === 1) {\n const currentFocusableElement = currentColFocusableElements[0];\n\n let originalAriaDescribedby = [];\n const currentAriaDescribedby = currentFocusableElement.getAttribute(ARIA_DESCRIBEDBY);\n if (currentAriaDescribedby) {\n originalAriaDescribedby = currentAriaDescribedby\n .split(' ')\n .filter(\n ariaDescribedby => ariaDescribedby !== currentCol.getAttribute('data-style-format')\n )\n .filter(Boolean);\n }\n\n if (originalAriaDescribedby.length) {\n currentFocusableElement.setAttribute(ARIA_DESCRIBEDBY, originalAriaDescribedby.join(' '));\n } else {\n currentFocusableElement.removeAttribute(ARIA_DESCRIBEDBY);\n }\n }\n }\n}\n\nexport default TableA11y;\n"]}
|
|
1
|
+
{"version":3,"file":"TableA11y.js","sourceRoot":"","sources":["../../../../Core/Views/Table/TableA11y.js"],"names":[],"mappings":"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","sourcesContent":["import { BaseA11y, rowErrorColumnMeta } from 'pega-repeating-structures-core';\n\nconst sortOrder = {\n row: 'aria-rowindex',\n column: 'aria-colindex'\n};\n\nconst TAB_INDEX = 'tabindex';\nconst DATA_INDEX = 'data-index';\nconst DATA_KEY = 'data-key';\nconst HEADER_MENU = '.header-menu';\nconst HEADER = 'header';\nconst ARIA_DESCRIBEDBY = 'aria-describedby';\n\nfunction gainFocus(element) {\n element.setAttribute(TAB_INDEX, 0);\n element.focus();\n element.scrollIntoView({ block: 'nearest', inline: 'nearest' });\n}\n\nfunction getHeaderColumnToFocusOnCtrlHome(columns) {\n return columns.find(column => {\n return !!column.querySelector(HEADER_MENU);\n });\n}\n\nfunction setFocusToFocusableElementOrCell(focusableElements, cell) {\n if (focusableElements.length === 1) focusableElements[0].focus();\n else gainFocus(cell);\n}\n\nclass TableA11y extends BaseA11y {\n constructor(\n selectors,\n focusableSelectors,\n // eslint-disable-next-line default-param-last\n customKeys = {},\n container,\n announcePolite,\n translate,\n actionableSelectors,\n ariaLabel\n ) {\n super(selectors, focusableSelectors, customKeys, container, actionableSelectors, ariaLabel);\n this.nextRowIndex = null;\n this.nextColumnIndex = null;\n this.targetIndex = -2;\n this.ctrlHomeKeyPressed = false;\n this.announcePolite = announcePolite;\n this.translate = translate;\n this.isTableLoaderFocussed = false;\n this.dataEntryMode = false;\n }\n\n reset() {\n this.nextRowIndex = null;\n this.nextColumnIndex = null;\n }\n\n getFocusableElementsInCell(column, isCalledFromEsc = false) {\n if (column) {\n const scalarListTag = '.scalarlist-component';\n const scalarListComponent = column.querySelector(scalarListTag);\n if (scalarListComponent) return [scalarListComponent];\n const elementsInColumn = column.querySelectorAll(\n this.focusableSelectors.concat(this.actionableSelectors).join(',')\n );\n if (!isCalledFromEsc && elementsInColumn.length > 1) {\n return [];\n }\n return column.querySelectorAll(this.focusableSelectors.join(','));\n }\n }\n\n getActionableElementsInCell(column) {\n return column.querySelectorAll(this.actionableSelectors.join(','));\n }\n\n getSortedColumns(row) {\n return [...row.querySelectorAll(this.selectors.focusElementSelector)].sort(\n (colA, colB) => colA.getAttribute(sortOrder.column) - colB.getAttribute(sortOrder.column)\n );\n }\n\n handleRightKeyPressForExpandCollapseAll(selectAllSelector) {\n const row = this.container.querySelector(this.selectors.parentElementSelector);\n let firstActionMenuSelector;\n if (row) {\n const sortedColumns = this.getSortedColumns(row);\n if (sortedColumns.length > 0) {\n const firstSortedColumnSelector = sortedColumns[0];\n firstActionMenuSelector = this.getFocusableElementsInCell(firstSortedColumnSelector);\n if (firstActionMenuSelector.length > 0) {\n return gainFocus(firstActionMenuSelector[0]);\n }\n const selectAllCheckboxSelector = this.container.querySelectorAll(selectAllSelector);\n if (selectAllCheckboxSelector.length === 0 && firstActionMenuSelector.length === 0) {\n return gainFocus(firstSortedColumnSelector);\n }\n }\n }\n return null;\n }\n\n // Below method is added to handle key events for expand and collapse all button\n handleExpandCollapseAllEvents(event, selectAllSelector) {\n const { keyCode, shiftKey } = event;\n switch (keyCode) {\n case this.keys.RIGHT: {\n event.preventDefault();\n this.handleRightKeyPressForExpandCollapseAll(selectAllSelector);\n break;\n }\n case this.keys.DOWN: {\n event.preventDefault();\n const stickyCells = this.container.querySelector(this.selectors.stickyGroupHeaderSelector);\n const nextfirstCell = stickyCells;\n const nextfirstCellChild = nextfirstCell.nextSibling;\n gainFocus(nextfirstCellChild);\n break;\n }\n case this.keys.UP:\n case this.keys.LEFT:\n event.preventDefault();\n break;\n case this.keys.TAB: {\n const currentCol = this.container\n .getRootNode()\n .activeElement.closest(this.selectors.focusElementSelector);\n this.containerTabHandler(event, currentCol, shiftKey);\n break;\n }\n default:\n break;\n }\n }\n\n // Below method is added to add/remove aria-label for rows with errors. Aria-label is added on first focus and removed if traversing in the same row\n handleAnnouncementForErrors(nextItem, currentCol, keyCode) {\n let elementWithErrorMessage = currentCol.querySelector('[data-error-message-set]');\n elementWithErrorMessage = currentCol.dataset.errorMessageSet\n ? currentCol\n : elementWithErrorMessage;\n const ARIA_LABEL = 'aria-label';\n if (elementWithErrorMessage) {\n const { ariaLabel: previousAriaLabel } = elementWithErrorMessage.dataset ?? {};\n if (previousAriaLabel) elementWithErrorMessage.setAttribute(ARIA_LABEL, previousAriaLabel);\n else elementWithErrorMessage.removeAttribute(ARIA_LABEL);\n }\n\n if (\n (keyCode !== this.keys.UP && keyCode !== this.keys.DOWN) ||\n nextItem\n .closest(this.selectors.focusElementSelector)\n ?.classList.contains(rowErrorColumnMeta.options.classList[0])\n )\n return;\n\n let errorMessage = nextItem.closest(this.selectors.parentElementSelector)?.dataset.errorMessage;\n if (errorMessage) {\n if (!nextItem.classList.contains(this.selectors.focusElementSelector.split('.')[1])) {\n if (nextItem.hasAttribute(ARIA_LABEL)) {\n errorMessage += `, ${nextItem.getAttribute(ARIA_LABEL)}`;\n nextItem.dataset.ariaLabel = nextItem.getAttribute(ARIA_LABEL);\n } else errorMessage += `, ${nextItem.textContent}`;\n }\n nextItem.setAttribute(ARIA_LABEL, errorMessage);\n nextItem.dataset.errorMessageSet = true;\n }\n }\n\n // Below method is added to set the focus on expand and collapse all button if left arrow key is pressed from actions button or select all checkbox\n handleKeyleftForButtonMoreSelectAll(event, selectAllSelector) {\n const { keyCode } = event;\n const row = this.container.querySelector(this.selectors.parentElementSelector);\n let firstActionMenuSelector;\n if (row) {\n const sortedColumns = this.getSortedColumns(row);\n if (sortedColumns.length > 0) {\n const firstSortedColumnSelector = sortedColumns[0];\n firstActionMenuSelector = this.getFocusableElementsInCell(firstSortedColumnSelector);\n const selectAllCheckboxSelector = this.container.querySelectorAll(selectAllSelector);\n if (\n ((firstActionMenuSelector.length > 0 && event.target === firstActionMenuSelector[0]) ||\n (selectAllCheckboxSelector.length === 0 &&\n firstActionMenuSelector.length === 0 &&\n event.target === firstSortedColumnSelector)) &&\n keyCode === this.keys.LEFT &&\n this.container.querySelector(this.selectors.expandCollpaseAll)\n ) {\n const expandCollapseSelector = this.container.querySelector(\n this.selectors.expandCollpaseAll\n );\n const expandCollapseButton = this.getFocusableElementsInCell(expandCollapseSelector);\n gainFocus(expandCollapseButton[0]);\n return true;\n }\n }\n }\n return false;\n }\n\n handleScrollOnUpArrowForGroupHeaders(event, pContainerSelector) {\n const pContainer = this.container.querySelector(pContainerSelector);\n if (\n pContainer &&\n event.keyCode === this.keys.UP &&\n event.target.getBoundingClientRect().y -\n (pContainer.firstChild.getBoundingClientRect().y +\n pContainer.firstChild.getBoundingClientRect().height) <\n event.target.getBoundingClientRect().height * 2\n ) {\n pContainer.scrollTop -= event.target.getBoundingClientRect().height * 2;\n }\n }\n\n // Used to update this.targetIndex on keydown which is later used by handleGroupHeaderEvents\n updateTargetColumnIndexForGroupHeader(event) {\n const { target, keyCode } = event;\n if (\n this.targetIndex === null ||\n this.targetIndex === -1 ||\n keyCode === this.keys.UP ||\n keyCode === this.keys.DOWN\n ) {\n if (target.closest(this.selectors.expandCollpaseAll)) {\n this.targetIndex = -1;\n return;\n }\n const cell = target.closest(this.selectors.focusElementSelector);\n let row = target.closest(this.selectors.parentElementSelector);\n row = this.getSortedColumns(row);\n\n this.targetIndex = [...row].indexOf(cell);\n }\n }\n\n handleUpDownKeyPressForGroupHeader(keyCode, target, cellToFocus, event) {\n // If the group header is at the last row and DOWN key is press then\n if (\n keyCode === this.keys.DOWN &&\n target.closest(this.selectors.parentElementSelector).nextElementSibling === null\n ) {\n // if footer exists\n const footer = this.container.querySelector(this.selectors.footer);\n const index = this.targetIndex < 0 ? 0 : this.targetIndex;\n if (footer) {\n const cell = this.getSortedColumns(\n footer.querySelector(this.selectors.parentElementSelector)\n )[index];\n setFocusToFocusableElementOrCell(this.getFocusableElementsInCell(cell), cell);\n }\n return true;\n }\n // If the focus came to the group header from the expand all button\n if (keyCode === this.keys.UP && this.targetIndex === -1) {\n this.container.querySelector(this.selectors.expandCollpaseAll).children[0].focus();\n } else {\n event.preventDefault();\n // If initially the group header is clicked and the keyboard is used\n if (cellToFocus && !cellToFocus.hasAttribute('tabindex')) {\n cellToFocus.setAttribute('tabindex', -1);\n }\n // Flushing the -1 index\n if (keyCode === this.keys.DOWN && this.targetIndex === -1) {\n this.targetIndex = 0;\n }\n if (cellToFocus) {\n cellToFocus.focus();\n }\n }\n return true;\n }\n\n handleLeftRightKeyPressForGroupHeader(keyCode, target, cellToFocus) {\n if (cellToFocus && !cellToFocus.hasAttribute('tabindex')) {\n cellToFocus.setAttribute('tabindex', -1);\n }\n\n if (!this.targetIndex) this.targetIndex = 0;\n if (cellToFocus) {\n setFocusToFocusableElementOrCell(this.getFocusableElementsInCell(cellToFocus), cellToFocus);\n }\n }\n\n handleGroupHeaderEvents(event) {\n const { keyCode, target, ctrlKey } = event;\n const index = this.targetIndex < 0 ? 0 : this.targetIndex;\n const cellToFocus = this.getSortedColumns(target.closest(this.selectors.parentElementSelector))[\n index\n ];\n\n switch (keyCode) {\n case this.keys.UP:\n case this.keys.DOWN: {\n return this.handleUpDownKeyPressForGroupHeader(keyCode, target, cellToFocus, event);\n }\n case this.keys.RIGHT:\n {\n // To Prevent Scrolling\n event.preventDefault();\n const row = target.closest(this.selectors.parentElementSelector);\n if (row.querySelector('.aggregate-button')) {\n const firstFocusableElementInRow = this.getSortedColumns(row)[0];\n this.handleLeftRightKeyPressForGroupHeader(keyCode, target, firstFocusableElementInRow);\n return false;\n }\n }\n break;\n case this.keys.TAB:\n if (cellToFocus) {\n cellToFocus.focus();\n }\n break;\n case this.keys.HOME:\n if (ctrlKey) {\n this.handleCtrlHomeKeypress();\n }\n break;\n default:\n break;\n }\n return true;\n }\n\n checkEventsForGroupHeader(event) {\n if (\n event.target &&\n (event.target.closest(this.selectors.focusElementSelector) ||\n event.target.closest(this.selectors.expandCollpaseAll))\n ) {\n this.updateTargetColumnIndexForGroupHeader(event);\n } else if (event.target && event.target.closest(this.selectors.stickyGroupHeaderSelector)) {\n return this.handleGroupHeaderEvents(event);\n }\n return true;\n }\n\n stopEventHandler(event) {\n return (\n event.target.getAttribute('data-context-menu-active') === 'true' ||\n (!event.target.closest(this.selectors.stickyGroupHeaderSelector) &&\n event.target.getAttribute('aria-expanded')) === 'true' ||\n event.target.closest('.popper') ||\n !Object.values(this.keys).includes(event.keyCode)\n );\n }\n\n handleLeftKeyPressOnAggregateCells(target, aggregateCell) {\n const firstCell = this.getSortedColumns(\n target.closest(this.selectors.parentElementSelector)\n )[0];\n if (firstCell === target.closest(aggregateCell)) {\n const groupHeaderButton = target\n .closest(this.selectors.parentElementSelector)\n ?.querySelector('.stickyGroupHeader > button');\n groupHeaderButton.focus();\n return false;\n }\n return true;\n }\n\n // eslint-disable-next-line class-methods-use-this\n isAccessibleElement(element) {\n return (\n !(element.hasAttribute('aria-hidden') && element.getAttribute('aria-hidden') === 'true') &&\n !(element.hasAttribute(TAB_INDEX) && element.getAttribute(TAB_INDEX) === '-1')\n );\n }\n\n getNextAccessibleElement(cellInputableElements, shiftKey = false, currentElementIndex = -1) {\n if (shiftKey) {\n cellInputableElements = [...cellInputableElements]\n .reverse()\n .slice(\n currentElementIndex !== -1 ? cellInputableElements.length - currentElementIndex : 0,\n cellInputableElements.length\n );\n } else {\n cellInputableElements = [...cellInputableElements].slice(\n currentElementIndex + 1,\n cellInputableElements.length\n );\n }\n return cellInputableElements.find(element => this.isAccessibleElement(element));\n }\n\n getAdjacentColumnCell(\n shiftKey,\n currentColumnIndex,\n currentEleParentIndex,\n sortedColumns,\n parentElements,\n currentCol\n ) {\n let nextColumnCell = null;\n if (shiftKey) {\n if (currentColumnIndex - 1 >= 0) {\n nextColumnCell = sortedColumns[sortedColumns.indexOf(currentCol) - 1];\n } else if (currentEleParentIndex - 1 >= 0) {\n sortedColumns = [\n ...parentElements[currentEleParentIndex - 1].querySelectorAll(\n this.selectors.focusElementSelector\n )\n ];\n currentEleParentIndex -= 1;\n nextColumnCell = sortedColumns[sortedColumns.length - 1];\n }\n } else if (currentColumnIndex + 1 < sortedColumns.length) {\n nextColumnCell = sortedColumns[sortedColumns.indexOf(currentCol) + 1];\n } else if (currentEleParentIndex + 1 < parentElements.length) {\n sortedColumns = [\n ...parentElements[currentEleParentIndex + 1].querySelectorAll(\n this.selectors.focusElementSelector\n )\n ];\n currentEleParentIndex += 1;\n\n nextColumnCell = sortedColumns[0];\n }\n return [nextColumnCell, sortedColumns, currentEleParentIndex];\n }\n\n // This method is to recursively find the next column cell with actionable or focusable elements and skip any empty cells\n getNextColumnCellInTaborder(\n sortedColumns,\n currentCol,\n shiftKey,\n parentElements,\n currentEleParentIndex\n ) {\n if (!currentCol) {\n return null;\n }\n let nextColumnCell = null;\n const currentColumnIndex = sortedColumns.indexOf(currentCol);\n [nextColumnCell, sortedColumns, currentEleParentIndex] = this.getAdjacentColumnCell(\n shiftKey,\n currentColumnIndex,\n currentEleParentIndex,\n sortedColumns,\n parentElements,\n currentCol\n );\n const elements =\n nextColumnCell &&\n nextColumnCell.querySelectorAll(\n [...this.actionableSelectors, ...this.focusableSelectors].join(',')\n );\n if (elements?.length) {\n return nextColumnCell;\n }\n return this.getNextColumnCellInTaborder(\n sortedColumns,\n nextColumnCell,\n shiftKey,\n parentElements,\n currentEleParentIndex\n );\n }\n\n isFocusableElement(element) {\n const colItem = element?.closest(this.selectors.focusElementSelector);\n if (!colItem) return false;\n return [...colItem.querySelectorAll(this.focusableSelectors.join(','))].includes(element);\n }\n\n handleTabKey(shiftKey) {\n const parentElements = this.container.querySelectorAll(this.selectors.parentElementSelector);\n const rootNode = this.container.getRootNode();\n const currentCol = rootNode.activeElement?.closest(this.selectors.focusElementSelector);\n const currentEleParentIndex = [...parentElements].indexOf(\n currentCol.closest(this.selectors.parentElementSelector)\n );\n const currentColumnElements = Array.from(\n currentCol.querySelectorAll(\n [...this.actionableSelectors, ...this.focusableSelectors].join(',')\n )\n );\n const currentEleIndex = currentColumnElements.indexOf(rootNode.activeElement);\n\n const sortedColumns = this.getSortedColumns(\n currentCol.closest(this.selectors.parentElementSelector)\n );\n\n const nextColumnCell = this.getNextColumnCellInTaborder(\n sortedColumns,\n currentCol,\n shiftKey,\n parentElements,\n currentEleParentIndex\n );\n\n if (\n (!shiftKey && currentEleIndex + 1 < currentColumnElements.length) ||\n (shiftKey && currentEleIndex - 1 >= 0)\n ) {\n return false;\n }\n if (nextColumnCell) {\n const nextColumnCellElements = nextColumnCell.querySelectorAll(\n [...this.actionableSelectors, ...this.focusableSelectors].join(',')\n );\n if (nextColumnCellElements.length !== 0) return false;\n }\n this.updateDataEntry();\n return true;\n }\n\n updateDataEntry(updateForHandler, focusElements, nextFocusElement) {\n switch (updateForHandler) {\n case 'click':\n if (focusElements.length === 1) {\n const hasFocusableElement = Array.from(focusElements).some(element =>\n this.focusableSelectors.some(selector => element.matches(selector))\n );\n this.dataEntryMode = !hasFocusableElement;\n } else if (nextFocusElement) {\n this.dataEntryMode = true;\n } else {\n this.dataEntryMode = false;\n }\n break;\n\n case 'enter':\n this.dataEntryMode = true;\n break;\n\n default:\n this.dataEntryMode = false;\n }\n }\n\n clickHandler(event) {\n const cell = event?.target?.closest(this.selectors.focusElementSelector);\n if (cell && cell !== event.target) {\n const focusElements = cell.querySelectorAll(\n this.focusableSelectors.concat(this.actionableSelectors).join(',')\n );\n const nextFocusElement = this.getNextAccessibleElement(focusElements);\n this.updateDataEntry('click', focusElements, nextFocusElement);\n } else {\n this.updateDataEntry();\n }\n }\n\n handleEnterKey(target) {\n const focusElements = target.querySelectorAll(\n this.focusableSelectors.concat(this.actionableSelectors).join(',')\n );\n const nextFocusElement = this.getNextAccessibleElement(focusElements);\n // register escape event for RTE to support event bubbling\n if (nextFocusElement?.nodeName === 'IFRAME') {\n this.registerEscapeEventForRTE(nextFocusElement);\n target.tabIndex = -1;\n } else if (nextFocusElement) {\n this.updateDataEntry('enter');\n gainFocus(nextFocusElement);\n target.tabIndex = -1;\n }\n }\n\n handleEscapeKey(target) {\n const cell = target.closest(this.selectors.focusElementSelector);\n if (\n cell &&\n (this.getFocusableElementsInCell(cell, true).length > 1 ||\n this.getActionableElementsInCell(cell).length >= 1)\n ) {\n this.updateDataEntry();\n gainFocus(cell);\n }\n if (this.getFocusableElementsInCell(cell, true).length === 1) {\n this.updateDataEntry();\n }\n\n return !cell;\n }\n\n registerEscapeEventForRTE(target) {\n const iframeContent = target.contentWindow || target.contentDocument;\n if (iframeContent?.document) {\n this.updateDataEntry('enter');\n iframeContent.document.querySelector(\"[contenteditable='true']\").focus();\n if (!iframeContent.document.escapeKeyHandlerInjected) {\n iframeContent.document.addEventListener('keydown', event => {\n if (event.keyCode === this.keys.ESCAPE) {\n const escapeEvent = new KeyboardEvent('keydown', {\n key: 'Escape',\n code: 'Escape',\n keyCode: this.keys.ESCAPE,\n bubbles: true\n });\n target.dispatchEvent(escapeEvent);\n }\n });\n }\n iframeContent.document.escapeKeyHandlerInjected = true;\n }\n }\n\n tableLoaderHandler(event) {\n const { keyCode } = event;\n switch (keyCode) {\n case this.keys.LEFT:\n case this.keys.RIGHT:\n case this.keys.UP:\n case this.keys.DOWN: {\n event.preventDefault();\n break;\n }\n case this.keys.TAB: {\n this.tabHandler(event);\n this.isTableLoaderFocussed = false;\n break;\n }\n default:\n break;\n }\n }\n\n // Below method is overridden to handle key events for expand and collapse all button, group headers\n a11yHandler(event) {\n const buttonMoreSelector = '.button-more';\n const selectAllSelector = '.select-all-checkbox';\n const selectHeaderWithoutCheckbox = '.row-select-handle';\n const pContainerSelector = '.pContainer';\n const aggregateCell = '.aggregateCell';\n const rootNode = this.container.getRootNode();\n let shouldCallSuper = true;\n const tableLoader = this.container.querySelector(this.selectors.tableLoader);\n const currentCol = rootNode.activeElement.closest(this.selectors.focusElementSelector);\n\n // Handling the key handling events for Loading indicator\n if (tableLoader && tableLoader === event.target) {\n this.tableLoaderHandler(event);\n return;\n }\n\n // Handling events related to group header\n if (this.container.querySelector(this.selectors.stickyGroupHeaderSelector)) {\n shouldCallSuper = this.checkEventsForGroupHeader(event);\n }\n\n // To handle left click from first aggregate cell\n if (event.target && event.target.closest(aggregateCell) && event.keyCode === this.keys.LEFT) {\n shouldCallSuper = this.handleLeftKeyPressOnAggregateCells(event.target, aggregateCell);\n }\n\n // Arrow key handlers restriction for data entry mode\n if (\n event.target &&\n this.dataEntryMode &&\n currentCol !== rootNode.activeElement &&\n (event.keyCode === this.keys.RIGHT ||\n event.keyCode === this.keys.LEFT ||\n event.keyCode === this.keys.UP ||\n event.keyCode === this.keys.DOWN)\n ) {\n return;\n }\n // Enter key handler\n if (event.target && event.keyCode === this.keys.ENTER) {\n this.handleEnterKey(event.target);\n }\n\n // Escape key handler\n if (event.target && event.keyCode === this.keys.ESCAPE) {\n this.handleEscapeKey(event.target);\n }\n\n // Tab key handler\n if (\n event.target &&\n event.keyCode === this.keys.TAB &&\n this.dataEntryMode &&\n currentCol !== rootNode.activeElement\n ) {\n shouldCallSuper = this.handleTabKey(event.shiftKey);\n }\n\n if (!shouldCallSuper) return;\n\n // Handling events for expand and collapse all button & handling scrolling for group header\n if (event.target && event.target.closest(this.selectors.expandCollpaseAll)) {\n this.handleExpandCollapseAllEvents(event, selectAllSelector);\n return;\n }\n if (event.target && event.target.closest(this.selectors.stickyGroupHeaderSelector)) {\n this.handleScrollOnUpArrowForGroupHeaders(event, pContainerSelector);\n }\n if (\n event.target &&\n (event.target.closest(buttonMoreSelector) ||\n event.target.closest(selectAllSelector) ||\n event.target.closest(selectHeaderWithoutCheckbox))\n ) {\n if (!this.handleKeyleftForButtonMoreSelectAll(event, selectAllSelector)) {\n // if focus is not handed in handleKeyLeftForButtonMoreSelectAll then invoke super.a11yHandler\n super.a11yHandler(event);\n }\n return;\n }\n super.a11yHandler(event);\n }\n\n // Below method is overridden to set the focus on expand and collapse all button if grouping is applied, to set the focus on table loader if navigated from toolbar by pressing tab key\n focusFirstElement() {\n if (this.container.querySelector(this.selectors.tableLoader)) {\n const tableLoadingIndicator = this.container.querySelector(this.selectors.tableLoader);\n tableLoadingIndicator.focus();\n this.isTableLoaderFocussed = true;\n return;\n }\n if (this.container.querySelector(this.selectors.expandCollpaseAll)) {\n const expandCollapseSelector = this.container.querySelector(this.selectors.expandCollpaseAll);\n const expandCollapseButton = this.getFocusableElementsInCell(expandCollapseSelector);\n gainFocus(expandCollapseButton[0]);\n return;\n }\n super.focusFirstElement();\n }\n\n setFocusOnLoader(loader, currentCol) {\n super.setFocusOnLoader(loader, currentCol);\n const nextRowIndexDirection = loader.classList.contains(this.selectors.aboveLoader.substr(1))\n ? -1\n : 1;\n this.nextColumnIndex = currentCol.getAttribute(sortOrder.column);\n this.nextRowIndex =\n parseInt(\n currentCol.closest(this.selectors.parentElementSelector).getAttribute(sortOrder.row),\n 10\n ) + nextRowIndexDirection;\n }\n\n dynamicLoadersKeyDownHandler(event) {\n if (super.dynamicLoadersKeyDownHandler(event)) {\n this.reset();\n }\n }\n\n /**\n * Finds the target row for focus restoration using a three-level fallback strategy.\n *\n * Note: This method is only called when focus was on a data row (rowIndex is defined).\n * Header row focus is handled separately in #performFocusRestoration.\n *\n * This method attempts to locate a row in the following order:\n * 1. By row key (data-key) - handles cases where row moved but wasn't deleted (e.g., moved between groups)\n * 2. By row index (data-index) - handles same position restoration when row at that position exists\n * 3. Last available row - handles last row deletion by falling back to the new last row (data or header)\n *\n * @param {number} rowIndex - The 0-based index of the row from focus snapshot (always defined when called).\n * @param {string | undefined} rowKey - The unique key of the row from focus snapshot (may be undefined for grouped rows).\n * @returns {HTMLElement | null} The target row element, or null if no rows exist in the table.\n * @private\n */\n #findTargetRowForRestoration(rowIndex, rowKey) {\n let targetRow = null;\n // If row key exists, it wasn't removed but position might be changed.(e.g. row moved from 1 group to another after edit operation)\n if (rowKey) {\n targetRow = this.container.querySelector(`[${DATA_KEY}=\"${rowKey}\"]`);\n }\n\n // Try to find the row at the same position.\n if (!targetRow) {\n targetRow = this.container.querySelector(`[${DATA_INDEX}=\"${rowIndex}\"]`);\n }\n\n // Fall back to the new last available row(it can be header row also if there is no data row)\n if (!targetRow) {\n const allRows = this.container.querySelectorAll(this.selectors.parentElementSelector);\n targetRow = allRows[allRows.length - 1];\n }\n\n return targetRow;\n }\n\n /**\n * Extracts a focusable element from the given element or returns the element itself.\n *\n * If the element contains exactly one focusable element, returns that element.\n * Otherwise, returns the element itself for keyboard navigation.\n *\n * @param {HTMLElement | null} element - The element to extract focusable element from.\n * @returns {HTMLElement | null} The focusable element if exactly one exists, otherwise the element itself, or null if element is null.\n * @private\n */\n #getFocusableOrElement(element) {\n if (!element) return null;\n\n const focusables = this.getFocusableElementsInCell(element);\n return focusables.length === 1 ? focusables[0] : element;\n }\n\n /**\n * Finds the target cell within a given row.\n *\n * This method handles three types of rows:\n * 1. Header rows - always focuses the first cell (colIndex 1)\n * 2. Grouped rows - focuses the sticky group header element\n * 3. Data rows - focuses the cell at the specified column index\n *\n * @param {HTMLElement} targetRow - The row element to find the cell within.\n * @param {number} [colIndex=1] - The 1-based column index. Defaults to 1 for first column.\n * @returns {HTMLElement | null} The focusable element within the target cell, or null if not found.\n * @private\n */\n #findTargetCell(targetRow, colIndex = 1) {\n // 1. If it's a header row\n if (TableA11y.isHeaderRow(targetRow)) {\n // If its header row, always move to first cell\n colIndex = 1;\n }\n\n // 2. Try group header first, then fallback to column cell with colIndex.\n const targetElement =\n targetRow.querySelector(this.selectors.stickyGroupHeaderSelector) ||\n targetRow.querySelector(`[aria-colindex=\"${colIndex}\"]`);\n\n return this.#getFocusableOrElement(targetElement);\n }\n\n /**\n * Checks if the given element is a header row.\n *\n * @param {HTMLElement} element - The element to check.\n * @returns {boolean} True if the element is a header row, false otherwise.\n * @static\n */\n static isHeaderRow(element) {\n return element.classList.contains(HEADER);\n }\n\n /**\n * Gets the add button element from the table container.\n *\n * @returns {HTMLElement | null} The add button element, or null if not found.\n * @private\n */\n #getAddButton() {\n // TODO: Embedded Data add button should be handled via this logic only. Currently being rendered outside of table.\n return this.selectors.addActionSelector\n ? this.container.parentElement.querySelector(this.selectors.addActionSelector)\n : null;\n }\n\n /**\n * Restores focus using the captured focus snapshot.\n *\n * Attempts to restore focus to the most appropriate location:\n * - For header rows: Restores focus to the same column in the header\n * - For empty tables (header only): Focuses the add button if available, otherwise the header\n * - For tables with data: Focuses the same or nearest row and column from the snapshot\n *\n * @private\n */\n #performFocusRestoration() {\n const { rowIndex, colIndex, rowKey } = this.focusState.focusSnapshot;\n const wasHeaderRow = rowIndex === undefined;\n\n // Early exit: if focus was on header row, restore to same column in header\n if (wasHeaderRow) {\n const cell = this.container.querySelector(`.${HEADER} [aria-colindex=\"${colIndex ?? 1}\"]`);\n const focusTarget = this.#getFocusableOrElement(cell);\n if (focusTarget) {\n gainFocus(focusTarget);\n return;\n }\n }\n\n // Handle data rows restoration with multiple fallbacks.\n const targetRow = this.#findTargetRowForRestoration(rowIndex, rowKey);\n if (!targetRow) return;\n\n // If targetRow is headerRow that means no data records available, check for Add action first to set the focus to add action.\n let focusTarget = null;\n if (TableA11y.isHeaderRow(targetRow)) {\n focusTarget = this.#getAddButton();\n }\n\n // Fallback to cell restoration if no add button was found.\n if (!focusTarget) {\n focusTarget = this.#findTargetCell(targetRow, colIndex);\n }\n\n if (focusTarget) {\n gainFocus(focusTarget);\n }\n }\n\n itemsLoadedCallback() {\n // Handle ctrl+Home restoration (highest priority)\n if (this.ctrlHomeKeyPressed) {\n // ctrl+Home keypress happens on any cell but when initial rows are not present in container fetch happens for those rows\n // on rerender of the container focus the row1 data col1 of the table\n this.ctrlHomeKeyPressed = false;\n this.handleCtrlHomeKeypress();\n return;\n }\n\n // Below if condition is written to announce Loading completed once the table loader is hidden and we are also shifting the\n // focus on firstfocusableelement once the table Loader is hidden\n if (this.isTableLoaderFocussed && !this.container.querySelector(this.selectors.tableLoader)) {\n this.announcePolite({\n message: this.translate('Loading completed'),\n type: 'info'\n });\n this.focusFirstElement();\n this.isTableLoaderFocussed = false;\n return;\n }\n\n // Handle dynamic loader restoration (second priority)\n if (this.nextRowIndex && this.nextColumnIndex) {\n const row = this.container.querySelector(`[${sortOrder.row}='${this.nextRowIndex}']`);\n if (row) {\n const column = row.querySelector(`[${sortOrder.column}='${this.nextColumnIndex}']`);\n const restoreFocusRef = {\n columnIndex: [\n ...this.container.querySelectorAll(this.selectors.focusElementSelector)\n ].indexOf(column)\n };\n this.reset();\n this.setFocusToCell(restoreFocusRef);\n return;\n }\n }\n\n // Handle focus restoration after row deletions (third priority)\n const rootNode = this.container.getRootNode();\n const focusOutsideContainer = !this.container.contains(rootNode.activeElement);\n const isFocusLost = focusOutsideContainer && this.focusState.hadFocus;\n if (isFocusLost) {\n this.#performFocusRestoration();\n }\n }\n\n isFirstDataRowInDOM() {\n return !!this.container.querySelector(`[${DATA_INDEX}='0']`);\n }\n\n getFocusableElementOnCtrlHome() {\n if (this.isFirstDataRowInDOM() && this.selectors.parentElementSelector) {\n const firstRow = this.container.querySelector(this.selectors.parentElementSelector);\n const sortedColumns = this.getSortedColumns(firstRow);\n if (firstRow.classList.contains(HEADER)) {\n // when header row is present focus first data column in the header\n return getHeaderColumnToFocusOnCtrlHome(sortedColumns);\n }\n // when there's no header focus row2 col1 element\n return sortedColumns[0];\n }\n // fetch 1st set of rows by setting scrollTop to 0 & then focus (handled in itemsLoadedCallback)\n this.ctrlHomeKeyPressed = true;\n return null;\n }\n\n toggleStyleFormatAriaDescription(nextCol, currentCol) {\n const nextColFocusableElements = this.getFocusableElementsInCell(nextCol);\n const currentColFocusableElements = this.getFocusableElementsInCell(currentCol);\n\n if (nextColFocusableElements.length === 1) {\n const nextFocusableElement = nextColFocusableElements[0];\n const nextElementAriaDescribedby = nextFocusableElement.getAttribute(ARIA_DESCRIBEDBY);\n\n const styleFormatId = nextCol.getAttribute('data-style-format');\n if (styleFormatId) {\n const combinedAriaDescribedby = [styleFormatId, nextElementAriaDescribedby]\n .filter(Boolean)\n .join(' ');\n nextFocusableElement.setAttribute(ARIA_DESCRIBEDBY, combinedAriaDescribedby);\n }\n }\n\n if (currentColFocusableElements.length === 1) {\n const currentFocusableElement = currentColFocusableElements[0];\n\n let originalAriaDescribedby = [];\n const currentAriaDescribedby = currentFocusableElement.getAttribute(ARIA_DESCRIBEDBY);\n if (currentAriaDescribedby) {\n originalAriaDescribedby = currentAriaDescribedby\n .split(' ')\n .filter(\n ariaDescribedby => ariaDescribedby !== currentCol.getAttribute('data-style-format')\n )\n .filter(Boolean);\n }\n\n if (originalAriaDescribedby.length) {\n currentFocusableElement.setAttribute(ARIA_DESCRIBEDBY, originalAriaDescribedby.join(' '));\n } else {\n currentFocusableElement.removeAttribute(ARIA_DESCRIBEDBY);\n }\n }\n }\n\n onFocusHandler() {\n // Update focus snapshot on every on focus event.\n super.onFocusHandler();\n const rootNode = this.container.getRootNode();\n if (rootNode instanceof Document || rootNode instanceof ShadowRoot) {\n const activeElement = rootNode.activeElement;\n const currentCol = activeElement?.closest(this.selectors.focusElementSelector);\n const currentRow = activeElement?.closest(this.selectors.parentElementSelector);\n // Ignoring header row. Capture snapshot for data rows only as of now.\n if (currentRow) {\n this.focusState.focusSnapshot.rowIndex = currentRow.getAttribute('data-index')\n ? parseInt(currentRow.getAttribute('data-index'), 10)\n : undefined;\n this.focusState.focusSnapshot.rowKey = currentRow.getAttribute('data-key') ?? undefined;\n }\n // Column may not be captured on every focus so preserve the last captured column.\n if (currentCol) {\n this.focusState.focusSnapshot.colIndex = parseInt(\n currentCol.getAttribute('aria-colindex'),\n 10\n );\n }\n }\n }\n\n onBlurHandler(event) {\n const relatedTarget = event.relatedTarget;\n\n // If focus moved to a loader, preserve hadFocus for restoration after loader completes\n const tableLoader = this.container.querySelector(this.selectors.tableLoader);\n const aboveLoader = this.container.querySelector(this.selectors.aboveLoader);\n const belowLoader = this.container.querySelector(this.selectors.belowLoader);\n\n if (\n relatedTarget === tableLoader ||\n relatedTarget === aboveLoader ||\n relatedTarget === belowLoader\n ) {\n return;\n }\n\n // Delegate to base class for standard blur handling (contains check and hadFocus update)\n super.onBlurHandler(event);\n }\n}\n\nexport default TableA11y;\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"VirtualizeWrapper.d.ts","sourceRoot":"","sources":["../../../../Core/Views/Table/VirtualizeWrapper.jsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"VirtualizeWrapper.d.ts","sourceRoot":"","sources":["../../../../Core/Views/Table/VirtualizeWrapper.jsx"],"names":[],"mappings":"AAiBA;;;;;;;;;;4CA6JC;;;;;;;;;;;;;;;;;sBA9KqB,YAAY"}
|