Fix route diagram open issues: bugs, visual polish, interactive features
Batch 1 — Bug fixes: - #51: Pass group+routeId to stats/timeseries API for route-scoped data - #55: Propagate processor FAILED status to diagram error node highlighting Batch 2 — Visual polish: - #56: Brighter canvas background with amber/cyan radial gradients - #57: Stronger glow filters (stdDeviation 3→6, opacity 0.4→0.6) - #58: Uniform 200×40px leaf nodes with label truncation at 22 chars - #59: Diagram legend (node types, edge types, overlay indicators) - #64: SVG <title> tooltips on all nodes showing type, status, duration Batch 3 — Interactive features: - #60: Draggable minimap viewport (click-to-center, drag-to-pan) - #62: CSS View Transitions slide animation, back arrow, Backspace key Batch 4 — Advanced features: - #50: Execution picker dropdown scoped to group+routeId - #49: Iteration count badge (×N) on compound nodes - #63: Route header stats (Executions Today, Success Rate, Avg, P99) Closes #49 #50 #51 #55 #56 #57 #58 #59 #60 #62 #63 #64 Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -2,15 +2,22 @@ import { useQuery } from '@tanstack/react-query';
|
||||
import { api } from '../client';
|
||||
import type { SearchRequest } from '../types';
|
||||
|
||||
export function useExecutionStats(timeFrom: string | undefined, timeTo: string | undefined) {
|
||||
export function useExecutionStats(
|
||||
timeFrom: string | undefined,
|
||||
timeTo: string | undefined,
|
||||
routeId?: string,
|
||||
group?: string,
|
||||
) {
|
||||
return useQuery({
|
||||
queryKey: ['executions', 'stats', timeFrom, timeTo],
|
||||
queryKey: ['executions', 'stats', timeFrom, timeTo, routeId, group],
|
||||
queryFn: async () => {
|
||||
const { data, error } = await api.GET('/search/stats', {
|
||||
params: {
|
||||
query: {
|
||||
from: timeFrom!,
|
||||
to: timeTo || undefined,
|
||||
routeId: routeId || undefined,
|
||||
group: group || undefined,
|
||||
},
|
||||
},
|
||||
});
|
||||
@@ -38,9 +45,14 @@ export function useSearchExecutions(filters: SearchRequest, live = false) {
|
||||
});
|
||||
}
|
||||
|
||||
export function useStatsTimeseries(timeFrom: string | undefined, timeTo: string | undefined) {
|
||||
export function useStatsTimeseries(
|
||||
timeFrom: string | undefined,
|
||||
timeTo: string | undefined,
|
||||
routeId?: string,
|
||||
group?: string,
|
||||
) {
|
||||
return useQuery({
|
||||
queryKey: ['executions', 'timeseries', timeFrom, timeTo],
|
||||
queryKey: ['executions', 'timeseries', timeFrom, timeTo, routeId, group],
|
||||
queryFn: async () => {
|
||||
const { data, error } = await api.GET('/search/stats/timeseries', {
|
||||
params: {
|
||||
@@ -48,6 +60,8 @@ export function useStatsTimeseries(timeFrom: string | undefined, timeTo: string
|
||||
from: timeFrom!,
|
||||
to: timeTo || undefined,
|
||||
buckets: 24,
|
||||
routeId: routeId || undefined,
|
||||
group: group || undefined,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user