Browse Source

feat(workflow): GA for review, remove inbox flag (#26760)

Scott Cooper 3 years ago
parent
commit
3265d869a5

+ 3 - 7
src/sentry/api/endpoints/group_details.py

@@ -5,7 +5,7 @@ from datetime import timedelta
 from django.utils import timezone
 from rest_framework.response import Response
 
-from sentry import features, tagstore, tsdb
+from sentry import tagstore, tsdb
 from sentry.api import client
 from sentry.api.base import EnvironmentMixin
 from sentry.api.bases import GroupEndpoint
@@ -134,7 +134,6 @@ class GroupDetailsEndpoint(GroupEndpoint, EnvironmentMixin):
             environment_ids = [e.id for e in environments]
             expand = request.GET.getlist("expand", [])
             collapse = request.GET.getlist("collapse", [])
-            has_inbox = features.has("organizations:inbox", organization, actor=request.user)
 
             # WARNING: the rest of this endpoint relies on this serializer
             # populating the cache SO don't move this :)
@@ -190,7 +189,7 @@ class GroupDetailsEndpoint(GroupEndpoint, EnvironmentMixin):
                 )
             )
 
-            if "inbox" in expand and has_inbox:
+            if "inbox" in expand:
                 inbox_map = get_inbox_details([group])
                 inbox_reason = inbox_map.get(group.id)
                 data.update({"inbox": inbox_reason})
@@ -263,11 +262,8 @@ class GroupDetailsEndpoint(GroupEndpoint, EnvironmentMixin):
             discard = request.data.get("discard")
             project = group.project
             search_fn = functools.partial(prep_search, self, request, project)
-            has_inbox = features.has(
-                "organizations:inbox", project.organization, actor=request.user
-            )
             response = update_groups(
-                request, [group.id], [project], project.organization_id, search_fn, has_inbox
+                request, [group.id], [project], project.organization_id, search_fn
             )
             # if action was discard, there isn't a group to serialize anymore
             # if response isn't 200, return the response update_groups gave us (i.e. helpful error)

+ 1 - 6
src/sentry/api/endpoints/organization_activity.py

@@ -1,4 +1,3 @@
-from sentry import features
 from sentry.api.base import EnvironmentMixin
 from sentry.api.bases import OrganizationMemberEndpoint
 from sentry.api.paginator import DateTimePaginator
@@ -8,13 +7,9 @@ from sentry.models import Activity, OrganizationMemberTeam, Project
 
 class OrganizationActivityEndpoint(OrganizationMemberEndpoint, EnvironmentMixin):
     def get(self, request, organization, member):
-        has_inbox = features.has("organizations:inbox", organization, actor=request.user)
         # There is an activity record created for both sides of the unmerge
         # operation, so we only need to include one of them here to avoid
         # showing the same entry twice.
-        exclude = [Activity.UNMERGE_SOURCE]
-        if not has_inbox:
-            exclude.append(Activity.MARK_REVIEWED)
         queryset = (
             Activity.objects.filter(
                 project__in=Project.objects.filter(
@@ -24,7 +19,7 @@ class OrganizationActivityEndpoint(OrganizationMemberEndpoint, EnvironmentMixin)
                     ).values("team"),
                 )
             )
-            .exclude(type__in=exclude)
+            .exclude(type=Activity.UNMERGE_SOURCE)
             .select_related("project", "group", "user")
         )
 

+ 1 - 4
src/sentry/api/endpoints/organization_group_index.py

@@ -226,7 +226,6 @@ class OrganizationGroupIndexEndpoint(OrganizationEventsEndpointBase):
 
         expand = request.GET.getlist("expand", [])
         collapse = request.GET.getlist("collapse", [])
-        has_inbox = features.has("organizations:inbox", organization, actor=request.user)
         if stats_period not in (None, "", "24h", "14d", "auto"):
             return Response({"detail": ERR_INVALID_STATS_PERIOD}, status=400)
         stats_period, stats_period_start, stats_period_end = calculate_stats_period(
@@ -243,7 +242,6 @@ class OrganizationGroupIndexEndpoint(OrganizationEventsEndpointBase):
             stats_period_end=stats_period_end,
             expand=expand,
             collapse=collapse,
-            has_inbox=has_inbox,
         )
 
         projects = self.get_projects(request, organization)
@@ -412,7 +410,6 @@ class OrganizationGroupIndexEndpoint(OrganizationEventsEndpointBase):
         :auth: required
         """
         projects = self.get_projects(request, organization)
-        has_inbox = features.has("organizations:inbox", organization, actor=request.user)
         if len(projects) > 1 and not features.has(
             "organizations:global-views", organization, actor=request.user
         ):
@@ -429,7 +426,7 @@ class OrganizationGroupIndexEndpoint(OrganizationEventsEndpointBase):
         )
 
         return update_groups(
-            request, request.GET.getlist("id"), projects, organization.id, search_fn, has_inbox
+            request, request.GET.getlist("id"), projects, organization.id, search_fn
         )
 
     @track_slo_response("workflow")

+ 0 - 3
src/sentry/api/endpoints/organization_group_index_stats.py

@@ -1,7 +1,6 @@
 from rest_framework.exceptions import ParseError, PermissionDenied
 from rest_framework.response import Response
 
-from sentry import features
 from sentry.api.bases import OrganizationEventPermission, OrganizationEventsEndpointBase
 from sentry.api.endpoints.organization_group_index import ERR_INVALID_STATS_PERIOD
 from sentry.api.helpers.group_index import (
@@ -57,7 +56,6 @@ class OrganizationGroupIndexStatsEndpoint(OrganizationEventsEndpointBase):
 
         expand = request.GET.getlist("expand", [])
         collapse = request.GET.getlist("collapse", ["base"])
-        has_inbox = features.has("organizations:inbox", organization, actor=request.user)
         projects = self.get_projects(request, organization)
         project_ids = [p.id for p in projects]
 
@@ -100,7 +98,6 @@ class OrganizationGroupIndexStatsEndpoint(OrganizationEventsEndpointBase):
                 stats_period_end=stats_period_end,
                 collapse=collapse,
                 expand=expand,
-                has_inbox=has_inbox,
                 start=start,
                 end=end,
                 search_filters=query_kwargs["search_filters"]

+ 2 - 5
src/sentry/api/endpoints/project_group_index.py

@@ -2,7 +2,7 @@ import functools
 
 from rest_framework.response import Response
 
-from sentry import analytics, eventstore, features
+from sentry import analytics, eventstore
 from sentry.api.base import EnvironmentMixin
 from sentry.api.bases.project import ProjectEndpoint, ProjectEventPermission
 from sentry.api.helpers.group_index import (
@@ -15,7 +15,7 @@ from sentry.api.helpers.group_index import (
 )
 from sentry.api.serializers import serialize
 from sentry.api.serializers.models.group import StreamGroupSerializer
-from sentry.models import QUERY_STATUS_LOOKUP, Environment, Group, GroupStatus, Organization
+from sentry.models import QUERY_STATUS_LOOKUP, Environment, Group, GroupStatus
 from sentry.signals import advanced_search
 from sentry.utils.validators import normalize_event_id
 
@@ -217,15 +217,12 @@ class ProjectGroupIndexEndpoint(ProjectEndpoint, EnvironmentMixin):
         """
 
         search_fn = functools.partial(prep_search, self, request, project)
-        organization = Organization.objects.get_from_cache(id=project.organization_id)
-        has_inbox = features.has("organizations:inbox", organization, actor=request.user)
         return update_groups(
             request,
             request.GET.getlist("id"),
             [project],
             project.organization_id,
             search_fn,
-            has_inbox,
         )
 
     @track_slo_response("workflow")

+ 3 - 5
src/sentry/api/helpers/group_index.py

@@ -493,7 +493,7 @@ def rate_limit_endpoint(limit=1, window=1):
     return inner
 
 
-def update_groups(request, group_ids, projects, organization_id, search_fn, has_inbox=False):
+def update_groups(request, group_ids, projects, organization_id, search_fn):
     if group_ids:
         group_list = Group.objects.filter(
             project__organization_id=organization_id, project__in=projects, id__in=group_ids
@@ -684,8 +684,7 @@ def update_groups(request, group_ids, projects, organization_id, search_fn, has_
                 remove_group_from_inbox(
                     group, action=GroupInboxRemoveAction.RESOLVED, user=acting_user
                 )
-                if has_inbox:
-                    result["inbox"] = None
+                result["inbox"] = None
 
                 assigned_to = self_subscribe_and_assign_issue(acting_user, group)
                 if assigned_to is not None:
@@ -733,8 +732,7 @@ def update_groups(request, group_ids, projects, organization_id, search_fn, has_
                     remove_group_from_inbox(
                         group, action=GroupInboxRemoveAction.IGNORED, user=acting_user
                     )
-                if has_inbox:
-                    result["inbox"] = None
+                result["inbox"] = None
 
                 ignore_duration = (
                     statusDetails.pop("ignoreDuration", None)

+ 1 - 13
src/sentry/api/serializers/models/group.py

@@ -78,19 +78,14 @@ class GroupSerializerBase(Serializer):
         self,
         collapse=None,
         expand=None,
-        has_inbox=False,
     ):
         self.collapse = collapse
         self.expand = expand
-        self.has_inbox = has_inbox
 
     def _expand(self, key):
         if self.expand is None:
             return False
 
-        if key == "inbox" and not self.has_inbox:
-            return False
-
         return key in self.expand
 
     def _collapse(self, key):
@@ -771,13 +766,8 @@ class GroupSerializerSnuba(GroupSerializerBase):
         search_filters=None,
         collapse=None,
         expand=None,
-        has_inbox=False,
     ):
-        super().__init__(
-            collapse=collapse,
-            expand=expand,
-            has_inbox=has_inbox,
-        )
+        super().__init__(collapse=collapse, expand=expand)
         from sentry.search.snuba.executors import get_search_filter
 
         self.environment_ids = environment_ids
@@ -889,7 +879,6 @@ class StreamGroupSerializerSnuba(GroupSerializerSnuba, GroupStatsMixin):
         search_filters=None,
         collapse=None,
         expand=None,
-        has_inbox=False,
     ):
         super().__init__(
             environment_ids,
@@ -898,7 +887,6 @@ class StreamGroupSerializerSnuba(GroupSerializerSnuba, GroupStatsMixin):
             search_filters,
             collapse=collapse,
             expand=expand,
-            has_inbox=has_inbox,
         )
 
         if stats_period is not None:

+ 28 - 47
static/app/components/actions/ignore.tsx

@@ -37,7 +37,6 @@ type Props = {
   confirmMessage?: React.ReactNode;
   confirmLabel?: string;
   isIgnored?: boolean;
-  hasInbox?: boolean;
 };
 
 const IgnoreActions = ({
@@ -47,7 +46,6 @@ const IgnoreActions = ({
   confirmMessage,
   confirmLabel = t('Ignore'),
   isIgnored = false,
-  hasInbox = false,
 }: Props) => {
   const onIgnore = (statusDetails: ResolutionStatusDetails) => {
     return onUpdate({
@@ -117,37 +115,28 @@ const IgnoreActions = ({
 
   return (
     <ButtonBar merged>
-      {!hasInbox && (
-        <ActionLink
-          {...actionLinkProps}
-          type="button"
-          title={t('Ignore')}
-          onAction={() => onUpdate({status: ResolutionStatus.IGNORED})}
-          icon={<IconMute size="xs" />}
-        >
-          {t('Ignore')}
-        </ActionLink>
-      )}
-
+      <ActionLink
+        {...actionLinkProps}
+        type="button"
+        title={t('Ignore')}
+        onAction={() => onUpdate({status: ResolutionStatus.IGNORED})}
+        icon={<IconMute size="xs" />}
+      >
+        {t('Ignore')}
+      </ActionLink>
       <StyledDropdownLink
         customTitle={
-          hasInbox ? (
-            <IconMute size="xs" color="gray300" />
-          ) : (
-            <ActionButton
-              disabled={disabled}
-              icon={<IconChevron direction="down" size="xs" />}
-            />
-          )
+          <ActionButton
+            disabled={disabled}
+            icon={<IconChevron direction="down" size="xs" />}
+          />
         }
         alwaysRenderMenu
         disabled={disabled}
-        anchorRight={hasInbox}
-        hasInbox
       >
         <MenuHeader>{t('Ignore')}</MenuHeader>
 
-        <DropdownMenuItem hasInbox={hasInbox}>
+        <DropdownMenuItem>
           <DropdownLink
             title={
               <ActionSubMenu>
@@ -162,7 +151,7 @@ const IgnoreActions = ({
             alwaysRenderMenu
           >
             {IGNORE_DURATIONS.map(duration => (
-              <DropdownMenuItem hasInbox={hasInbox} key={duration}>
+              <DropdownMenuItem key={duration}>
                 <StyledForActionLink
                   {...actionLinkProps}
                   onAction={() => onIgnore({ignoreDuration: duration})}
@@ -173,7 +162,7 @@ const IgnoreActions = ({
                 </StyledForActionLink>
               </DropdownMenuItem>
             ))}
-            <DropdownMenuItem hasInbox={hasInbox}>
+            <DropdownMenuItem>
               <ActionSubMenu>
                 <a onClick={openCustomIgnoreDuration}>{t('Custom')}</a>
               </ActionSubMenu>
@@ -181,7 +170,7 @@ const IgnoreActions = ({
           </DropdownLink>
         </DropdownMenuItem>
 
-        <DropdownMenuItem hasInbox={hasInbox}>
+        <DropdownMenuItem>
           <DropdownLink
             title={
               <ActionSubMenu>
@@ -196,7 +185,7 @@ const IgnoreActions = ({
             alwaysRenderMenu
           >
             {IGNORE_COUNTS.map(count => (
-              <DropdownMenuItem hasInbox={hasInbox} key={count}>
+              <DropdownMenuItem key={count}>
                 <DropdownLink
                   title={
                     <ActionSubMenu>
@@ -212,7 +201,7 @@ const IgnoreActions = ({
                   isNestedDropdown
                   alwaysRenderMenu
                 >
-                  <DropdownMenuItem hasInbox={hasInbox}>
+                  <DropdownMenuItem>
                     <StyledActionLink
                       {...actionLinkProps}
                       onAction={() => onIgnore({ignoreCount: count})}
@@ -221,7 +210,7 @@ const IgnoreActions = ({
                     </StyledActionLink>
                   </DropdownMenuItem>
                   {IGNORE_WINDOWS.map(([hours, label]) => (
-                    <DropdownMenuItem hasInbox={hasInbox} key={hours}>
+                    <DropdownMenuItem key={hours}>
                       <StyledActionLink
                         {...actionLinkProps}
                         onAction={() =>
@@ -238,14 +227,14 @@ const IgnoreActions = ({
                 </DropdownLink>
               </DropdownMenuItem>
             ))}
-            <DropdownMenuItem hasInbox={hasInbox}>
+            <DropdownMenuItem>
               <ActionSubMenu>
                 <a onClick={openCustomIngoreCount}>{t('Custom')}</a>
               </ActionSubMenu>
             </DropdownMenuItem>
           </DropdownLink>
         </DropdownMenuItem>
-        <DropdownMenuItem hasInbox={hasInbox}>
+        <DropdownMenuItem>
           <DropdownLink
             title={
               <ActionSubMenu>
@@ -260,7 +249,7 @@ const IgnoreActions = ({
             alwaysRenderMenu
           >
             {IGNORE_COUNTS.map(count => (
-              <DropdownMenuItem hasInbox={hasInbox} key={count}>
+              <DropdownMenuItem key={count}>
                 <DropdownLink
                   title={
                     <ActionSubMenu>
@@ -274,7 +263,7 @@ const IgnoreActions = ({
                   isNestedDropdown
                   alwaysRenderMenu
                 >
-                  <DropdownMenuItem hasInbox={hasInbox}>
+                  <DropdownMenuItem>
                     <StyledActionLink
                       {...actionLinkProps}
                       onAction={() => onIgnore({ignoreUserCount: count})}
@@ -283,7 +272,7 @@ const IgnoreActions = ({
                     </StyledActionLink>
                   </DropdownMenuItem>
                   {IGNORE_WINDOWS.map(([hours, label]) => (
-                    <DropdownMenuItem hasInbox={hasInbox} key={hours}>
+                    <DropdownMenuItem key={hours}>
                       <StyledActionLink
                         {...actionLinkProps}
                         onAction={() =>
@@ -300,7 +289,7 @@ const IgnoreActions = ({
                 </DropdownLink>
               </DropdownMenuItem>
             ))}
-            <DropdownMenuItem hasInbox={hasInbox}>
+            <DropdownMenuItem>
               <ActionSubMenu>
                 <a onClick={openCustomIgnoreUserCount}>{t('Custom')}</a>
               </ActionSubMenu>
@@ -332,15 +321,13 @@ const StyledForActionLink = styled(ActionLink)`
   ${actionLinkCss};
 `;
 
-// The icon with no text label needs the height reduced for row actions
-const StyledDropdownLink = styled(DropdownLink)<{hasInbox: boolean}>`
-  ${p => (p.hasInbox ? 'line-height: 0' : '')};
+const StyledDropdownLink = styled(DropdownLink)`
   transition: none;
   border-top-left-radius: 0 !important;
   border-bottom-left-radius: 0 !important;
 `;
 
-const DropdownMenuItem = styled('li')<{hasInbox: boolean}>`
+const DropdownMenuItem = styled('li')`
   :not(:last-child) {
     border-bottom: 1px solid ${p => p.theme.innerBorder};
   }
@@ -361,12 +348,6 @@ const DropdownMenuItem = styled('li')<{hasInbox: boolean}>`
   &:hover > span {
     background: ${p => p.theme.focus};
   }
-  ${p =>
-    p.hasInbox &&
-    `
-      flex: 1;
-      justify-content: flex-start;
-    `};
 `;
 
 const ActionSubMenu = styled('span')`

+ 26 - 66
static/app/components/eventOrGroupExtraDetails.tsx

@@ -1,5 +1,4 @@
 import {Link, withRouter, WithRouterProps} from 'react-router';
-import {css} from '@emotion/react';
 import styled from '@emotion/styled';
 
 import GuideAnchor from 'app/components/assistant/guideAnchor';
@@ -8,20 +7,16 @@ import InboxReason from 'app/components/group/inboxBadges/inboxReason';
 import InboxShortId from 'app/components/group/inboxBadges/shortId';
 import TimesTag from 'app/components/group/inboxBadges/timesTag';
 import UnhandledTag from 'app/components/group/inboxBadges/unhandledTag';
-import Times from 'app/components/group/times';
 import ProjectBadge from 'app/components/idBadge/projectBadge';
 import Placeholder from 'app/components/placeholder';
-import ShortId from 'app/components/shortId';
 import {IconChat} from 'app/icons';
 import {tct} from 'app/locale';
 import space from 'app/styles/space';
-import {Group, Organization} from 'app/types';
+import {Group} from 'app/types';
 import {Event} from 'app/types/event';
-import withOrganization from 'app/utils/withOrganization';
 
 type Props = WithRouterProps<{orgId: string}> & {
   data: Event | Group;
-  organization: Organization;
   showAssignee?: boolean;
   hasGuideAnchor?: boolean;
   showInboxTime?: boolean;
@@ -31,7 +26,6 @@ function EventOrGroupExtraDetails({
   data,
   showAssignee,
   params,
-  organization,
   hasGuideAnchor,
   showInboxTime,
 }: Props) {
@@ -52,50 +46,32 @@ function EventOrGroupExtraDetails({
   } = data as Group;
 
   const issuesPath = `/organizations/${params.orgId}/issues/`;
-  const hasInbox = organization.features.includes('inbox');
   const inboxReason = inbox && (
     <InboxReason inbox={inbox} showDateAdded={showInboxTime} />
   );
 
   return (
-    <GroupExtra hasInbox={hasInbox}>
-      {hasInbox && inbox && (
+    <GroupExtra>
+      {inbox && (
         <GuideAnchor target="inbox_guide_reason" disabled={!hasGuideAnchor}>
           {inboxReason}
         </GuideAnchor>
       )}
-      {shortId &&
-        (hasInbox ? (
-          <InboxShortId
-            shortId={shortId}
-            avatar={
-              project && (
-                <ShadowlessProjectBadge project={project} avatarSize={12} hideName />
-              )
-            }
-          />
-        ) : (
-          <GroupShortId
-            shortId={shortId}
-            avatar={
-              project && <ProjectBadge project={project} avatarSize={14} hideName />
-            }
-            onClick={e => {
-              // prevent the clicks from propagating so that the short id can be selected
-              e.stopPropagation();
-            }}
-          />
-        ))}
-      {isUnhandled && hasInbox && <UnhandledTag />}
+      {shortId && (
+        <InboxShortId
+          shortId={shortId}
+          avatar={
+            project && (
+              <ShadowlessProjectBadge project={project} avatarSize={12} hideName />
+            )
+          }
+        />
+      )}
+      {isUnhandled && <UnhandledTag />}
       {!lifetime && !firstSeen && !lastSeen ? (
         <Placeholder height="14px" width="100px" />
-      ) : hasInbox ? (
-        <TimesTag
-          lastSeen={lifetime?.lastSeen || lastSeen}
-          firstSeen={lifetime?.firstSeen || firstSeen}
-        />
       ) : (
-        <StyledTimes
+        <TimesTag
           lastSeen={lifetime?.lastSeen || lastSeen}
           firstSeen={lifetime?.firstSeen || firstSeen}
         />
@@ -111,7 +87,7 @@ function EventOrGroupExtraDetails({
         </CommentsLink>
       )}
       {logger && (
-        <LoggerAnnotation hasInbox={hasInbox}>
+        <LoggerAnnotation>
           <Link
             to={{
               pathname: issuesPath,
@@ -126,7 +102,6 @@ function EventOrGroupExtraDetails({
       )}
       {annotations?.map((annotation, key) => (
         <AnnotationNoMargin
-          hasInbox={hasInbox}
           dangerouslySetInnerHTML={{
             __html: annotation,
           }}
@@ -141,13 +116,13 @@ function EventOrGroupExtraDetails({
   );
 }
 
-const GroupExtra = styled('div')<{hasInbox: boolean}>`
+const GroupExtra = styled('div')`
   display: inline-grid;
   grid-auto-flow: column dense;
-  grid-gap: ${p => (p.hasInbox ? space(1.5) : space(2))};
+  grid-gap: ${space(1.5)};
   justify-content: start;
   align-items: center;
-  color: ${p => (p.hasInbox ? p.theme.textColor : p.theme.subText)};
+  color: ${p => p.theme.textColor};
   font-size: ${p => p.theme.fontSizeSmall};
   position: relative;
   min-width: 500px;
@@ -164,10 +139,6 @@ const ShadowlessProjectBadge = styled(ProjectBadge)`
   }
 `;
 
-const StyledTimes = styled(Times)`
-  margin-right: 0;
-`;
-
 const CommentsLink = styled(Link)`
   display: inline-grid;
   grid-gap: ${space(0.5)};
@@ -176,28 +147,17 @@ const CommentsLink = styled(Link)`
   color: ${p => p.theme.textColor};
 `;
 
-const GroupShortId = styled(ShortId)`
-  flex-shrink: 0;
-  font-size: ${p => p.theme.fontSizeSmall};
-  color: ${p => p.theme.subText};
-`;
-
-const AnnotationNoMargin = styled(EventAnnotation)<{hasInbox: boolean}>`
+const AnnotationNoMargin = styled(EventAnnotation)`
   margin-left: 0;
-  padding-left: ${p => (p.hasInbox ? 0 : space(2))};
-  ${p => p.hasInbox && `border-left: none;`};
-
-  ${p =>
-    p.hasInbox &&
-    css`
-      & > a {
-        color: ${p.theme.textColor};
-      }
-    `}
+  padding-left: 0;
+  border-left: none;
+  & > a {
+    color: ${p => p.theme.textColor};
+  }
 `;
 
 const LoggerAnnotation = styled(AnnotationNoMargin)`
   color: ${p => p.theme.textColor};
 `;
 
-export default withRouter(withOrganization(EventOrGroupExtraDetails));
+export default withRouter(EventOrGroupExtraDetails);

+ 3 - 8
static/app/components/eventOrGroupHeader.tsx

@@ -13,9 +13,7 @@ import {Group, GroupTombstone, Level, Organization} from 'app/types';
 import {Event} from 'app/types/event';
 import {getLocation, getMessage} from 'app/utils/events';
 import withOrganization from 'app/utils/withOrganization';
-import UnhandledTag, {
-  TagAndMessageWrapper,
-} from 'app/views/organizationGroupDetails/unhandledTag';
+import {TagAndMessageWrapper} from 'app/views/organizationGroupDetails/unhandledTag';
 
 type DefaultProps = {
   includeLink: boolean;
@@ -115,19 +113,16 @@ class EventOrGroupHeader extends Component<Props> {
   }
 
   render() {
-    const {className, size, data, organization} = this.props;
+    const {className, size, data} = this.props;
     const location = getLocation(data);
     const message = getMessage(data);
-    const {isUnhandled} = data as Group;
-    const showUnhandled = isUnhandled && !organization.features.includes('inbox');
 
     return (
       <div className={className} data-test-id="event-issue-header">
         <Title size={size}>{this.getTitle()}</Title>
         {location && <Location size={size}>{location}</Location>}
-        {(message || showUnhandled) && (
+        {message && (
           <StyledTagAndMessageWrapper size={size}>
-            {showUnhandled && <UnhandledTag />}
             {message && <Message>{message}</Message>}
           </StyledTagAndMessageWrapper>
         )}

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