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

Function prepareInsertPosition

src/renderer/src/services/pagesService.ts:42–90  ·  view source on GitHub ↗
(afterItemId?: string)

Source from the content-addressed store, hash-verified

40
41// 计算新项目的插入位置和 order,并更新同级项目的 order
42async function prepareInsertPosition(afterItemId?: string): Promise<{
43 parentFolderId: string | undefined
44 order: number
45}> {
46 const { page, folder, tab } = stores
47
48 // 查找参考项目
49 let referenceItem: PageRecord | PageFolder | null = null
50 if (afterItemId) {
51 referenceItem = page.getById(afterItemId) || folder.getById(afterItemId) || null
52 }
53 if (!referenceItem) {
54 const activeTab = tab.tabs.find((t) => t.id === tab.activeTabId)
55 referenceItem = activeTab?.dataId ? page.getById(activeTab.dataId) || null : null
56 }
57
58 let parentFolderId: string | undefined
59 let newOrder: number
60
61 if (referenceItem) {
62 parentFolderId = referenceItem.parentFolderId
63 newOrder = (referenceItem.order ?? 0) + 1
64 } else {
65 parentFolderId = undefined
66 newOrder = 0
67 }
68
69 // 批量更新同级中 order >= newOrder 的项目
70 const pagesToUpdate = page.pages.filter(
71 (p) => p.parentFolderId === parentFolderId && (p.order ?? 0) >= newOrder
72 )
73 const foldersToUpdate = folder.folders.filter(
74 (f) => f.parentFolderId === parentFolderId && (f.order ?? 0) >= newOrder
75 )
76
77 // 使用批量更新,避免 N 次 DB 写入和渲染
78 if (pagesToUpdate.length > 0) {
79 await page.updateMany(
80 pagesToUpdate.map((p) => ({ id: p.id, changes: { order: (p.order ?? 0) + 1 } }))
81 )
82 }
83 if (foldersToUpdate.length > 0) {
84 await folder.updateMany(
85 foldersToUpdate.map((f) => ({ id: f.id, changes: { order: (f.order ?? 0) + 1 } }))
86 )
87 }
88
89 return { parentFolderId, order: newOrder }
90}
91
92// 创建新页面
93export async function createPage(

Callers 2

createPageFunction · 0.70
createFolderFunction · 0.70

Calls 2

updateManyMethod · 0.80
getByIdMethod · 0.65

Tested by

no test coverage detected