signoz/frontend/src/utils/explorerUtils.ts

46 lines
1.6 KiB
TypeScript
Raw Normal View History

import { QueryParams } from 'constants/query';
import { PANEL_TYPES } from 'constants/queryBuilder';
import { ExplorerViews } from 'pages/LogsExplorer/utils';
// Mapping between panel types and explorer views
export const panelTypeToExplorerView: Record<PANEL_TYPES, ExplorerViews> = {
[PANEL_TYPES.LIST]: ExplorerViews.LIST,
[PANEL_TYPES.TIME_SERIES]: ExplorerViews.TIMESERIES,
[PANEL_TYPES.TRACE]: ExplorerViews.TRACE,
[PANEL_TYPES.TABLE]: ExplorerViews.TABLE,
[PANEL_TYPES.VALUE]: ExplorerViews.TIMESERIES,
[PANEL_TYPES.BAR]: ExplorerViews.TIMESERIES,
[PANEL_TYPES.PIE]: ExplorerViews.TIMESERIES,
[PANEL_TYPES.HISTOGRAM]: ExplorerViews.TIMESERIES,
[PANEL_TYPES.EMPTY_WIDGET]: ExplorerViews.LIST,
};
/**
* Get the explorer view based on panel type from URL or saved view
* @param searchParams - URL search parameters
* @param panelTypesFromUrl - Panel type extracted from URL
* @returns The appropriate ExplorerViews value
*/
export const getExplorerViewFromUrl = (
searchParams: URLSearchParams,
panelTypesFromUrl: PANEL_TYPES | null,
): ExplorerViews => {
const savedView = searchParams.get(QueryParams.selectedExplorerView);
if (savedView) {
return savedView as ExplorerViews;
}
// If no saved view, use panel type from URL to determine the view
const urlPanelType = panelTypesFromUrl || PANEL_TYPES.LIST;
return panelTypeToExplorerView[urlPanelType];
};
/**
* Get the explorer view for a given panel type
* @param panelType - The panel type
* @returns The corresponding ExplorerViews value
*/
export const getExplorerViewForPanelType = (
panelType: PANEL_TYPES,
): ExplorerViews => panelTypeToExplorerView[panelType];