|
@@ -27,6 +27,7 @@ import Pagination from 'sentry/components/pagination';
|
|
|
import QuestionTooltip from 'sentry/components/questionTooltip';
|
|
|
import {parseSearch} from 'sentry/components/searchSyntax/parser';
|
|
|
import HighlightQuery from 'sentry/components/searchSyntax/renderer';
|
|
|
+import {TabList, TabPanels, Tabs} from 'sentry/components/tabs';
|
|
|
import {t, tct} from 'sentry/locale';
|
|
|
import {space} from 'sentry/styles/space';
|
|
|
import {Organization, PageFilters, SelectValue} from 'sentry/types';
|
|
@@ -42,6 +43,7 @@ import {
|
|
|
isEquation,
|
|
|
isEquationAlias,
|
|
|
} from 'sentry/utils/discover/fields';
|
|
|
+import {parseField, parseMRI} from 'sentry/utils/metrics/mri';
|
|
|
import {createOnDemandFilterWarning} from 'sentry/utils/onDemandMetrics';
|
|
|
import {hasOnDemandMetricWidgetFeature} from 'sentry/utils/onDemandMetrics/features';
|
|
|
import parseLinkHeader from 'sentry/utils/parseLinkHeader';
|
|
@@ -89,6 +91,8 @@ import MetricWidgetQueries from 'sentry/views/dashboards/widgetCard/metricWidget
|
|
|
import ReleaseWidgetQueries from 'sentry/views/dashboards/widgetCard/releaseWidgetQueries';
|
|
|
import {WidgetCardChartContainer} from 'sentry/views/dashboards/widgetCard/widgetCardChartContainer';
|
|
|
import WidgetQueries from 'sentry/views/dashboards/widgetCard/widgetQueries';
|
|
|
+import {CodeLocations} from 'sentry/views/ddm/codeLocations';
|
|
|
+import {TraceTable} from 'sentry/views/ddm/traceTable';
|
|
|
import {decodeColumnOrder} from 'sentry/views/discover/utils';
|
|
|
import {OrganizationContext} from 'sentry/views/organizationContext';
|
|
|
import {MetricsDataSwitcher} from 'sentry/views/performance/landing/metricsDataSwitcher';
|
|
@@ -707,28 +711,57 @@ function WidgetViewerModal(props: Props) {
|
|
|
(a, b) => Number(b[mainField]) - Number(a[mainField])
|
|
|
);
|
|
|
|
|
|
+ const parsedField = parseField(mainField);
|
|
|
+
|
|
|
+ if (!parsedField) {
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+
|
|
|
+ const {useCase} = parseMRI(parsedField.mri)!;
|
|
|
+
|
|
|
return (
|
|
|
<Fragment>
|
|
|
- <GridEditable
|
|
|
- isLoading={loading}
|
|
|
- data={sortedData}
|
|
|
- columnOrder={columnOrder}
|
|
|
- columnSortBy={columnSortBy}
|
|
|
- grid={{
|
|
|
- renderHeadCell: renderMetricGridHeaderCell() as (
|
|
|
- column: GridColumnOrder,
|
|
|
- columnIndex: number
|
|
|
- ) => React.ReactNode,
|
|
|
- renderBodyCell: renderGridBodyCell({
|
|
|
- ...props,
|
|
|
- location,
|
|
|
- tableData: tableResults?.[0],
|
|
|
- isFirstPage,
|
|
|
- }),
|
|
|
- onResizeColumn,
|
|
|
- }}
|
|
|
- location={location}
|
|
|
- />
|
|
|
+ <Tabs>
|
|
|
+ <TabList>
|
|
|
+ <TabList.Item key="summary">{t('Summary')}</TabList.Item>
|
|
|
+ <TabList.Item hidden={useCase !== 'custom'} key="codeLocation">
|
|
|
+ {t('Code Location')}
|
|
|
+ </TabList.Item>
|
|
|
+ <TabList.Item key="samples">{t('Samples')}</TabList.Item>
|
|
|
+ </TabList>
|
|
|
+ <MetricWidgetTabContent>
|
|
|
+ <TabPanels>
|
|
|
+ <TabPanels.Item key="summary">
|
|
|
+ <GridEditable
|
|
|
+ isLoading={loading}
|
|
|
+ data={sortedData}
|
|
|
+ columnOrder={columnOrder}
|
|
|
+ columnSortBy={columnSortBy}
|
|
|
+ grid={{
|
|
|
+ renderHeadCell: renderMetricGridHeaderCell() as (
|
|
|
+ column: GridColumnOrder,
|
|
|
+ columnIndex: number
|
|
|
+ ) => React.ReactNode,
|
|
|
+ renderBodyCell: renderGridBodyCell({
|
|
|
+ ...props,
|
|
|
+ location,
|
|
|
+ tableData: tableResults?.[0],
|
|
|
+ isFirstPage,
|
|
|
+ }),
|
|
|
+ onResizeColumn,
|
|
|
+ }}
|
|
|
+ location={location}
|
|
|
+ />
|
|
|
+ </TabPanels.Item>
|
|
|
+ <TabPanels.Item key="codeLocation">
|
|
|
+ <CodeLocations mri={parsedField.mri} />
|
|
|
+ </TabPanels.Item>
|
|
|
+ <TabPanels.Item key="samples">
|
|
|
+ <TraceTable />
|
|
|
+ </TabPanels.Item>
|
|
|
+ </TabPanels>
|
|
|
+ </MetricWidgetTabContent>
|
|
|
+ </Tabs>
|
|
|
</Fragment>
|
|
|
);
|
|
|
};
|
|
@@ -1308,4 +1341,9 @@ const WidgetTitleRow = styled('div')`
|
|
|
gap: ${space(0.75)};
|
|
|
`;
|
|
|
|
|
|
+const MetricWidgetTabContent = styled('div')`
|
|
|
+ position: relative;
|
|
|
+ padding-top: ${space(2)};
|
|
|
+`;
|
|
|
+
|
|
|
export default withPageFilters(WidgetViewerModal);
|