@neo4j-ndl/react
Version:
React implementation of Neo4j Design System
68 lines • 2.58 kB
JavaScript
/**
*
* Copyright (c) "Neo4j"
* Neo4j Sweden AB [http://neo4j.com]
*
* This file is part of Neo4j.
*
* Neo4j is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
import { findFocusableChildren } from '../_common/utils';
const focusElementInElement = (parentElement, newParentElement, activeElement) => {
const focusable = findFocusableChildren(newParentElement);
const focusableCurrent = findFocusableChildren(parentElement);
const cellIndex = focusableCurrent.indexOf(activeElement);
let newIndex = cellIndex;
if (cellIndex >= focusable.length) {
newIndex = focusable.length - 1;
}
else if (cellIndex < 0) {
newIndex = 0;
}
const element = focusable[newIndex];
if (element instanceof HTMLElement) {
element.focus();
}
};
export const focusNextRow = (parentElement) => {
const { nextElementSibling } = parentElement;
if (nextElementSibling instanceof HTMLElement) {
nextElementSibling.focus();
}
};
export const focusPreviousRow = (parentElement) => {
const { previousElementSibling } = parentElement;
if (previousElementSibling instanceof HTMLElement) {
previousElementSibling.focus();
}
};
export const focusCellInNextRow = (parentElement) => {
const { nextElementSibling } = parentElement;
const { activeElement } = document;
if (!(nextElementSibling instanceof HTMLElement) ||
!(activeElement instanceof HTMLElement)) {
return;
}
focusElementInElement(parentElement, nextElementSibling, activeElement);
};
export const focusCellInPreviousRow = (parentElement) => {
const { previousElementSibling } = parentElement;
const { activeElement } = document;
if (!(previousElementSibling instanceof HTMLElement) ||
!(activeElement instanceof HTMLElement)) {
return;
}
focusElementInElement(parentElement, previousElementSibling, activeElement);
};
//# sourceMappingURL=tree-view-keyboard-helpers.js.map