Browse Source

fix(perf): Fix sticky transaction duration in search (#32273)

Modifying the search bar wasn't pushing context of an empty input since no query in the url passed the same checks we already did for default query. This adds an additional query param once a user has modified the search (so it can be linked without transaction duration default). This param is checked for before providing the transaction duration defaults. In the long term we will just remove the transaction defaults.
Kev 3 years ago
parent
commit
5d56b096bb

+ 1 - 0
static/app/views/performance/content.tsx

@@ -87,6 +87,7 @@ function PerformanceContent({selection, location, demoMode}: Props) {
         ...location.query,
         cursor: undefined,
         query: String(searchQuery).trim() || undefined,
+        isDefaultQuery: false,
       },
     });
   }

+ 12 - 5
static/app/views/performance/data.tsx

@@ -382,6 +382,13 @@ export function getTermHelp(
   return PERFORMANCE_TERMS[term](organization);
 }
 
+function shouldAddDefaultConditions(location: Location) {
+  const {query} = location;
+  const searchQuery = decodeScalar(query.query, '');
+  const isDefaultQuery = decodeScalar(query.isDefaultQuery);
+  return !searchQuery && isDefaultQuery !== 'false';
+}
+
 function generateGenericPerformanceEventView(
   location: Location,
   isMetricsData: boolean
@@ -425,7 +432,7 @@ function generateGenericPerformanceEventView(
   const conditions = new MutableSearch(searchQuery);
 
   // This is not an override condition since we want the duration to appear in the search bar as a default.
-  if (!conditions.hasFilter('transaction.duration') && !isMetricsData) {
+  if (shouldAddDefaultConditions(location) && !isMetricsData) {
     conditions.setFilterValues('transaction.duration', ['<15m']);
   }
 
@@ -506,7 +513,7 @@ function generateBackendPerformanceEventView(
   const conditions = new MutableSearch(searchQuery);
 
   // This is not an override condition since we want the duration to appear in the search bar as a default.
-  if (!conditions.hasFilter('transaction.duration') && !isMetricsData) {
+  if (shouldAddDefaultConditions(location) && !isMetricsData) {
     conditions.setFilterValues('transaction.duration', ['<15m']);
   }
 
@@ -597,7 +604,7 @@ function generateMobilePerformanceEventView(
   const conditions = new MutableSearch(searchQuery);
 
   // This is not an override condition since we want the duration to appear in the search bar as a default.
-  if (!conditions.hasFilter('transaction.duration') && !isMetricsData) {
+  if (shouldAddDefaultConditions(location) && !isMetricsData) {
     conditions.setFilterValues('transaction.duration', ['<15m']);
   }
 
@@ -668,7 +675,7 @@ function generateFrontendPageloadPerformanceEventView(
   const conditions = new MutableSearch(searchQuery);
 
   // This is not an override condition since we want the duration to appear in the search bar as a default.
-  if (!conditions.hasFilter('transaction.duration') && !isMetricsData) {
+  if (shouldAddDefaultConditions(location) && !isMetricsData) {
     conditions.setFilterValues('transaction.duration', ['<15m']);
   }
 
@@ -740,7 +747,7 @@ function generateFrontendOtherPerformanceEventView(
   const conditions = new MutableSearch(searchQuery);
 
   // This is not an override condition since we want the duration to appear in the search bar as a default.
-  if (!conditions.hasFilter('transaction.duration') && !isMetricsData) {
+  if (shouldAddDefaultConditions(location) && !isMetricsData) {
     conditions.setFilterValues('transaction.duration', ['<15m']);
   }
 

+ 1 - 1
tests/js/spec/views/performance/content.spec.jsx

@@ -371,7 +371,7 @@ describe('Performance > Content', function () {
       expect.objectContaining({
         query: expect.objectContaining({
           transaction: '/apple/cart',
-          query: 'sentry:yes transaction.duration:<15m',
+          query: 'sentry:yes',
         }),
       })
     );