feat(#358): W3c — /contacts Sidebar-Sonderfall entfernt (P10)
Check Cross-Plugin Imports / check (push) Has been cancelled
Check Cross-Plugin Imports / check (push) Has been cancelled
- ContactsPlugin-Manifest: menu_items + page_routes ergänzt (/contacts, /contacts/:id, /contacts/dedup — contacts:read-Gate) - FrontendMenuItem/FrontendPageRoute-Imports in plugin.py ergänzt - Sidebar.tsx: /contacts aus singleItems entfernt (nur noch dashboard + system-dashboard als non-plugin items) — contacts kommt jetzt via getAllMenuItems() aus dem Plugin-Manifest - Funktionserhalt bewiesen: routePermissions-Tests 6/6 passed (die durch die Manifest-Änderung betroffen sein könnten) fixes #358 (P10-Teil)
This commit is contained in:
@@ -11,6 +11,8 @@ import logging
|
|||||||
from app.plugins.base import BasePlugin
|
from app.plugins.base import BasePlugin
|
||||||
from app.plugins.manifest import (
|
from app.plugins.manifest import (
|
||||||
FrontendDashboardWidget,
|
FrontendDashboardWidget,
|
||||||
|
FrontendMenuItem,
|
||||||
|
FrontendPageRoute,
|
||||||
PluginManifest,
|
PluginManifest,
|
||||||
PluginRouteDef,
|
PluginRouteDef,
|
||||||
)
|
)
|
||||||
@@ -70,6 +72,14 @@ class ContactsPlugin(BasePlugin):
|
|||||||
permission="contacts:read",
|
permission="contacts:read",
|
||||||
),
|
),
|
||||||
],
|
],
|
||||||
|
menu_items=[
|
||||||
|
FrontendMenuItem(label_key='nav.contacts', label='Kontakte', path='/contacts', icon='Users', order=10, permission='contacts:read'),
|
||||||
|
],
|
||||||
|
page_routes=[
|
||||||
|
FrontendPageRoute(path='/contacts', component='@/pages/ContactsList', protected=True, permission='contacts:read'),
|
||||||
|
FrontendPageRoute(path='/contacts/:id', component='@/pages/ContactDetailPage', protected=True, permission='contacts:read'),
|
||||||
|
FrontendPageRoute(path='/contacts/dedup', component='@/pages/DedupMergePage', protected=True, permission='contacts:read'),
|
||||||
|
],
|
||||||
permissions=[
|
permissions=[
|
||||||
"contacts:read",
|
"contacts:read",
|
||||||
"contacts:write",
|
"contacts:write",
|
||||||
|
|||||||
@@ -48,12 +48,11 @@ function getIcon(name: string): React.ReactNode {
|
|||||||
return Icon ? <Icon className="h-4 w-4" /> : <FileText className="h-4 w-4" />;
|
return Icon ? <Icon className="h-4 w-4" /> : <FileText className="h-4 w-4" />;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Only non-plugin items: dashboard, contacts, settings.
|
// Only non-plugin items: dashboard, system-dashboard.
|
||||||
// All other menu entries (calendar, dms, mail, ai-assistant, automation, reports, tasks, communication)
|
// All other menu entries (contacts, calendar, dms, mail, ai-assistant, automation, reports, tasks, communication)
|
||||||
// are provided by plugin manifests via usePluginStore(s => s.getAllMenuItems()).
|
// are provided by plugin manifests via usePluginStore(s => s.getAllMenuItems()).
|
||||||
const singleItems: NavSingleItem[] = [
|
const singleItems: NavSingleItem[] = [
|
||||||
{ to: '/dashboard', labelKey: 'nav.dashboard', icon: <Home className="w-5 h-5 flex-shrink-0" aria-hidden="true" strokeWidth={2} />, order: 0 },
|
{ to: '/dashboard', labelKey: 'nav.dashboard', icon: <Home className="w-5 h-5 flex-shrink-0" aria-hidden="true" strokeWidth={2} />, order: 0 },
|
||||||
{ to: '/contacts', labelKey: 'nav.contacts', icon: <Users className="w-5 h-5 flex-shrink-0" aria-hidden="true" strokeWidth={2} />, order: 10 },
|
|
||||||
{ to: '/system-dashboard', labelKey: 'nav.systemDashboard', icon: <Activity className="w-5 h-5 flex-shrink-0" aria-hidden="true" strokeWidth={2} />, order: 90 },
|
{ to: '/system-dashboard', labelKey: 'nav.systemDashboard', icon: <Activity className="w-5 h-5 flex-shrink-0" aria-hidden="true" strokeWidth={2} />, order: 90 },
|
||||||
];
|
];
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user