ajaxSelectRemoteSearch.js 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132
  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. ],
  10. data: function () {
  11. return {
  12. options: [],
  13. selected: null
  14. };
  15. },
  16. created: function () {
  17. var self = this;
  18. self.$nextTick(function () {
  19. self.initSelect();
  20. });
  21. //create reload events
  22. for (var key in self.reload_fields_ids) {
  23. if (!self.reload_fields_ids.hasOwnProperty(key)) {
  24. continue;
  25. }
  26. mgEventHandler.on('SelectFieldValueChanged', self.reload_fields_ids[key], function (id, params) {
  27. self.loadAjaxData();
  28. });
  29. }
  30. },
  31. methods: {
  32. initSelect: function () {
  33. var self = this;
  34. if ($('#' + self.component_id).hasClass('selectized')) {
  35. var selectizedInstance = $('#' + self.component_id).selectize();
  36. selectizedInstance[0].selectize.destroy();
  37. }
  38. $('#' + self.component_id).selectize({
  39. valueField: 'key',
  40. labelField: 'value',
  41. searchField: 'value',
  42. plugins: ['remove_button'],
  43. options: self.options,
  44. load: function (query, callback) {
  45. //if no search string
  46. if (!query.length) {
  47. // return;
  48. return callback([]);
  49. } else {
  50. self.loadAjaxData(query);
  51. self.$nextTick(function () {
  52. callback(self.options);
  53. });
  54. }
  55. }
  56. });
  57. },
  58. loadAjaxData: function (query) {
  59. var self = this;
  60. self.loading_state = true;
  61. var loadFormData = false;
  62. for (var key in self.reload_fields_ids) {
  63. if (!self.reload_fields_ids.hasOwnProperty(key)) {
  64. continue;
  65. }
  66. if (self.reload_fields_ids[key] !== '' && self.reload_fields_ids)
  67. {
  68. loadFormData = true;
  69. break;
  70. }
  71. }
  72. if (loadFormData) {
  73. var tmpForm = $("select[name='" + self.component_id + "']").parents('form').first();
  74. var tmpFormId = $(tmpForm).attr('id');
  75. var tmpFormDataHandler = new mgFormControler(tmpFormId);
  76. var formData = tmpFormDataHandler.getFieldsData();
  77. if (typeof formData.formData !== 'undefined') {
  78. formData = formData.formData;
  79. }
  80. } else {
  81. var formData = {};
  82. }
  83. var requestParams = {
  84. loadData: self.component_id,
  85. namespace: self.component_namespace,
  86. index: self.component_index,
  87. searchQuery: query
  88. };
  89. for (var key in formData) {
  90. if (!formData.hasOwnProperty(key)) {
  91. continue;
  92. }
  93. requestParams[key] = formData[key];
  94. }
  95. var response = mgPageControler.vueLoader.vloadData(requestParams);
  96. return response.done(function (data) {
  97. self.options = [];
  98. for (var key in data.data.rawData.options) {
  99. if (!data.data.rawData.options.hasOwnProperty(key)) {
  100. continue;
  101. }
  102. var tmpOpt = {};
  103. tmpOpt[key] = data.data.rawData.options[key];
  104. self.options.push({}[key] = data.data.rawData.options[key]);
  105. }
  106. self.$nextTick(function () {
  107. self.showSelectIfHidden();
  108. });
  109. }).fail(function () {
  110. });
  111. },
  112. showSelectIfHidden: function () {
  113. var self = this;
  114. if (self.hide_by_default_if_no_data && self.options.length > 0) {
  115. if ($('#' + self.component_id).parents('.lu-form-group').first().length > 0) {
  116. $('#' + self.component_id).parents('.lu-form-group').first().removeAttr('hidden');
  117. }
  118. }
  119. }
  120. }
  121. });