diff --git a/frontend/composables/useWikiTree.ts b/frontend/composables/useWikiTree.ts index c7cddc2..67df7f4 100644 --- a/frontend/composables/useWikiTree.ts +++ b/frontend/composables/useWikiTree.ts @@ -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('wiki-items', () => []) const isLoading = useState('wiki-loading', () => false) - // --- Computed: Flat List zu Baum --- + // NEU: Globaler Sidebar State (Standardmäßig offen) + const isSidebarOpen = useState('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 = {} - // 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('/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 + } } \ No newline at end of file diff --git a/frontend/pages/wiki/[[id]].vue b/frontend/pages/wiki/[[id]].vue new file mode 100644 index 0000000..e16f92d --- /dev/null +++ b/frontend/pages/wiki/[[id]].vue @@ -0,0 +1,256 @@ + + + + + \ No newline at end of file diff --git a/frontend/pages/wiki/[id].vue b/frontend/pages/wiki/[id].vue deleted file mode 100644 index d0a5dff..0000000 --- a/frontend/pages/wiki/[id].vue +++ /dev/null @@ -1,126 +0,0 @@ - - - - - \ No newline at end of file diff --git a/frontend/pages/wiki/index.vue b/frontend/pages/wiki/index.vue deleted file mode 100644 index 87ff205..0000000 --- a/frontend/pages/wiki/index.vue +++ /dev/null @@ -1,84 +0,0 @@ - - - - - \ No newline at end of file