fix: DevDiagram page uses time range and correct catalog shape
All checks were successful
CI / cleanup-branch (push) Has been skipped
CI / build (push) Successful in 1m0s
CI / docker (push) Successful in 54s
CI / deploy-feature (push) Has been skipped
CI / deploy (push) Successful in 37s

The dev diagram page was calling useRouteCatalog() without time range
params (returned empty) and parsing the wrong response shape (expected
flat {application, routeId} but catalog returns {appId, routes[]}).

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
hsiegeln
2026-03-27 14:05:32 +01:00
parent ac32396a57
commit afcb7d3175

View File

@@ -1,11 +1,16 @@
import { useMemo, useState } from 'react'; import { useMemo, useState } from 'react';
import { useGlobalFilters } from '@cameleer/design-system';
import { ProcessDiagram } from '../../components/ProcessDiagram'; import { ProcessDiagram } from '../../components/ProcessDiagram';
import type { NodeConfig, NodeAction } from '../../components/ProcessDiagram'; import type { NodeConfig, NodeAction } from '../../components/ProcessDiagram';
import { useRouteCatalog } from '../../api/queries/catalog'; import { useRouteCatalog } from '../../api/queries/catalog';
import styles from './DevDiagram.module.css'; import styles from './DevDiagram.module.css';
export default function DevDiagram() { export default function DevDiagram() {
const { data: catalog } = useRouteCatalog(); const { timeRange } = useGlobalFilters();
const { data: catalog } = useRouteCatalog(
timeRange.start.toISOString(),
timeRange.end.toISOString(),
);
const [selectedApp, setSelectedApp] = useState(''); const [selectedApp, setSelectedApp] = useState('');
const [selectedRoute, setSelectedRoute] = useState(''); const [selectedRoute, setSelectedRoute] = useState('');
@@ -13,20 +18,17 @@ export default function DevDiagram() {
const [direction, setDirection] = useState<'LR' | 'TB'>('LR'); const [direction, setDirection] = useState<'LR' | 'TB'>('LR');
const [actionLog, setActionLog] = useState<string[]>([]); const [actionLog, setActionLog] = useState<string[]>([]);
// Extract unique applications and routes from catalog // Extract applications and routes from catalog
// Catalog shape: Array<{ appId, routes: [{ routeId }] }>
const { apps, routes } = useMemo(() => { const { apps, routes } = useMemo(() => {
if (!catalog) return { apps: [] as string[], routes: [] as string[] }; if (!catalog) return { apps: [] as string[], routes: [] as string[] };
const appSet = new Set<string>(); const appArr = (catalog as Array<{ appId: string; routes?: Array<{ routeId: string }> }>)
const routeList: { app: string; routeId: string }[] = []; .map(a => a.appId)
for (const entry of catalog as Array<{ application?: string; routeId?: string }>) { .sort();
if (entry.application) appSet.add(entry.application);
if (entry.application && entry.routeId) {
routeList.push({ app: entry.application, routeId: entry.routeId });
}
}
const appArr = Array.from(appSet).sort();
const filtered = selectedApp const filtered = selectedApp
? routeList.filter(r => r.app === selectedApp).map(r => r.routeId) ? (catalog as Array<{ appId: string; routes?: Array<{ routeId: string }> }>)
.filter(a => a.appId === selectedApp)
.flatMap(a => (a.routes || []).map(r => r.routeId))
: []; : [];
return { apps: appArr, routes: filtered }; return { apps: appArr, routes: filtered };
}, [catalog, selectedApp]); }, [catalog, selectedApp]);