From 0e5ad98ef878b5f2b9ffbe36472bd08bfce4d7c9 Mon Sep 17 00:00:00 2001 From: Claude Date: Tue, 12 May 2026 22:03:32 +0000 Subject: [PATCH 1/2] Inline getTitleFromLocation at all call sites and remove the function https://claude.ai/code/session_01Ku9kxsErPUgdjanXCu9rh2 --- .../app/views/explore/contexts/pageParamsContext/title.tsx | 7 ------- static/app/views/explore/hooks/useAnalytics.tsx | 4 ++-- static/app/views/explore/hooks/useSaveMultiQuery.tsx | 4 ++-- static/app/views/explore/logs/logsQueryParams.tsx | 3 +-- static/app/views/explore/metrics/content.tsx | 4 ++-- .../explore/metrics/hooks/useSaveMetricsMultiQuery.tsx | 4 ++-- static/app/views/explore/multiQueryMode/index.tsx | 4 ++-- static/app/views/explore/queryParams/savedQuery.ts | 7 ------- .../explore/replays/list/replayQueryParamsProvider.tsx | 4 ++-- static/app/views/explore/spans/spansQueryParams.tsx | 4 ++-- 10 files changed, 15 insertions(+), 30 deletions(-) delete mode 100644 static/app/views/explore/contexts/pageParamsContext/title.tsx diff --git a/static/app/views/explore/contexts/pageParamsContext/title.tsx b/static/app/views/explore/contexts/pageParamsContext/title.tsx deleted file mode 100644 index 83222de84e65..000000000000 --- a/static/app/views/explore/contexts/pageParamsContext/title.tsx +++ /dev/null @@ -1,7 +0,0 @@ -import type {Location} from 'history'; - -import {decodeScalar} from 'sentry/utils/queryString'; - -export function getTitleFromLocation(location: Location) { - return decodeScalar(location.query.title); -} diff --git a/static/app/views/explore/hooks/useAnalytics.tsx b/static/app/views/explore/hooks/useAnalytics.tsx index 8d05517bda1c..e71e04b589b7 100644 --- a/static/app/views/explore/hooks/useAnalytics.tsx +++ b/static/app/views/explore/hooks/useAnalytics.tsx @@ -9,6 +9,7 @@ import type {LogsAnalyticsPageSource} from 'sentry/utils/analytics/logsAnalytics import type {Sort} from 'sentry/utils/discover/fields'; import {DiscoverDatasets} from 'sentry/utils/discover/types'; import {MutableSearch} from 'sentry/utils/tokenizeSearch'; +import {decodeScalar} from 'sentry/utils/queryString'; import {useLocation} from 'sentry/utils/useLocation'; import {useOrganization} from 'sentry/utils/useOrganization'; import type {TimeSeries} from 'sentry/views/dashboards/widgets/common/types'; @@ -16,7 +17,6 @@ import {useChartSelection} from 'sentry/views/explore/components/attributeBreakd import {useLogsAutoRefreshEnabled} from 'sentry/views/explore/contexts/logs/logsAutoRefreshContext'; import {Mode} from 'sentry/views/explore/contexts/pageParamsContext/mode'; import {formatSort} from 'sentry/views/explore/contexts/pageParamsContext/sortBys'; -import {getTitleFromLocation} from 'sentry/views/explore/contexts/pageParamsContext/title'; import type {AggregatesTableResult} from 'sentry/views/explore/hooks/useExploreAggregatesTable'; import type {SpansTableResult} from 'sentry/views/explore/hooks/useExploreSpansTable'; import type {TracesTableResult} from 'sentry/views/explore/hooks/useExploreTracesTable'; @@ -1010,7 +1010,7 @@ export function useMetricsAnalytics({ const organization = useOrganization(); const {selection} = usePageFilters(); const location = useLocation(); - const title = getTitleFromLocation(location); + const title = decodeScalar(location.query.title); const { data: {hasExceededPerformanceUsageLimit}, diff --git a/static/app/views/explore/hooks/useSaveMultiQuery.tsx b/static/app/views/explore/hooks/useSaveMultiQuery.tsx index b8f75445b350..750bc5820f21 100644 --- a/static/app/views/explore/hooks/useSaveMultiQuery.tsx +++ b/static/app/views/explore/hooks/useSaveMultiQuery.tsx @@ -2,12 +2,12 @@ import {useCallback, useMemo} from 'react'; import {usePageFilters} from 'sentry/components/pageFilters/usePageFilters'; import {encodeSort} from 'sentry/utils/discover/eventView'; +import {decodeScalar} from 'sentry/utils/queryString'; import {useApi} from 'sentry/utils/useApi'; import {useChartInterval} from 'sentry/utils/useChartInterval'; import {useLocation} from 'sentry/utils/useLocation'; import {useOrganization} from 'sentry/utils/useOrganization'; import {getIdFromLocation} from 'sentry/views/explore/contexts/pageParamsContext/id'; -import {getTitleFromLocation} from 'sentry/views/explore/contexts/pageParamsContext/title'; import {useInvalidateSavedQueries} from 'sentry/views/explore/hooks/useGetSavedQueries'; import {MAX_QUERIES_ALLOWED} from 'sentry/views/explore/multiQueryMode/content'; import {useReadQueriesFromLocation} from 'sentry/views/explore/multiQueryMode/locationUtils'; @@ -17,7 +17,7 @@ const TRACE_EXPLORER_DATASET = 'spans'; export function useSaveMultiQuery() { const location = useLocation(); const id = getIdFromLocation(location); - const title = getTitleFromLocation(location); + const title = decodeScalar(location.query.title); const queries = useReadQueriesFromLocation().slice(0, MAX_QUERIES_ALLOWED); diff --git a/static/app/views/explore/logs/logsQueryParams.tsx b/static/app/views/explore/logs/logsQueryParams.tsx index 8a7f82212388..2168dc5695cd 100644 --- a/static/app/views/explore/logs/logsQueryParams.tsx +++ b/static/app/views/explore/logs/logsQueryParams.tsx @@ -35,7 +35,6 @@ import {getQueryFromLocation} from 'sentry/views/explore/queryParams/query'; import {ReadableQueryParams} from 'sentry/views/explore/queryParams/readableQueryParams'; import { getIdFromLocation, - getTitleFromLocation, ID_KEY, TITLE_KEY, } from 'sentry/views/explore/queryParams/savedQuery'; @@ -75,7 +74,7 @@ export function getReadableQueryParamsFromLocation( ) ?? defaultAggregateSortBys(aggregateFields); const id = getIdFromLocation(location, LOGS_ID_KEY); - const title = getTitleFromLocation(location, LOGS_TITLE_KEY); + const title = decodeScalar(location.query?.[LOGS_TITLE_KEY]); return new ReadableQueryParams({ extrapolate: true, diff --git a/static/app/views/explore/metrics/content.tsx b/static/app/views/explore/metrics/content.tsx index aab58a708025..9265101790e9 100644 --- a/static/app/views/explore/metrics/content.tsx +++ b/static/app/views/explore/metrics/content.tsx @@ -11,6 +11,7 @@ import {SentryDocumentTitle} from 'sentry/components/sentryDocumentTitle'; import {t} from 'sentry/locale'; import {DataCategory} from 'sentry/types/core'; import {defined} from 'sentry/utils'; +import {decodeScalar} from 'sentry/utils/queryString'; import {useDatePageFilterProps} from 'sentry/utils/useDatePageFilterProps'; import {useLocation} from 'sentry/utils/useLocation'; import {useMaxPickableDays} from 'sentry/utils/useMaxPickableDays'; @@ -23,7 +24,6 @@ import {MetricsTabContent} from 'sentry/views/explore/metrics/metricsTab'; import {MultiMetricsQueryParamsProvider} from 'sentry/views/explore/metrics/multiMetricsQueryParams'; import { getIdFromLocation, - getTitleFromLocation, ID_KEY, TITLE_KEY, } from 'sentry/views/explore/queryParams/savedQuery'; @@ -91,7 +91,7 @@ const metricsFeedbackOptions = { function MetricsHeader() { const location = useLocation(); const pageId = getIdFromLocation(location, ID_KEY); - const title = getTitleFromLocation(location, TITLE_KEY); + const title = decodeScalar(location.query?.[TITLE_KEY]); const organization = useOrganization(); const {data: savedQuery} = useGetSavedQuery(pageId); const hasSavedQueryTitle = diff --git a/static/app/views/explore/metrics/hooks/useSaveMetricsMultiQuery.tsx b/static/app/views/explore/metrics/hooks/useSaveMetricsMultiQuery.tsx index 88b1097a63b1..f72be06197a6 100644 --- a/static/app/views/explore/metrics/hooks/useSaveMetricsMultiQuery.tsx +++ b/static/app/views/explore/metrics/hooks/useSaveMetricsMultiQuery.tsx @@ -4,12 +4,12 @@ import * as Sentry from '@sentry/react'; import {usePageFilters} from 'sentry/components/pageFilters/usePageFilters'; import {defined} from 'sentry/utils'; import {encodeSort} from 'sentry/utils/discover/eventView'; +import {decodeScalar} from 'sentry/utils/queryString'; import {useApi} from 'sentry/utils/useApi'; import {useChartInterval} from 'sentry/utils/useChartInterval'; import {useLocation} from 'sentry/utils/useLocation'; import {useOrganization} from 'sentry/utils/useOrganization'; import {getIdFromLocation} from 'sentry/views/explore/contexts/pageParamsContext/id'; -import {getTitleFromLocation} from 'sentry/views/explore/contexts/pageParamsContext/title'; import {useInvalidateSavedQueries} from 'sentry/views/explore/hooks/useGetSavedQueries'; import {useMultiMetricsQueryParams} from 'sentry/views/explore/metrics/multiMetricsQueryParams'; import {isGroupBy} from 'sentry/views/explore/queryParams/groupBy'; @@ -23,7 +23,7 @@ const METRICS_DATASET = 'metrics'; export function useSaveMetricsMultiQuery() { const location = useLocation(); const id = getIdFromLocation(location); - const title = getTitleFromLocation(location); + const title = decodeScalar(location.query.title); const metricQueries = useMultiMetricsQueryParams(); diff --git a/static/app/views/explore/multiQueryMode/index.tsx b/static/app/views/explore/multiQueryMode/index.tsx index f98cbbb193cd..e5251f6cbebd 100644 --- a/static/app/views/explore/multiQueryMode/index.tsx +++ b/static/app/views/explore/multiQueryMode/index.tsx @@ -9,8 +9,8 @@ import {t} from 'sentry/locale'; import {defined} from 'sentry/utils'; import {useLocation} from 'sentry/utils/useLocation'; import {useOrganization} from 'sentry/utils/useOrganization'; +import {decodeScalar} from 'sentry/utils/queryString'; import {getIdFromLocation} from 'sentry/views/explore/contexts/pageParamsContext/id'; -import {getTitleFromLocation} from 'sentry/views/explore/contexts/pageParamsContext/title'; import {useGetSavedQuery} from 'sentry/views/explore/hooks/useGetSavedQueries'; import {MultiQueryModeContent} from 'sentry/views/explore/multiQueryMode/content'; import {SavedQueryEditMenu} from 'sentry/views/explore/savedQueryEditMenu'; @@ -21,7 +21,7 @@ import {makeTracesPathname} from 'sentry/views/traces/pathnames'; export default function MultiQueryMode() { const location = useLocation(); const organization = useOrganization(); - const title = getTitleFromLocation(location); + const title = decodeScalar(location.query.title); const id = getIdFromLocation(location); const {data: savedQuery} = useGetSavedQuery(id); diff --git a/static/app/views/explore/queryParams/savedQuery.ts b/static/app/views/explore/queryParams/savedQuery.ts index e0bae26ec638..197465ea5c9a 100644 --- a/static/app/views/explore/queryParams/savedQuery.ts +++ b/static/app/views/explore/queryParams/savedQuery.ts @@ -8,10 +8,3 @@ export const TITLE_KEY = 'title'; export function getIdFromLocation(location: Location, key: string): string | undefined { return decodeScalar(location.query?.[key]); } - -export function getTitleFromLocation( - location: Location, - key: string -): string | undefined { - return decodeScalar(location.query?.[key]); -} diff --git a/static/app/views/explore/replays/list/replayQueryParamsProvider.tsx b/static/app/views/explore/replays/list/replayQueryParamsProvider.tsx index afbb2087199b..8fb73f9a2383 100644 --- a/static/app/views/explore/replays/list/replayQueryParamsProvider.tsx +++ b/static/app/views/explore/replays/list/replayQueryParamsProvider.tsx @@ -2,6 +2,7 @@ import type {ReactNode} from 'react'; import {useCallback, useMemo} from 'react'; import type {Location} from 'history'; +import {decodeScalar} from 'sentry/utils/queryString'; import {updateNullableLocation} from 'sentry/utils/url/updateNullableLocation'; import {useLocation} from 'sentry/utils/useLocation'; import {useNavigate} from 'sentry/utils/useNavigate'; @@ -11,7 +12,6 @@ import {getQueryFromLocation} from 'sentry/views/explore/queryParams/query'; import {ReadableQueryParams} from 'sentry/views/explore/queryParams/readableQueryParams'; import { getIdFromLocation, - getTitleFromLocation, ID_KEY, TITLE_KEY, } from 'sentry/views/explore/queryParams/savedQuery'; @@ -22,7 +22,7 @@ const REPLAY_QUERY_KEY = 'query'; function getReadableQueryParamsFromLocation(location: Location): ReadableQueryParams { const query = getQueryFromLocation(location, REPLAY_QUERY_KEY) ?? ''; const id = getIdFromLocation(location, ID_KEY); - const title = getTitleFromLocation(location, TITLE_KEY); + const title = decodeScalar(location.query?.[TITLE_KEY]); return new ReadableQueryParams({ extrapolate: false, diff --git a/static/app/views/explore/spans/spansQueryParams.tsx b/static/app/views/explore/spans/spansQueryParams.tsx index 5975529a579d..f4304b36007c 100644 --- a/static/app/views/explore/spans/spansQueryParams.tsx +++ b/static/app/views/explore/spans/spansQueryParams.tsx @@ -3,6 +3,7 @@ import type {Location} from 'history'; import {defined} from 'sentry/utils'; import type {Sort} from 'sentry/utils/discover/fields'; import {DiscoverDatasets} from 'sentry/utils/discover/types'; +import {decodeScalar} from 'sentry/utils/queryString'; import {updateNullableLocation} from 'sentry/utils/url/updateNullableLocation'; import {DEFAULT_VISUALIZATION} from 'sentry/views/explore/contexts/pageParamsContext/visualizes'; import type {AggregateField} from 'sentry/views/explore/queryParams/aggregateField'; @@ -22,7 +23,6 @@ import {getQueryFromLocation} from 'sentry/views/explore/queryParams/query'; import {ReadableQueryParams} from 'sentry/views/explore/queryParams/readableQueryParams'; import { getIdFromLocation, - getTitleFromLocation, ID_KEY, TITLE_KEY, } from 'sentry/views/explore/queryParams/savedQuery'; @@ -81,7 +81,7 @@ export function getReadableQueryParamsFromLocation( ) ?? defaultAggregateSortBys(aggregateFields); const id = getIdFromLocation(location, SPANS_ID_KEY); - const title = getTitleFromLocation(location, SPANS_TITLE_KEY); + const title = decodeScalar(location.query?.[SPANS_TITLE_KEY]); const crossEvents = getCrossEventsFromLocation(location, SPANS_CROSS_EVENTS_KEY); From 571c36cbfcf3f6396498737491e90d1414faa6a7 Mon Sep 17 00:00:00 2001 From: "getsantry[bot]" <66042841+getsantry[bot]@users.noreply.github.com> Date: Tue, 12 May 2026 22:07:30 +0000 Subject: [PATCH 2/2] :hammer_and_wrench: apply pre-commit fixes --- static/app/views/explore/hooks/useAnalytics.tsx | 2 +- static/app/views/explore/multiQueryMode/index.tsx | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/static/app/views/explore/hooks/useAnalytics.tsx b/static/app/views/explore/hooks/useAnalytics.tsx index e71e04b589b7..29ab450df304 100644 --- a/static/app/views/explore/hooks/useAnalytics.tsx +++ b/static/app/views/explore/hooks/useAnalytics.tsx @@ -8,8 +8,8 @@ import {trackAnalytics} from 'sentry/utils/analytics'; import type {LogsAnalyticsPageSource} from 'sentry/utils/analytics/logsAnalyticsEvent'; import type {Sort} from 'sentry/utils/discover/fields'; import {DiscoverDatasets} from 'sentry/utils/discover/types'; -import {MutableSearch} from 'sentry/utils/tokenizeSearch'; import {decodeScalar} from 'sentry/utils/queryString'; +import {MutableSearch} from 'sentry/utils/tokenizeSearch'; import {useLocation} from 'sentry/utils/useLocation'; import {useOrganization} from 'sentry/utils/useOrganization'; import type {TimeSeries} from 'sentry/views/dashboards/widgets/common/types'; diff --git a/static/app/views/explore/multiQueryMode/index.tsx b/static/app/views/explore/multiQueryMode/index.tsx index e5251f6cbebd..3c209f156b4e 100644 --- a/static/app/views/explore/multiQueryMode/index.tsx +++ b/static/app/views/explore/multiQueryMode/index.tsx @@ -7,9 +7,9 @@ import {NoAccess} from 'sentry/components/noAccess'; import {SentryDocumentTitle} from 'sentry/components/sentryDocumentTitle'; import {t} from 'sentry/locale'; import {defined} from 'sentry/utils'; +import {decodeScalar} from 'sentry/utils/queryString'; import {useLocation} from 'sentry/utils/useLocation'; import {useOrganization} from 'sentry/utils/useOrganization'; -import {decodeScalar} from 'sentry/utils/queryString'; import {getIdFromLocation} from 'sentry/views/explore/contexts/pageParamsContext/id'; import {useGetSavedQuery} from 'sentry/views/explore/hooks/useGetSavedQueries'; import {MultiQueryModeContent} from 'sentry/views/explore/multiQueryMode/content';