diff --git a/package.json b/package.json index bf7bb807a8b..3fe794c119a 100644 --- a/package.json +++ b/package.json @@ -179,6 +179,7 @@ "@types/d3-scale-chromatic": "1.3.1", "@types/enzyme-adapter-react-16": "1.0.5", "@types/marked": "0.6.5", + "@types/prismjs": "1.16.0", "@types/react-redux": "^7.0.8", "@types/react-test-renderer": "16.8.2", "@types/redux-logger": "3.0.7", diff --git a/packages/grafana-ui/src/types/panel.ts b/packages/grafana-ui/src/types/panel.ts index bb7e03c572d..e50bfd77e76 100644 --- a/packages/grafana-ui/src/types/panel.ts +++ b/packages/grafana-ui/src/types/panel.ts @@ -123,6 +123,16 @@ export interface PanelMenuItem { subMenu?: PanelMenuItem[]; } +export interface AngularPanelMenuItem { + click: Function; + icon: string; + href: string; + divider: boolean; + text: string; + shortcut: string; + submenu: any[]; +} + export enum VizOrientation { Auto = 'auto', Vertical = 'vertical', diff --git a/public/app/features/explore/state/reducers.ts b/public/app/features/explore/state/reducers.ts index ad294669989..4c1c5070e8f 100644 --- a/public/app/features/explore/state/reducers.ts +++ b/public/app/features/explore/state/reducers.ts @@ -667,6 +667,7 @@ export const exploreReducer = (state = initialExploreState, action: HigherOrderA if (action.payload) { const { exploreId } = action.payload as any; if (exploreId !== undefined) { + // @ts-ignore const exploreItemState = state[exploreId]; return { ...state, [exploreId]: itemReducer(exploreItemState, action) }; } diff --git a/public/app/features/explore/state/selectors.test.ts b/public/app/features/explore/state/selectors.test.ts index 10ce6135221..45c81436885 100644 --- a/public/app/features/explore/state/selectors.test.ts +++ b/public/app/features/explore/state/selectors.test.ts @@ -2,7 +2,7 @@ import { deduplicatedLogsSelector } from './selectors'; import { LogsDedupStrategy } from '@grafana/data'; import { ExploreItemState } from 'app/types'; -const state = { +const state: any = { logsResult: { rows: [ { diff --git a/public/app/features/folders/CreateFolderCtrl.ts b/public/app/features/folders/CreateFolderCtrl.ts index 9152dbca66e..5b3872c2532 100644 --- a/public/app/features/folders/CreateFolderCtrl.ts +++ b/public/app/features/folders/CreateFolderCtrl.ts @@ -1,5 +1,9 @@ import appEvents from 'app/core/app_events'; import locationUtil from 'app/core/utils/location_util'; +import { BackendSrv } from 'app/core/services/backend_srv'; +import { ILocationService } from 'angular'; +import { ValidationSrv } from 'app/features/manage-dashboards'; +import { NavModelSrv } from 'app/core/nav_model_srv'; export default class CreateFolderCtrl { title = ''; @@ -9,7 +13,12 @@ export default class CreateFolderCtrl { validationError: any; /** @ngInject */ - constructor(private backendSrv, private $location, private validationSrv, navModelSrv) { + constructor( + private backendSrv: BackendSrv, + private $location: ILocationService, + private validationSrv: ValidationSrv, + navModelSrv: NavModelSrv + ) { this.navModel = navModelSrv.getNav('dashboards', 'manage-dashboards', 0); } @@ -18,7 +27,7 @@ export default class CreateFolderCtrl { return; } - return this.backendSrv.createFolder({ title: this.title }).then(result => { + return this.backendSrv.createFolder({ title: this.title }).then((result: any) => { appEvents.emit('alert-success', ['Folder Created', 'OK']); this.$location.url(locationUtil.stripBaseFromUrl(result.url)); }); diff --git a/public/app/features/folders/FolderDashboardsCtrl.ts b/public/app/features/folders/FolderDashboardsCtrl.ts index 94370900893..619dced9fa1 100644 --- a/public/app/features/folders/FolderDashboardsCtrl.ts +++ b/public/app/features/folders/FolderDashboardsCtrl.ts @@ -1,5 +1,7 @@ import { FolderPageLoader } from './services/FolderPageLoader'; import locationUtil from 'app/core/utils/location_util'; +import { NavModelSrv } from 'app/core/core'; +import { ILocationService } from 'angular'; export default class FolderDashboardsCtrl { navModel: any; @@ -7,13 +9,18 @@ export default class FolderDashboardsCtrl { uid: string; /** @ngInject */ - constructor(private backendSrv, navModelSrv, private $routeParams, $location) { + constructor( + private backendSrv: any, + navModelSrv: NavModelSrv, + private $routeParams: any, + $location: ILocationService + ) { if (this.$routeParams.uid) { this.uid = $routeParams.uid; const loader = new FolderPageLoader(this.backendSrv); - loader.load(this, this.uid, 'manage-folder-dashboards').then(folder => { + loader.load(this, this.uid, 'manage-folder-dashboards').then((folder: any) => { const url = locationUtil.stripBaseFromUrl(folder.url); if (url !== $location.path()) { diff --git a/public/app/features/folders/services/FolderPageLoader.ts b/public/app/features/folders/services/FolderPageLoader.ts index f0b6a61c4fc..3f353d0f63c 100644 --- a/public/app/features/folders/services/FolderPageLoader.ts +++ b/public/app/features/folders/services/FolderPageLoader.ts @@ -1,7 +1,9 @@ -export class FolderPageLoader { - constructor(private backendSrv) {} +import { BackendSrv } from 'app/core/services/backend_srv'; - load(ctrl, uid, activeChildId) { +export class FolderPageLoader { + constructor(private backendSrv: BackendSrv) {} + + load(ctrl: any, uid: any, activeChildId: any) { ctrl.navModel = { main: { icon: 'fa fa-folder-open', @@ -36,20 +38,20 @@ export class FolderPageLoader { }, }; - return this.backendSrv.getFolderByUid(uid).then(folder => { + return this.backendSrv.getFolderByUid(uid).then((folder: any) => { ctrl.folderId = folder.id; const folderTitle = folder.title; const folderUrl = folder.url; ctrl.navModel.main.text = folderTitle; - const dashTab = ctrl.navModel.main.children.find(child => child.id === 'manage-folder-dashboards'); + const dashTab = ctrl.navModel.main.children.find((child: any) => child.id === 'manage-folder-dashboards'); dashTab.url = folderUrl; if (folder.canAdmin) { - const permTab = ctrl.navModel.main.children.find(child => child.id === 'manage-folder-permissions'); + const permTab = ctrl.navModel.main.children.find((child: any) => child.id === 'manage-folder-permissions'); permTab.url = folderUrl + '/permissions'; - const settingsTab = ctrl.navModel.main.children.find(child => child.id === 'manage-folder-settings'); + const settingsTab = ctrl.navModel.main.children.find((child: any) => child.id === 'manage-folder-settings'); settingsTab.url = folderUrl + '/settings'; } else { ctrl.navModel.main.children = [dashTab]; diff --git a/public/app/features/manage-dashboards/DashboardImportCtrl.test.ts b/public/app/features/manage-dashboards/DashboardImportCtrl.test.ts index 5a47972e316..1664afa1fe1 100644 --- a/public/app/features/manage-dashboards/DashboardImportCtrl.test.ts +++ b/public/app/features/manage-dashboards/DashboardImportCtrl.test.ts @@ -4,9 +4,9 @@ import config from 'app/core/config'; describe('DashboardImportCtrl', () => { const ctx: any = {}; - let navModelSrv; - let backendSrv; - let validationSrv; + let navModelSrv: any; + let backendSrv: any; + let validationSrv: any; beforeEach(() => { navModelSrv = { @@ -23,7 +23,7 @@ describe('DashboardImportCtrl', () => { validateNewDashboardName: jest.fn().mockReturnValue(Promise.resolve()), }; - ctx.ctrl = new DashboardImportCtrl(backendSrv, validationSrv, navModelSrv, {}, {}); + ctx.ctrl = new DashboardImportCtrl(backendSrv, validationSrv, navModelSrv, {} as any, {} as any); }); describe('when uploading json', () => { diff --git a/public/app/features/manage-dashboards/DashboardImportCtrl.ts b/public/app/features/manage-dashboards/DashboardImportCtrl.ts index d2c6584d13d..48bfda7de11 100644 --- a/public/app/features/manage-dashboards/DashboardImportCtrl.ts +++ b/public/app/features/manage-dashboards/DashboardImportCtrl.ts @@ -1,6 +1,10 @@ import _ from 'lodash'; import config from 'app/core/config'; import locationUtil from 'app/core/utils/location_util'; +import { BackendSrv } from '@grafana/runtime'; +import { ValidationSrv } from './services/ValidationSrv'; +import { NavModelSrv } from 'app/core/core'; +import { ILocationService } from 'angular'; export class DashboardImportCtrl { navModel: any; @@ -27,7 +31,13 @@ export class DashboardImportCtrl { isValidFolderSelection: boolean; /** @ngInject */ - constructor(private backendSrv, private validationSrv, navModelSrv, private $location, $routeParams) { + constructor( + private backendSrv: BackendSrv, + private validationSrv: ValidationSrv, + navModelSrv: NavModelSrv, + private $location: ILocationService, + $routeParams: any + ) { this.navModel = navModelSrv.getNav('create', 'import'); this.step = 1; @@ -45,7 +55,7 @@ export class DashboardImportCtrl { } } - onUpload(dash) { + onUpload(dash: any) { this.dash = dash; this.dash.id = null; this.step = 2; @@ -53,7 +63,7 @@ export class DashboardImportCtrl { if (this.dash.__inputs) { for (const input of this.dash.__inputs) { - const inputModel = { + const inputModel: any = { name: input.name, label: input.label, info: input.description, @@ -78,7 +88,7 @@ export class DashboardImportCtrl { this.uidChanged(true); } - setDatasourceOptions(input, inputModel) { + setDatasourceOptions(input: { pluginId: string; pluginName: string }, inputModel: any) { const sources = _.filter(config.datasources, val => { return val.type === input.pluginId; }); @@ -123,7 +133,7 @@ export class DashboardImportCtrl { }); } - uidChanged(initial) { + uidChanged(initial: boolean) { this.uidExists = false; this.hasUidValidationError = false; @@ -132,20 +142,21 @@ export class DashboardImportCtrl { } this.backendSrv + // @ts-ignore .getDashboardByUid(this.dash.uid) - .then(res => { + .then((res: any) => { this.uidExists = true; this.hasUidValidationError = true; this.uidValidationError = `Dashboard named '${res.dashboard.title}' in folder '${ res.meta.folderTitle }' has the same uid`; }) - .catch(err => { + .catch((err: any) => { err.isHandled = true; }); } - onFolderChange(folder) { + onFolderChange(folder: any) { this.folderId = folder.id; this.titleChanged(); } diff --git a/public/app/features/manage-dashboards/DashboardListCtrl.ts b/public/app/features/manage-dashboards/DashboardListCtrl.ts index b5f5cb8e0dc..7e8142c8390 100644 --- a/public/app/features/manage-dashboards/DashboardListCtrl.ts +++ b/public/app/features/manage-dashboards/DashboardListCtrl.ts @@ -1,8 +1,10 @@ +import { NavModelSrv } from 'app/core/core'; + export class DashboardListCtrl { navModel: any; /** @ngInject */ - constructor(navModelSrv) { + constructor(navModelSrv: NavModelSrv) { this.navModel = navModelSrv.getNav('dashboards', 'manage-dashboards', 0); } } diff --git a/public/app/features/manage-dashboards/SnapshotListCtrl.ts b/public/app/features/manage-dashboards/SnapshotListCtrl.ts index 4d6dc006d47..4ccb629412c 100644 --- a/public/app/features/manage-dashboards/SnapshotListCtrl.ts +++ b/public/app/features/manage-dashboards/SnapshotListCtrl.ts @@ -1,22 +1,30 @@ import _ from 'lodash'; +import { NavModelSrv } from 'app/core/core'; +import { ILocationService } from 'angular'; +import { BackendSrv } from '@grafana/runtime'; export class SnapshotListCtrl { navModel: any; snapshots: any; /** @ngInject */ - constructor(private $rootScope, private backendSrv, navModelSrv, private $location) { + constructor( + private $rootScope: any, + private backendSrv: BackendSrv, + navModelSrv: NavModelSrv, + private $location: ILocationService + ) { this.navModel = navModelSrv.getNav('dashboards', 'snapshots', 0); - this.backendSrv.get('/api/dashboard/snapshots').then(result => { + this.backendSrv.get('/api/dashboard/snapshots').then((result: any) => { const baseUrl = this.$location.absUrl().replace($location.url(), ''); - this.snapshots = result.map(snapshot => ({ + this.snapshots = result.map((snapshot: any) => ({ ...snapshot, url: snapshot.externalUrl || `${baseUrl}/dashboard/snapshot/${snapshot.key}`, })); }); } - removeSnapshotConfirmed(snapshot) { + removeSnapshotConfirmed(snapshot: any) { _.remove(this.snapshots, { key: snapshot.key }); this.backendSrv.delete('/api/snapshots/' + snapshot.key).then( () => {}, @@ -26,7 +34,7 @@ export class SnapshotListCtrl { ); } - removeSnapshot(snapshot) { + removeSnapshot(snapshot: any) { this.$rootScope.appEvent('confirm-modal', { title: 'Delete', text: 'Are you sure you want to delete snapshot ' + snapshot.name + '?', diff --git a/public/app/features/manage-dashboards/components/MoveToFolderModal/MoveToFolderCtrl.ts b/public/app/features/manage-dashboards/components/MoveToFolderModal/MoveToFolderCtrl.ts index c183f38d92a..543a58b848d 100644 --- a/public/app/features/manage-dashboards/components/MoveToFolderModal/MoveToFolderCtrl.ts +++ b/public/app/features/manage-dashboards/components/MoveToFolderModal/MoveToFolderCtrl.ts @@ -1,5 +1,6 @@ import coreModule from 'app/core/core_module'; import appEvents from 'app/core/app_events'; +import { BackendSrv } from 'app/core/services/backend_srv'; export class MoveToFolderCtrl { dashboards: any; @@ -9,14 +10,14 @@ export class MoveToFolderCtrl { isValidFolderSelection = true; /** @ngInject */ - constructor(private backendSrv) {} + constructor(private backendSrv: BackendSrv) {} - onFolderChange(folder) { + onFolderChange(folder: any) { this.folder = folder; } save() { - return this.backendSrv.moveDashboards(this.dashboards, this.folder).then(result => { + return this.backendSrv.moveDashboards(this.dashboards, this.folder).then((result: any) => { if (result.successCount > 0) { const header = `Dashboard${result.successCount === 1 ? '' : 's'} Moved`; const msg = `${result.successCount} dashboard${result.successCount === 1 ? '' : 's'} moved to ${ diff --git a/public/app/features/manage-dashboards/components/UploadDashboard/uploadDashboardDirective.ts b/public/app/features/manage-dashboards/components/UploadDashboard/uploadDashboardDirective.ts index 58ad4d8aac9..6dae44598a2 100644 --- a/public/app/features/manage-dashboards/components/UploadDashboard/uploadDashboardDirective.ts +++ b/public/app/features/manage-dashboards/components/UploadDashboard/uploadDashboardDirective.ts @@ -1,6 +1,6 @@ import coreModule from 'app/core/core_module'; import appEvents from 'app/core/app_events'; -import angular from 'angular'; +import angular, { ILocationService } from 'angular'; const template = ` @@ -10,7 +10,7 @@ const template = ` `; /** @ngInject */ -export function uploadDashboardDirective(timer, $location) { +export function uploadDashboardDirective(timer: any, $location: ILocationService) { return { restrict: 'E', template: template, @@ -18,14 +18,14 @@ export function uploadDashboardDirective(timer, $location) { onUpload: '&', btnText: '@?', }, - link: (scope, elem) => { + link: (scope: any, elem: JQuery) => { scope.btnText = angular.isDefined(scope.btnText) ? scope.btnText : 'Upload .json file'; - function file_selected(evt) { + function file_selected(evt: any) { const files = evt.target.files; // FileList object const readerOnload = () => { - return e => { - let dash; + return (e: any) => { + let dash: any; try { dash = JSON.parse(e.target.result); } catch (err) { @@ -35,7 +35,7 @@ export function uploadDashboardDirective(timer, $location) { } scope.$apply(() => { - scope.onUpload({ dash: dash }); + scope.onUpload({ dash }); }); }; }; diff --git a/public/app/features/manage-dashboards/services/ValidationSrv.ts b/public/app/features/manage-dashboards/services/ValidationSrv.ts index 3e8306039d7..506dc893941 100644 --- a/public/app/features/manage-dashboards/services/ValidationSrv.ts +++ b/public/app/features/manage-dashboards/services/ValidationSrv.ts @@ -1,4 +1,6 @@ import coreModule from 'app/core/core_module'; +import { IQService } from 'angular'; +import { BackendSrv } from 'app/core/services/backend_srv'; const hitTypes = { FOLDER: 'dash-folder', @@ -9,17 +11,17 @@ export class ValidationSrv { rootName = 'general'; /** @ngInject */ - constructor(private $q, private backendSrv) {} + constructor(private $q: IQService, private backendSrv: BackendSrv) {} - validateNewDashboardName(folderId, name) { + validateNewDashboardName(folderId: any, name: string) { return this.validate(folderId, name, 'A dashboard in this folder with the same name already exists'); } - validateNewFolderName(name) { + validateNewFolderName(name: string) { return this.validate(0, name, 'A folder or dashboard in the general folder with the same name already exists'); } - private validate(folderId, name, existingErrorMessage) { + private validate(folderId: any, name: string, existingErrorMessage: string) { name = (name || '').trim(); const nameLowerCased = name.toLowerCase(); @@ -44,7 +46,7 @@ export class ValidationSrv { promises.push(this.backendSrv.search({ type: hitTypes.DASHBOARD, folderIds: [folderId], query: name })); this.$q.all(promises).then(res => { - let hits = []; + let hits: any[] = []; if (res.length > 0 && res[0].length > 0) { hits = res[0]; diff --git a/public/app/features/org/NewOrgCtrl.ts b/public/app/features/org/NewOrgCtrl.ts index 46c12b1d5d5..5d1a42c455e 100644 --- a/public/app/features/org/NewOrgCtrl.ts +++ b/public/app/features/org/NewOrgCtrl.ts @@ -1,14 +1,16 @@ import angular from 'angular'; import config from 'app/core/config'; +import { BackendSrv } from 'app/core/services/backend_srv'; +import { NavModelSrv } from 'app/core/core'; export class NewOrgCtrl { /** @ngInject */ - constructor($scope, $http, backendSrv, navModelSrv) { + constructor($scope: any, $http: any, backendSrv: BackendSrv, navModelSrv: NavModelSrv) { $scope.navModel = navModelSrv.getNav('admin', 'global-orgs', 0); $scope.newOrg = { name: '' }; $scope.createOrg = () => { - backendSrv.post('/api/orgs/', $scope.newOrg).then(result => { + backendSrv.post('/api/orgs/', $scope.newOrg).then((result: any) => { backendSrv.post('/api/user/using/' + result.orgId).then(() => { window.location.href = config.appSubUrl + '/org'; }); diff --git a/public/app/features/org/OrgDetailsPage.tsx b/public/app/features/org/OrgDetailsPage.tsx index cc995501f98..ae51e683719 100644 --- a/public/app/features/org/OrgDetailsPage.tsx +++ b/public/app/features/org/OrgDetailsPage.tsx @@ -22,7 +22,7 @@ export class OrgDetailsPage extends PureComponent { await this.props.loadOrganization(); } - onOrgNameChange = name => { + onOrgNameChange = (name: string) => { this.props.setOrganizationName(name); }; diff --git a/public/app/features/org/SelectOrgCtrl.ts b/public/app/features/org/SelectOrgCtrl.ts index cd5166771ac..5d56baf3152 100644 --- a/public/app/features/org/SelectOrgCtrl.ts +++ b/public/app/features/org/SelectOrgCtrl.ts @@ -1,9 +1,10 @@ import angular from 'angular'; import config from 'app/core/config'; +import { BackendSrv } from 'app/core/services/backend_srv'; export class SelectOrgCtrl { /** @ngInject */ - constructor($scope, backendSrv, contextSrv) { + constructor($scope: any, backendSrv: BackendSrv, contextSrv: any) { contextSrv.sidemenu = false; $scope.navModel = { @@ -19,12 +20,12 @@ export class SelectOrgCtrl { }; $scope.getUserOrgs = () => { - backendSrv.get('/api/user/orgs').then(orgs => { + backendSrv.get('/api/user/orgs').then((orgs: any) => { $scope.orgs = orgs; }); }; - $scope.setUsingOrg = org => { + $scope.setUsingOrg = (org: any) => { backendSrv.post('/api/user/using/' + org.orgId).then(() => { window.location.href = config.appSubUrl + '/'; }); diff --git a/public/app/features/org/UserInviteCtrl.ts b/public/app/features/org/UserInviteCtrl.ts index 9f3b641035a..d86a8716a3d 100644 --- a/public/app/features/org/UserInviteCtrl.ts +++ b/public/app/features/org/UserInviteCtrl.ts @@ -1,4 +1,7 @@ import coreModule from 'app/core/core_module'; +import { BackendSrv } from 'app/core/services/backend_srv'; +import { NavModelSrv } from 'app/core/core'; +import { ILocationService } from 'angular'; export class UserInviteCtrl { navModel: any; @@ -6,7 +9,7 @@ export class UserInviteCtrl { inviteForm: any; /** @ngInject */ - constructor(private backendSrv, navModelSrv, private $location) { + constructor(private backendSrv: BackendSrv, navModelSrv: NavModelSrv, private $location: ILocationService) { this.navModel = navModelSrv.getNav('cfg', 'users', 0); this.invite = { diff --git a/public/app/features/panel/GeneralTabCtrl.ts b/public/app/features/panel/GeneralTabCtrl.ts index 9db13713ce1..a97e2536b3a 100644 --- a/public/app/features/panel/GeneralTabCtrl.ts +++ b/public/app/features/panel/GeneralTabCtrl.ts @@ -1,6 +1,6 @@ import coreModule from 'app/core/core_module'; -const obj2string = obj => { +const obj2string = (obj: any) => { return Object.keys(obj) .reduce((acc, curr) => acc.concat(curr + '=' + obj[curr]), []) .join(); @@ -10,7 +10,7 @@ export class GeneralTabCtrl { panelCtrl: any; /** @ngInject */ - constructor($scope) { + constructor($scope: any) { this.panelCtrl = $scope.ctrl; const updatePanel = () => { @@ -18,7 +18,7 @@ export class GeneralTabCtrl { this.panelCtrl.panel.render(); }; - const generateValueFromPanel = scope => { + const generateValueFromPanel = (scope: any) => { const { panel } = scope.ctrl; const panelPropsToTrack = ['title', 'description', 'transparent', 'repeat', 'repeatDirection', 'minSpan']; const panelPropsString = panelPropsToTrack diff --git a/public/app/features/panel/panel_directive.ts b/public/app/features/panel/panel_directive.ts index 8cfc627b424..16126bb809f 100644 --- a/public/app/features/panel/panel_directive.ts +++ b/public/app/features/panel/panel_directive.ts @@ -1,6 +1,8 @@ import angular from 'angular'; import $ from 'jquery'; +// @ts-ignore import Drop from 'tether-drop'; +// @ts-ignore import baron from 'baron'; const module = angular.module('grafana.directives'); @@ -38,14 +40,14 @@ module.directive('grafanaPanel', ($rootScope, $document, $timeout) => { const panelContent = elem.find('.panel-content'); const cornerInfoElem = elem.find('.panel-info-corner'); const ctrl = scope.ctrl; - let infoDrop; - let panelScrollbar; + let infoDrop: any; + let panelScrollbar: any; // the reason for handling these classes this way is for performance // limit the watchers on panels etc let transparentLastState = false; let lastHasAlertRule = false; - let lastAlertState; + let lastAlertState: boolean; let hasAlertRule; function mouseEnter() { diff --git a/public/app/features/panel/panel_editor_tab.ts b/public/app/features/panel/panel_editor_tab.ts index 52d427c54bf..3a66d8d9f74 100644 --- a/public/app/features/panel/panel_editor_tab.ts +++ b/public/app/features/panel/panel_editor_tab.ts @@ -1,16 +1,16 @@ import angular from 'angular'; const directiveModule = angular.module('grafana.directives'); -const directiveCache = {}; +const directiveCache: any = {}; /** @ngInject */ -function panelEditorTab(dynamicDirectiveSrv) { +function panelEditorTab(dynamicDirectiveSrv: any) { return dynamicDirectiveSrv.create({ scope: { ctrl: '=', editorTab: '=', }, - directive: scope => { + directive: (scope: any) => { const pluginId = scope.ctrl.pluginId; const tabName = scope.editorTab.title .toLowerCase() diff --git a/public/app/features/panel/panel_header.ts b/public/app/features/panel/panel_header.ts index 26139e23ac8..c24154c11b6 100644 --- a/public/app/features/panel/panel_header.ts +++ b/public/app/features/panel/panel_header.ts @@ -1,4 +1,5 @@ import { coreModule } from 'app/core/core'; +import { AngularPanelMenuItem } from '@grafana/ui'; const template = ` @@ -12,7 +13,7 @@ const template = ` {{ctrl.timeInfo}} `; -function renderMenuItem(item, ctrl) { +function renderMenuItem(item: AngularPanelMenuItem, ctrl: any) { let html = ''; let listItemClass = ''; @@ -54,7 +55,7 @@ function renderMenuItem(item, ctrl) { return html; } -function createMenuTemplate(ctrl) { +function createMenuTemplate(ctrl: any) { let html = ''; for (const item of ctrl.getMenu()) { @@ -65,16 +66,16 @@ function createMenuTemplate(ctrl) { } /** @ngInject */ -function panelHeader($compile) { +function panelHeader($compile: any) { return { restrict: 'E', template: template, - link: (scope, elem, attrs) => { + link: (scope: any, elem: any, attrs: any) => { const menuElem = elem.find('.panel-menu'); - let menuScope; - let isDragged; + let menuScope: any; + let isDragged: boolean; - elem.click(evt => { + elem.click((evt: any) => { const targetClass = evt.target.className; // remove existing scope @@ -92,20 +93,20 @@ function panelHeader($compile) { } }); - function togglePanelMenu(e) { + function togglePanelMenu(e: any) { if (!isDragged) { e.stopPropagation(); elem.find('[data-toggle=dropdown]').dropdown('toggle'); } } - let mouseX, mouseY; - elem.mousedown(e => { + let mouseX: number, mouseY: number; + elem.mousedown((e: any) => { mouseX = e.pageX; mouseY = e.pageY; }); - elem.mouseup(e => { + elem.mouseup((e: any) => { if (mouseX === e.pageX && mouseY === e.pageY) { isDragged = false; } else { diff --git a/public/app/features/panel/panellinks/link_srv.ts b/public/app/features/panel/panellinks/link_srv.ts index dc85e13d7fe..a9d8c399fe0 100644 --- a/public/app/features/panel/panellinks/link_srv.ts +++ b/public/app/features/panel/panellinks/link_srv.ts @@ -55,6 +55,7 @@ interface LinkModel { interface LinkDataPoint { datapoint: TimeSeriesValue[]; seriesName: string; + [key: number]: any; } export interface LinkService { getDataLinkUIModel: (link: DataLink, scopedVars: ScopedVars, dataPoint?: LinkDataPoint) => LinkModel; diff --git a/public/app/features/panel/panellinks/module.ts b/public/app/features/panel/panellinks/module.ts index 5fdb30748e5..06ced91eb1d 100644 --- a/public/app/features/panel/panellinks/module.ts +++ b/public/app/features/panel/panellinks/module.ts @@ -1,6 +1,7 @@ import angular from 'angular'; import _ from 'lodash'; import './link_srv'; +import { BackendSrv } from 'app/core/services/backend_srv'; function panelLinksEditor() { return { @@ -16,7 +17,7 @@ function panelLinksEditor() { export class PanelLinksEditorCtrl { /** @ngInject */ - constructor($scope, backendSrv) { + constructor($scope: any, backendSrv: BackendSrv) { $scope.panel.links = $scope.panel.links || []; $scope.addLink = () => { @@ -25,7 +26,7 @@ export class PanelLinksEditorCtrl { }); }; - $scope.searchDashboards = (queryStr, callback) => { + $scope.searchDashboards = (queryStr: string, callback: Function) => { backendSrv.search({ query: queryStr }).then(hits => { const dashboards = _.map(hits, dash => { return dash.title; @@ -35,7 +36,7 @@ export class PanelLinksEditorCtrl { }); }; - $scope.dashboardChanged = link => { + $scope.dashboardChanged = (link: any) => { backendSrv.search({ query: link.dashboard }).then(hits => { const dashboard: any = _.find(hits, { title: link.dashboard }); if (dashboard) { @@ -50,7 +51,7 @@ export class PanelLinksEditorCtrl { }); }; - $scope.deleteLink = link => { + $scope.deleteLink = (link: any) => { $scope.panel.links = _.without($scope.panel.links, link); }; } diff --git a/public/app/features/panel/query_ctrl.ts b/public/app/features/panel/query_ctrl.ts index 371d2852659..86dac19d9d2 100644 --- a/public/app/features/panel/query_ctrl.ts +++ b/public/app/features/panel/query_ctrl.ts @@ -1,4 +1,5 @@ import _ from 'lodash'; +import { auto } from 'angular'; export class QueryCtrl { target: any; @@ -9,7 +10,7 @@ export class QueryCtrl { error: string; isLastQuery: boolean; - constructor(public $scope, public $injector) { + constructor(public $scope: any, public $injector: auto.IInjectorService) { this.panel = this.panelCtrl.panel; this.isLastQuery = _.indexOf(this.panel.targets, this.target) === this.panel.targets.length - 1; } diff --git a/public/app/features/panel/repeat_option.ts b/public/app/features/panel/repeat_option.ts index 4e04a7b3ecc..addb241bcd5 100644 --- a/public/app/features/panel/repeat_option.ts +++ b/public/app/features/panel/repeat_option.ts @@ -1,5 +1,5 @@ import { coreModule } from 'app/core/core'; - +import { VariableSrv } from 'app/features/templating/variable_srv'; const template = `