mirror of
https://github.com/grafana/grafana.git
synced 2025-02-25 18:55:37 -06:00
Improved user experience
This commit is contained in:
parent
4fa4c27537
commit
b71e7f33c3
@ -1,4 +1,5 @@
|
|||||||
import coreModule from 'app/core/core_module';
|
import coreModule from 'app/core/core_module';
|
||||||
|
import appEvents from 'app/core/app_events';
|
||||||
|
|
||||||
const template = `
|
const template = `
|
||||||
<input type="file" id="dashupload" name="dashupload" class="hide" onchange="angular.element(this).scope().file_selected"/>
|
<input type="file" id="dashupload" name="dashupload" class="hide" onchange="angular.element(this).scope().file_selected"/>
|
||||||
@ -26,7 +27,7 @@ function uploadDashboardDirective(timer, alertSrv, $location) {
|
|||||||
dash = JSON.parse(e.target.result);
|
dash = JSON.parse(e.target.result);
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
console.log(err);
|
console.log(err);
|
||||||
scope.appEvent('alert-error', ['Import failed', 'JSON -> JS Serialization failed: ' + err.message]);
|
appEvents.emit('alert-error', ['Import failed', 'JSON -> JS Serialization failed: ' + err.message]);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2,10 +2,67 @@ export class StackdriverConfigCtrl {
|
|||||||
static templateUrl = 'public/app/plugins/datasource/stackdriver/partials/config.html';
|
static templateUrl = 'public/app/plugins/datasource/stackdriver/partials/config.html';
|
||||||
datasourceSrv: any;
|
datasourceSrv: any;
|
||||||
current: any;
|
current: any;
|
||||||
|
jsonText: string;
|
||||||
|
validationErrors: string[] = [];
|
||||||
|
inputDataValid: boolean;
|
||||||
|
|
||||||
/** @ngInject */
|
/** @ngInject */
|
||||||
constructor($scope, datasourceSrv) {
|
constructor($scope, datasourceSrv) {
|
||||||
this.datasourceSrv = datasourceSrv;
|
this.datasourceSrv = datasourceSrv;
|
||||||
this.current.jsonData = this.current.jsonData || {};
|
this.current.jsonData = this.current.jsonData || {};
|
||||||
|
this.current.secureJsonData = this.current.secureJsonData || {};
|
||||||
|
}
|
||||||
|
|
||||||
|
save(jwt) {
|
||||||
|
this.current.secureJsonData.privateKey = jwt.private_key;
|
||||||
|
this.current.jsonData.tokenUri = jwt.token_uri;
|
||||||
|
this.current.jsonData.clientEmail = jwt.client_email;
|
||||||
|
}
|
||||||
|
|
||||||
|
validateJwt(jwt) {
|
||||||
|
this.resetValidationMessages();
|
||||||
|
if (!jwt.private_key || jwt.private_key.length === 0) {
|
||||||
|
this.validationErrors.push('Private key field missing in JWT file.');
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!jwt.token_uri || jwt.token_uri.length === 0) {
|
||||||
|
this.validationErrors.push('Token URI field missing in JWT file.');
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!jwt.client_email || jwt.client_email.length === 0) {
|
||||||
|
this.validationErrors.push('Client Email field missing in JWT file.');
|
||||||
|
}
|
||||||
|
|
||||||
|
if (this.validationErrors.length === 0) {
|
||||||
|
this.inputDataValid = true;
|
||||||
|
return true;
|
||||||
|
} else {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
onUpload(json) {
|
||||||
|
this.jsonText = '';
|
||||||
|
if (this.validateJwt(json)) {
|
||||||
|
this.save(json);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
onPasteJwt(e) {
|
||||||
|
try {
|
||||||
|
const json = JSON.parse(e.originalEvent.clipboardData.getData('text/plain') || this.jsonText);
|
||||||
|
if (this.validateJwt(json)) {
|
||||||
|
this.save(json);
|
||||||
|
}
|
||||||
|
} catch (error) {
|
||||||
|
this.resetValidationMessages();
|
||||||
|
this.validationErrors.push(`Invalid json: ${error.message}`);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
resetValidationMessages() {
|
||||||
|
this.validationErrors = [];
|
||||||
|
this.inputDataValid = false;
|
||||||
|
this.jsonText = '';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,26 @@
|
|||||||
<datasource-http-settings
|
<h3>Stackdriver Authentication</h3>
|
||||||
current="ctrl.current"
|
<div class="gf-form-group" ng-if="!ctrl.inputDataValid">
|
||||||
suggest-url="http://localhost:8080">
|
<div class="gf-form">
|
||||||
</datasource-http-settings>
|
<form>
|
||||||
|
<dash-upload on-upload="ctrl.onUpload(dash)"></dash-upload>
|
||||||
<h3 class="page-heading">Hello Stackdriver</h3>
|
</form>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="gf-form-group">
|
||||||
|
<h5 class="section-heading" ng-if="!ctrl.inputDataValid">Or paste JSON</h5>
|
||||||
|
<div class="gf-form" ng-if="!ctrl.inputDataValid">
|
||||||
|
<textarea rows="10" data-share-panel-url="" class="gf-form-input" ng-model="ctrl.jsonText" ng-paste="ctrl.onPasteJwt($event)"></textarea>
|
||||||
|
</div>
|
||||||
|
<div ng-repeat="valError in ctrl.validationErrors" class="text-error p-l-1">
|
||||||
|
<i class="fa fa-warning"></i>
|
||||||
|
{{valError}}
|
||||||
|
</div>
|
||||||
|
<div ng-if="ctrl.inputDataValid">
|
||||||
|
<div class="text-success p-l-1">
|
||||||
|
<i class="fa fa-info"></i>
|
||||||
|
Successfully validated input format
|
||||||
|
</div>
|
||||||
|
<br />
|
||||||
|
<a class="btn btn-secondary gf-form-btn" href="#" ng-click="ctrl.resetValidationMessages()">Reset form</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
Loading…
Reference in New Issue
Block a user