adhoc_variable.ts 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. ///<reference path="../../headers/common.d.ts" />
  2. import _ from 'lodash';
  3. import {Variable, assignModelProperties, variableTypes} from './variable';
  4. export class AdhocVariable implements Variable {
  5. filters: any[];
  6. defaults = {
  7. type: 'adhoc',
  8. name: '',
  9. label: '',
  10. hide: 0,
  11. datasource: null,
  12. filters: [],
  13. };
  14. /** @ngInject **/
  15. constructor(private model) {
  16. assignModelProperties(this, model, this.defaults);
  17. }
  18. setValue(option) {
  19. return Promise.resolve();
  20. }
  21. getSaveModel() {
  22. assignModelProperties(this.model, this, this.defaults);
  23. return this.model;
  24. }
  25. updateOptions() {
  26. return Promise.resolve();
  27. }
  28. dependsOn(variable) {
  29. return false;
  30. }
  31. setValueFromUrl(urlValue) {
  32. if (!_.isArray(urlValue)) {
  33. urlValue = [urlValue];
  34. }
  35. this.filters = urlValue.map(item => {
  36. var values = item.split('|').map(value => {
  37. return this.unescapeDelimiter(value);
  38. });
  39. return {
  40. key: values[0],
  41. operator: values[1],
  42. value: values[2],
  43. };
  44. });
  45. return Promise.resolve();
  46. }
  47. getValueForUrl() {
  48. return this.filters.map(filter => {
  49. return [filter.key, filter.operator, filter.value].map(value => {
  50. return this.escapeDelimiter(value);
  51. }).join('|');
  52. });
  53. }
  54. escapeDelimiter(value) {
  55. return value.replace(/\|/g, '__gfp__');
  56. }
  57. unescapeDelimiter(value) {
  58. return value.replace(/__gfp__/g, '|');
  59. }
  60. setFilters(filters: any[]) {
  61. this.filters = filters;
  62. }
  63. }
  64. variableTypes['adhoc'] = {
  65. name: 'Ad hoc filters',
  66. ctor: AdhocVariable,
  67. description: 'Add key/value filters on the fly',
  68. };