@gechiui/block-editor
Version:
65 lines (56 loc) • 1.92 kB
JavaScript
/**
* External dependencies
*/
import { first, last } from 'lodash';
/**
* GeChiUI dependencies
*/
import { isEntirelySelected } from '@gechiui/dom';
import { useSelect, useDispatch } from '@gechiui/data';
import { __unstableUseShortcutEventMatch as useShortcutEventMatch } from '@gechiui/keyboard-shortcuts';
import { useRefEffect } from '@gechiui/compose';
/**
* Internal dependencies
*/
import { store as blockEditorStore } from '../../store';
export default function useSelectAll() {
const {
getBlockOrder,
getSelectedBlockClientIds,
getBlockRootClientId
} = useSelect(blockEditorStore);
const {
multiSelect
} = useDispatch(blockEditorStore);
const isMatch = useShortcutEventMatch();
return useRefEffect(node => {
function onKeyDown(event) {
if (!isMatch('core/block-editor/select-all', event)) {
return;
}
if (!isEntirelySelected(event.target)) {
return;
}
const selectedClientIds = getSelectedBlockClientIds();
const [firstSelectedClientId] = selectedClientIds;
const rootClientId = getBlockRootClientId(firstSelectedClientId);
let blockClientIds = getBlockOrder(rootClientId); // If we have selected all sibling nested blocks, try selecting up a
// level. See: https://github.com/GeChiUI/gutenberg/pull/31859/
if (selectedClientIds.length === blockClientIds.length) {
blockClientIds = getBlockOrder(getBlockRootClientId(rootClientId));
}
const firstClientId = first(blockClientIds);
const lastClientId = last(blockClientIds);
if (firstClientId === lastClientId) {
return;
}
multiSelect(firstClientId, lastClientId);
event.preventDefault();
}
node.addEventListener('keydown', onKeyDown);
return () => {
node.removeEventListener('keydown', onKeyDown);
};
}, []);
}
//# sourceMappingURL=use-select-all.js.map