/// import angular from 'angular'; import _ from 'lodash'; var module = angular.module('grafana.directives'); var template = `
`; export class MetricsDsSelectorCtrl { dsSegment: any; dsName: string; panelCtrl: any; datasources: any[]; current: any; /** @ngInject */ constructor(private uiSegmentSrv, datasourceSrv) { this.datasources = datasourceSrv.getMetricSources(); var dsValue = this.panelCtrl.panel.datasource || null; for (let ds of this.datasources) { if (ds.value === dsValue) { this.current = ds; } } if (!this.current) { this.current = {name: dsValue + ' not found', value: null}; } this.dsSegment = uiSegmentSrv.newSegment(this.current.name); } getOptions() { return Promise.resolve(this.datasources.map(value => { return this.uiSegmentSrv.newSegment(value.name); })); } datasourceChanged() { var ds = _.find(this.datasources, {name: this.dsSegment.value}); if (ds) { this.current = ds; this.panelCtrl.setDatasource(ds); } } addDataQuery(datasource) { var target: any = {isNew: true}; if (datasource) { target.datasource = datasource.name; } this.panelCtrl.panel.targets.push(target); } } module.directive('metricsDsSelector', function() { return { restrict: 'E', template: template, controller: MetricsDsSelectorCtrl, bindToController: true, controllerAs: 'ctrl', transclude: true, scope: { panelCtrl: "=" } }; });