MCPcopy Create free account
hub / github.com/experdot/pointer / usePages

Function usePages

src/renderer/src/hooks/usePages.ts:8–218  ·  view source on GitHub ↗
()

Source from the content-addressed store, hash-verified

6import { generateUniqueName } from '../services/pagesService'
7
8export function usePages(): {
9 pages: ChatPage[]
10 folders: PageFolder[]
11 rootPages: ChatPage[]
12 rootFolders: PageFolder[]
13 rootItems: (ChatPage | PageFolder)[]
14 getItemsInFolder: (folderId: string | undefined) => (ChatPage | PageFolder)[]
15 batchUpdateItemsOrder: (items: (ChatPage | PageFolder)[], parentFolderId?: string) => void
16 batchUpdateItemsOrderWithRename: (
17 items: (ChatPage | PageFolder)[],
18 parentFolderId?: string
19 ) => void
20 checkBatchMoveConflicts: (
21 items: (ChatPage | PageFolder)[],
22 parentFolderId?: string
23 ) => { hasConflict: boolean; conflictNames: string[] }
24 createPage: typeof pagesService.createPage
25 updatePage: typeof pagesService.updatePage
26 deletePage: typeof pagesService.deletePage
27 deletePages: typeof pagesService.deletePages
28 movePage: typeof pagesService.movePage
29 createFolder: typeof pagesService.createFolder
30 updateFolder: typeof pagesService.updateFolder
31 deleteFolder: typeof pagesService.deleteFolder
32 deleteFolders: typeof pagesService.deleteFolders
33 clearFolder: typeof pagesService.clearFolder
34 toggleFolderExpanded: typeof pagesService.toggleFolderExpanded
35 openPage: typeof pagesService.openPage
36} {
37 // 使用选择器只订阅需要的状态,避免不必要的重渲染
38 const pages = usePagesStore((state) => state.pages)
39 const updateManyPages = usePagesStore((state) => state.updateMany)
40 const folders = useFoldersStore((state) => state.folders)
41 const updateManyFolders = useFoldersStore((state) => state.updateMany)
42
43 // 获取根级别的页面和文件夹,混合排序
44 const rootItems = useMemo(() => {
45 const rootPages = pages.filter((p) => !p.parentFolderId)
46 const rootFolders = folders.filter((f) => !f.parentFolderId)
47 return [...rootFolders, ...rootPages].sort((a, b) => (a.order ?? 0) - (b.order ?? 0))
48 }, [pages, folders])
49
50 // 直接从 rootItems 分离,避免重复过滤
51 const { rootPages, rootFolders } = useMemo(() => {
52 const pagesArr: ChatPage[] = []
53 const foldersArr: PageFolder[] = []
54 for (const item of rootItems) {
55 if (item.type === 'item') pagesArr.push(item)
56 else foldersArr.push(item)
57 }
58 return { rootPages: pagesArr, rootFolders: foldersArr }
59 }, [rootItems])
60
61 // 获取文件夹下的页面和子文件夹,混合排序
62 const getItemsInFolder = useCallback(
63 (folderId: string | undefined) => {
64 const pagesInFolder = pages.filter((p) => p.parentFolderId === folderId)
65 const subFolders = folders.filter((f) => f.parentFolderId === folderId)

Callers 1

ExplorerFunction · 0.90

Calls 2

generateUniqueNameFunction · 0.90
hasMethod · 0.80

Tested by

no test coverage detected