| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384 |
- import _ from "lodash";
- import { Variable, assignModelProperties, variableTypes } from "./variable";
- export class AdhocVariable implements Variable {
- filters: any[];
- defaults = {
- type: "adhoc",
- name: "",
- label: "",
- hide: 0,
- datasource: null,
- filters: []
- };
- /** @ngInject **/
- constructor(private model) {
- assignModelProperties(this, model, this.defaults);
- }
- setValue(option) {
- return Promise.resolve();
- }
- getSaveModel() {
- assignModelProperties(this.model, this, this.defaults);
- return this.model;
- }
- updateOptions() {
- return Promise.resolve();
- }
- dependsOn(variable) {
- return false;
- }
- setValueFromUrl(urlValue) {
- if (!_.isArray(urlValue)) {
- urlValue = [urlValue];
- }
- this.filters = urlValue.map(item => {
- var values = item.split("|").map(value => {
- return this.unescapeDelimiter(value);
- });
- return {
- key: values[0],
- operator: values[1],
- value: values[2]
- };
- });
- return Promise.resolve();
- }
- getValueForUrl() {
- return this.filters.map(filter => {
- return [filter.key, filter.operator, filter.value]
- .map(value => {
- return this.escapeDelimiter(value);
- })
- .join("|");
- });
- }
- escapeDelimiter(value) {
- return value.replace(/\|/g, "__gfp__");
- }
- unescapeDelimiter(value) {
- return value.replace(/__gfp__/g, "|");
- }
- setFilters(filters: any[]) {
- this.filters = filters;
- }
- }
- variableTypes["adhoc"] = {
- name: "Ad hoc filters",
- ctor: AdhocVariable,
- description: "Add key/value filters on the fly"
- };
|