graph.js 9.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223
  1. mgJsComponentHandler.addDefaultComponent('mg-graph', {
  2. template : '#t-mg-graph',
  3. props: [
  4. 'component_id',
  5. 'component_namespace',
  6. 'component_index',
  7. 'settings_key'
  8. ],
  9. data : function () {
  10. return {
  11. loading : false,
  12. chart: null,
  13. type: '',
  14. isRestart : false,
  15. data: {},
  16. parseData: "{}",
  17. options: {},
  18. filter: {},
  19. parseFilter: "{}",
  20. loaded: false
  21. };
  22. },
  23. mounted: function () {
  24. var self = this;
  25. if(this.$el.offsetParent === null) {
  26. setInterval(function(){
  27. if(self.loaded === false && self.$el.offsetParent !== null)
  28. {
  29. self.updateProjects();
  30. self.$parent.$root.$on('reloadMgData', self.updateMgData);
  31. clearInterval(this);
  32. }
  33. }, 500);
  34. }else{
  35. self.updateProjects();
  36. self.$parent.$root.$on('reloadMgData', self.updateMgData);
  37. }
  38. },
  39. methods: {
  40. updateMgData: function(toReloadId){
  41. var self = this;
  42. if (("graph_" + self.component_id) === toReloadId && !self.settings_key) {
  43. self.updateProjects();
  44. self.$nextTick(function() {
  45. self.$emit('restartRefreshingState');
  46. });
  47. }
  48. else if (("graph_rl_" + self.settings_key) === toReloadId && self.settings_key) {
  49. self.updateProjects();
  50. self.$nextTick(function () {
  51. self.$emit('restartRefreshingState');
  52. });
  53. }
  54. else if (("graph_" + self.component_id) === toReloadId && self.settings_key && toReloadId !== "graph_rl_" + self.settings_key) {
  55. mgPageControler.vueLoader.runRefreshActions(["graph_rl_" + self.settings_key]);
  56. }
  57. },
  58. createChart: function () {
  59. var self = this;
  60. if (self.chart == null || self.isRestart === true) {
  61. self.$nextTick(function() {
  62. self.isRestart = false;
  63. var ctx = document.getElementById('canv_' + self.component_id);
  64. self.fixDataStructure();
  65. self.$nextTick(function() {
  66. self.chart = new Chart(ctx, {
  67. type: self.type,
  68. data: {
  69. datasets: self.data.datasets,
  70. },
  71. options: self.options
  72. });
  73. self.reloadChart();
  74. });
  75. });
  76. }
  77. },
  78. updateProjects: function () {
  79. var self = this;
  80. self.loaded = true;
  81. self.loading = true;
  82. var request = this.$parent.$root.$options.methods.vloadData({loadData : self.component_id, namespace : self.component_namespace, index: self.component_index}, true);
  83. request.done(function(data)
  84. {
  85. data = JSON.parse(data);
  86. if (data.data && data.data.rawData) {
  87. data = data.data.rawData;
  88. if (data.type) {
  89. self.type = data.type;
  90. }
  91. if (data.data) {
  92. self.parseData = JSON.stringify(data.dataParse);
  93. self.data = data.data;
  94. }
  95. if (data.options) {
  96. self.options = data.options;
  97. }
  98. if (data.filter) {
  99. self.filter = data.filter;
  100. self.parseFilter = JSON.stringify(data.filter);
  101. }
  102. }
  103. self.$nextTick(function() {
  104. if (!self.chart) {
  105. self.createChart();
  106. } else {
  107. self.reloadChart();
  108. }
  109. self.loading = false;
  110. });
  111. })
  112. .fail(function() {});
  113. },
  114. reloadChart: function () {
  115. var self = this;
  116. if (self.chart)
  117. {
  118. self.fixDataStructure();
  119. self.chart.options = self.options;
  120. self.chart.data.datasets = self.data.datasets;
  121. self.chart.update();
  122. }
  123. },
  124. restartChart: function () {
  125. var self = this;
  126. self.isRestart = true;
  127. self.createChart();
  128. },
  129. loadModal: function(event, targetId, namespace, index, params, addSpinner){
  130. var self = this;
  131. var params = [];
  132. params.push({name: 'customParams', value: self.parseData});
  133. params.push({name: 'defaultFilter', value: self.parseFilter});
  134. mgPageControler.vueLoader.loadModal(event, targetId, typeof namespace !== 'undefined' ? namespace : getItemNamespace(targetId), index, params, addSpinner);
  135. },
  136. onOffSwitch: function(event, targetId){
  137. var switchPostData = $(event.target).is(':checked') ? {'value' : 'on'} : {'value' : 'off'};
  138. mgPageControler.vueLoader.ajaxAction(event, targetId, getItemNamespace(targetId), getItemIndex(targetId), switchPostData);
  139. },
  140. makeCustomAction : function(functionName, params, event, namespace, index) {
  141. mgPageControler.vueLoader.makeCustomAction(functionName, params, event, namespace, index);
  142. },
  143. redirect : function (event, params) {
  144. mgPageControler.vueLoader.redirect(event, params);
  145. },
  146. //TODO: refactor this function to a recuring crowler
  147. fixDataStructure: function () {
  148. var self = this;
  149. var varsToBeConverted = ['backgroundColor', 'borderColor', 'data', 'hoverBackgroundColor',
  150. 'hoverBorderColor', 'pointBackgroundColor', 'pointBorderColor', 'pointHoverBackgroundColor', 'pointHoverBorderColor'];
  151. for (var key in self.data.datasets) {
  152. if (!self.data.datasets.hasOwnProperty(key)) {
  153. continue;
  154. }
  155. var tmpObj = self.data.datasets[key];
  156. for (var convKey in varsToBeConverted)
  157. {
  158. if (typeof tmpObj[varsToBeConverted[convKey]] === 'object')
  159. {
  160. self.data.datasets[key][varsToBeConverted[convKey]] = Object.values(tmpObj[varsToBeConverted[convKey]]);
  161. }
  162. else if(typeof tmpObj[varsToBeConverted[convKey]] !== 'undefined') {
  163. self.data.datasets[key][varsToBeConverted[convKey]] = tmpObj[varsToBeConverted[convKey]];
  164. }
  165. else {
  166. //do nothing
  167. }
  168. }
  169. }
  170. if (typeof self.data.labels !== 'undefined')
  171. {
  172. self.options.labels = Object.values(self.data.labels);
  173. }
  174. if (typeof self.options.scales !== 'undefined' && typeof self.options.scales.xAxes !== 'undefined')
  175. {
  176. self.options.scales.xAxes[0].labels = Object.values(self.data.labels);
  177. }
  178. if (typeof self.options.scales !== 'undefined' && typeof self.options.scales.xAxes !== 'undefined' && typeof self.options.scales.xAxes[0] !== 'undefined'
  179. && typeof self.options.scales.xAxes[0].ticks !== 'undefined' && typeof self.options.scales.xAxes[0].ticks.callback !== 'undefined')
  180. {
  181. if (typeof self.options.scales.xAxes[0].ticks.callbackFN === 'undefined'){
  182. self.options.scales.xAxes[0].ticks.callbackFN = self.options.scales.xAxes[0].ticks.callback;
  183. }
  184. var tmpCallbackName = self.options.scales.xAxes[0].ticks.callbackFN;
  185. var tmpCallbackFunction = window[tmpCallbackName];
  186. self.options.scales.xAxes[0].ticks.callback = tmpCallbackFunction;
  187. }
  188. if (typeof self.options.scales !== 'undefined' && typeof self.options.scales.yAxes !== 'undefined' && typeof self.options.scales.yAxes[0] !== 'undefined'
  189. && typeof self.options.scales.yAxes[0].ticks !== 'undefined' && typeof self.options.scales.yAxes[0].ticks.callback !== 'undefined')
  190. {
  191. if (typeof self.options.scales.yAxes[0].ticks.callbackFN === 'undefined'){
  192. self.options.scales.yAxes[0].ticks.callbackFN = self.options.scales.yAxes[0].ticks.callback;
  193. }
  194. var tmpCallbackName = self.options.scales.yAxes[0].ticks.callbackFN;
  195. var tmpCallbackFunction = window[tmpCallbackName];
  196. self.options.scales.yAxes[0].ticks.callback = tmpCallbackFunction;
  197. }
  198. if (typeof self.options.tooltips !== 'undefined' && typeof self.options.tooltips.callbacks !== 'undefined'
  199. && typeof self.options.tooltips.callbacks.label !== 'undefined')
  200. {
  201. if (typeof self.options.tooltips.callbacks.labelCallbackFN === 'undefined'){
  202. self.options.tooltips.callbacks.labelCallbackFN = self.options.tooltips.callbacks.label;
  203. }
  204. var tmpCallbackName = self.options.tooltips.callbacks.labelCallbackFN;
  205. var tmpCallbackFunction = window[tmpCallbackName];
  206. self.options.tooltips.callbacks.label = tmpCallbackFunction;
  207. }
  208. }
  209. }
  210. });