import { A, useSearchParams } from '@solidjs/router'; import { createMemo, createResource, Show } from 'solid-js'; import AdminShell from '~/components/AdminShell'; const API = '/api/gateway'; type ExternalRole = { id: string; roleKey: string; displayName: string; vertical: string; enabledModules: string[]; onboardingSchemaId: string; isActive: boolean; }; async function loadExternalRoles(): Promise { try { const res = await fetch(`${API}/api/admin/roles?audience=EXTERNAL`); if (!res.ok) throw new Error('Failed to load'); const data = await res.json(); const rows = (Array.isArray(data) ? data : (data.roles || [])) .filter((item: any) => String(item?.audience || '').toUpperCase() === 'EXTERNAL'); return await Promise.all( rows.map(async (r: any) => { const roleId = String(r.id || ''); const roleKey = String(r.key || r.role_key || r.roleKey || ''); const cfg = r.config_json || {}; let enabledModules = Array.isArray(cfg?.enabledModules) ? cfg.enabledModules : []; let onboardingSchemaId = String(cfg?.onboardingSchemaId || r.onboarding_schema_id || ''); if (roleId) { try { const dashboardRes = await fetch(`${API}/api/admin/dashboard-config/${roleId}?audience=EXTERNAL`); if (dashboardRes.ok) { const detail = await dashboardRes.json(); const json = detail?.config_json || {}; const byEnabled = Array.isArray(json?.enabled_modules) ? json.enabled_modules : []; const byNav = Array.isArray(json?.nav) ? json.nav.map((item: any) => String(item?.key || '').trim()).filter(Boolean) : []; if (enabledModules.length === 0) { enabledModules = byEnabled.length > 0 ? byEnabled : byNav; } } } catch {} try { const onboardingRes = await fetch(`${API}/api/admin/onboarding-config/${roleId}`); if (onboardingRes.ok) { const onboarding = await onboardingRes.json(); if (!onboardingSchemaId) onboardingSchemaId = String(onboarding?.id || ''); } } catch {} } return { id: roleId, roleKey, displayName: r.name || r.displayName || r.display_name || roleKey, vertical: cfg?.vertical || r.vertical || '', enabledModules, onboardingSchemaId, isActive: r.is_active !== false, }; }), ); } catch { return []; } } export default function RuntimeRolesPage() { const [searchParams] = useSearchParams(); const [roles] = createResource(loadExternalRoles); const selectedRoleKey = createMemo(() => (searchParams.roleKey || '').toLowerCase()); return (

Roles Management

Configure and maintain external system roles and access privileges.

0}> {roles()!.map((role) => ( ))}
ID Name Issue Type Edit Delete
Loading external roles...
Failed to load external roles. Is the backend running?
No external roles configured yet.
{role.roleKey || role.id?.slice(0, 6).toUpperCase()} {role.displayName} View

Showing 1 to 5 of {(roles()?.length || 0) || 5} entries

); }