|
@@ -1,6 +1,5 @@
|
|
|
import type { FC } from 'react';
|
|
import type { FC } from 'react';
|
|
|
import { useCallback, useEffect, useMemo } from 'react';
|
|
import { useCallback, useEffect, useMemo } from 'react';
|
|
|
-import type { CustomHotkeysConfig } from '@headless-tree/core';
|
|
|
|
|
import { useTree } from '@headless-tree/react';
|
|
import { useTree } from '@headless-tree/react';
|
|
|
import { useVirtualizer } from '@tanstack/react-virtual';
|
|
import { useVirtualizer } from '@tanstack/react-virtual';
|
|
|
import { useTranslation } from 'next-i18next';
|
|
import { useTranslation } from 'next-i18next';
|
|
@@ -79,7 +78,7 @@ export const ItemsTree: FC<Props> = (props: Props) => {
|
|
|
const dataLoader = useDataLoader(rootPageId, allPagesCount);
|
|
const dataLoader = useDataLoader(rootPageId, allPagesCount);
|
|
|
|
|
|
|
|
// Tree item handlers (rename, create, etc.) with stable callbacks for headless-tree
|
|
// Tree item handlers (rename, create, etc.) with stable callbacks for headless-tree
|
|
|
- const { getItemName, isItemFolder, handleRename, creatingParentId } =
|
|
|
|
|
|
|
+ const { getItemName, isItemFolder, handleRename, creatingParentId, completeRenamingHotkey } =
|
|
|
useTreeItemHandlers(triggerTreeRebuild);
|
|
useTreeItemHandlers(triggerTreeRebuild);
|
|
|
|
|
|
|
|
// Configure tree features and get checkbox state and D&D handlers
|
|
// Configure tree features and get checkbox state and D&D handlers
|
|
@@ -118,24 +117,6 @@ export const ItemsTree: FC<Props> = (props: Props) => {
|
|
|
[enableCheckboxes],
|
|
[enableCheckboxes],
|
|
|
);
|
|
);
|
|
|
|
|
|
|
|
- const hotkeys = useMemo<CustomHotkeysConfig<IPageForTreeItem>>(
|
|
|
|
|
- () => ({
|
|
|
|
|
- completeRenaming: {
|
|
|
|
|
- hotkey: 'Enter',
|
|
|
|
|
- allowWhenInputFocused: true,
|
|
|
|
|
- isEnabled: (tree) => tree.isRenamingItem(),
|
|
|
|
|
- handler: (e, tree) => {
|
|
|
|
|
- // Disable rename during IME composition
|
|
|
|
|
- if (e.isComposing) {
|
|
|
|
|
- return;
|
|
|
|
|
- }
|
|
|
|
|
- tree.completeRenaming();
|
|
|
|
|
- },
|
|
|
|
|
- },
|
|
|
|
|
- }),
|
|
|
|
|
- [],
|
|
|
|
|
- );
|
|
|
|
|
-
|
|
|
|
|
const tree = useTree<IPageForTreeItem>({
|
|
const tree = useTree<IPageForTreeItem>({
|
|
|
rootItemId: ROOT_PAGE_VIRTUAL_ID,
|
|
rootItemId: ROOT_PAGE_VIRTUAL_ID,
|
|
|
getItemName,
|
|
getItemName,
|
|
@@ -156,7 +137,9 @@ export const ItemsTree: FC<Props> = (props: Props) => {
|
|
|
onDrop: handleDrop,
|
|
onDrop: handleDrop,
|
|
|
canDropInbetween: false,
|
|
canDropInbetween: false,
|
|
|
}),
|
|
}),
|
|
|
- hotkeys,
|
|
|
|
|
|
|
+ hotkeys: {
|
|
|
|
|
+ completeRenaming: completeRenamingHotkey
|
|
|
|
|
+ }
|
|
|
});
|
|
});
|
|
|
|
|
|
|
|
// Notify parent when checked items change
|
|
// Notify parent when checked items change
|