Yuki Takei 4 luni în urmă
părinte
comite
05bcb7207f

+ 2 - 7
apps/app/src/client/components/Sidebar/PageTreeItem/SimplifiedPageTreeItem.tsx

@@ -13,7 +13,6 @@ import { toastSuccess } from '~/client/util/toastr';
 import {
   usePageTreeInformationUpdate, usePageRename, usePageCreate,
   usePlaceholderRenameEffect,
-  CREATING_PAGE_VIRTUAL_ID,
 } from '~/features/page-tree';
 import { NameInputAlternativeComponent } from '~/features/page-tree/components';
 import type { IPageForItem } from '~/interfaces/page';
@@ -114,15 +113,11 @@ export const SimplifiedPageTreeItem: FC<TreeItemProps> = ({
   const { isRenaming } = usePageRename();
 
   // Page create feature
-  const { cancelCreating, CreateButton } = usePageCreate();
-
-  // Check if this is the creating placeholder node
-  const isCreatingPlaceholder = itemData._id === CREATING_PAGE_VIRTUAL_ID;
+  const { cancelCreating, CreateButton, isCreatingPlaceholder } = usePageCreate();
 
   // Manage placeholder renaming mode (auto-start, track, and cancel on Esc)
   usePlaceholderRenameEffect({
     item,
-    isPlaceholder: isCreatingPlaceholder,
     onCancelCreate: cancelCreating,
   });
 
@@ -156,7 +151,7 @@ export const SimplifiedPageTreeItem: FC<TreeItemProps> = ({
       onClickDeleteMenuItem={onClickDeleteMenuItem}
       customEndComponents={[CountBadgeForPageTreeItem]}
       customHoveredEndComponents={[Control, CreateButton]}
-      showAlternativeContent={isRenaming(item) || isCreatingPlaceholder}
+      showAlternativeContent={isRenaming(item) || isCreatingPlaceholder(item)}
       customAlternativeComponents={[NameInputAlternativeComponent]}
     />
   );

+ 1 - 1
apps/app/src/features/page-tree/components/SimplifiedItemsTree.tsx

@@ -12,7 +12,7 @@ import { useVirtualizer } from '@tanstack/react-virtual';
 import type { IPageForTreeItem } from '~/interfaces/page';
 import { useSWRxRootPage } from '~/stores/page-listing';
 
-import { ROOT_PAGE_VIRTUAL_ID } from '../constants/_inner-constants';
+import { ROOT_PAGE_VIRTUAL_ID } from '../constants/_inner';
 import {
   useAutoExpandAncestors,
   useDataLoader,

+ 1 - 1
apps/app/src/features/page-tree/components/TreeNameInput.tsx

@@ -9,7 +9,7 @@ import {
   ValidationTarget,
 } from '~/client/util/use-input-validator';
 
-import { CREATING_PAGE_VIRTUAL_ID } from '../constants';
+import { CREATING_PAGE_VIRTUAL_ID } from '../constants/_inner';
 import type { TreeItemToolProps } from '../interfaces';
 
 import styles from './TreeNameInput.module.scss';

+ 0 - 1
apps/app/src/features/page-tree/constants/_inner-constants.ts

@@ -1 +0,0 @@
-export const ROOT_PAGE_VIRTUAL_ID = '__virtual_root__';

+ 1 - 3
apps/app/src/features/page-tree/constants/index.ts → apps/app/src/features/page-tree/constants/_inner.ts

@@ -1,4 +1,2 @@
-/**
- * Virtual ID for the placeholder node during page creation
- */
+export const ROOT_PAGE_VIRTUAL_ID = '__virtual_root__';
 export const CREATING_PAGE_VIRTUAL_ID = '__creating_page_placeholder__';

+ 1 - 1
apps/app/src/features/page-tree/hooks/_inner/use-data-loader.integration.spec.tsx

@@ -20,7 +20,7 @@ import { createStore, Provider } from 'jotai';
 
 import type { IPageForTreeItem } from '~/interfaces/page';
 
-import { CREATING_PAGE_VIRTUAL_ID } from '../../constants';
+import { CREATING_PAGE_VIRTUAL_ID } from '../../constants/_inner';
 import { invalidatePageTreeChildren } from '../../services';
 // Re-import the actions hook to use real implementation
 import { usePageTreeCreateActions } from '../../states/_inner';

+ 4 - 2
apps/app/src/features/page-tree/hooks/_inner/use-data-loader.spec.tsx

@@ -2,8 +2,10 @@ import { renderHook } from '@testing-library/react';
 
 import type { IPageForTreeItem } from '~/interfaces/page';
 
-import { CREATING_PAGE_VIRTUAL_ID } from '../../constants';
-import { ROOT_PAGE_VIRTUAL_ID } from '../../constants/_inner-constants';
+import {
+  CREATING_PAGE_VIRTUAL_ID,
+  ROOT_PAGE_VIRTUAL_ID,
+} from '../../constants/_inner';
 import { invalidatePageTreeChildren } from '../../services';
 import { useDataLoader } from './use-data-loader';
 

+ 4 - 2
apps/app/src/features/page-tree/hooks/_inner/use-data-loader.ts

@@ -4,8 +4,10 @@ import type { TreeDataLoader } from '@headless-tree/core';
 import { apiv3Get } from '~/client/util/apiv3-client';
 import type { IPageForTreeItem } from '~/interfaces/page';
 
-import { CREATING_PAGE_VIRTUAL_ID } from '../../constants';
-import { ROOT_PAGE_VIRTUAL_ID } from '../../constants/_inner-constants';
+import {
+  CREATING_PAGE_VIRTUAL_ID,
+  ROOT_PAGE_VIRTUAL_ID,
+} from '../../constants/_inner';
 import { type ChildrenData, fetchAndCacheChildren } from '../../services';
 import {
   createPlaceholderPageData,

+ 1 - 1
apps/app/src/features/page-tree/hooks/use-page-create.tsx

@@ -14,7 +14,7 @@ import type { IPageForItem } from '~/interfaces/page';
 import { mutatePageTree, mutateRecentlyUpdated } from '~/stores/page-listing';
 import { shouldCreateWipPage } from '~/utils/should-create-wip-page';
 
-import { CREATING_PAGE_VIRTUAL_ID } from '../constants';
+import { CREATING_PAGE_VIRTUAL_ID } from '../constants/_inner';
 import type { TreeItemToolProps } from '../interfaces';
 import {
   useCreatingParentId,

+ 1 - 1
apps/app/src/features/page-tree/hooks/use-page-rename.tsx

@@ -9,7 +9,7 @@ import { toastError, toastSuccess } from '~/client/util/toastr';
 import type { IPageForItem } from '~/interfaces/page';
 import { mutatePageTree } from '~/stores/page-listing';
 
-import { CREATING_PAGE_VIRTUAL_ID } from '../constants';
+import { CREATING_PAGE_VIRTUAL_ID } from '../constants/_inner';
 import { usePageTreeInformationUpdate } from '../states/page-tree-update';
 
 type RenameResult = {

+ 5 - 2
apps/app/src/features/page-tree/hooks/use-placeholder-rename-effect.ts

@@ -3,9 +3,10 @@ import type { ItemInstance } from '@headless-tree/core';
 
 import type { IPageForItem } from '~/interfaces/page';
 
+import { CREATING_PAGE_VIRTUAL_ID } from '../constants/_inner';
+
 type UsePlaceholderRenameEffectParams = {
   item: ItemInstance<IPageForItem>;
-  isPlaceholder: boolean;
   onCancelCreate: () => void;
 };
 
@@ -22,9 +23,11 @@ type UsePlaceholderRenameEffectParams = {
  */
 export const usePlaceholderRenameEffect = ({
   item,
-  isPlaceholder,
   onCancelCreate,
 }: UsePlaceholderRenameEffectParams): void => {
+  // Check if this is the creating placeholder node
+  const isPlaceholder = item.getItemData()._id === CREATING_PAGE_VIRTUAL_ID;
+
   // Track if renaming mode was ever activated for this placeholder
   const wasRenamingRef = useRef(false);
   const isRenamingNow = item.isRenaming();

+ 0 - 1
apps/app/src/features/page-tree/index.ts

@@ -1,4 +1,3 @@
-export * from './constants';
 export * from './hooks';
 export * from './interfaces';
 export * from './states';

+ 1 - 1
apps/app/src/features/page-tree/states/_inner/page-tree-create.ts

@@ -3,7 +3,7 @@ import { atom, useAtomValue, useSetAtom } from 'jotai';
 
 import type { IPageForTreeItem } from '~/interfaces/page';
 
-import { CREATING_PAGE_VIRTUAL_ID } from '../../constants';
+import { CREATING_PAGE_VIRTUAL_ID } from '../../constants/_inner';
 
 /**
  * Create a placeholder page data for the creating node

+ 1 - 1
apps/app/src/features/page-tree/states/page-tree-update.ts

@@ -2,7 +2,7 @@ import { useCallback, useEffect } from 'react';
 import type { TreeInstance } from '@headless-tree/core';
 import { atom, useAtomValue, useSetAtom } from 'jotai';
 
-import { ROOT_PAGE_VIRTUAL_ID } from '../constants/_inner-constants';
+import { ROOT_PAGE_VIRTUAL_ID } from '../constants/_inner';
 import { invalidatePageTreeChildren } from '../services';
 
 // Update generation number