adhoc_variable.ts 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  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].map(value => {
  49. return this.escapeDelimiter(value);
  50. }).join('|');
  51. });
  52. }
  53. escapeDelimiter(value) {
  54. return value.replace(/\|/g, '__gfp__');
  55. }
  56. unescapeDelimiter(value) {
  57. return value.replace(/__gfp__/g, '|');
  58. }
  59. setFilters(filters: any[]) {
  60. this.filters = filters;
  61. }
  62. }
  63. variableTypes['adhoc'] = {
  64. name: 'Ad hoc filters',
  65. ctor: AdhocVariable,
  66. description: 'Add key/value filters on the fly',
  67. };