diff --git a/packages/grafana-e2e-selectors/src/selectors/pages.ts b/packages/grafana-e2e-selectors/src/selectors/pages.ts index d4d048b19d8..9e20696760a 100644 --- a/packages/grafana-e2e-selectors/src/selectors/pages.ts +++ b/packages/grafana-e2e-selectors/src/selectors/pages.ts @@ -188,7 +188,6 @@ export const Pages = { CostIncreaseCheckbox: 'data-testid public dashboard cost may increase checkbox', EnableSwitch: 'data-testid public dashboard on off switch', EnableAnnotationsSwitch: 'data-testid public dashboard on off switch for annotations', - EnableTimeRangeSwitch: 'data-testid public dashboard on off switch for time range', SaveConfigButton: 'data-testid public dashboard save config button', DeleteButton: 'data-testid public dashboard delete button', CopyUrlInput: 'data-testid public dashboard copy url input', diff --git a/pkg/api/dashboard.go b/pkg/api/dashboard.go index 186703e4aa2..1dd8e021ece 100644 --- a/pkg/api/dashboard.go +++ b/pkg/api/dashboard.go @@ -101,10 +101,9 @@ func (hs *HTTPServer) GetDashboard(c *models.ReqContext) response.Response { } var ( - hasPublicDashboard = false - publicDashboardEnabled = false - publicDashboardTimeSelectionEnabled = false - err error + hasPublicDashboard = false + publicDashboardEnabled = false + err error ) // If public dashboards is enabled and we have a public dashboard, update meta @@ -117,7 +116,6 @@ func (hs *HTTPServer) GetDashboard(c *models.ReqContext) response.Response { if publicDashboard != nil { hasPublicDashboard = true - publicDashboardTimeSelectionEnabled = publicDashboard.TimeSelectionEnabled publicDashboardEnabled = publicDashboard.IsEnabled } } @@ -169,28 +167,27 @@ func (hs *HTTPServer) GetDashboard(c *models.ReqContext) response.Response { } meta := dtos.DashboardMeta{ - IsStarred: isStarred, - Slug: dash.Slug, - Type: models.DashTypeDB, - CanStar: c.IsSignedIn, - CanSave: canSave, - CanEdit: canEdit, - CanAdmin: canAdmin, - CanDelete: canDelete, - Created: dash.Created, - Updated: dash.Updated, - UpdatedBy: updater, - CreatedBy: creator, - Version: dash.Version, - HasACL: dash.HasACL, - IsFolder: dash.IsFolder, - FolderId: dash.FolderId, - Url: dash.GetUrl(), - FolderTitle: "General", - AnnotationsPermissions: annotationPermissions, - PublicDashboardEnabled: publicDashboardEnabled, - HasPublicDashboard: hasPublicDashboard, - PublicDashboardTimeSelectionEnabled: publicDashboardTimeSelectionEnabled, + IsStarred: isStarred, + Slug: dash.Slug, + Type: models.DashTypeDB, + CanStar: c.IsSignedIn, + CanSave: canSave, + CanEdit: canEdit, + CanAdmin: canAdmin, + CanDelete: canDelete, + Created: dash.Created, + Updated: dash.Updated, + UpdatedBy: updater, + CreatedBy: creator, + Version: dash.Version, + HasACL: dash.HasACL, + IsFolder: dash.IsFolder, + FolderId: dash.FolderId, + Url: dash.GetUrl(), + FolderTitle: "General", + AnnotationsPermissions: annotationPermissions, + PublicDashboardEnabled: publicDashboardEnabled, + HasPublicDashboard: hasPublicDashboard, } // lookup folder title diff --git a/pkg/api/dtos/dashboard.go b/pkg/api/dtos/dashboard.go index e47331bc826..0d13051f5be 100644 --- a/pkg/api/dtos/dashboard.go +++ b/pkg/api/dtos/dashboard.go @@ -7,36 +7,35 @@ import ( ) type DashboardMeta struct { - IsStarred bool `json:"isStarred,omitempty"` - IsSnapshot bool `json:"isSnapshot,omitempty"` - Type string `json:"type,omitempty"` - CanSave bool `json:"canSave"` - CanEdit bool `json:"canEdit"` - CanAdmin bool `json:"canAdmin"` - CanStar bool `json:"canStar"` - CanDelete bool `json:"canDelete"` - Slug string `json:"slug"` - Url string `json:"url"` - Expires time.Time `json:"expires"` - Created time.Time `json:"created"` - Updated time.Time `json:"updated"` - UpdatedBy string `json:"updatedBy"` - CreatedBy string `json:"createdBy"` - Version int `json:"version"` - HasACL bool `json:"hasAcl" xorm:"has_acl"` - IsFolder bool `json:"isFolder"` - FolderId int64 `json:"folderId"` - FolderUid string `json:"folderUid"` - FolderTitle string `json:"folderTitle"` - FolderUrl string `json:"folderUrl"` - Provisioned bool `json:"provisioned"` - ProvisionedExternalId string `json:"provisionedExternalId"` - AnnotationsPermissions *AnnotationPermission `json:"annotationsPermissions"` - HasPublicDashboard bool `json:"hasPublicDashboard"` - PublicDashboardAccessToken string `json:"publicDashboardAccessToken"` - PublicDashboardUID string `json:"publicDashboardUid"` - PublicDashboardEnabled bool `json:"publicDashboardEnabled"` - PublicDashboardTimeSelectionEnabled bool `json:"publicDashboardTimeSelectionEnabled"` + IsStarred bool `json:"isStarred,omitempty"` + IsSnapshot bool `json:"isSnapshot,omitempty"` + Type string `json:"type,omitempty"` + CanSave bool `json:"canSave"` + CanEdit bool `json:"canEdit"` + CanAdmin bool `json:"canAdmin"` + CanStar bool `json:"canStar"` + CanDelete bool `json:"canDelete"` + Slug string `json:"slug"` + Url string `json:"url"` + Expires time.Time `json:"expires"` + Created time.Time `json:"created"` + Updated time.Time `json:"updated"` + UpdatedBy string `json:"updatedBy"` + CreatedBy string `json:"createdBy"` + Version int `json:"version"` + HasACL bool `json:"hasAcl" xorm:"has_acl"` + IsFolder bool `json:"isFolder"` + FolderId int64 `json:"folderId"` + FolderUid string `json:"folderUid"` + FolderTitle string `json:"folderTitle"` + FolderUrl string `json:"folderUrl"` + Provisioned bool `json:"provisioned"` + ProvisionedExternalId string `json:"provisionedExternalId"` + AnnotationsPermissions *AnnotationPermission `json:"annotationsPermissions"` + HasPublicDashboard bool `json:"hasPublicDashboard"` + PublicDashboardAccessToken string `json:"publicDashboardAccessToken"` + PublicDashboardUID string `json:"publicDashboardUid"` + PublicDashboardEnabled bool `json:"publicDashboardEnabled"` } type AnnotationPermission struct { Dashboard AnnotationActions `json:"dashboard"` diff --git a/pkg/services/publicdashboards/api/query.go b/pkg/services/publicdashboards/api/query.go index 51a8f1cd500..582bec042db 100644 --- a/pkg/services/publicdashboards/api/query.go +++ b/pkg/services/publicdashboards/api/query.go @@ -29,21 +29,20 @@ func (api *Api) ViewPublicDashboard(c *models.ReqContext) response.Response { } meta := dtos.DashboardMeta{ - Slug: dash.Slug, - Type: models.DashTypeDB, - CanStar: false, - CanSave: false, - CanEdit: false, - CanAdmin: false, - CanDelete: false, - Created: dash.Created, - Updated: dash.Updated, - Version: dash.Version, - IsFolder: false, - FolderId: dash.FolderId, - PublicDashboardAccessToken: pubdash.AccessToken, - PublicDashboardUID: pubdash.Uid, - PublicDashboardTimeSelectionEnabled: pubdash.TimeSelectionEnabled, + Slug: dash.Slug, + Type: models.DashTypeDB, + CanStar: false, + CanSave: false, + CanEdit: false, + CanAdmin: false, + CanDelete: false, + Created: dash.Created, + Updated: dash.Updated, + Version: dash.Version, + IsFolder: false, + FolderId: dash.FolderId, + PublicDashboardAccessToken: pubdash.AccessToken, + PublicDashboardUID: pubdash.Uid, } dto := dtos.DashboardFullWithMeta{Meta: meta, Dashboard: dash.Data} diff --git a/public/app/features/dashboard/api/publicDashboardApi.ts b/public/app/features/dashboard/api/publicDashboardApi.ts index 026ea0fc4e5..4249547a967 100644 --- a/public/app/features/dashboard/api/publicDashboardApi.ts +++ b/public/app/features/dashboard/api/publicDashboardApi.ts @@ -70,7 +70,6 @@ export const publicDashboardApi = createApi({ hasPublicDashboard: true, publicDashboardUid: data.uid, publicDashboardEnabled: data.isEnabled, - publicDashboardTimeSelectionEnabled: data.timeSelectionEnabled, }); }, invalidatesTags: (result, error, { payload }) => [{ type: 'PublicDashboard', id: payload.dashboardUid }], @@ -91,7 +90,6 @@ export const publicDashboardApi = createApi({ hasPublicDashboard: true, publicDashboardUid: data.uid, publicDashboardEnabled: data.isEnabled, - publicDashboardTimeSelectionEnabled: data.timeSelectionEnabled, }); }, invalidatesTags: (result, error, { payload }) => [{ type: 'PublicDashboard', id: payload.dashboardUid }], diff --git a/public/app/features/dashboard/components/DashNav/DashNav.test.tsx b/public/app/features/dashboard/components/DashNav/DashNav.test.tsx index 2bb811d0582..c9ee0d49456 100644 --- a/public/app/features/dashboard/components/DashNav/DashNav.test.tsx +++ b/public/app/features/dashboard/components/DashNav/DashNav.test.tsx @@ -36,7 +36,6 @@ describe('Public dashboard title tag', () => { isFullscreen={false} onAddPanel={() => {}} title="test" - isPublic={false} /> diff --git a/public/app/features/dashboard/components/DashNav/DashNav.tsx b/public/app/features/dashboard/components/DashNav/DashNav.tsx index 4c4386d2cca..87b2dfbdf28 100644 --- a/public/app/features/dashboard/components/DashNav/DashNav.tsx +++ b/public/app/features/dashboard/components/DashNav/DashNav.tsx @@ -58,7 +58,6 @@ export interface OwnProps { title: string; shareModalActiveTab?: string; onAddPanel: () => void; - isPublic: boolean; } interface DashNavButtonModel { @@ -199,7 +198,7 @@ export const DashNav = React.memo((props) => { const { canStar, canShare, isStarred } = dashboard.meta; const buttons: ReactNode[] = []; - if (kioskMode || isPlaylistRunning() || props.isPublic) { + if (kioskMode || isPlaylistRunning()) { return []; } @@ -322,10 +321,6 @@ export const DashNav = React.memo((props) => { return [renderPlaylistControls(), renderTimeControls()]; } - if (props.isPublic && !!props.dashboard.meta.publicDashboardTimeSelectionEnabled) { - return [renderTimeControls()]; - } - if (kioskMode === KioskMode.TV) { return [renderTimeControls(), tvButton]; } @@ -423,8 +418,8 @@ export const DashNav = React.memo((props) => { return ( - + {}} /> - - - - ({ @@ -162,7 +160,6 @@ describe('SharePublic', () => { expect(screen.getByTestId(selectors.LimitedDSCheckbox)).toBeDisabled(); expect(screen.getByTestId(selectors.CostIncreaseCheckbox)).toBeDisabled(); expect(screen.getByTestId(selectors.EnableSwitch)).toBeDisabled(); - expect(screen.getByTestId(selectors.EnableTimeRangeSwitch)).toBeDisabled(); expect(screen.getByTestId(selectors.SaveConfigButton)).toBeDisabled(); expect(screen.queryByTestId(selectors.DeleteButton)).not.toBeInTheDocument(); }); @@ -181,7 +178,6 @@ describe('SharePublic', () => { expect(screen.getByTestId(selectors.LimitedDSCheckbox)).toBeDisabled(); expect(screen.getByTestId(selectors.CostIncreaseCheckbox)).toBeDisabled(); expect(screen.getByTestId(selectors.EnableSwitch)).toBeDisabled(); - expect(screen.getByTestId(selectors.EnableTimeRangeSwitch)).toBeDisabled(); expect(screen.getByTestId(selectors.EnableAnnotationsSwitch)).toBeDisabled(); expect(screen.getByText('Save public dashboard')).toBeInTheDocument(); expect(screen.getByTestId(selectors.SaveConfigButton)).toBeDisabled(); @@ -224,7 +220,6 @@ describe('SharePublic - New config setup', () => { expect(screen.getByTestId(selectors.CostIncreaseCheckbox)).toBeEnabled(); expect(screen.getByTestId(selectors.EnableSwitch)).toBeEnabled(); expect(screen.getByTestId(selectors.EnableAnnotationsSwitch)).toBeEnabled(); - expect(screen.getByTestId(selectors.EnableTimeRangeSwitch)).toBeEnabled(); expect(screen.queryByTestId(selectors.DeleteButton)).not.toBeInTheDocument(); expect(screen.getByText('Create public dashboard')).toBeInTheDocument(); @@ -259,15 +254,6 @@ describe('SharePublic - New config setup', () => { }); describe('SharePublic - Already persisted', () => { - const pubdashResponse: PublicDashboard = { - isEnabled: true, - annotationsEnabled: true, - timeSelectionEnabled: true, - uid: 'a-uid', - dashboardUid: '', - accessToken: 'an-access-token', - }; - beforeEach(() => { mockDashboard.meta.hasPublicDashboard = true; server.use( @@ -275,8 +261,11 @@ describe('SharePublic - Already persisted', () => { return res( ctx.status(200), ctx.json({ - ...pubdashResponse, + isEnabled: true, + annotationsEnabled: true, + uid: 'a-uid', dashboardUid: req.params.dashboardUid, + accessToken: 'an-access-token', }) ); }) @@ -305,33 +294,6 @@ describe('SharePublic - Already persisted', () => { expect(screen.getByTestId(selectors.EnableAnnotationsSwitch)).toBeEnabled(); expect(screen.getByTestId(selectors.EnableAnnotationsSwitch)).toBeChecked(); }); - it('when modal is opened, then time range switch is enabled and checked when its checked in the db', async () => { - await renderSharePublicDashboard({ panel: mockPanel, dashboard: mockDashboard, onDismiss: () => {} }); - await waitForElementToBeRemoved(screen.getAllByTestId('Spinner')); - - expect(screen.getByTestId(selectors.EnableTimeRangeSwitch)).toBeEnabled(); - expect(screen.getByTestId(selectors.EnableTimeRangeSwitch)).toBeChecked(); - }); - - it('when modal is opened, then time range switch is enabled and not checked when its not checked in the db', async () => { - server.use( - rest.get('/api/dashboards/uid/:dashboardUid/public-dashboards', (req, res, ctx) => { - return res( - ctx.status(200), - ctx.json({ - ...pubdashResponse, - timeSelectionEnabled: false, - }) - ); - }) - ); - - await renderSharePublicDashboard({ panel: mockPanel, dashboard: mockDashboard, onDismiss: () => {} }); - await waitForElementToBeRemoved(screen.getAllByTestId('Spinner')); - - expect(screen.getByTestId(selectors.EnableTimeRangeSwitch)).toBeEnabled(); - expect(screen.getByTestId(selectors.EnableTimeRangeSwitch)).not.toBeChecked(); - }); it('when fetch is done, then loader spinner is gone, inputs are disabled and save button is enabled', async () => { await renderSharePublicDashboard({ panel: mockPanel, dashboard: mockDashboard, onDismiss: () => {} }); await waitForElementToBeRemoved(screen.getAllByTestId('Spinner')); @@ -341,7 +303,6 @@ describe('SharePublic - Already persisted', () => { expect(screen.getByTestId(selectors.CostIncreaseCheckbox)).toBeDisabled(); expect(screen.getByTestId(selectors.EnableSwitch)).toBeEnabled(); - expect(screen.getByTestId(selectors.EnableTimeRangeSwitch)).toBeEnabled(); expect(screen.getByText('Save public dashboard')).toBeInTheDocument(); expect(screen.getByTestId(selectors.SaveConfigButton)).toBeEnabled(); expect(screen.getByTestId(selectors.DeleteButton)).toBeEnabled(); diff --git a/public/app/features/dashboard/components/ShareModal/SharePublicDashboard/SharePublicDashboard.tsx b/public/app/features/dashboard/components/ShareModal/SharePublicDashboard/SharePublicDashboard.tsx index 3b0da3e927d..b1bdff1ab72 100644 --- a/public/app/features/dashboard/components/ShareModal/SharePublicDashboard/SharePublicDashboard.tsx +++ b/public/app/features/dashboard/components/ShareModal/SharePublicDashboard/SharePublicDashboard.tsx @@ -53,7 +53,6 @@ type SharePublicDashboardAcknowledgmentInputs = { export type SharePublicDashboardInputs = { isAnnotationsEnabled: boolean; - isTimeRangeEnabled: boolean; enabledSwitch: boolean; } & SharePublicDashboardAcknowledgmentInputs; @@ -89,7 +88,6 @@ export const SharePublicDashboard = (props: Props) => { dataSourcesAcknowledgment: false, usageAcknowledgment: false, isAnnotationsEnabled: false, - isTimeRangeEnabled: false, enabledSwitch: false, }, }); @@ -112,7 +110,6 @@ export const SharePublicDashboard = (props: Props) => { dataSourcesAcknowledgment: isPublicDashboardPersisted, usageAcknowledgment: isPublicDashboardPersisted, isAnnotationsEnabled: publicDashboard?.annotationsEnabled, - isTimeRangeEnabled: publicDashboard?.timeSelectionEnabled, enabledSwitch: publicDashboard?.isEnabled, }); }, [publicDashboard, reset]); @@ -154,7 +151,6 @@ export const SharePublicDashboard = (props: Props) => { ...publicDashboard!, isEnabled: values.enabledSwitch, annotationsEnabled: values.isAnnotationsEnabled, - timeSelectionEnabled: values.isTimeRangeEnabled, }, }; diff --git a/public/app/features/dashboard/components/ShareModal/SharePublicDashboard/SharePublicDashboardUtils.ts b/public/app/features/dashboard/components/ShareModal/SharePublicDashboard/SharePublicDashboardUtils.ts index 17ef31f3ee1..41a059b1a72 100644 --- a/public/app/features/dashboard/components/ShareModal/SharePublicDashboard/SharePublicDashboardUtils.ts +++ b/public/app/features/dashboard/components/ShareModal/SharePublicDashboard/SharePublicDashboardUtils.ts @@ -13,7 +13,6 @@ export interface PublicDashboard { uid: string; dashboardUid: string; timeSettings?: object; - timeSelectionEnabled: boolean; } export interface DashboardResponse { diff --git a/public/app/features/dashboard/containers/DashboardPage.test.tsx b/public/app/features/dashboard/containers/DashboardPage.test.tsx index 0c6d64eacd7..5dd77df63b7 100644 --- a/public/app/features/dashboard/containers/DashboardPage.test.tsx +++ b/public/app/features/dashboard/containers/DashboardPage.test.tsx @@ -336,19 +336,4 @@ describe('DashboardPage', () => { expect(screen.queryAllByLabelText(selectors.pages.Dashboard.SubMenu.submenu)).toHaveLength(0); }); }); - dashboardPageScenario('When dashboard is public and timeSelection is enabled', (ctx) => { - ctx.setup(() => { - locationService.partial({ kiosk: false }); - ctx.mount({ - queryParams: {}, - dashboard: getTestDashboard(null, { publicDashboardTimeSelectionEnabled: true }), - }); - ctx.rerender({ dashboard: ctx.dashboard, isPublic: true }); - }); - - it('should render page toolbar because timeSelection is enabled, but not submenu', () => { - expect(screen.queryAllByTestId(selectors.pages.Dashboard.DashNav.navV2)).toHaveLength(1); - expect(screen.queryAllByLabelText(selectors.pages.Dashboard.SubMenu.submenu)).toHaveLength(0); - }); - }); }); diff --git a/public/app/features/dashboard/containers/DashboardPage.tsx b/public/app/features/dashboard/containers/DashboardPage.tsx index dd30bc1fe16..717f79579de 100644 --- a/public/app/features/dashboard/containers/DashboardPage.tsx +++ b/public/app/features/dashboard/containers/DashboardPage.tsx @@ -352,8 +352,7 @@ export class UnthemedDashboardPage extends PureComponent { const inspectPanel = this.getInspectPanel(); const showSubMenu = !editPanel && !kioskMode && !this.props.queryParams.editview; - const toolbar = ((kioskMode !== KioskMode.Full && !queryParams.editview) || - (isPublic && !!this.props.dashboard?.meta.publicDashboardTimeSelectionEnabled)) && ( + const toolbar = kioskMode !== KioskMode.Full && !queryParams.editview && (
{ kioskMode={kioskMode} hideTimePicker={dashboard.timepicker.hidden} shareModalActiveTab={this.props.queryParams.shareView} - isPublic={!!isPublic} />
); diff --git a/public/app/features/dashboard/services/PublicDashboardDataSource.test.ts b/public/app/features/dashboard/services/PublicDashboardDataSource.test.ts index 15fc9b3312d..8b274aaae03 100644 --- a/public/app/features/dashboard/services/PublicDashboardDataSource.test.ts +++ b/public/app/features/dashboard/services/PublicDashboardDataSource.test.ts @@ -1,6 +1,6 @@ import { of } from 'rxjs'; -import { DataQueryRequest, DataSourceInstanceSettings, DataSourceRef, dateTime, TimeRange } from '@grafana/data'; +import { DataQueryRequest, DataSourceInstanceSettings, DataSourceRef, TimeRange } from '@grafana/data'; import { BackendSrvRequest, BackendSrv, DataSourceWithBackend } from '@grafana/runtime'; import { GrafanaQueryType } from 'app/plugins/datasource/grafana/types'; import { MIXED_DATASOURCE_NAME } from 'app/plugins/datasource/mixed/MixedDataSource'; @@ -115,14 +115,6 @@ describe('PublicDashboardDatasource', () => { intervalMs: 5000, targets: [{ refId: 'A' }, { refId: 'B', datasource: { type: 'sample' } }], panelId, - range: { - from: dateTime('2022-01-01T15:55:00Z'), - to: dateTime('2022-07-12T15:55:00Z'), - raw: { - from: 'now-15m', - to: 'now', - }, - }, publicDashboardAccessToken, } as DataQueryRequest); diff --git a/public/app/features/dashboard/services/PublicDashboardDataSource.ts b/public/app/features/dashboard/services/PublicDashboardDataSource.ts index a49a696c1b4..9f1696de4b3 100644 --- a/public/app/features/dashboard/services/PublicDashboardDataSource.ts +++ b/public/app/features/dashboard/services/PublicDashboardDataSource.ts @@ -80,14 +80,7 @@ export class PublicDashboardDataSource extends DataSourceApi): Observable { - const { - intervalMs, - maxDataPoints, - requestId, - publicDashboardAccessToken, - panelId, - range: { from: fromRange, to: toRange }, - } = request; + const { intervalMs, maxDataPoints, requestId, publicDashboardAccessToken, panelId } = request; let queries: DataQuery[]; // Return early if no queries exist @@ -107,11 +100,7 @@ export class PublicDashboardDataSource extends DataSourceApi({ diff --git a/public/app/features/dashboard/services/TimeSrv.ts b/public/app/features/dashboard/services/TimeSrv.ts index f3ef1b23b56..ff3f1b6c2b3 100644 --- a/public/app/features/dashboard/services/TimeSrv.ts +++ b/public/app/features/dashboard/services/TimeSrv.ts @@ -280,6 +280,11 @@ export class TimeSrv { } setTime(time: RawTimeRange, updateUrl = true) { + // If we are in a public dashboard ignore time range changes + if (config.isPublicDashboardView) { + return; + } + extend(this.time, time); // disable refresh if zoom in or zoom out diff --git a/public/app/types/dashboard.ts b/public/app/types/dashboard.ts index 26c5cc08dde..cd5bf15fb71 100644 --- a/public/app/types/dashboard.ts +++ b/public/app/types/dashboard.ts @@ -44,7 +44,6 @@ export interface DashboardMeta { publicDashboardAccessToken?: string; publicDashboardUid?: string; publicDashboardEnabled?: boolean; - publicDashboardTimeSelectionEnabled?: boolean; hasPublicDashboard?: boolean; dashboardNotFound?: boolean; }