Browse Source

chore(replays): clean up FE feature flag and old widgets (#58169)

cleanup:
- old widget `erroneousDeadRageCards` deleted
- all calls to actionable replays feature flag in FE deleted
- analytics, styles, and code used only by the old widgets deleted

closes https://github.com/getsentry/team-replay/issues/244
Michelle Zhang 1 year ago
parent
commit
56c4eb88d6

+ 0 - 4
static/app/utils/analytics/replayAnalyticsEvents.tsx

@@ -3,7 +3,6 @@ import {Output} from 'sentry/views/replays/detail/network/details/getOutputType'
 import {ReferrerTableType} from 'sentry/views/replays/replayTable/tableCell';
 
 export type ReplayEventParameters = {
-  'replay.dead-click-card.rendered': {};
   'replay.details-data-loaded': {
     be_errors: number;
     fe_errors: number;
@@ -69,7 +68,6 @@ export type ReplayEventParameters = {
     play: boolean;
     user_email: string;
   };
-  'replay.rage-click-card.rendered': {};
   'replay.rage-click-sdk-banner.dismissed': {
     surface: string;
   };
@@ -102,7 +100,6 @@ export type ReplayEventParameters = {
 export type ReplayEventKey = keyof ReplayEventParameters;
 
 export const replayEventMap: Record<ReplayEventKey, string | null> = {
-  'replay.dead-click-card.rendered': 'Replay Dead Click Card Rendered',
   'replay.details-data-loaded': 'Replay Details Data Loaded',
   'replay.details-layout-changed': 'Changed Replay Details Layout',
   'replay.details-network-panel-closed': 'Closed Replay Network Details Panel',
@@ -117,7 +114,6 @@ export const replayEventMap: Record<ReplayEventKey, string | null> = {
   'replay.list-time-spent': 'Time Spent Viewing Replay List',
   'replay.list-view-setup-sidebar': 'Views Set Up Replays Sidebar',
   'replay.play-pause': 'Played/Paused Replay',
-  'replay.rage-click-card.rendered': 'Replay Rage Click Card Rendered',
   'replay.rage-click-sdk-banner.dismissed': 'Replay Rage Click SDK Banner Dismissed',
   'replay.rage-click-sdk-banner.rendered': 'Replay Rage Click SDK Banner Rendered',
   'replay.render-issues-group-list': 'Render Issues Detail Replay List',

+ 0 - 12
static/app/views/replays/deadRageClick/deadRageClickList.tsx

@@ -1,7 +1,6 @@
 import {browserHistory} from 'react-router';
 import styled from '@emotion/styled';
 
-import Alert from 'sentry/components/alert';
 import * as Layout from 'sentry/components/layouts/thirds';
 import {DatePageFilter} from 'sentry/components/organizations/datePageFilter';
 import {EnvironmentPageFilter} from 'sentry/components/organizations/environmentPageFilter';
@@ -22,9 +21,6 @@ import ReplayTabs from 'sentry/views/replays/tabs';
 export default function DeadRageClickList() {
   const organization = useOrganization();
   const location = useLocation();
-  const hasDeadClickFeature = organization.features.includes(
-    'session-replay-rage-dead-selectors'
-  );
 
   const {isLoading, isError, data, pageLinks} = useDeadRageSelectors({
     per_page: 50,
@@ -34,14 +30,6 @@ export default function DeadRageClickList() {
     isWidgetData: false,
   });
 
-  if (!hasDeadClickFeature) {
-    return (
-      <Layout.Page withPadding>
-        <Alert type="warning">{t("You don't have access to this feature")}</Alert>
-      </Layout.Page>
-    );
-  }
-
   return (
     <SentryDocumentTitle
       title={t('Top Selectors with Dead Clicks')}

+ 1 - 1
static/app/views/replays/deadRageClick/deadRageSelectorCards.tsx

@@ -105,7 +105,7 @@ function AccordionWidget({
   const clickColor = deadOrRage === 'dead' ? 'yellow300' : 'red300';
 
   return (
-    <StyledWidgetContainer>
+    <StyledWidgetContainer data-test-id="selector-widget">
       <StyledHeaderContainer>
         <IconCursorArrow color={clickColor} />
         {header}

+ 15 - 2
static/app/views/replays/list/listContent.spec.tsx

@@ -3,6 +3,7 @@ import {Organization} from 'sentry-fixture/organization';
 import {render, screen, waitFor} from 'sentry-test/reactTestingLibrary';
 
 import {Organization as TOrganization} from 'sentry/types';
+import useDeadRageSelectors from 'sentry/utils/replays/hooks/useDeadRageSelectors';
 import useReplayList from 'sentry/utils/replays/hooks/useReplayList';
 import {
   useHaveSelectedProjectsSentAnyReplayEvents,
@@ -13,6 +14,7 @@ import useProjectSdkNeedsUpdate from 'sentry/utils/useProjectSdkNeedsUpdate';
 import ListPage from 'sentry/views/replays/list/listContent';
 
 jest.mock('sentry/utils/replays/hooks/useReplayOnboarding');
+jest.mock('sentry/utils/replays/hooks/useDeadRageSelectors');
 jest.mock('sentry/utils/replays/hooks/useReplayPageview');
 jest.mock('sentry/utils/useOrganization');
 jest.mock('sentry/utils/useProjectSdkNeedsUpdate');
@@ -31,6 +33,7 @@ jest.mock('sentry/utils/replays/hooks/useReplayList', () => {
 });
 
 const mockUseReplayList = jest.mocked(useReplayList);
+const mockUseDeadRageSelectors = jest.mocked(useDeadRageSelectors);
 
 const mockUseHaveSelectedProjectsSentAnyReplayEvents = jest.mocked(
   useHaveSelectedProjectsSentAnyReplayEvents
@@ -63,6 +66,7 @@ describe('ReplayList', () => {
     mockUseReplayList.mockClear();
     mockUseHaveSelectedProjectsSentAnyReplayEvents.mockClear();
     mockUseProjectSdkNeedsUpdate.mockClear();
+    mockUseDeadRageSelectors.mockClear();
     MockApiClient.clearMockResponses();
     MockApiClient.addMockResponse({
       url: '/organizations/org-slug/tags/',
@@ -165,7 +169,7 @@ describe('ReplayList', () => {
     expect(mockUseReplayList).toHaveBeenCalled();
   });
 
-  it('should fetch the replay table and show dead/rage tables when the org is on AM2, has sent some replays, and has a newer SDK version', async () => {
+  it('should fetch the replay table and show selector tables when the org is on AM2, has sent some replays, and has a newer SDK version', async () => {
     const mockOrg = getMockOrganization({features: AM2_FEATURES});
     mockUseHaveSelectedProjectsSentAnyReplayEvents.mockReturnValue({
       fetching: false,
@@ -182,12 +186,21 @@ describe('ReplayList', () => {
       fetchError: undefined,
       pageLinks: null,
     });
+    mockUseDeadRageSelectors.mockReturnValue({
+      isLoading: false,
+      isError: false,
+      data: [],
+      pageLinks: undefined,
+    });
 
     render(<ListPage />, {
       context: getMockContext(mockOrg),
     });
 
-    await waitFor(() => expect(screen.queryAllByTestId('replay-table')).toHaveLength(3));
+    await waitFor(() => expect(screen.queryAllByTestId('replay-table')).toHaveLength(1));
+    await waitFor(() =>
+      expect(screen.queryAllByTestId('selector-widget')).toHaveLength(2)
+    );
     expect(mockUseReplayList).toHaveBeenCalled();
   });
 });

+ 4 - 16
static/app/views/replays/list/listContent.tsx

@@ -14,7 +14,6 @@ import useProjectSdkNeedsUpdate from 'sentry/utils/useProjectSdkNeedsUpdate';
 import DeadRageSelectorCards from 'sentry/views/replays/deadRageClick/deadRageSelectorCards';
 import ReplaysFilters from 'sentry/views/replays/list/filters';
 import ReplayOnboardingPanel from 'sentry/views/replays/list/replayOnboardingPanel';
-import ReplaysErroneousDeadRageCards from 'sentry/views/replays/list/replaysErroneousDeadRageCards';
 import ReplaysList from 'sentry/views/replays/list/replaysList';
 import ReplaysSearch from 'sentry/views/replays/list/search';
 
@@ -22,9 +21,6 @@ export default function ListContent() {
   const organization = useOrganization();
   const hasSessionReplay = organization.features.includes('session-replay');
   const hasSentReplays = useHaveSelectedProjectsSentAnyReplayEvents();
-  const hasdeadRageClickFeature = organization.features.includes(
-    'session-replay-rage-dead-selectors'
-  );
 
   const {
     selection: {projects},
@@ -77,20 +73,12 @@ export default function ListContent() {
         <ReplaysFilters />
         <SearchWrapper>
           <ReplaysSearch />
-          {hasdeadRageClickFeature ? (
-            <Button onClick={() => setWidgetIsOpen(!widgetIsOpen)}>
-              {widgetIsOpen ? t('Hide Widgets') : t('Show Widgets')}
-            </Button>
-          ) : null}
+          <Button onClick={() => setWidgetIsOpen(!widgetIsOpen)}>
+            {widgetIsOpen ? t('Hide Widgets') : t('Show Widgets')}
+          </Button>
         </SearchWrapper>
       </FiltersContainer>
-      {hasdeadRageClickFeature ? (
-        widgetIsOpen ? (
-          <DeadRageSelectorCards />
-        ) : null
-      ) : (
-        <ReplaysErroneousDeadRageCards />
-      )}
+      {widgetIsOpen ? <DeadRageSelectorCards /> : null}
       <ReplaysList />
     </Fragment>
   );

+ 0 - 241
static/app/views/replays/list/replaysErroneousDeadRageCards.tsx

@@ -1,241 +0,0 @@
-import {ComponentProps, Fragment, ReactNode, useEffect, useMemo} from 'react';
-import styled from '@emotion/styled';
-import {Location} from 'history';
-
-import {LinkButton} from 'sentry/components/button';
-import {IconClose, IconSearch} from 'sentry/icons';
-import {t} from 'sentry/locale';
-import {space} from 'sentry/styles/space';
-import {trackAnalytics} from 'sentry/utils/analytics';
-import EventView from 'sentry/utils/discover/eventView';
-import useReplayList from 'sentry/utils/replays/hooks/useReplayList';
-import {useLocation} from 'sentry/utils/useLocation';
-import useOrganization from 'sentry/utils/useOrganization';
-import ReplayTable from 'sentry/views/replays/replayTable';
-import {ReplayColumn} from 'sentry/views/replays/replayTable/types';
-import {ReplayListLocationQuery} from 'sentry/views/replays/types';
-
-function ReplaysErroneousDeadRageCards() {
-  const location = useLocation<ReplayListLocationQuery>();
-
-  const {project, environment, start, statsPeriod, utc, end} = location.query;
-  const searchLocation: Location<ReplayListLocationQuery> = useMemo(() => {
-    return {
-      pathname: '',
-      search: '',
-      hash: '',
-      state: '',
-      action: 'PUSH' as const,
-      key: '',
-      query: {project, environment, start, statsPeriod, utc, end},
-    };
-  }, [project, environment, start, statsPeriod, utc, end]);
-
-  return (
-    <SplitCardContainer>
-      <DeadClickTable searchLocation={searchLocation} />
-      <RageClickTable searchLocation={searchLocation} />
-    </SplitCardContainer>
-  );
-}
-
-function DeadClickTable({
-  searchLocation,
-}: {
-  searchLocation: Location<ReplayListLocationQuery>;
-}) {
-  const organization = useOrganization();
-  const eventView = useMemo(
-    () =>
-      EventView.fromNewQueryWithLocation(
-        {
-          id: '',
-          name: '',
-          version: 2,
-          fields: [
-            'activity',
-            'duration',
-            'count_dead_clicks',
-            'id',
-            'project_id',
-            'user',
-            'finished_at',
-            'is_archived',
-            'started_at',
-          ],
-          projects: [],
-          query: 'count_dead_clicks:>0',
-          orderby: '-count_dead_clicks',
-        },
-        searchLocation
-      ),
-    [searchLocation]
-  );
-
-  useEffect(() => {
-    trackAnalytics('replay.dead-click-card.rendered', {organization});
-  }, []); // eslint-disable-line react-hooks/exhaustive-deps
-
-  return (
-    <CardTable
-      eventView={eventView}
-      location={searchLocation}
-      visibleColumns={[
-        ReplayColumn.MOST_DEAD_CLICKS,
-        ReplayColumn.COUNT_DEAD_CLICKS_NO_HEADER,
-      ]}
-    >
-      <SearchButton
-        analyticsEventKey="replay.dead-click-card.click_search"
-        analyticsEventName="Replay Dead Click Card Search Click"
-        analyticsParams={{}}
-        eventView={eventView}
-        label={t('Show all replays with dead clicks')}
-      />
-    </CardTable>
-  );
-}
-function RageClickTable({
-  searchLocation,
-}: {
-  searchLocation: Location<ReplayListLocationQuery>;
-}) {
-  const organization = useOrganization();
-  const eventView = useMemo(
-    () =>
-      EventView.fromNewQueryWithLocation(
-        {
-          id: '',
-          name: '',
-          version: 2,
-          fields: [
-            'activity',
-            'duration',
-            'count_rage_clicks',
-            'id',
-            'project_id',
-            'user',
-            'finished_at',
-            'is_archived',
-            'started_at',
-          ],
-          projects: [],
-          query: 'count_rage_clicks:>0',
-          orderby: '-count_rage_clicks',
-        },
-        searchLocation
-      ),
-    [searchLocation]
-  );
-
-  useEffect(() => {
-    trackAnalytics('replay.rage-click-card.rendered', {organization});
-  }, []); // eslint-disable-line react-hooks/exhaustive-deps
-
-  return (
-    <CardTable
-      eventView={eventView}
-      location={searchLocation}
-      visibleColumns={[
-        ReplayColumn.MOST_RAGE_CLICKS,
-        ReplayColumn.COUNT_RAGE_CLICKS_NO_HEADER,
-      ]}
-    >
-      <SearchButton
-        analyticsEventKey="replay.rage-click-card.click_search"
-        analyticsEventName="Replay Rage Click Card Search Click"
-        analyticsParams={{}}
-        eventView={eventView}
-        label={t('Show all replays with rage clicks')}
-      />
-    </CardTable>
-  );
-}
-
-function CardTable({
-  children,
-  eventView,
-  location,
-  visibleColumns,
-}: {
-  children: ReactNode;
-  eventView: EventView;
-  location: Location<ReplayListLocationQuery>;
-  visibleColumns: ReplayColumn[];
-}) {
-  const organization = useOrganization();
-  const {replays, isFetching, fetchError} = useReplayList({
-    eventView,
-    location,
-    organization,
-    perPage: 3,
-  });
-
-  const length = replays?.length ?? 0;
-  const rows = length > 0 ? 3 : 1;
-
-  return (
-    <Fragment>
-      <ReplayTable
-        fetchError={fetchError}
-        isFetching={isFetching}
-        replays={replays}
-        sort={undefined}
-        visibleColumns={visibleColumns}
-        saveLocation
-        gridRows={`auto repeat(${rows}, 1fr)`}
-        showDropdownFilters={false}
-      />
-      {children}
-    </Fragment>
-  );
-}
-
-function SearchButton({
-  eventView,
-  label,
-  ...props
-}: {
-  eventView: EventView;
-  label: ReactNode;
-} & Omit<ComponentProps<typeof LinkButton>, 'size' | 'to' | 'icon'>) {
-  const location = useLocation();
-  const isActive = location.query.query === eventView.query;
-
-  return (
-    <StyledButton
-      {...props}
-      size="sm"
-      to={{
-        pathname: location.pathname,
-        query: {
-          ...location.query,
-          cursor: undefined,
-          query: isActive ? '' : eventView.query,
-          sort: isActive ? '' : eventView.sorts[0].field,
-        },
-      }}
-      icon={isActive ? <IconClose size="xs" /> : <IconSearch size="xs" />}
-    >
-      {isActive ? t('Clear filter') : label}
-    </StyledButton>
-  );
-}
-
-const SplitCardContainer = styled('div')`
-  display: grid;
-  grid-template-columns: 1fr 1fr;
-  grid-template-rows: max-content max-content;
-  grid-auto-flow: column;
-  gap: 0 ${space(2)};
-  align-items: stretch;
-`;
-
-const StyledButton = styled(LinkButton)`
-  width: 100%;
-  border-top: none;
-  border-radius: ${p => p.theme.borderRadiusBottom};
-  padding: ${space(3)};
-`;
-
-export default ReplaysErroneousDeadRageCards;

+ 0 - 37
static/app/views/replays/replayTable/headerCell.tsx

@@ -43,9 +43,6 @@ function HeaderCell({column, sort}: Props) {
         />
       );
 
-    case ReplayColumn.COUNT_DEAD_CLICKS_NO_HEADER:
-      return <SortableHeader label="" />;
-
     case ReplayColumn.COUNT_ERRORS:
       return <SortableHeader sort={sort} fieldName="count_errors" label={t('Errors')} />;
 
@@ -65,9 +62,6 @@ function HeaderCell({column, sort}: Props) {
         />
       );
 
-    case ReplayColumn.COUNT_RAGE_CLICKS_NO_HEADER:
-      return <SortableHeader label="" />;
-
     case ReplayColumn.DURATION:
       return <SortableHeader sort={sort} fieldName="duration" label={t('Duration')} />;
 
@@ -77,37 +71,6 @@ function HeaderCell({column, sort}: Props) {
     case ReplayColumn.REPLAY:
       return <SortableHeader sort={sort} fieldName="started_at" label={t('Replay')} />;
 
-    case ReplayColumn.MOST_ERRONEOUS_REPLAYS:
-      return <SortableHeader label={t('Most erroneous replays')} />;
-
-    case ReplayColumn.MOST_RAGE_CLICKS:
-      return (
-        <SortableHeader
-          label={t('Most rage clicks')}
-          tooltip={tct(
-            'A rage click is 5 or more clicks on a dead element, which exhibits no page activity after 7 seconds. Requires SDK version >= [minSDK]. [link:Learn more.]',
-            {
-              minSDK: MIN_DEAD_RAGE_CLICK_SDK.minVersion,
-              link: <ExternalLink href="https://docs.sentry.io/platforms/javascript/" />,
-            }
-          )}
-        />
-      );
-
-    case ReplayColumn.MOST_DEAD_CLICKS:
-      return (
-        <SortableHeader
-          label={t('Most dead clicks')}
-          tooltip={tct(
-            'A dead click is a user click that does not result in any page activity after 7 seconds. Requires SDK version >= [minSDK]. [link:Learn more.]',
-            {
-              minSDK: MIN_DEAD_RAGE_CLICK_SDK.minVersion,
-              link: <ExternalLink href="https://docs.sentry.io/platforms/javascript/" />,
-            }
-          )}
-        />
-      );
-
     case ReplayColumn.SLOWEST_TRANSACTION:
       return (
         <SortableHeader

+ 2 - 87
static/app/views/replays/replayTable/index.tsx

@@ -1,6 +1,5 @@
 import {Fragment, ReactNode} from 'react';
 import styled from '@emotion/styled';
-import {Location} from 'history';
 
 import {Alert} from 'sentry/components/alert';
 import LoadingIndicator from 'sentry/components/loadingIndicator';
@@ -36,7 +35,6 @@ type Props = {
   visibleColumns: ReplayColumn[];
   emptyMessage?: ReactNode;
   gridRows?: string;
-  saveLocation?: boolean;
   showDropdownFilters?: boolean;
 };
 
@@ -47,26 +45,13 @@ function ReplayTable({
   sort,
   visibleColumns,
   emptyMessage,
-  saveLocation,
   gridRows,
   showDropdownFilters,
 }: Props) {
   const routes = useRoutes();
-  const newLocation = useLocation();
+  const location = useLocation();
   const organization = useOrganization();
 
-  const location: Location = saveLocation
-    ? {
-        pathname: '',
-        search: '',
-        query: {},
-        hash: '',
-        state: '',
-        action: 'PUSH',
-        key: '',
-      }
-    : newLocation;
-
   const tableHeaders = visibleColumns
     .filter(Boolean)
     .map(column => <HeaderCell key={column} column={column} sort={sort} />);
@@ -138,15 +123,6 @@ function ReplayTable({
                     />
                   );
 
-                case ReplayColumn.COUNT_DEAD_CLICKS_NO_HEADER:
-                  return (
-                    <DeadClickCountCell
-                      key="countDeadClicks"
-                      replay={replay}
-                      showDropdownFilters={false}
-                    />
-                  );
-
                 case ReplayColumn.COUNT_ERRORS:
                   return (
                     <ErrorCountCell
@@ -165,15 +141,6 @@ function ReplayTable({
                     />
                   );
 
-                case ReplayColumn.COUNT_RAGE_CLICKS_NO_HEADER:
-                  return (
-                    <RageClickCountCell
-                      key="countRageClicks"
-                      replay={replay}
-                      showDropdownFilters={false}
-                    />
-                  );
-
                 case ReplayColumn.DURATION:
                   return (
                     <DurationCell
@@ -213,42 +180,6 @@ function ReplayTable({
                     />
                   );
 
-                case ReplayColumn.MOST_RAGE_CLICKS:
-                  return (
-                    <ReplayCell
-                      key="mostRageClicks"
-                      replay={replay}
-                      organization={organization}
-                      referrer={referrer}
-                      eventView={eventView}
-                      referrer_table="rage-table"
-                    />
-                  );
-
-                case ReplayColumn.MOST_DEAD_CLICKS:
-                  return (
-                    <ReplayCell
-                      key="mostDeadClicks"
-                      replay={replay}
-                      organization={organization}
-                      referrer={referrer}
-                      eventView={eventView}
-                      referrer_table="dead-table"
-                    />
-                  );
-
-                case ReplayColumn.MOST_ERRONEOUS_REPLAYS:
-                  return (
-                    <ReplayCell
-                      key="mostErroneousReplays"
-                      replay={replay}
-                      organization={organization}
-                      referrer={referrer}
-                      eventView={eventView}
-                      referrer_table="errors-table"
-                    />
-                  );
-
                 default:
                   return null;
               }
@@ -260,32 +191,16 @@ function ReplayTable({
   );
 }
 
-const flexibleColumns = [
-  ReplayColumn.REPLAY,
-  ReplayColumn.MOST_RAGE_CLICKS,
-  ReplayColumn.MOST_DEAD_CLICKS,
-  ReplayColumn.MOST_ERRONEOUS_REPLAYS,
-];
-
 const StyledPanelTable = styled(PanelTable)<{
   visibleColumns: ReplayColumn[];
   gridRows?: string;
 }>`
-  ${props =>
-    props.visibleColumns.includes(ReplayColumn.MOST_RAGE_CLICKS) ||
-    props.visibleColumns.includes(ReplayColumn.MOST_DEAD_CLICKS) ||
-    props.visibleColumns.includes(ReplayColumn.MOST_ERRONEOUS_REPLAYS)
-      ? `border-bottom-left-radius: 0; border-bottom-right-radius: 0;`
-      : ``}
   margin-bottom: 0;
   grid-template-columns: ${p =>
     p.visibleColumns
       .filter(Boolean)
-      .map(column =>
-        flexibleColumns.includes(column) ? 'minmax(100px, 1fr)' : 'max-content'
-      )
+      .map(column => (column === 'replay' ? 'minmax(100px, 1fr)' : 'max-content'))
       .join(' ')};
-
   ${props =>
     props.gridRows
       ? `grid-template-rows: ${props.gridRows};`

+ 1 - 20
static/app/views/replays/replayTable/tableCell.tsx

@@ -29,7 +29,6 @@ import EventView from 'sentry/utils/discover/eventView';
 import {spanOperationRelativeBreakdownRenderer} from 'sentry/utils/discover/fieldRenderers';
 import {getShortEventId} from 'sentry/utils/events';
 import {decodeScalar} from 'sentry/utils/queryString';
-import {TabKey} from 'sentry/utils/replays/hooks/useActiveReplayTab';
 import {MutableSearch} from 'sentry/utils/tokenizeSearch';
 import {useLocation} from 'sentry/utils/useLocation';
 import useMedia from 'sentry/utils/useMedia';
@@ -43,12 +42,7 @@ type Props = {
   showDropdownFilters?: boolean;
 };
 
-export type ReferrerTableType =
-  | 'main'
-  | 'dead-table'
-  | 'errors-table'
-  | 'rage-table'
-  | 'selector-widget';
+export type ReferrerTableType = 'main' | 'selector-widget';
 
 type EditType = 'set' | 'remove';
 
@@ -310,15 +304,6 @@ export function ReplayCell({
     },
   };
 
-  const replayDetailsErrorTab = {
-    pathname: normalizeUrl(`/organizations/${organization.slug}/replays/${replay.id}/`),
-    query: {
-      referrer,
-      ...eventView.generateQueryStringObject(),
-      t_main: TabKey.ERRORS,
-    },
-  };
-
   const replayDetailsDeadRage = {
     pathname: normalizeUrl(`/organizations/${organization.slug}/replays/${replay.id}/`),
     query: {
@@ -330,10 +315,6 @@ export function ReplayCell({
 
   const detailsTab = () => {
     switch (referrer_table) {
-      case 'errors-table':
-        return replayDetailsErrorTab;
-      case 'dead-table':
-      case 'rage-table':
       case 'selector-widget':
         return replayDetailsDeadRage;
       default:

+ 0 - 5
static/app/views/replays/replayTable/types.tsx

@@ -2,14 +2,9 @@ export enum ReplayColumn {
   ACTIVITY = 'activity',
   BROWSER = 'browser',
   COUNT_DEAD_CLICKS = 'countDeadClicks',
-  COUNT_DEAD_CLICKS_NO_HEADER = 'countDeadClicksNoHeader',
   COUNT_ERRORS = 'countErrors',
   COUNT_RAGE_CLICKS = 'countRageClicks',
-  COUNT_RAGE_CLICKS_NO_HEADER = 'countRageClicksNoHeader',
   DURATION = 'duration',
-  MOST_ERRONEOUS_REPLAYS = 'mostErroneousReplays',
-  MOST_RAGE_CLICKS = 'mostRageClicks',
-  MOST_DEAD_CLICKS = 'mostDeadClicks',
   OS = 'os',
   REPLAY = 'replay',
   SLOWEST_TRANSACTION = 'slowestTransaction',

Some files were not shown because too many files changed in this diff