From beb58b562a306b10df9c08c90b5bc9048b2e84df Mon Sep 17 00:00:00 2001 From: kemal Date: Tue, 12 Aug 2025 15:46:03 +0100 Subject: [PATCH] feat: remember the selected tab Copied over functionality from Query Performance to remember which tab is selected on refresh. --- .../interfaces/QueryInsights/QueryInsights.tsx | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/apps/studio/components/interfaces/QueryInsights/QueryInsights.tsx b/apps/studio/components/interfaces/QueryInsights/QueryInsights.tsx index 7446983ae4d..fbc13703f23 100644 --- a/apps/studio/components/interfaces/QueryInsights/QueryInsights.tsx +++ b/apps/studio/components/interfaces/QueryInsights/QueryInsights.tsx @@ -1,5 +1,6 @@ import { useEffect, useState, useMemo } from 'react' import { useParams } from 'common' +import { parseAsString, useQueryStates } from 'nuqs' import { DateRangePicker } from 'components/ui/DateRangePicker' import { TabsList_Shadcn_, TabsTrigger_Shadcn_, Tabs_Shadcn_, cn, Tooltip, TooltipContent, TooltipTrigger } from 'ui' import { InformationCircleIcon } from '@heroicons/react/16/solid' @@ -30,7 +31,15 @@ export const QueryInsights = () => { const state = useDatabaseSelectorStateSnapshot() const { data: databases } = useReadReplicasQuery({ projectRef: ref }) - const [selectedMetric, setSelectedMetric] = useState('query_latency') + // Use URL state for metric persistence, similar to QueryPerformance + const [{ metric }, setSearchParams] = useQueryStates({ + metric: parseAsString.withDefault('query_latency' as MetricType), + }) + + // Validate that the metric is a valid MetricType, fallback to default if not + const selectedMetric: MetricType = (['rows_read', 'query_latency', 'calls', 'cache_hits', 'issues'].includes(metric || '') + ? metric + : 'query_latency') as MetricType const [selectedTimeRange, setSelectedTimeRange] = useState('3h') const [selectedQuery, setSelectedQuery] = useState(null) const [hoveredQuery, setHoveredQuery] = useState(null) @@ -325,7 +334,8 @@ export const QueryInsights = () => { setSelectedMetric(value as MetricType)} + defaultValue={selectedMetric} + onValueChange={(value) => setSearchParams({ metric: value as MetricType })} className="pb-4" >