1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586 |
- import {Query} from 'history';
- import cloneDeep from 'lodash/cloneDeep';
- import pick from 'lodash/pick';
- import {GlobalSelection} from 'app/types';
- import {getUtcDateString} from 'app/utils/dates';
- import EventView from 'app/utils/discover/eventView';
- import {DashboardDetails, DisplayType, Widget, WidgetQuery} from './types';
- export function cloneDashboard(dashboard: DashboardDetails): DashboardDetails {
- return cloneDeep(dashboard);
- }
- export function eventViewFromWidget(
- title: string,
- query: WidgetQuery,
- selection: GlobalSelection,
- widgetType?: DisplayType
- ): EventView {
- const {start, end, period: statsPeriod} = selection.datetime;
- const {projects, environments} = selection;
- // World Map requires an additional column (geo.country_code) to display in discover when navigating from the widget
- const fields =
- widgetType === DisplayType.WORLD_MAP
- ? ['geo.country_code', ...query.fields]
- : query.fields;
- const conditions =
- widgetType === DisplayType.WORLD_MAP
- ? `${query.conditions} has:geo.country_code`
- : query.conditions;
- return EventView.fromSavedQuery({
- id: undefined,
- name: title,
- version: 2,
- fields,
- query: conditions,
- orderby: query.orderby,
- projects,
- range: statsPeriod,
- start: start ? getUtcDateString(start) : undefined,
- end: end ? getUtcDateString(end) : undefined,
- environment: environments,
- });
- }
- function coerceStringToArray(value?: string | string[] | null) {
- return typeof value === 'string' ? [value] : value;
- }
- export function constructWidgetFromQuery(query?: Query): Widget | undefined {
- if (query) {
- const queryNames = coerceStringToArray(query.queryNames);
- const queryConditions = coerceStringToArray(query.queryConditions);
- const queryFields = coerceStringToArray(query.queryFields);
- const queries: WidgetQuery[] = [];
- if (
- queryConditions &&
- queryNames &&
- queryFields &&
- typeof query.queryOrderby === 'string'
- )
- queryConditions.forEach((condition, index) => {
- queries.push({
- name: queryNames[index],
- conditions: condition,
- fields: queryFields,
- orderby: query.queryOrderby as string,
- });
- });
- if (query.title && query.displayType && query.interval && queries.length > 0) {
- const newWidget: Widget = {
- ...(pick(query, ['title', 'displayType', 'interval']) as {
- title: string;
- displayType: DisplayType;
- interval: string;
- }),
- queries,
- };
- return newWidget;
- }
- }
- return undefined;
- }
|