Changes More Functions to wiki

This commit is contained in:
2026-01-26 20:31:17 +01:00
parent 143485e107
commit db22d47900
4 changed files with 272 additions and 225 deletions

View File

@@ -6,18 +6,20 @@ export interface WikiPageItem {
isFolder: boolean
sortOrder: number
entityType?: string | null
// children wird im Frontend berechnet
children?: WikiPageItem[]
}
export const useWikiTree = () => {
const { $api } = useNuxtApp()
// Globaler State (bleibt beim Navigieren erhalten)
// STATE
const items = useState<WikiPageItem[]>('wiki-items', () => [])
const isLoading = useState<boolean>('wiki-loading', () => false)
// --- Computed: Flat List zu Baum ---
// NEU: Globaler Sidebar State (Standardmäßig offen)
const isSidebarOpen = useState<boolean>('wiki-sidebar-open', () => true)
// COMPUTED: Tree Transformation
const tree = computed(() => {
const rawItems = items.value
if (!rawItems || rawItems.length === 0) return []
@@ -25,12 +27,12 @@ export const useWikiTree = () => {
const roots: WikiPageItem[] = []
const lookup: Record<string, WikiPageItem> = {}
// 1. Kopieren & Lookup füllen
// Init Lookup
rawItems.forEach(item => {
lookup[item.id] = { ...item, children: [] }
})
// 2. Verknüpfen
// Build Tree
rawItems.forEach(item => {
const node = lookup[item.id]
if (item.parentId && lookup[item.parentId]) {
@@ -40,7 +42,7 @@ export const useWikiTree = () => {
}
})
// 3. Sortieren (Ordner zuerst, dann SortOrder, dann Alphabet)
// Sort
const sortNodes = (nodes: WikiPageItem[]) => {
nodes.sort((a, b) => {
if (a.isFolder !== b.isFolder) return a.isFolder ? -1 : 1
@@ -56,28 +58,27 @@ export const useWikiTree = () => {
return roots
})
// --- Actions ---
/**
* Lädt den Baum.
* params kann { entityType: 'customer', entityId: 100 } enthalten.
*/
// ACTIONS
const loadTree = async (params: { entityType?: string, entityId?: number, entityUuid?: string } = {}) => {
isLoading.value = true
try {
// Wichtig: Bei GET nutzen wir 'query' für Parameter
const data = await $api<WikiPageItem[]>('/api/wiki/tree', {
method: 'GET',
query: params
})
items.value = data
} catch (e) {
// Fehler werden vom Plugin (Toast) behandelt, hier nur Log
console.error('Wiki Tree Load Error', e)
} finally {
isLoading.value = false
}
}
return { tree, items, isLoading, loadTree }
return {
tree,
items,
isLoading,
isSidebarOpen, // Exportiert für Zugriff in Pages
loadTree
}
}