adhoc_variable.ts 1.6 KB

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