series_overrides_ctrl.ts 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161
  1. import _ from 'lodash';
  2. import coreModule from 'app/core/core_module';
  3. /** @ngInject */
  4. export function SeriesOverridesCtrl($scope: any, $element: JQuery, popoverSrv: any) {
  5. $scope.overrideMenu = [];
  6. $scope.currentOverrides = [];
  7. $scope.override = $scope.override || {};
  8. $scope.addOverrideOption = (name: string, propertyName: string, values: any) => {
  9. const option = {
  10. text: name,
  11. propertyName: propertyName,
  12. index: $scope.overrideMenu.length,
  13. values,
  14. submenu: _.map(values, value => {
  15. return { text: String(value), value: value };
  16. }),
  17. };
  18. $scope.overrideMenu.push(option);
  19. };
  20. $scope.setOverride = (item: { propertyName: string }, subItem: { value: any }) => {
  21. // handle color overrides
  22. if (item.propertyName === 'color') {
  23. $scope.openColorSelector($scope.override['color']);
  24. return;
  25. }
  26. $scope.override[item.propertyName] = subItem.value;
  27. // automatically disable lines for this series and the fill below to series
  28. // can be removed by the user if they still want lines
  29. if (item.propertyName === 'fillBelowTo') {
  30. $scope.override['lines'] = false;
  31. $scope.ctrl.addSeriesOverride({ alias: subItem.value, lines: false });
  32. }
  33. $scope.updateCurrentOverrides();
  34. $scope.ctrl.render();
  35. };
  36. $scope.colorSelected = (color: any) => {
  37. $scope.override['color'] = color;
  38. $scope.updateCurrentOverrides();
  39. $scope.ctrl.render();
  40. };
  41. $scope.openColorSelector = (color: any) => {
  42. const fakeSeries = { color };
  43. popoverSrv.show({
  44. element: $element.find('.dropdown')[0],
  45. position: 'top center',
  46. openOn: 'click',
  47. template: '<series-color-picker-popover color="color" onColorChange="colorSelected" />',
  48. classNames: 'drop-popover drop-popover--transparent',
  49. model: {
  50. autoClose: true,
  51. colorSelected: $scope.colorSelected,
  52. series: fakeSeries,
  53. color,
  54. },
  55. onClose: () => {
  56. $scope.ctrl.render();
  57. },
  58. });
  59. };
  60. $scope.removeOverride = (option: { propertyName: string | number }) => {
  61. delete $scope.override[option.propertyName];
  62. $scope.updateCurrentOverrides();
  63. $scope.ctrl.refresh();
  64. };
  65. $scope.getSeriesNames = () => {
  66. return _.map($scope.ctrl.seriesList, series => {
  67. return series.alias;
  68. });
  69. };
  70. $scope.updateCurrentOverrides = () => {
  71. $scope.currentOverrides = [];
  72. _.each($scope.overrideMenu, option => {
  73. const value = $scope.override[option.propertyName];
  74. if (_.isUndefined(value)) {
  75. return;
  76. }
  77. $scope.currentOverrides.push({
  78. name: option.text,
  79. propertyName: option.propertyName,
  80. value: String(value),
  81. });
  82. });
  83. };
  84. $scope.addOverrideOption('Bars', 'bars', [true, false]);
  85. $scope.addOverrideOption('Lines', 'lines', [true, false]);
  86. $scope.addOverrideOption('Line fill', 'fill', [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]);
  87. $scope.addOverrideOption('Line width', 'linewidth', [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]);
  88. $scope.addOverrideOption('Null point mode', 'nullPointMode', ['connected', 'null', 'null as zero']);
  89. $scope.addOverrideOption('Fill below to', 'fillBelowTo', $scope.getSeriesNames());
  90. $scope.addOverrideOption('Staircase line', 'steppedLine', [true, false]);
  91. $scope.addOverrideOption('Dashes', 'dashes', [true, false]);
  92. $scope.addOverrideOption('Dash Length', 'dashLength', [
  93. 1,
  94. 2,
  95. 3,
  96. 4,
  97. 5,
  98. 6,
  99. 7,
  100. 8,
  101. 9,
  102. 10,
  103. 11,
  104. 12,
  105. 13,
  106. 14,
  107. 15,
  108. 16,
  109. 17,
  110. 18,
  111. 19,
  112. 20,
  113. ]);
  114. $scope.addOverrideOption('Dash Space', 'spaceLength', [
  115. 1,
  116. 2,
  117. 3,
  118. 4,
  119. 5,
  120. 6,
  121. 7,
  122. 8,
  123. 9,
  124. 10,
  125. 11,
  126. 12,
  127. 13,
  128. 14,
  129. 15,
  130. 16,
  131. 17,
  132. 18,
  133. 19,
  134. 20,
  135. ]);
  136. $scope.addOverrideOption('Points', 'points', [true, false]);
  137. $scope.addOverrideOption('Points Radius', 'pointradius', [1, 2, 3, 4, 5]);
  138. $scope.addOverrideOption('Stack', 'stack', [true, false, 'A', 'B', 'C', 'D']);
  139. $scope.addOverrideOption('Color', 'color', ['change']);
  140. $scope.addOverrideOption('Y-axis', 'yaxis', [1, 2]);
  141. $scope.addOverrideOption('Z-index', 'zindex', [-3, -2, -1, 0, 1, 2, 3]);
  142. $scope.addOverrideOption('Transform', 'transform', ['negative-Y']);
  143. $scope.addOverrideOption('Legend', 'legend', [true, false]);
  144. $scope.addOverrideOption('Hide in tooltip', 'hideTooltip', [true, false]);
  145. $scope.updateCurrentOverrides();
  146. }
  147. coreModule.controller('SeriesOverridesCtrl', SeriesOverridesCtrl);