ultisuite-client/lib/nav-reorder-plan.ts
2026-05-25 13:52:40 +02:00

41 lines
1.2 KiB
TypeScript

import type { FolderTreeNode } from '@/lib/sidebar-nav-maps'
import type { LabelRowItem } from '@/lib/sidebar-nav-data'
import { isSystemNavLabelId } from '@/lib/sidebar-nav-data'
import { isServerNavId } from '@/lib/sidebar-nav-server-id'
export type LabelReorderItem = { id: string; sort_order: number }
export type UnifiedFolderReorderItem = {
id: string
sort_order: number
parent_id: string | null
}
export function labelRowsToReorderItems(rows: LabelRowItem[]): LabelReorderItem[] {
return rows
.filter((row) => isServerNavId(row.id) && !isSystemNavLabelId(row.id))
.map((row, index) => ({ id: row.id, sort_order: index * 10 }))
}
export function folderTreeToReorderItems(
tree: FolderTreeNode[],
parentId: string | null = null
): UnifiedFolderReorderItem[] {
const items: UnifiedFolderReorderItem[] = []
tree.forEach((node, index) => {
if (!isServerNavId(node.id)) return
items.push({
id: node.id,
sort_order: index * 10,
parent_id: parentId,
})
if (node.children?.length) {
items.push(...folderTreeToReorderItems(node.children, node.id))
}
})
return items
}
export function hasServerReorderItems(items: LabelReorderItem[] | UnifiedFolderReorderItem[]): boolean {
return items.length > 0
}