ajaxSelect.js 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153
  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. options: self.options,
  48. items: self.selected
  49. });
  50. self.selectInstance = selSelect[0].selectize;
  51. self.selectInstance .on('change', function(value){
  52. self.selectChangeAction();
  53. });
  54. },
  55. loadAjaxData: function() {
  56. var self = this;
  57. self.addLoader();
  58. var loadFormData = false;
  59. for (var key in self.reload_fields_ids) {
  60. if (!self.reload_fields_ids.hasOwnProperty(key)) {
  61. continue;
  62. }
  63. if (self.reload_fields_ids[key] !== '' && self.reload_fields_ids)
  64. {
  65. loadFormData = true;
  66. break;
  67. }
  68. }
  69. if (loadFormData) {
  70. var tmpForm = $("select[name='" + self.component_id + "']").parents('form').first();
  71. var tmpFormId = $(tmpForm).attr('id');
  72. var tmpFormDataHandler = new mgFormControler(tmpFormId);
  73. var formData = tmpFormDataHandler.getFieldsData();
  74. if (typeof formData.formData !== 'undefined') {
  75. formData = formData.formData;
  76. }
  77. } else {
  78. var formData = {};
  79. }
  80. var requestParams = {
  81. loadData: self.component_id,
  82. namespace: self.component_namespace,
  83. index: self.component_index
  84. };
  85. for (var key in formData) {
  86. if (!formData.hasOwnProperty(key)) {
  87. continue;
  88. }
  89. requestParams[key] = formData[key];
  90. }
  91. var response = mgPageControler.vueLoader.vloadData(requestParams);
  92. return response.done(function(data){
  93. self.options = [];
  94. for (var key in data.data.rawData.options) {
  95. if (!data.data.rawData.options.hasOwnProperty(key)) {
  96. continue;
  97. }
  98. var tmpOpt = {};
  99. tmpOpt[key] = data.data.rawData.options[key];
  100. self.options.push({}[key] = data.data.rawData.options[key]);
  101. }
  102. self.selected = typeof data.data.rawData.selected === 'string' ? [data.data.rawData.selected] : data.data.rawData.selected;
  103. self.$nextTick(function() {
  104. self.showSelectIfHidden();
  105. });
  106. self.$nextTick(function() {
  107. self.initSelect();
  108. });
  109. self.removeLoader();
  110. }).fail(function(){
  111. self.removeLoader();
  112. self.$nextTick(function() {
  113. self.initSelect();
  114. });
  115. mgEventHandler.runCallback('SelectFieldDataLoaded', self.component_id, {instance: self, data: data.data.rawData});
  116. });
  117. },
  118. showSelectIfHidden : function() {
  119. var self = this;
  120. if (self.hide_by_default_if_no_data && self.options.length > 0) {
  121. if ($('#' + self.component_id).parents('.lu-form-group').first().length > 0) {
  122. $('#' + self.component_id).parents('.lu-form-group').first().removeAttr('hidden');
  123. }
  124. }
  125. },
  126. selectChangeAction : function() {
  127. mgEventHandler.runCallback('SelectFieldValueChanged', this.component_id, {data: this});
  128. },
  129. addLoader: function() {
  130. var selectizeLoader = '<div class="lu-preloader lu-preloader--sm mg-selectize-loader"></div>';
  131. $('#' + this.component_id).parent().find('.selectize-input').first().append(selectizeLoader);
  132. },
  133. removeLoader: function () {
  134. $('#' + this.component_id).parent().find('.mg-selectize-loader').remove();
  135. }
  136. }
  137. });