mirror of
https://github.com/grafana/grafana.git
synced 2025-02-25 18:55:37 -06:00
Snapshots: Hide the share button (#77763)
This commit is contained in:
@@ -8,6 +8,7 @@ import { Button, ClipboardButton, Field, Input, Modal, RadioButtonGroup } from '
|
||||
import { t, Trans } from 'app/core/internationalization';
|
||||
import { trackDashboardSharingActionPerType } from 'app/features/dashboard/components/ShareModal/analytics';
|
||||
import { shareDashboardType } from 'app/features/dashboard/components/ShareModal/utils';
|
||||
import { getDashboardSnapshotSrv, SnapshotSharingOptions } from 'app/features/dashboard/services/SnapshotSrv';
|
||||
|
||||
import { DashboardScene } from '../scene/DashboardScene';
|
||||
import { transformSceneToSaveModel, trimDashboardForSnapshot } from '../serialization/transformSceneToSaveModel';
|
||||
@@ -39,12 +40,6 @@ const getExpireOptions = () => {
|
||||
];
|
||||
};
|
||||
|
||||
type SnapshotSharingOptions = {
|
||||
externalEnabled: boolean;
|
||||
externalSnapshotName: string;
|
||||
externalSnapshotURL: string;
|
||||
snapshotEnabled: boolean;
|
||||
};
|
||||
export interface ShareSnapshotTabState extends SceneShareTabState {
|
||||
panelRef?: SceneObjectRef<VizPanel>;
|
||||
dashboardRef: SceneObjectRef<DashboardScene>;
|
||||
@@ -70,9 +65,9 @@ export class ShareSnapshotTab extends SceneObjectBase<ShareSnapshotTabState> {
|
||||
}
|
||||
|
||||
private _onActivate() {
|
||||
getBackendSrv()
|
||||
.get('/api/snapshot/shared-options')
|
||||
.then((shareOptions: SnapshotSharingOptions) => {
|
||||
getDashboardSnapshotSrv()
|
||||
.getSharingOptions()
|
||||
.then((shareOptions) => {
|
||||
if (this.isActive) {
|
||||
this.setState({
|
||||
snapshotSharingOptions: shareOptions,
|
||||
|
||||
@@ -8,6 +8,7 @@ import { getTimeSrv } from 'app/features/dashboard/services/TimeSrv';
|
||||
import { DashboardModel, PanelModel } from 'app/features/dashboard/state';
|
||||
|
||||
import { VariableRefresh } from '../../../variables/types';
|
||||
import { getDashboardSnapshotSrv } from '../../services/SnapshotSrv';
|
||||
|
||||
import { trackDashboardSharingActionPerType } from './analytics';
|
||||
import { ShareModalTabProps } from './types';
|
||||
@@ -74,10 +75,10 @@ export class ShareSnapshot extends PureComponent<Props, State> {
|
||||
}
|
||||
|
||||
async getSnaphotShareOptions() {
|
||||
const shareOptions = await getBackendSrv().get('/api/snapshot/shared-options');
|
||||
const shareOptions = await getDashboardSnapshotSrv().getSharingOptions();
|
||||
this.setState({
|
||||
sharingButtonText: shareOptions['externalSnapshotName'],
|
||||
externalEnabled: shareOptions['externalEnabled'],
|
||||
sharingButtonText: shareOptions.externalSnapshotName,
|
||||
externalEnabled: shareOptions.externalEnabled,
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
@@ -9,18 +9,16 @@ import impressionSrv from 'app/core/services/impression_srv';
|
||||
import kbn from 'app/core/utils/kbn';
|
||||
import { getDashboardScenePageStateManager } from 'app/features/dashboard-scene/pages/DashboardScenePageStateManager';
|
||||
import { getDatasourceSrv } from 'app/features/plugins/datasource_srv';
|
||||
import { DashboardDataDTO, DashboardDTO, DashboardMeta } from 'app/types';
|
||||
import { DashboardDTO } from 'app/types';
|
||||
|
||||
import { appEvents } from '../../../core/core';
|
||||
|
||||
import { getDashboardSrv } from './DashboardSrv';
|
||||
import { getDashboardSnapshotSrv } from './SnapshotSrv';
|
||||
|
||||
export class DashboardLoaderSrv {
|
||||
constructor() {}
|
||||
_dashboardLoadFailed(
|
||||
title: string,
|
||||
snapshot?: boolean
|
||||
): { meta: DashboardMeta; dashboard: Partial<DashboardDataDTO> } {
|
||||
_dashboardLoadFailed(title: string, snapshot?: boolean): DashboardDTO {
|
||||
snapshot = snapshot || false;
|
||||
return {
|
||||
meta: {
|
||||
@@ -29,9 +27,10 @@ export class DashboardLoaderSrv {
|
||||
canDelete: false,
|
||||
canSave: false,
|
||||
canEdit: false,
|
||||
canShare: false,
|
||||
dashboardNotFound: true,
|
||||
},
|
||||
dashboard: { title },
|
||||
dashboard: { title, uid: title, schemaVersion: 0 },
|
||||
};
|
||||
}
|
||||
|
||||
@@ -42,9 +41,11 @@ export class DashboardLoaderSrv {
|
||||
if (type === 'script' && slug) {
|
||||
promise = this._loadScriptedDashboard(slug);
|
||||
} else if (type === 'snapshot' && slug) {
|
||||
promise = backendSrv.get('/api/snapshots/' + slug).catch(() => {
|
||||
return this._dashboardLoadFailed('Snapshot not found', true);
|
||||
});
|
||||
promise = getDashboardSnapshotSrv()
|
||||
.getSnapshot(slug)
|
||||
.catch(() => {
|
||||
return this._dashboardLoadFailed('Snapshot not found', true);
|
||||
});
|
||||
} else if (type === 'ds' && slug) {
|
||||
promise = this._loadFromDatasource(slug); // explore dashboards as code
|
||||
} else if (type === 'public' && uid) {
|
||||
|
||||
40
public/app/features/dashboard/services/SnapshotSrv.ts
Normal file
40
public/app/features/dashboard/services/SnapshotSrv.ts
Normal file
@@ -0,0 +1,40 @@
|
||||
import { getBackendSrv } from '@grafana/runtime';
|
||||
import { DashboardDTO } from 'app/types';
|
||||
|
||||
// Used in the snapshot list
|
||||
export interface Snapshot {
|
||||
key: string;
|
||||
name: string;
|
||||
external: boolean;
|
||||
externalUrl?: string;
|
||||
url?: string;
|
||||
}
|
||||
|
||||
export interface SnapshotSharingOptions {
|
||||
externalEnabled: boolean;
|
||||
externalSnapshotName: string;
|
||||
externalSnapshotURL: string;
|
||||
snapshotEnabled: boolean;
|
||||
}
|
||||
|
||||
export interface DashboardSnapshotSrv {
|
||||
getSnapshots: () => Promise<Snapshot[]>;
|
||||
getSharingOptions: () => Promise<SnapshotSharingOptions>;
|
||||
deleteSnapshot: (key: string) => Promise<void>;
|
||||
getSnapshot: (key: string) => Promise<DashboardDTO>;
|
||||
}
|
||||
|
||||
const legacyDashboardSnapshotSrv: DashboardSnapshotSrv = {
|
||||
getSnapshots: () => getBackendSrv().get<Snapshot[]>('/api/dashboard/snapshots'),
|
||||
getSharingOptions: () => getBackendSrv().get<SnapshotSharingOptions>('/api/snapshot/shared-options'),
|
||||
deleteSnapshot: (key: string) => getBackendSrv().delete('/api/snapshots/' + key),
|
||||
getSnapshot: async (key: string) => {
|
||||
const dto = await getBackendSrv().get<DashboardDTO>('/api/snapshots/' + key);
|
||||
dto.meta.canShare = false;
|
||||
return dto;
|
||||
},
|
||||
};
|
||||
|
||||
export function getDashboardSnapshotSrv(): DashboardSnapshotSrv {
|
||||
return legacyDashboardSnapshotSrv;
|
||||
}
|
||||
@@ -1,15 +1,14 @@
|
||||
import React, { useState, useCallback } from 'react';
|
||||
import useAsync from 'react-use/lib/useAsync';
|
||||
|
||||
import { getBackendSrv, config } from '@grafana/runtime';
|
||||
import { config } from '@grafana/runtime';
|
||||
import { ConfirmModal, Button, LinkButton } from '@grafana/ui';
|
||||
import { Trans } from 'app/core/internationalization';
|
||||
|
||||
import { Snapshot } from '../types';
|
||||
import { getDashboardSnapshotSrv, Snapshot } from 'app/features/dashboard/services/SnapshotSrv';
|
||||
|
||||
export function getSnapshots() {
|
||||
return getBackendSrv()
|
||||
.get('/api/dashboard/snapshots')
|
||||
return getDashboardSnapshotSrv()
|
||||
.getSnapshots()
|
||||
.then((result: Snapshot[]) => {
|
||||
return result.map((snapshot) => ({
|
||||
...snapshot,
|
||||
@@ -29,8 +28,8 @@ export const SnapshotListTable = () => {
|
||||
async (snapshot: Snapshot) => {
|
||||
const filteredSnapshots = snapshots.filter((ss) => ss.key !== snapshot.key);
|
||||
setSnapshots(filteredSnapshots);
|
||||
await getBackendSrv()
|
||||
.delete(`/api/snapshots/${snapshot.key}`)
|
||||
await getDashboardSnapshotSrv()
|
||||
.deleteSnapshot(snapshot.key)
|
||||
.catch(() => {
|
||||
setSnapshots(snapshots);
|
||||
});
|
||||
|
||||
@@ -2,17 +2,6 @@ import { Dashboard } from '@grafana/schema/src/veneer/dashboard.types';
|
||||
|
||||
import { ExternalDashboard } from '../dashboard/components/DashExportModal/DashboardExporter';
|
||||
|
||||
export interface Snapshot {
|
||||
created: string;
|
||||
expires: string;
|
||||
external: boolean;
|
||||
externalUrl: string;
|
||||
key: string;
|
||||
name: string;
|
||||
updated: string;
|
||||
url?: string;
|
||||
}
|
||||
|
||||
export type DeleteDashboardResponse = {
|
||||
id: number;
|
||||
message: string;
|
||||
|
||||
Reference in New Issue
Block a user