ajaxFieldForDataTable.js 3.7 KB

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