fix(app-shell): instabile Zustands-Selektoren veroursachten haengende Lazy-Routen ("Dashboard loads forever") — Root Cause: moduleMenuOrder()/visibleModuleKeys() erzeugten bei jedem getSnapshot neue Map/Set-Objekte
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
import { useEffect, useCallback } from 'react';
|
||||
import { useEffect, useCallback, useMemo } from 'react';
|
||||
import { useMyWorkspaces, useWorkspaceContext } from '@/api/hooks/workspaces';
|
||||
import { useWorkspaceStore, type WorkspaceInfo, type WorkspaceContextState } from '@/store/workspaceStore';
|
||||
import { useAuthStore } from '@/store/authStore';
|
||||
@@ -62,7 +62,13 @@ export function useWorkspace() {
|
||||
return isModuleVisibleFromStore(moduleKey, isSystemAdmin);
|
||||
}, [isModuleVisibleFromStore, isSystemAdmin]);
|
||||
|
||||
const visibleModuleKeys = useWorkspaceStore(s => s.visibleModuleKeys());
|
||||
// NOTE: derive from the stable `context` reference via useMemo —
|
||||
// `s.visibleModuleKeys()` would create a NEW Set on every getSnapshot
|
||||
// call, destabilizing useSyncExternalStore (same root cause as the
|
||||
// Sidebar moduleMenuOrder infinite re-render loop).
|
||||
const visibleModuleKeys = useMemo(() => new Set(
|
||||
(context?.modules ?? []).filter(m => m.is_visible !== false).map(m => m.module_key),
|
||||
), [context]);
|
||||
|
||||
return {
|
||||
activeWorkspaceId,
|
||||
|
||||
Reference in New Issue
Block a user