ajaxSelect.js 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154
  1. mgJsComponentHandler.addDefaultComponent('mg-ajax-select', {
  2. template : '#t-mg-ajax-select',
  3. props: [
  4. 'component_id',
  5. 'component_namespace',
  6. 'component_index',
  7. 'reload_fields_ids',
  8. 'is_multiple',
  9. 'hide_by_default_if_no_data'
  10. ],
  11. data : function() {
  12. return {
  13. options: [],
  14. selected: null,
  15. selectInstance: null
  16. };
  17. },
  18. created: function () {
  19. var self = this;
  20. //create reload events
  21. for (var key in self.reload_fields_ids) {
  22. if (!self.reload_fields_ids.hasOwnProperty(key)) {
  23. continue;
  24. }
  25. mgEventHandler.on('SelectFieldValueChanged', self.reload_fields_ids[key], function(id, params){
  26. self.loadAjaxData();
  27. });
  28. }
  29. self.$nextTick(function() {
  30. self.initSelect();
  31. self.loadAjaxData();
  32. });
  33. },
  34. methods: {
  35. initSelect: function() {
  36. var self = this;
  37. if ($('#' + self.component_id).hasClass('selectized')) {
  38. var selectizedInstance = $('#' + self.component_id).selectize();
  39. selectizedInstance[0].selectize.destroy();
  40. }
  41. var selSelect = $('#' + self.component_id).selectize({
  42. valueField: 'key',
  43. labelField: 'value',
  44. searchField: 'value',
  45. create: false,
  46. plugins: ['remove_button'],
  47. copyClassesToDropdown: false,
  48. options: self.options,
  49. items: self.selected
  50. });
  51. self.selectInstance = selSelect[0].selectize;
  52. self.selectInstance .on('change', function(value){
  53. self.selectChangeAction();
  54. });
  55. },
  56. loadAjaxData: function() {
  57. var self = this;
  58. this.addLoader();
  59. var loadFormData = false;
  60. for (var key in self.reload_fields_ids) {
  61. if (!self.reload_fields_ids.hasOwnProperty(key)) {
  62. continue;
  63. }
  64. if (self.reload_fields_ids[key] !== '' && self.reload_fields_ids)
  65. {
  66. loadFormData = true;
  67. break;
  68. }
  69. }
  70. if (loadFormData) {
  71. var tmpForm = $("select[name='" + self.component_id + "']").parents('form').first();
  72. var tmpFormId = $(tmpForm).attr('id');
  73. var tmpFormDataHandler = new mgFormControler(tmpFormId);
  74. var formData = tmpFormDataHandler.getFieldsData();
  75. if (typeof formData.formData !== 'undefined') {
  76. formData = formData.formData;
  77. }
  78. } else {
  79. var formData = {};
  80. }
  81. var requestParams = {
  82. loadData: self.component_id,
  83. namespace: self.component_namespace,
  84. index: self.component_index
  85. };
  86. for (var key in formData) {
  87. if (!formData.hasOwnProperty(key)) {
  88. continue;
  89. }
  90. requestParams[key] = formData[key];
  91. }
  92. var response = mgPageControler.vueLoader.vloadData(requestParams);
  93. return response.done(function(data){
  94. self.options = [];
  95. for (var key in data.data.rawData.options) {
  96. if (!data.data.rawData.options.hasOwnProperty(key)) {
  97. continue;
  98. }
  99. var tmpOpt = {};
  100. tmpOpt[key] = data.data.rawData.options[key];
  101. self.options.push({}[key] = data.data.rawData.options[key]);
  102. }
  103. self.selected = typeof data.data.rawData.selected === 'string' ? [data.data.rawData.selected] : data.data.rawData.selected;
  104. self.$nextTick(function() {
  105. self.showSelectIfHidden();
  106. });
  107. self.$nextTick(function() {
  108. self.initSelect();
  109. });
  110. mgEventHandler.runCallback('SelectFieldDataLoaded', self.component_id, {instance: self, data: data.data.rawData});
  111. self.removeLoader();
  112. }).fail(function(){
  113. self.removeLoader();
  114. self.$nextTick(function() {
  115. self.initSelect();
  116. });
  117. mgEventHandler.runCallback('SelectFieldDataLoaded', self.component_id, {instance: self, data: data.data.rawData});
  118. });
  119. },
  120. showSelectIfHidden : function() {
  121. var self = this;
  122. if (self.hide_by_default_if_no_data && self.options.length > 0) {
  123. if ($('#' + self.component_id).parents('.lu-form-group').first().length > 0) {
  124. $('#' + self.component_id).parents('.lu-form-group').first().removeAttr('hidden');
  125. }
  126. }
  127. },
  128. selectChangeAction : function() {
  129. mgEventHandler.runCallback('SelectFieldValueChanged', this.component_id, {data: this});
  130. },
  131. addLoader: function() {
  132. var selectizeLoader = '<div class="lu-preloader lu-preloader--sm mg-selectize-loader"></div>';
  133. $('#' + this.component_id).parent().find('.selectize-input').first().append(selectizeLoader);
  134. },
  135. removeLoader: function () {
  136. $('#' + this.component_id).parent().find('.mg-selectize-loader').remove();
  137. }
  138. }
  139. });