Browse Source

fix(dashboard-filters): Always inject aliased releases (#37992)

Always inject the aliased releases or else an empty search result
will hide options like "latest" or a user's selected releases.
Nar Saynorath 2 years ago
parent
commit
da42466520

+ 15 - 17
static/app/views/dashboardsV2/releasesSelectControl.tsx

@@ -74,23 +74,21 @@ function ReleasesSelectControl({
         {
           value: '_releases',
           label: t('Sorted by date created'),
-          options: releases.length
-            ? [
-                ...ALIASED_RELEASES,
-                ...activeReleases
-                  .filter(version => version !== 'latest')
-                  .map(version => ({
-                    label: version,
-                    value: version,
-                  })),
-                ...releases
-                  .filter(({version}) => !activeReleasesSet.has(version))
-                  .map(({version}) => ({
-                    label: version,
-                    value: version,
-                  })),
-              ]
-            : [],
+          options: [
+            ...ALIASED_RELEASES,
+            ...activeReleases
+              .filter(version => version !== 'latest')
+              .map(version => ({
+                label: version,
+                value: version,
+              })),
+            ...releases
+              .filter(({version}) => !activeReleasesSet.has(version))
+              .map(({version}) => ({
+                label: version,
+                value: version,
+              })),
+          ],
         },
       ]}
       onChange={opts => setActiveReleases(opts.map(opt => opt.value))}

+ 21 - 0
tests/js/spec/views/dashboardsV2/releasesSelectControl.spec.tsx

@@ -117,4 +117,25 @@ describe('Dashboards > ReleasesSelectControl', function () {
       release: ['latest', 'sentry-android-shop@1.2.0', 'sentry-android-shop@1.4.0'],
     });
   });
+
+  it('includes Latest Release(s) even if no matching releases', function () {
+    render(
+      <ReleasesContext.Provider
+        value={{
+          releases: [],
+          loading: false,
+          onSearch: jest.fn(),
+        }}
+      >
+        <ReleasesSelectControl selectedReleases={[]} handleChangeFilter={jest.fn()} />
+      </ReleasesContext.Provider>
+    );
+
+    expect(screen.getByText('All Releases')).toBeInTheDocument();
+
+    userEvent.click(screen.getByText('All Releases'));
+    userEvent.type(screen.getByText('Search\u2026'), 'latest');
+
+    screen.getByText('Latest Release(s)');
+  });
 });