diff --git a/web/src/components/DurationDropdown.tsx b/web/src/components/DurationDropdown.tsx deleted file mode 100644 index 279deea..0000000 --- a/web/src/components/DurationDropdown.tsx +++ /dev/null @@ -1,72 +0,0 @@ -import * as React from 'react'; -import { Form, FormGroup } from '@patternfly/react-core'; -import { useTranslation } from 'react-i18next'; -import { DurationString } from '@perses-dev/core'; -import { ControlledSimpleSelect } from './ControlledSelects'; - -type DurationDropDownProps = { - duration: DurationString; - setDuration: (timeRange: DurationString) => void; -}; - -export const DEFAULT_DURATION = '30m'; - -// Keep this list in sync with timeRangeSelectOptions below -// (due to the translation we can't move TimeRangeSelectOption[] outside of the component) -export const DurationValues = ['5m', '15m', '30m', '1h', '6h', '12h', '1d', '7d']; - -export const DurationDropdown = ({ duration, setDuration }: DurationDropDownProps) => { - const { t } = useTranslation('plugin__distributed-tracing-console-plugin'); - - // The time range selection mirrors the options on the Metrics Page - // Keep this list in sync with DurationValues above - const timeRangeSelectOptions = [ - { - content: t('Last 5 minutes'), - value: '5m', - }, - { - content: t('Last 15 minutes'), - value: '15m', - }, - { - content: t('Last 30 minutes'), - value: '30m', - }, - { - content: t('Last 1 hour'), - value: '1h', - }, - { - content: t('Last 6 hours'), - value: '6h', - }, - { - content: t('Last 12 hours'), - value: '12h', - }, - { - content: t('Last 1 day'), - value: '1d', - }, - { - content: t('Last 7 days'), - value: '7d', - }, - ]; - - return ( -
- - setDuration(value as DurationString)} - /> - -
- ); -}; diff --git a/web/src/components/PersesWrapper.tsx b/web/src/components/PersesWrapper.tsx index 5a23cee..7c59b0e 100644 --- a/web/src/components/PersesWrapper.tsx +++ b/web/src/components/PersesWrapper.tsx @@ -15,15 +15,15 @@ import { PanelProps, PluginRegistry, RouterProvider, - TimeRangeProvider, + TimeRangeProviderWithQueryParams, useDataQueriesContext, + useInitialTimeRange, } from '@perses-dev/plugin-system'; import { DatasourceResource, Definition, DurationString, GlobalDatasourceResource, - TimeRangeValue, TraceData, UnknownSpec, } from '@perses-dev/core'; @@ -137,23 +137,20 @@ export function PersesWrapper({ children }: PersesWrapperProps) { } interface PersesDashboardWrapperProps { - timeRange?: TimeRangeValue; - setTimeRange?: (value: TimeRangeValue) => void; children?: React.ReactNode; } /** * PersesDashboardWrapper initializes the dashboard time range and variable providers. */ -export function PersesDashboardWrapper({ - timeRange = { pastDuration: '0s' }, - setTimeRange, - children, -}: PersesDashboardWrapperProps) { +export function PersesDashboardWrapper({ children }: PersesDashboardWrapperProps) { + const DEFAULT_DASHBOARD_DURATION = '30m'; + const initialTimeRange = useInitialTimeRange(DEFAULT_DASHBOARD_DURATION); + return ( - + {children} - + ); } diff --git a/web/src/components/TimeRangeSelect.css b/web/src/components/TimeRangeSelect.css new file mode 100644 index 0000000..f1b09c4 --- /dev/null +++ b/web/src/components/TimeRangeSelect.css @@ -0,0 +1,4 @@ +.dt-plugin-time-range-select .MuiSelect-select { + /** override hardcoded padding https://github.com/perses/perses/blob/601768a329985efeaaf8c43c3ba1b8f7b26cb08c/ui/components/src/TimeRangeSelector/TimeRangeSelector.tsx#L130 */ + padding: 2px 38px 2px 16px !important; +} diff --git a/web/src/components/TimeRangeSelect.tsx b/web/src/components/TimeRangeSelect.tsx new file mode 100644 index 0000000..b024906 --- /dev/null +++ b/web/src/components/TimeRangeSelect.tsx @@ -0,0 +1,21 @@ +import * as React from 'react'; +import { Form, FormGroup } from '@patternfly/react-core'; +import { useTranslation } from 'react-i18next'; +import { TimeRangeControls } from '@perses-dev/plugin-system'; +import './TimeRangeSelect.css'; + +export const TimeRangeSelect = () => { + const { t } = useTranslation('plugin__distributed-tracing-console-plugin'); + + return ( +
+ + + +
+ ); +}; diff --git a/web/src/pages/TracesPage/QueryBrowser.tsx b/web/src/pages/TracesPage/QueryBrowser.tsx index ff87d8e..3b63c72 100644 --- a/web/src/pages/TracesPage/QueryBrowser.tsx +++ b/web/src/pages/TracesPage/QueryBrowser.tsx @@ -1,11 +1,7 @@ -import React, { useCallback, useEffect, useMemo } from 'react'; +import React, { useCallback, useEffect } from 'react'; import { Divider, PageSection, Split, SplitItem, Stack, Title } from '@patternfly/react-core'; import { useTranslation } from 'react-i18next'; -import { - DEFAULT_DURATION, - DurationDropdown, - DurationValues, -} from '../../components/DurationDropdown'; +import { TimeRangeSelect } from '../../components/TimeRangeSelect'; import { ScatterPlot } from './ScatterPlot'; import { TraceTable } from './TraceTable'; import { @@ -13,41 +9,16 @@ import { PersesTempoDatasourceWrapper, PersesWrapper, } from '../../components/PersesWrapper'; -import { DurationString, RelativeTimeRange, TimeRangeValue } from '@perses-dev/core'; -import { - createEnumParam, - NumberParam, - StringParam, - useQueryParam, - withDefault, -} from 'use-query-params'; +import { NumberParam, StringParam, useQueryParam, withDefault } from 'use-query-params'; import { useTempoInstance } from '../../hooks/useTempoInstance'; import { useTimeRange } from '@perses-dev/plugin-system'; import { FilterToolbar } from './Toolbar/FilterToolbar'; import { DEFAULT_LIMIT, LimitSelect } from './LimitSelect'; -const durationQueryParam = withDefault(createEnumParam(DurationValues), DEFAULT_DURATION); - export function QueryBrowser() { - const [duration, setDuration] = useQueryParam('duration', durationQueryParam, { - updateType: 'replaceIn', - }); - const timeRange = useMemo(() => { - return { pastDuration: duration as DurationString }; - }, [duration]); - const setTimeRange = useCallback( - (value: TimeRangeValue) => { - const pastDuration = (value as RelativeTimeRange).pastDuration; - if (pastDuration) { - setDuration(pastDuration); - } - }, - [setDuration], - ); - return ( - + @@ -59,7 +30,7 @@ export function QueryBrowserBody() { const [tempo, setTempo] = useTempoInstance(); const [query, setQuery] = useQueryParam('q', withDefault(StringParam, '{}')); const [limit, setLimit] = useQueryParam('limit', withDefault(NumberParam, DEFAULT_LIMIT)); - const { timeRange, setTimeRange, refresh } = useTimeRange(); + const { refresh } = useTimeRange(); // Refresh query if Tempo instance or tenant changes. // The Perses data source is selected via a mock DatasourceApiImpl implementation in , @@ -83,10 +54,7 @@ export function QueryBrowserBody() { {t('Traces')} - setTimeRange({ pastDuration: value })} - /> +