ajaxSelectRemoteSearch.js 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152
  1. mgJsComponentHandler.addDefaultComponent('mg-ajax-select-rs', {
  2. template : '#t-mg-ajax-select-rs',
  3. props: [
  4. 'component_id',
  5. 'component_namespace',
  6. 'component_index',
  7. 'reload_fields_ids',
  8. 'hide_by_default_if_no_data',
  9. 'def_opt_key',
  10. 'def_opt_val'
  11. ],
  12. data : function() {
  13. return {
  14. options: [],
  15. selected: null,
  16. selectInstance: null,
  17. };
  18. },
  19. created: function () {
  20. var self = this;
  21. self.$nextTick(function() {
  22. self.initSelect();
  23. });
  24. //create reload events
  25. for (var key in self.reload_fields_ids) {
  26. if (!self.reload_fields_ids.hasOwnProperty(key)) {
  27. continue;
  28. }
  29. mgEventHandler.on('SelectFieldValueChanged', self.reload_fields_ids[key], function(id, params){
  30. self.loadAjaxData();
  31. });
  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. plugins: ['remove_button'],
  46. options: self.options,
  47. load: function(query, callback) {
  48. //if no search string
  49. if (!query.length) {
  50. // return;
  51. return callback([]);
  52. } else {
  53. var tmpres = self.loadAjaxData(query);
  54. tmpres.done(function(data){
  55. setTimeout(function (){
  56. callback(self.options);
  57. },100);
  58. });
  59. }
  60. }
  61. });
  62. self.selectInstance = selSelect[0].selectize;
  63. self.selectInstance .on('change', function(value){
  64. self.selectChangeAction();
  65. });
  66. if (self.def_opt_key && self.def_opt_val) {
  67. self.selectInstance.addOption({key: self.def_opt_key, value: self.def_opt_val});
  68. self.selectInstance.addItem(self.def_opt_key, true)
  69. self.selectInstance.refreshOptions(false);
  70. }
  71. },
  72. loadAjaxData: function(query) {
  73. var self = this;
  74. self.loading_state = true;
  75. var loadFormData = false;
  76. for (var key in self.reload_fields_ids) {
  77. if (!self.reload_fields_ids.hasOwnProperty(key)) {
  78. continue;
  79. }
  80. if (self.reload_fields_ids[key] !== '' && self.reload_fields_ids)
  81. {
  82. loadFormData = true;
  83. break;
  84. }
  85. }
  86. if (loadFormData) {
  87. var tmpForm = $("select[name='" + self.component_id + "']").parents('form').first();
  88. var tmpFormId = $(tmpForm).attr('id');
  89. var tmpFormDataHandler = new mgFormControler(tmpFormId);
  90. var formData = tmpFormDataHandler.getFieldsData();
  91. if (typeof formData.formData !== 'undefined') {
  92. formData = formData.formData;
  93. }
  94. } else {
  95. var formData = {};
  96. }
  97. var requestParams = {
  98. loadData: self.component_id,
  99. namespace: self.component_namespace,
  100. index: self.component_index,
  101. searchQuery: query
  102. };
  103. for (var key in formData) {
  104. if (!formData.hasOwnProperty(key)) {
  105. continue;
  106. }
  107. requestParams[key] = formData[key];
  108. }
  109. var response = mgPageControler.vueLoader.vloadData(requestParams);
  110. return response.done(function(data){
  111. self.options = [];
  112. for (var key in data.data.rawData.options) {
  113. if (!data.data.rawData.options.hasOwnProperty(key)) {
  114. continue;
  115. }
  116. var tmpOpt = {};
  117. tmpOpt[key] = data.data.rawData.options[key];
  118. self.options.push({}[key] = data.data.rawData.options[key]);
  119. }
  120. self.$nextTick(function() {
  121. self.showSelectIfHidden();
  122. });
  123. }).fail(function(){
  124. });
  125. },
  126. showSelectIfHidden : function() {
  127. var self = this;
  128. if (self.hide_by_default_if_no_data && self.options.length > 0) {
  129. if ($('#' + self.component_id).parents('.lu-form-group').first().length > 0) {
  130. $('#' + self.component_id).parents('.lu-form-group').first().removeAttr('hidden');
  131. }
  132. }
  133. },
  134. selectChangeAction : function() {
  135. mgEventHandler.runCallback('SelectFieldValueChanged', this.component_id, {data: this});
  136. },
  137. }
  138. });