UNPKG

periscope-ui

Version:

Perscope default set of widget/dashboard implementations

110 lines (93 loc) 2.87 kB
import {computedFrom} from 'aurelia-framework'; import {ValidationEngine, Validator} from 'aurelia-validatejs'; import {DrillDownBehaviorConfiguration} from 'periscope-framework'; import $ from 'jquery'; import * as _ from 'lodash'; export class GridMenu { constructor(widget){ this.widget = widget; this.drillDownModel = new DrillDownModel(); this.drillDownBehavior = this.getDrillDownBehavior(); this.availableParams = []; if (this.drillDownBehavior){ this.drillDownModel.query = this.drillDownBehavior.queryPattern; this.drillDownModel.url = this.drillDownBehavior.dataServiceUrl; this.drillDownModel.username = this.drillDownBehavior.username; this.drillDownModel.password = this.drillDownBehavior.password; } this.widget.dataSource.transport.readService.getSchema().then(schema=> { this.availableParams = _.map(schema.fields, f=> { return "@" + f.field; }); }); this.validator = new Validator(this.drillDownModel) .ensure('url') .url() .required() .ensure('query') .required(); this.reporter = ValidationEngine.getValidationReporter(this.drillDownModel); this.subscriber = this.reporter.subscribe(result => { this.renderErrors(result); }); } errors = []; drillDownModel; drillDownBehavior; widget; validator; get showDrillDownButton(){ let result = false; if (!this.drillDownBehavior) return result; _.forEach(this.widget.dashboard.behaviors,behavior=>{ if ((behavior)&&(behavior.constructor)&&(behavior.constructor.name === "DrillDownHandleBehavior")){ result = true; } }) return result; } hasErrors() { return !!this.errors.length; } renderErrors(result) { this.errors.splice(0, this.errors.length); result.forEach(error => { this.errors.push(error) }); } closePopup(){ $(this.popupDrilldown).modal('hide'); } openPopup(){ $("body").append($(this.popupDrilldown)); $(this.popupDrilldown).modal('show'); } save(){ this.validator.validate(); if (!this.hasErrors()) { let configuration = new DrillDownBehaviorConfiguration() configuration.queryPattern = this.drillDownModel.query; configuration.dataServiceUrl = this.drillDownModel.url; configuration.password = this.drillDownModel.password; configuration.username = this.drillDownModel.username; this.drillDownBehavior.configure(configuration); this.closePopup(); } } getDrillDownBehavior(){ let result; _.forEach(this.widget.behaviors, behavior=>{ if ((behavior)&&(behavior.constructor)&&(behavior.constructor.name === "DrillDownBehavior")){ result = behavior; } }); return result; } } export class DrillDownModel { url; username; password; query; }