41 lines
1.2 KiB
TypeScript
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
|
|
}
|