import { useCallback } from "react"; import { ExternalLink } from "lucide-react"; import { ScoreCombobox } from "./charts/ScoreCombobox"; import { ObjectTypeFilter } from "./charts/ObjectTypeFilter"; import { TimeRangePicker } from "@/src/components/date-picker"; import { DASHBOARD_AGGREGATION_OPTIONS } from "@/src/utils/date-range-utils"; import { useAnalyticsUrlState } from "@/src/features/score-analytics/lib/analytics-url-state"; import { type TimeRange } from "@/src/utils/date-range-utils"; import { type ScoreOption } from "./charts/ScoreCombobox"; import { Badge } from "@/src/components/ui/badge"; import { HoverCard, HoverCardContent, HoverCardTrigger, } from "@/src/components/ui/hover-card"; export interface ScoreAnalyticsHeaderProps { scoreOptions: ScoreOption[]; timeRange: TimeRange; onTimeRangeChange: (range: TimeRange) => void; compatibleScore2DataTypes?: string | string[]; } /** * ScoreAnalyticsHeader - Header controls for score analytics * * Provides UI controls for: * - Score 1 selector (required) * - Score 2 selector (optional, for comparison) * - Object type filter (all, trace, session, observation, dataset_run) * - Time range picker * * Uses useAnalyticsUrlState hook to sync selections with URL query params. * Automatically clears score2 when score1 is cleared. * * Layout: * - Mobile: Stacked controls * - Desktop: Left (score selectors) | Spacer | Right (filters) */ export function ScoreAnalyticsHeader({ scoreOptions, timeRange, onTimeRangeChange, compatibleScore2DataTypes, }: ScoreAnalyticsHeaderProps) { const urlStateHook = useAnalyticsUrlState(); const { state: urlState, setScore2, setObjectType } = urlStateHook; // Wrapper that clears score2 when score1 is cleared const setScore1 = useCallback( (value: string | undefined) => { urlStateHook.setScore1(value); // Always clear score2 when clearing score1 if (value === undefined) { urlStateHook.setScore2(undefined); } }, [urlStateHook], ); return (
{/* Left: Score Selectors */}
Beta Feature

Beta Feature

Score analytics is currently in beta. We're actively improving this feature and would love to hear your feedback.

Share feedback on GitHub Discussions
{/* Middle: Spacer (hidden on mobile) */}
{/* Right: Filters */}
); }