categoryMenuDynamicContent.js 7.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187
  1. /*
  2. * Left category menu, right content
  3. */
  4. /*
  5. * Empty container for reload contents //mg-emptyContainer
  6. */
  7. mgJsComponentHandler.addDefaultComponent('category-empty-container', {
  8. template : '#category-menu',
  9. data : function(){
  10. return {
  11. contentLoading : true
  12. };
  13. }
  14. });
  15. /*
  16. * Empty container registred by default
  17. */
  18. mgJsComponentHandler.addComponentByDefaultTemplate('empty-menu-cont', 'category-empty-container');
  19. /*
  20. * Menu and reloads logic
  21. */
  22. mgJsComponentHandler.addDefaultComponent('category-menu', {
  23. template : '#mg-category-menu',
  24. data : function(){
  25. var self = this;
  26. return {
  27. tableWrapperId: 'mg-category-menu',
  28. returnedData : [],
  29. targetid : null,
  30. menuLoading : false,
  31. sSearch : null,
  32. dataContent : '',
  33. showModal : false,
  34. contentContainerName : 'mg-component-body-empty-menu-cont' ,//+ self.component_id,
  35. modalBodyContainer : 'mg-modal-body',
  36. showSearch : false,
  37. showNoGroups : false,
  38. activeGroupId: null
  39. };
  40. },
  41. props: ['makeCustomAction', 'toggleFormSection', 'component_id'],
  42. mounted: function () {
  43. this.loadCategories(this.loadCategories);
  44. },
  45. created: function () {
  46. var self = this;
  47. self.$parent.$root.$on('reloadMgData', this.updateMgData);
  48. },
  49. methods: {
  50. updateMgData : function (toReloadId, customParams) {
  51. var self = this;
  52. self.activeGroupId = (customParams && typeof customParams.activeGroupId !== undefined) ? customParams.activeGroupId : null;
  53. if(self.component_id === toReloadId){
  54. self.loadCategories(true);
  55. self.$nextTick(function() {
  56. self.$emit('restartRefreshingState');
  57. });
  58. }
  59. },
  60. reloadMenuContent : function(categoryId, namespace, index){
  61. if($("#groupList").attr("isBeingSorted")) {
  62. $("#groupList").removeAttr("isBeingSorted");
  63. return;
  64. }
  65. var self = this;
  66. self.contentContainerName = 'mg-component-body-empty-menu-cont';
  67. var resp = self.$parent.$options.methods.vloadData({loadData : categoryId, namespace : namespace, index : index});
  68. resp.done(function(data){
  69. var data = data.data.rawData;
  70. $('#loadedTemplates').append(data.template);
  71. for (var key in data.registrations) {
  72. if (!data.registrations.hasOwnProperty(key)) {
  73. continue;
  74. }
  75. mgJsComponentHandler.registerNowByDefaultTemplate(key.toLowerCase(), data.registrations[key]);
  76. }
  77. $('#groupList').find('li.is-active').removeClass('is-active');
  78. $('#groupList').find('#'+categoryId).addClass('is-active');
  79. self.contentContainerName = 'mg-templatecontainer';
  80. Vue.component('mg-templatecontainer', {
  81. template: data.htmlData,
  82. created: function () {
  83. var self = this;
  84. self.$nextTick(function(){
  85. initContainerSelects('itemContentContainer');
  86. initContainerTooltips('itemContentContainer');
  87. });
  88. },
  89. methods: {
  90. submitForm: function(targetId, event) {
  91. mgPageControler.vueLoader.submitForm(targetId, event);
  92. },
  93. loadModal: function(event, targetId, namespace, index, params, addSpinner) {
  94. mgPageControler.vueLoader.loadModal(event, targetId, namespace, index, params, addSpinner);
  95. },
  96. selectChangeAction: function($event){
  97. mgPageControler.vueLoader.selectChangeAction($event);
  98. },
  99. makeCustomAction: function(functionName, params, event, namespace, index){
  100. mgPageControler.vueLoader.makeCustomAction(functionName, params, event, namespace, index);
  101. }
  102. }
  103. });
  104. mgPageControler.vueLoader.$nextTick(function() {
  105. $('#itemContentContainer [data-content-slider]').luContentSlider();
  106. });
  107. self.$nextTick(function() {
  108. tldCategoriesSortableController();
  109. mgEventHandler.runCallback('CategoryMenuContentDataLoaded', self.component_id, {data: data, categoryMenu: self});
  110. });
  111. });
  112. },
  113. searchDataEnter: function(event){
  114. event.preventDefault();
  115. this.searchData(event);
  116. },
  117. searchData : function(){
  118. this.loadCategories();
  119. },
  120. hideSearch : function(){
  121. var self = this;
  122. if (self.sSearch) {
  123. self.sSearch = null;
  124. self.loadCategories();
  125. }
  126. },
  127. loadCategories : function(callback){
  128. var self = this;
  129. self.menuLoading = true;
  130. self.targetid = self.$el.attributes.getNamedItem('targetid').value;
  131. var reqParams = {loadData : self.targetid , namespace : getItemNamespace(self.targetid), index : getItemIndex(self.targetid)};
  132. if(self.sSearch !== null){
  133. reqParams.sSearch = self.sSearch;
  134. }
  135. var resp = self.$parent.$options.methods.vloadData(reqParams);
  136. resp.done(function(data){
  137. self.returnedData = data.data.rawData;
  138. self.menuLoading = false;
  139. if (typeof data.data.rawData != 'undefined' && data.data.rawData.length > 0) {
  140. if(callback){
  141. if (self.activeGroupId) {
  142. for (var key in data.data.rawData) {
  143. if (!data.data.rawData.hasOwnProperty(key)) {
  144. continue;
  145. } else {
  146. if (data.data.rawData[key].elId === self.activeGroupId) {
  147. self.activeGroupId = null;
  148. self.reloadMenuContent(data.data.rawData[key].elId, data.data.rawData[key].namespace, data.data.rawData[key].id);
  149. break;
  150. }
  151. }
  152. }
  153. } else {
  154. self.reloadMenuContent(data.data.rawData[0].elId, data.data.rawData[0].namespace, data.data.rawData[0].id);
  155. }
  156. }
  157. self.showNoGroups = false;
  158. } else {
  159. self.showNoGroups = true;
  160. }
  161. self.$nextTick(function() {
  162. tldCategoriesSortableController();
  163. });
  164. });
  165. },
  166. loadModal : function(event, targetId, namespace, index, params, addSpinner) {//needs refactoring
  167. event.stopImmediatePropagation();
  168. mgPageControler.vueLoader.loadModal(event, targetId, namespace, index, params, addSpinner);
  169. },
  170. submitForm: function(event) {
  171. mgPageControler.vueLoader.submitForm('itemContentContainer', event);
  172. },
  173. toggleSearch: function() {
  174. this.showSearch = !this.showSearch;
  175. }
  176. // },
  177. // makeCustomAction: function (functionName, params, event, namespace, index) {
  178. // mgPageControler.vueLoader.makeCustomAction(functionName, params, event, namespace, index);
  179. // }
  180. }
  181. });