diff --git a/static/app/views/dashboards/controls.tsx b/static/app/views/dashboards/controls.tsx index 89291cebcdeaf6..16441fd70732cd 100644 --- a/static/app/views/dashboards/controls.tsx +++ b/static/app/views/dashboards/controls.tsx @@ -15,6 +15,7 @@ import {IconAdd, IconDownload, IconEdit, IconStar} from 'sentry/icons'; import {t, tct} from 'sentry/locale'; import {space} from 'sentry/styles/space'; import type {Organization} from 'sentry/types/organization'; +import {defined} from 'sentry/utils'; import {trackAnalytics} from 'sentry/utils/analytics'; import {useQueryClient} from 'sentry/utils/queryClient'; import useApi from 'sentry/utils/useApi'; @@ -83,6 +84,9 @@ function Controls({ const currentUser = useUser(); const {teams: userTeams} = useUserTeams(); const api = useApi(); + + const isPrebuiltDashboard = defined(dashboard.prebuiltId); + if ([DashboardState.EDIT, DashboardState.PENDING_DELETE].includes(dashboardState)) { return ( @@ -199,6 +203,9 @@ function Controls({ if (!hasFeature) { return null; } + if (isPrebuiltDashboard) { + return null; + } const isDisabled = !hasFeature || hasUnsavedFilters || !hasEditAccess || isSaving; const toolTipMessage = isSaving ? DASHBOARD_SAVING_MESSAGE @@ -247,7 +254,7 @@ function Controls({ /> - {dashboard.id !== 'default-overview' && ( + {dashboard.id !== 'default-overview' && !isPrebuiltDashboard && ( )} {renderEditButton(hasFeature)} - {hasFeature ? ( + {hasFeature && !isPrebuiltDashboard ? ( Detail', () => { expect(await screen.findByLabelText('Star')).toBeInTheDocument(); }); + it('does not render save or edit features on prebuilt insights dashboards', async () => { + render( + {}} + />, + { + organization: initialData.organization, + deprecatedRouterMocks: true, + } + ); + + await userEvent.click(await screen.findByText('24H')); + await userEvent.click(screen.getByText('Last 7 days')); + await screen.findByText('7D'); + + expect(screen.queryByTestId('filter-bar-cancel')).not.toBeInTheDocument(); + expect(screen.queryByText('Save')).not.toBeInTheDocument(); + expect(screen.queryByText('Editors:')).not.toBeInTheDocument(); + expect(screen.queryByText('Add Widget')).not.toBeInTheDocument(); + }); + describe('widget builder redesign', () => { let mockUpdateDashboard!: jest.SpyInstance; beforeEach(() => { diff --git a/static/app/views/dashboards/detail.tsx b/static/app/views/dashboards/detail.tsx index 561eecacccf99d..a57b11b5e82406 100644 --- a/static/app/views/dashboards/detail.tsx +++ b/static/app/views/dashboards/detail.tsx @@ -1187,6 +1187,7 @@ class DashboardDetail extends Component { isPreview={this.isPreview} onDashboardFilterChange={this.handleChangeFilter} shouldBusySaveButton={this.state.isSavingDashboardFilters} + isPrebuiltDashboard={defined(dashboard.prebuiltId)} onCancel={() => { resetPageFilters(dashboard, location); trackAnalytics('dashboards2.filter.cancel', { diff --git a/static/app/views/dashboards/filtersBar.tsx b/static/app/views/dashboards/filtersBar.tsx index 620e1b33d1df99..1bba81779b887e 100644 --- a/static/app/views/dashboards/filtersBar.tsx +++ b/static/app/views/dashboards/filtersBar.tsx @@ -44,6 +44,7 @@ type FiltersBarProps = { onDashboardFilterChange: (activeFilters: DashboardFilters) => void; dashboardCreator?: User; dashboardPermissions?: DashboardPermissions; + isPrebuiltDashboard?: boolean; onCancel?: () => void; onSave?: () => Promise; shouldBusySaveButton?: boolean; @@ -62,6 +63,7 @@ export default function FiltersBar({ onDashboardFilterChange, onSave, shouldBusySaveButton, + isPrebuiltDashboard, }: FiltersBarProps) { const {selection} = usePageFilters(); const organization = useOrganization(); @@ -195,34 +197,38 @@ export default function FiltersBar({ /> )} - {!hasTemporaryFilters && hasUnsavedChanges && !isEditingDashboard && !isPreview && ( - - - - - )} + {!hasTemporaryFilters && + hasUnsavedChanges && + !isEditingDashboard && + !isPreview && + !isPrebuiltDashboard && ( + + + + + )} );