From 6272d2194246f5c80cbd0fc0a129a70802a1a710 Mon Sep 17 00:00:00 2001 From: Ida Dittrich Date: Sat, 14 Feb 2026 17:59:28 +0100 Subject: [PATCH] =?UTF-8?q?fix:zugriffsverwaltung=20liess=20sich=20nicht?= =?UTF-8?q?=20=C3=B6ffnen?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/App.tsx | 3 ++- src/hooks/useFeatureAccess.ts | 10 ++++++++- src/pages/admin/AdminFeatureAccessPage.tsx | 24 +++++++++++++++++++--- 3 files changed, 32 insertions(+), 5 deletions(-) diff --git a/src/App.tsx b/src/App.tsx index 81b8c58..00018db 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -36,7 +36,7 @@ import { DashboardPage } from './pages/Dashboard'; import { SettingsPage } from './pages/Settings'; import { GDPRPage } from './pages/GDPR'; import { FeatureViewPage } from './pages/FeatureView'; -import { AdminMandatesPage, AdminUsersPage, AdminUserMandatesPage, AdminFeatureAccessPage, AdminInvitationsPage, AdminFeatureRolesPage, AdminFeatureInstanceUsersPage, AdminMandateRolesPage, AdminMandateRolePermissionsPage, AdminUserAccessOverviewPage } from './pages/admin'; +import { AdminMandatesPage, AdminUsersPage, AdminUserMandatesPage, AdminFeatureAccessPage, AdminInvitationsPage, AdminFeatureRolesPage, AdminFeatureInstanceUsersPage, AdminMandateRolesPage, AdminMandateRolePermissionsPage, AdminUserAccessOverviewPage, AccessManagementHub } from './pages/admin'; import { PlaygroundPage, WorkflowsPage, AutomationsPage } from './pages/workflows'; import { PromptsPage, FilesPage, ConnectionsPage } from './pages/basedata'; function App() { @@ -163,6 +163,7 @@ function App() { } /> } /> } /> + } /> } /> } /> } /> diff --git a/src/hooks/useFeatureAccess.ts b/src/hooks/useFeatureAccess.ts index a8b8cd7..739c022 100644 --- a/src/hooks/useFeatureAccess.ts +++ b/src/hooks/useFeatureAccess.ts @@ -102,7 +102,15 @@ export function useFeatureAccess() { setError(null); try { const response = await api.get('/api/features/'); - const data = Array.isArray(response.data) ? response.data : []; + // Handle different API response formats (array, {items}, {data}) + let data: Feature[] = []; + if (Array.isArray(response.data)) { + data = response.data; + } else if (response.data?.items && Array.isArray(response.data.items)) { + data = response.data.items; + } else if (response.data?.data && Array.isArray(response.data.data)) { + data = response.data.data; + } setFeatures(data); return data; } catch (err: any) { diff --git a/src/pages/admin/AdminFeatureAccessPage.tsx b/src/pages/admin/AdminFeatureAccessPage.tsx index af99f07..1f7c83c 100644 --- a/src/pages/admin/AdminFeatureAccessPage.tsx +++ b/src/pages/admin/AdminFeatureAccessPage.tsx @@ -390,6 +390,7 @@ export const AdminFeatureAccessPage: React.FC = () => { className={styles.primaryButton} onClick={() => setShowCreateModal(true)} disabled={features.length === 0} + title={features.length === 0 ? 'Keine Features verfügbar. Bitte laden Sie die Seite neu oder prüfen Sie die Konsole auf Fehler.' : undefined} > Neue Instanz @@ -397,8 +398,8 @@ export const AdminFeatureAccessPage: React.FC = () => { )} - {/* Available Features Info */} - {features.length > 0 && ( + {/* Available Features Info / Empty Features Warning */} + {features.length > 0 ? (
Verfügbare Features: @@ -409,7 +410,23 @@ export const AdminFeatureAccessPage: React.FC = () => { ))}
- )} + ) : selectedMandateId && !loading ? ( +
+ + + Keine Features geladen. + {error ? ` Fehler: ${error}` : ' Die API hat keine Features zurückgegeben.'} + {' '}Öffnen Sie die Browser-Konsole (F12) und prüfen Sie den Netzwerk-Tab für /api/features/ + + +
+ ) : null} {/* Content */} {!selectedMandateId ? ( @@ -436,6 +453,7 @@ export const AdminFeatureAccessPage: React.FC = () => { className={styles.primaryButton} onClick={() => setShowCreateModal(true)} disabled={features.length === 0} + title={features.length === 0 ? 'Keine Features verfügbar. Bitte laden Sie die Features erneut.' : undefined} > Erste Instanz erstellen