{ - data: PanelData; + data?: PanelData; pluginId: string; title: string; options?: Partial
;
diff --git a/packages/grafana-runtime/src/utils/PublicDashboardDataSource.test.ts b/packages/grafana-runtime/src/utils/PublicDashboardDataSource.test.ts
index c86ee702e7c..f72460483f8 100644
--- a/packages/grafana-runtime/src/utils/PublicDashboardDataSource.test.ts
+++ b/packages/grafana-runtime/src/utils/PublicDashboardDataSource.test.ts
@@ -1,9 +1,14 @@
import { of } from 'rxjs';
import { BackendSrv, BackendSrvRequest } from 'src/services';
-import { DataQueryRequest, DataSourceRef } from '@grafana/data';
+import { DataQueryRequest, DataSourceInstanceSettings, DataSourceRef } from '@grafana/data';
-import { PublicDashboardDataSource } from '../../../../public/app/features/dashboard/services/PublicDashboardDataSource';
+import {
+ PUBLIC_DATASOURCE,
+ PublicDashboardDataSource,
+} from '../../../../public/app/features/dashboard/services/PublicDashboardDataSource';
+
+import { DataSourceWithBackend } from './DataSourceWithBackend';
const mockDatasourceRequest = jest.fn();
@@ -28,7 +33,7 @@ describe('PublicDashboardDatasource', () => {
mockDatasourceRequest.mockReset();
mockDatasourceRequest.mockReturnValue(Promise.resolve({}));
- const ds = new PublicDashboardDataSource();
+ const ds = new PublicDashboardDataSource('public');
const panelId = 1;
const publicDashboardAccessToken = 'abc123';
@@ -47,4 +52,27 @@ describe('PublicDashboardDatasource', () => {
`/api/public/dashboards/${publicDashboardAccessToken}/panels/${panelId}/query`
);
});
+
+ test('returns public datasource uid when datasource passed in is null', () => {
+ let ds = new PublicDashboardDataSource(null);
+ expect(ds.uid).toBe(PUBLIC_DATASOURCE);
+ });
+
+ test('returns datasource when datasource passed in is a string', () => {
+ let ds = new PublicDashboardDataSource('theDatasourceUid');
+ expect(ds.uid).toBe('theDatasourceUid');
+ });
+
+ test('returns datasource uid when datasource passed in is a DataSourceRef implementation', () => {
+ const datasource = { type: 'datasource', uid: 'abc123' };
+ let ds = new PublicDashboardDataSource(datasource);
+ expect(ds.uid).toBe('abc123');
+ });
+
+ test('returns datasource uid when datasource passed in is a DatasourceApi instance', () => {
+ const settings: DataSourceInstanceSettings = { id: 1, uid: 'abc123' } as DataSourceInstanceSettings;
+ const datasource = new DataSourceWithBackend(settings);
+ let ds = new PublicDashboardDataSource(datasource);
+ expect(ds.uid).toBe('abc123');
+ });
});
diff --git a/packages/grafana-toolkit/docker/grafana-plugin-ci-e2e/scripts/deploy.sh b/packages/grafana-toolkit/docker/grafana-plugin-ci-e2e/scripts/deploy.sh
index e5120dc6eaa..b4aa39c685c 100755
--- a/packages/grafana-toolkit/docker/grafana-plugin-ci-e2e/scripts/deploy.sh
+++ b/packages/grafana-toolkit/docker/grafana-plugin-ci-e2e/scripts/deploy.sh
@@ -41,7 +41,7 @@ chmod 755 /usr/local/bin/golangci-lint
# Install code climate
get_file "https://codeclimate.com/downloads/test-reporter/test-reporter-latest-linux-amd64" \
"/usr/local/bin/cc-test-reporter" \
- "9fbe34cd207924d8f51ac0f3ffa690df4169e055cd7134a2370f6650f5b356e1"
+ "9e6c3e628b1258aefbc6e3550438a691abb0d1924d63c038881031d3d343c7d0"
chmod 755 /usr/local/bin/cc-test-reporter
wget -O /usr/local/bin/grabpl "https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v2.9.27/grabpl"
diff --git a/packages/grafana-ui/src/components/Button/Button.tsx b/packages/grafana-ui/src/components/Button/Button.tsx
index 2479687518a..bce87b5a739 100644
--- a/packages/grafana-ui/src/components/Button/Button.tsx
+++ b/packages/grafana-ui/src/components/Button/Button.tsx
@@ -9,6 +9,7 @@ import { IconName } from '../../types/icon';
import { ComponentSize } from '../../types/size';
import { getPropertiesForButtonSize } from '../Forms/commonStyles';
import { Icon } from '../Icon/Icon';
+import { PopoverContent, Tooltip, TooltipPlacement } from '../Tooltip';
export type ButtonVariant = 'primary' | 'secondary' | 'destructive';
export const allButtonVariants: ButtonVariant[] = ['primary', 'secondary', 'destructive'];
@@ -24,6 +25,10 @@ type CommonProps = {
children?: React.ReactNode;
fullWidth?: boolean;
type?: string;
+ /** Tooltip content to display on hover */
+ tooltip?: PopoverContent;
+ /** Position of the tooltip */
+ tooltipPlacement?: TooltipPlacement;
};
export type ButtonProps = CommonProps & ButtonHTMLAttributesSpan bar label
+
+
+ {navItem.img &&
+ {navItem.subTitle && }
+ {navItem.text}
+
{JSON.stringify(status, null, 2)}
- {Boolean(!status.running) &&
- {!publicDashboardPersisted(publicDashboard) && (
-
-
+
+ {title}
- {!dashboard.meta.publicDashboardAccessToken && (
- {title}
+ {!dashboard.meta.publicDashboardAccessToken && (
+ Scene not found
;
+ }
+
+ return (
+ Create service account