import {useTheme} from '@emotion/react'; import {VitalMeter} from 'sentry/views/insights/browser/webVitals/components/webVitalMeters'; import type {WebVitals} from 'sentry/views/insights/browser/webVitals/types'; import type {TraceTree} from 'sentry/views/performance/newTraceDetails/traceModels/traceTree'; type Props = { tree: TraceTree; }; const ALLOWED_VITALS = ['lcp', 'fcp', 'cls', 'ttfb', 'inp']; export function TraceContextVitals({tree}: Props) { const theme = useTheme(); const hasWebVitals = tree.vital_types.has('web'); const hasValidWebVitals = Array.from(tree.vitals.values()).some(vitalGroup => vitalGroup.some(vital => ALLOWED_VITALS.includes(vital.key)) ); if (!hasWebVitals || !hasValidWebVitals) { return null; } return ALLOWED_VITALS.map((webVital, index) => { let vital: TraceTree.CollectedVital | undefined; tree.vitals.forEach(entry => (vital = entry.find(v => v.key === webVital))); // Render empty state if (!vital || !vital.score) { return ( ); } const colors = theme.charts.getColorPalette(3); return ( ); }); }