import React from 'react';
import {SegmentedRadioGroup} from '@gravity-ui/uikit';
import {StringParam, useQueryParam} from 'use-query-params';
import {z} from 'zod';
import type {DateRangeValues} from '../../../../components/DateRange';
import {setTopQueriesFilters} from '../../../../store/reducers/executeTopQueries/executeTopQueries';
import type {TimeFrame} from '../../../../store/reducers/executeTopQueries/types';
import {useTypedDispatch} from '../../../../utils/hooks';
import {RunningQueriesData} from './RunningQueriesData';
import {TopQueriesData} from './TopQueriesData';
import {TimeFrameIds} from './constants';
import i18n from './i18n';
import './TopQueries.scss';
const QueryModeIds = {
top: 'top',
running: 'running',
} as const;
const queryModeSchema = z.nativeEnum(QueryModeIds).catch(QueryModeIds.top);
const timeFrameSchema = z.nativeEnum(TimeFrameIds).catch(TimeFrameIds.hour);
interface TopQueriesProps {
database: string;
}
export const TopQueries = ({database}: TopQueriesProps) => {
const dispatch = useTypedDispatch();
const [rawQueryMode = QueryModeIds.top, setQueryMode] = useQueryParam('queryMode', StringParam);
const [rawTimeFrame = TimeFrameIds.hour, setTimeFrame] = useQueryParam(
'timeFrame',
StringParam,
);
const queryMode = queryModeSchema.parse(rawQueryMode);
const timeFrame = timeFrameSchema.parse(rawTimeFrame);
const isTopQueries = queryMode === QueryModeIds.top;
const handleTextSearchUpdate = (text: string) => {
dispatch(setTopQueriesFilters({text}));
};
const handleTimeFrameChange = (value: string[]) => {
setTimeFrame(value[0] as TimeFrame, 'replaceIn');
};
const handleDateRangeChange = (value: DateRangeValues) => {
dispatch(setTopQueriesFilters(value));
};
const renderQueryModeControl = React.useCallback(() => {
return (
{i18n('mode_top')}
{i18n('mode_running')}
);
}, [queryMode, setQueryMode]);
return isTopQueries ? (
) : (
);
};