|
@@ -2,10 +2,7 @@ import {useMemo} from 'react';
|
|
|
|
|
|
import {openCreateDashboardFromScratchpad} from 'sentry/actionCreators/modal';
|
|
|
import {convertToDashboardWidget} from 'sentry/utils/metrics/dashboard';
|
|
|
-import {
|
|
|
- MetricExpressionType,
|
|
|
- type MetricWidgetQueryParams,
|
|
|
-} from 'sentry/utils/metrics/types';
|
|
|
+import {MetricExpressionType, type MetricsWidget} from 'sentry/utils/metrics/types';
|
|
|
import useOrganization from 'sentry/utils/useOrganization';
|
|
|
import usePageFilters from 'sentry/utils/usePageFilters';
|
|
|
import useRouter from 'sentry/utils/useRouter';
|
|
@@ -13,7 +10,7 @@ import type {Widget} from 'sentry/views/dashboards/types';
|
|
|
import type {useFormulaDependencies} from 'sentry/views/metrics/utils/useFormulaDependencies';
|
|
|
|
|
|
export function useCreateDashboard(
|
|
|
- widgets: MetricWidgetQueryParams[],
|
|
|
+ widgets: MetricsWidget[],
|
|
|
formulaDependencies: ReturnType<typeof useFormulaDependencies>,
|
|
|
isMultiChartMode: boolean
|
|
|
) {
|
|
@@ -24,33 +21,30 @@ export function useCreateDashboard(
|
|
|
const dashboardWidgets = useMemo(() => {
|
|
|
if (!isMultiChartMode) {
|
|
|
const queryIdsInArray = new Set<number>();
|
|
|
- const widgetsWithDependencies = widgets.reduce<MetricWidgetQueryParams[]>(
|
|
|
- (acc, widget) => {
|
|
|
- if (widget.type === MetricExpressionType.EQUATION) {
|
|
|
- const {dependencies, isError} = formulaDependencies[widget.id];
|
|
|
- if (isError) {
|
|
|
- return acc;
|
|
|
+ const widgetsWithDependencies = widgets.reduce<MetricsWidget[]>((acc, widget) => {
|
|
|
+ if (widget.type === MetricExpressionType.EQUATION) {
|
|
|
+ const {dependencies, isError} = formulaDependencies[widget.id];
|
|
|
+ if (isError) {
|
|
|
+ return acc;
|
|
|
+ }
|
|
|
+ // Only add dependencies that are not already in the list of widgets
|
|
|
+ const filteredDependencies: MetricsWidget[] = [];
|
|
|
+ dependencies.forEach(dependency => {
|
|
|
+ if (!queryIdsInArray.has(dependency.id)) {
|
|
|
+ filteredDependencies.push({...dependency, isHidden: true});
|
|
|
+ queryIdsInArray.add(dependency.id);
|
|
|
}
|
|
|
- // Only add dependencies that are not already in the list of widgets
|
|
|
- const filteredDependencies: MetricWidgetQueryParams[] = [];
|
|
|
- dependencies.forEach(dependency => {
|
|
|
- if (!queryIdsInArray.has(dependency.id)) {
|
|
|
- filteredDependencies.push({...dependency, isHidden: true});
|
|
|
- queryIdsInArray.add(dependency.id);
|
|
|
- }
|
|
|
- });
|
|
|
+ });
|
|
|
|
|
|
- return [...filteredDependencies, ...acc, widget];
|
|
|
- }
|
|
|
+ return [...filteredDependencies, ...acc, widget];
|
|
|
+ }
|
|
|
|
|
|
- if (queryIdsInArray.has(widget.id)) {
|
|
|
- return acc;
|
|
|
- }
|
|
|
- queryIdsInArray.add(widget.id);
|
|
|
- return [...acc, widget];
|
|
|
- },
|
|
|
- []
|
|
|
- );
|
|
|
+ if (queryIdsInArray.has(widget.id)) {
|
|
|
+ return acc;
|
|
|
+ }
|
|
|
+ queryIdsInArray.add(widget.id);
|
|
|
+ return [...acc, widget];
|
|
|
+ }, []);
|
|
|
return [convertToDashboardWidget(widgetsWithDependencies, widgets[0].displayType)];
|
|
|
}
|
|
|
|