diff --git a/pkg/services/publicdashboards/service/service.go b/pkg/services/publicdashboards/service/service.go index 6862fe87f74..1c0e070d535 100644 --- a/pkg/services/publicdashboards/service/service.go +++ b/pkg/services/publicdashboards/service/service.go @@ -96,16 +96,12 @@ func (pd *PublicDashboardServiceImpl) GetPublicDashboardConfig(ctx context.Conte // SavePublicDashboardConfig is a helper method to persist the sharing config // to the database. It handles validations for sharing config and persistence func (pd *PublicDashboardServiceImpl) SavePublicDashboardConfig(ctx context.Context, u *user.SignedInUser, dto *SavePublicDashboardConfigDTO) (*PublicDashboard, error) { + // validate if the dashboard exists dashboard, err := pd.GetDashboard(ctx, dto.DashboardUid) if err != nil { return nil, err } - err = validation.ValidateSavePublicDashboard(dto, dashboard) - if err != nil { - return nil, err - } - // set default value for time settings if dto.PublicDashboard.TimeSettings == nil { dto.PublicDashboard.TimeSettings = &TimeSettings{} @@ -120,6 +116,10 @@ func (pd *PublicDashboardServiceImpl) SavePublicDashboardConfig(ctx context.Cont // save changes var pubdashUid string if existingPubdash == nil { + err = validation.ValidateSavePublicDashboard(dto, dashboard) + if err != nil { + return nil, err + } pubdashUid, err = pd.savePublicDashboardConfig(ctx, dto) } else { pubdashUid, err = pd.updatePublicDashboardConfig(ctx, dto) diff --git a/public/app/features/dashboard/components/ShareModal/SharePublicDashboard/Configuration.tsx b/public/app/features/dashboard/components/ShareModal/SharePublicDashboard/Configuration.tsx index 46cf7fc7eca..e09f0564954 100644 --- a/public/app/features/dashboard/components/ShareModal/SharePublicDashboard/Configuration.tsx +++ b/public/app/features/dashboard/components/ShareModal/SharePublicDashboard/Configuration.tsx @@ -13,14 +13,12 @@ import { getTimeRange } from 'app/features/dashboard/utils/timeRange'; export const Configuration = ({ disabled, isPubDashEnabled, - hasTemplateVariables, onToggleEnabled, dashboard, }: { disabled: boolean; isPubDashEnabled?: boolean; onToggleEnabled: () => void; - hasTemplateVariables: boolean; dashboard: DashboardModel; }) => { const selectors = e2eSelectors.pages.ShareDashboardModal.PublicDashboard; @@ -41,7 +39,6 @@ export const Configuration = ({ { diff --git a/public/app/features/dashboard/components/ShareModal/SharePublicDashboard/SharePublicDashboard.tsx b/public/app/features/dashboard/components/ShareModal/SharePublicDashboard/SharePublicDashboard.tsx index fab54be0e4f..bd17032e58c 100644 --- a/public/app/features/dashboard/components/ShareModal/SharePublicDashboard/SharePublicDashboard.tsx +++ b/public/app/features/dashboard/components/ShareModal/SharePublicDashboard/SharePublicDashboard.tsx @@ -5,8 +5,6 @@ import { GrafanaTheme2 } from '@grafana/data/src'; import { selectors as e2eSelectors } from '@grafana/e2e-selectors/src'; import { reportInteraction } from '@grafana/runtime/src'; import { Alert, Button, ClipboardButton, Field, HorizontalGroup, Input, useStyles2, Spinner } from '@grafana/ui/src'; -import { notifyApp } from 'app/core/actions'; -import { createErrorNotification } from 'app/core/copy/appNotification'; import { contextSrv } from 'app/core/services/context_srv'; import { useGetConfigQuery, useSaveConfigMutation } from 'app/features/dashboard/api/publicDashboardApi'; import { AcknowledgeCheckboxes } from 'app/features/dashboard/components/ShareModal/SharePublicDashboard/AcknowledgeCheckboxes'; @@ -20,7 +18,6 @@ import { } from 'app/features/dashboard/components/ShareModal/SharePublicDashboard/SharePublicDashboardUtils'; import { ShareModalTabProps } from 'app/features/dashboard/components/ShareModal/types'; import { isOrgAdmin } from 'app/features/plugins/admin/permissions'; -import { dispatch } from 'app/store/store'; import { AccessControlAction } from 'app/types'; interface Props extends ShareModalTabProps {} @@ -81,13 +78,6 @@ export const SharePublicDashboard = (props: Props) => { const onSavePublicConfig = () => { reportInteraction('grafana_dashboards_public_create_clicked'); - if (dashboardHasTemplateVariables(dashboardVariables)) { - dispatch( - notifyApp(createErrorNotification('This dashboard cannot be made public because it has template variables')) - ); - return; - } - saveConfig({ dashboard: props.dashboard, payload: { ...publicDashboard!, isEnabled: enabledSwitch.isEnabled }, @@ -111,7 +101,7 @@ export const SharePublicDashboard = (props: Props) => { {isFetchingLoading && }
- {dashboardHasTemplateVariables(dashboardVariables) ? ( + {dashboardHasTemplateVariables(dashboardVariables) && !publicDashboardPersisted(publicDashboard) ? ( { onToggleEnabled={() => setEnabledSwitch((prevState) => ({ isEnabled: !prevState.isEnabled, wasTouched: true })) } - hasTemplateVariables={dashboardHasTemplateVariables(dashboardVariables)} /> {publicDashboardPersisted(publicDashboard) && enabledSwitch.isEnabled && ( @@ -163,11 +152,18 @@ export const SharePublicDashboard = (props: Props) => { )} {hasWritePermissions ? ( - props.dashboard.hasUnsavedChanges() && ( + props.dashboard.hasUnsavedChanges() ? ( + ) : ( + dashboardHasTemplateVariables(dashboardVariables) && ( + + ) ) ) : (