Skip to content

Commit 47109e4

Browse files
authored
feat(issue-views): Allow org owners/managers to edit/delete issue views (#90112)
1 parent 263beae commit 47109e4

File tree

6 files changed

+18
-5
lines changed

6 files changed

+18
-5
lines changed

static/app/views/issueList/issueViews/issueViewSaveButton.spec.tsx

+4
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import {Fragment} from 'react';
22
import {GroupSearchViewFixture} from 'sentry-fixture/groupSearchView';
3+
import {OrganizationFixture} from 'sentry-fixture/organization';
34
import {UserFixture} from 'sentry-fixture/user';
45

56
import {
@@ -231,6 +232,9 @@ describe('IssueViewSaveButton', function () {
231232
<GlobalModal />
232233
</Fragment>,
233234
{
235+
organization: OrganizationFixture({
236+
access: ['org:read'],
237+
}),
234238
enableRouterMocks: false,
235239
initialRouterConfig: initialRouterConfigView,
236240
}

static/app/views/issueList/issueViews/issueViewSaveButton.tsx

+3-1
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,9 @@ function SegmentedIssueViewSaveButton({
4242
const {data: view} = useSelectedGroupSearchView();
4343
const {mutate: updateGroupSearchView, isPending: isSaving} = useUpdateGroupSearchView();
4444
const user = useUser();
45-
const canEdit = view ? canEditIssueView({user, groupSearchView: view}) : false;
45+
const canEdit = view
46+
? canEditIssueView({user, groupSearchView: view, organization})
47+
: false;
4648

4749
const discardUnsavedChanges = () => {
4850
if (view) {

static/app/views/issueList/issueViews/issueViewsList/issueViewsTable.tsx

+1-1
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ export function IssueViewsTable({
7171
emptyMessage={t('No saved views found')}
7272
>
7373
{views.map((view, index) => {
74-
const canEdit = canEditIssueView({groupSearchView: view, user});
74+
const canEdit = canEditIssueView({groupSearchView: view, user, organization});
7575

7676
return (
7777
<SavedEntityTable.Row

static/app/views/issueList/issueViews/utils.tsx

+7-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import {openConfirmModal} from 'sentry/components/confirm';
22
import {t} from 'sentry/locale';
3+
import type {Organization} from 'sentry/types/organization';
34
import type {User} from 'sentry/types/user';
45
import type {GroupSearchView} from 'sentry/views/issueList/types';
56

@@ -15,12 +16,17 @@ export function isNewViewPage(pathname: string) {
1516

1617
export function canEditIssueView({
1718
groupSearchView,
19+
organization,
1820
user,
1921
}: {
2022
groupSearchView: GroupSearchView;
23+
organization: Organization;
2124
user: User;
2225
}) {
23-
// TODO: Allow org admins to edit issue views
26+
if (organization.access.includes('org:write')) {
27+
return true;
28+
}
29+
2430
return user.id === groupSearchView.createdBy.id;
2531
}
2632

static/app/views/issueList/leftNavViewsHeader.spec.tsx

+1
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ describe('LeftNavViewsHeader', function () {
3030
};
3131

3232
const organization = OrganizationFixture({
33+
access: ['org:read'],
3334
features: ['issue-view-sharing'],
3435
});
3536

static/app/views/issueList/leftNavViewsHeader.tsx

+2-2
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ function PageTitle() {
4141
if (
4242
hasIssueViewSharing &&
4343
groupSearchView &&
44-
canEditIssueView({groupSearchView, user})
44+
canEditIssueView({groupSearchView, user, organization})
4545
) {
4646
return <EditableIssueViewHeader view={groupSearchView} />;
4747
}
@@ -126,7 +126,7 @@ function IssueViewEditMenu() {
126126
return null;
127127
}
128128

129-
const canDeleteView = canEditIssueView({groupSearchView, user});
129+
const canDeleteView = canEditIssueView({groupSearchView, organization, user});
130130

131131
return (
132132
<DropdownMenu

0 commit comments

Comments
 (0)