|
|
@@ -7,10 +7,11 @@ import {contextSrv} from 'app/core/core';
|
|
|
class GettingStartedPanelCtrl extends PanelCtrl {
|
|
|
static templateUrl = 'public/app/plugins/panel/gettingstarted/module.html';
|
|
|
checksDone: boolean;
|
|
|
- step: number;
|
|
|
+ stepIndex: number;
|
|
|
+ steps: any;
|
|
|
|
|
|
/** @ngInject **/
|
|
|
- constructor($scope, $injector, private backendSrv, private datasourceSrv) {
|
|
|
+ constructor($scope, $injector, private backendSrv, private datasourceSrv, private $q) {
|
|
|
super($scope, $injector);
|
|
|
|
|
|
/* tslint:disable */
|
|
|
@@ -20,32 +21,91 @@ class GettingStartedPanelCtrl extends PanelCtrl {
|
|
|
}
|
|
|
/* tslint:enable */
|
|
|
|
|
|
- var datasources = datasourceSrv.getMetricSources().filter(item => {
|
|
|
- return item.meta.builtIn === false;
|
|
|
+ this.stepIndex = 0;
|
|
|
+ this.steps = [];
|
|
|
+
|
|
|
+ this.steps.push({
|
|
|
+ title: 'Install Grafana',
|
|
|
+ icon: 'icon-gf icon-gf-check',
|
|
|
+ check: () => $q.when(true),
|
|
|
+ });
|
|
|
+
|
|
|
+ this.steps.push({
|
|
|
+ title: 'Create your first data source',
|
|
|
+ cta: 'Add data source',
|
|
|
+ icon: 'icon-gf icon-gf-datasources',
|
|
|
+ href: 'datasources/new?gettingstarted',
|
|
|
+ check: () => {
|
|
|
+ return $q.when(
|
|
|
+ datasourceSrv.getMetricSources().filter(item => {
|
|
|
+ return item.meta.builtIn === false;
|
|
|
+ }).length > 0
|
|
|
+ );
|
|
|
+ }
|
|
|
+ });
|
|
|
+
|
|
|
+ this.steps.push({
|
|
|
+ title: 'Create your first dashboard',
|
|
|
+ cta: 'New dashboard',
|
|
|
+ icon: 'icon-gf icon-gf-dashboard',
|
|
|
+ href: 'dashboard/new?gettingstarted',
|
|
|
+ check: () => {
|
|
|
+ return this.backendSrv.search({limit: 1}).then(result => {
|
|
|
+ return result.length > 0;
|
|
|
+ });
|
|
|
+ }
|
|
|
+ });
|
|
|
+
|
|
|
+ this.steps.push({
|
|
|
+ title: 'Invite your team',
|
|
|
+ cta: 'Add Users',
|
|
|
+ icon: 'icon-gf icon-gf-users',
|
|
|
+ href: 'org/users?gettingstarted',
|
|
|
+ check: () => {
|
|
|
+ return this.backendSrv.get('api/org/users').then(res => {
|
|
|
+ return res.length > 1;
|
|
|
+ });
|
|
|
+ }
|
|
|
});
|
|
|
|
|
|
- this.step = 2;
|
|
|
- if (datasources.length === 0) {
|
|
|
- this.checksDone = true;
|
|
|
- return;
|
|
|
- }
|
|
|
|
|
|
- this.step = 3;
|
|
|
- this.backendSrv.search({limit: 1}).then(result => {
|
|
|
- if (result.length === 0) {
|
|
|
- this.checksDone = true;
|
|
|
- return;
|
|
|
+ this.steps.push({
|
|
|
+ title: 'Install apps & plugins',
|
|
|
+ cta: 'Explore plugin repository',
|
|
|
+ icon: 'icon-gf icon-gf-apps',
|
|
|
+ href: 'https://grafana.net/plugins?utm_source=grafana_getting_started',
|
|
|
+ check: () => {
|
|
|
+ return this.backendSrv.get('api/plugins', {embedded: 0, core: 0}).then(plugins => {
|
|
|
+ return plugins.length > 0;
|
|
|
+ });
|
|
|
}
|
|
|
+ });
|
|
|
+ }
|
|
|
|
|
|
- this.step = 4;
|
|
|
+ $onInit() {
|
|
|
+ this.stepIndex = -1;
|
|
|
+ return this.nextStep().then(res => {
|
|
|
this.checksDone = true;
|
|
|
+ console.log(this.steps);
|
|
|
});
|
|
|
}
|
|
|
|
|
|
- getStateClass(step) {
|
|
|
- if (step === this.step) { return 'active'; }
|
|
|
- if (step < this.step) { return 'completed'; }
|
|
|
- return '';
|
|
|
+ nextStep() {
|
|
|
+ if (this.stepIndex === this.steps.length - 1) {
|
|
|
+ return this.$q.when();
|
|
|
+ }
|
|
|
+
|
|
|
+ this.stepIndex += 1;
|
|
|
+ var currentStep = this.steps[this.stepIndex];
|
|
|
+ return currentStep.check().then(passed => {
|
|
|
+ if (passed) {
|
|
|
+ currentStep.cssClass = 'completed';
|
|
|
+ return this.nextStep();
|
|
|
+ }
|
|
|
+
|
|
|
+ currentStep.cssClass = 'active';
|
|
|
+ return this.$q.when();
|
|
|
+ });
|
|
|
}
|
|
|
|
|
|
dismiss() {
|