ajaxFieldForDataTable.js 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. if (typeof mgDtAjaxCpWrappers === 'undefined') {
  2. var mgDtAjaxCpWrappers = {
  3. ajaxComponents: {},
  4. updateInProgress: false,
  5. registerAjaxComponent: function(object) {
  6. var self = this;
  7. var tmpAjaxObj = {
  8. obj: object,
  9. status: 'notStarted'
  10. };
  11. self.ajaxComponents[object.component_id] = tmpAjaxObj;
  12. setTimeout(function() {
  13. self.loadAjaxData();
  14. }, 100);
  15. },
  16. loadAjaxData: async function() {
  17. var self = this;
  18. if (self.updateInProgress) {
  19. return true;
  20. }
  21. self.updateInProgress = true;
  22. for (var key in self.ajaxComponents) {
  23. if (!self.ajaxComponents.hasOwnProperty(key)) {
  24. continue;
  25. }
  26. if (self.ajaxComponents[key].status !== 'notStarted') {
  27. continue;
  28. }
  29. await self.getPromise(key).then(function(){
  30. self.ajaxComponents[key].status = 'completed';
  31. });
  32. }
  33. },
  34. getPromise: function(key) {
  35. var self = this;
  36. return new Promise(function(resolve, reject) {
  37. self.ajaxComponents[key].obj.loadAjaxData().then(function(data){
  38. resolve();
  39. });
  40. });
  41. },
  42. getUnloadedKey: function () {
  43. var self = this;
  44. for (var key in self.ajaxComponents) {
  45. if (!self.ajaxComponents.hasOwnProperty(key)) {
  46. continue;
  47. }
  48. if (self.ajaxComponents[key].status === 'notStarted') {
  49. return key;
  50. }
  51. }
  52. return false;
  53. }
  54. };
  55. }
  56. mgJsComponentHandler.addDefaultComponent('dt-ajax-field', {
  57. template: '#t-dt-ajax-field',
  58. data: function () {
  59. return {
  60. component_id: null,
  61. component_namespace: null,
  62. component_index: null,
  63. wrapper_id: null,
  64. loading_async: null,
  65. loading_lang: null,
  66. data: {},
  67. loading_state: true
  68. };
  69. },
  70. mounted: function () {
  71. var self = this;
  72. var wrapper = $(self.$el).parent();
  73. self.wrapper_id = $(wrapper).attr('id');
  74. self.component_id = $(wrapper).attr('component_id');
  75. self.component_namespace = $(wrapper).attr('component_namespace');
  76. self.component_index = $(wrapper).attr('component_index');
  77. self.loading_lang = $(wrapper).attr('loading_lang');
  78. self.loading_async = $(wrapper).attr('loading_async');
  79. initTooltipsForDatatables(self.wrapper_id);
  80. self.initAjaxCp();
  81. },
  82. methods: {
  83. initAjaxCp: function() {
  84. var self = this;
  85. if (self.loading_async) {
  86. mgDtAjaxCpWrappers.registerAjaxComponent(this);
  87. } else {
  88. self.loadAjaxData();
  89. }
  90. },
  91. loadAjaxData: function() {
  92. var self = this;
  93. self.loading_state = true;
  94. var requestParams = {
  95. loadData: self.component_id,
  96. namespace: self.component_namespace,
  97. index: self.component_index
  98. };
  99. var response = mgPageControler.vueLoader.vloadData(requestParams);
  100. return response.done(function(data){
  101. self.data = data.data.rawData;
  102. self.loading_state = false;
  103. });
  104. }
  105. }
  106. });