feat: navigation restructure + drag-and-drop menu ordering
Navigation: - Remove Plugins header from sidebar - Merge static items and plugin items into unified sorted list - Group related menu items (Dateien, E-Mail, Kalender, Automation) - German labels for all menu items - Sort by order field, alphabetical fallback for ties Drag-and-Drop Menu: - New backend endpoints: GET/PUT /api/v1/users/me/menu-order - Store menu order in user preferences JSONB field - New SettingsMenuOrder page with @dnd-kit drag-and-drop - New Settings tab: Menu ordering - Sidebar reads saved menu order and sorts accordingly - Reset to default option
This commit is contained in:
@@ -3,7 +3,7 @@
|
||||
*/
|
||||
|
||||
import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query';
|
||||
import { apiGet, apiPost, apiPatch, apiDelete } from './client';
|
||||
import { apiGet, apiPost, apiPut, apiPatch, apiDelete } from './client';
|
||||
import { PaginatedResponse } from './types';
|
||||
|
||||
// ── Types matching backend schemas ──
|
||||
@@ -80,6 +80,29 @@ export function useUpdateUser() {
|
||||
});
|
||||
}
|
||||
|
||||
// ── Menu Order ──
|
||||
|
||||
export interface MenuOrderResponse {
|
||||
menu_order: string[];
|
||||
}
|
||||
|
||||
export function useMenuOrder() {
|
||||
return useQuery({
|
||||
queryKey: ['menu-order'],
|
||||
queryFn: () => apiGet<MenuOrderResponse>('/users/me/menu-order'),
|
||||
});
|
||||
}
|
||||
|
||||
export function useUpdateMenuOrder() {
|
||||
const queryClient = useQueryClient();
|
||||
return useMutation({
|
||||
mutationFn: (menu_order: string[]) => apiPut('/users/me/menu-order', { menu_order }),
|
||||
onSuccess: () => {
|
||||
queryClient.invalidateQueries({ queryKey: ['menu-order'] });
|
||||
},
|
||||
});
|
||||
}
|
||||
|
||||
export function useDeleteUser() {
|
||||
const queryClient = useQueryClient();
|
||||
return useMutation({
|
||||
|
||||
Reference in New Issue
Block a user