adhoc_variable.ts 1.7 KB

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