import {useCallback, useMemo, useState} from 'react';
import styled from '@emotion/styled';
import {MetricSamplesTable} from 'sentry/components/ddm/metricSamplesTable';
import {TabList, TabPanels, Tabs} from 'sentry/components/tabs';
import {Tooltip} from 'sentry/components/tooltip';
import {t} from 'sentry/locale';
import {space} from 'sentry/styles/space';
import {trackAnalytics} from 'sentry/utils/analytics';
import {isCustomMetric} from 'sentry/utils/metrics';
import type {MetricWidgetQueryParams} from 'sentry/utils/metrics/types';
import useOrganization from 'sentry/utils/useOrganization';
import {CodeLocations} from 'sentry/views/ddm/codeLocations';
import type {FocusAreaProps} from 'sentry/views/ddm/context';
import {useDDMContext} from 'sentry/views/ddm/context';
import type {SamplesTableProps} from 'sentry/views/ddm/sampleTable';
import {SampleTable} from 'sentry/views/ddm/sampleTable';
import {getQueryWithFocusedSeries} from 'sentry/views/ddm/utils';
enum Tab {
SAMPLES = 'samples',
CODE_LOCATIONS = 'codeLocations',
}
export function WidgetDetails() {
const {selectedWidgetIndex, widgets, focusArea, setHighlightedSampleId} =
useDDMContext();
const selectedWidget = widgets[selectedWidgetIndex] as
| MetricWidgetQueryParams
| undefined;
const handleSampleRowHover = useCallback(
(sampleId?: string) => {
setHighlightedSampleId(sampleId);
},
[setHighlightedSampleId]
);
return (
);
}
interface MetricDetailsProps {
focusArea?: FocusAreaProps;
onRowHover?: SamplesTableProps['onRowHover'];
widget?: MetricWidgetQueryParams;
}
export function MetricDetails({widget, onRowHover, focusArea}: MetricDetailsProps) {
const organization = useOrganization();
const [selectedTab, setSelectedTab] = useState(Tab.SAMPLES);
const isCodeLocationsDisabled = widget?.mri && !isCustomMetric({mri: widget.mri});
if (isCodeLocationsDisabled && selectedTab === Tab.CODE_LOCATIONS) {
setSelectedTab(Tab.SAMPLES);
}
const queryWithFocusedSeries = useMemo(
() => widget && getQueryWithFocusedSeries(widget),
[widget]
);
const handleTabChange = useCallback(
(tab: Tab) => {
if (tab === Tab.CODE_LOCATIONS) {
trackAnalytics('ddm.code-locations', {
organization,
});
}
setSelectedTab(tab);
},
[organization]
);
return (
{t('Sampled Events')}
{t('Code Location')}
{organization.features.includes('metrics-samples-list') ? (
) : (
)}
);
}
const TrayWrapper = styled('div')`
padding-top: ${space(4)};
display: grid;
grid-template-rows: auto auto 1fr;
`;
const ContentWrapper = styled('div')`
position: relative;
padding-top: ${space(2)};
`;