| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152 |
- mgJsComponentHandler.addDefaultComponent('mg-ajax-select-rs', {
- template : '#t-mg-ajax-select-rs',
- props: [
- 'component_id',
- 'component_namespace',
- 'component_index',
- 'reload_fields_ids',
- 'hide_by_default_if_no_data',
- 'def_opt_key',
- 'def_opt_val'
- ],
- data : function() {
- return {
- options: [],
- selected: null,
- selectInstance: null,
- };
- },
- created: function () {
- var self = this;
- self.$nextTick(function() {
- self.initSelect();
- });
- //create reload events
- for (var key in self.reload_fields_ids) {
- if (!self.reload_fields_ids.hasOwnProperty(key)) {
- continue;
- }
- mgEventHandler.on('SelectFieldValueChanged', self.reload_fields_ids[key], function(id, params){
- self.loadAjaxData();
- });
- }
- },
- methods: {
- initSelect: function() {
- var self = this;
- if ($('#' + self.component_id).hasClass('selectized')) {
- var selectizedInstance = $('#' + self.component_id).selectize();
- selectizedInstance[0].selectize.destroy();
- }
- var selSelect = $('#' + self.component_id).selectize({
- valueField: 'key',
- labelField: 'value',
- searchField: 'value',
- plugins: ['remove_button'],
- options: self.options,
- load: function(query, callback) {
- //if no search string
- if (!query.length) {
- // return;
- return callback([]);
- } else {
- var tmpres = self.loadAjaxData(query);
- tmpres.done(function(data){
- setTimeout(function (){
- callback(self.options);
- },100);
- });
- }
- }
- });
- self.selectInstance = selSelect[0].selectize;
- self.selectInstance .on('change', function(value){
- self.selectChangeAction();
- });
- if (self.def_opt_key && self.def_opt_val) {
- self.selectInstance.addOption({key: self.def_opt_key, value: self.def_opt_val});
- self.selectInstance.addItem(self.def_opt_key, true)
- self.selectInstance.refreshOptions(false);
- }
- },
- loadAjaxData: function(query) {
- var self = this;
- self.loading_state = true;
- var loadFormData = false;
- for (var key in self.reload_fields_ids) {
- if (!self.reload_fields_ids.hasOwnProperty(key)) {
- continue;
- }
- if (self.reload_fields_ids[key] !== '' && self.reload_fields_ids)
- {
- loadFormData = true;
- break;
- }
- }
- if (loadFormData) {
- var tmpForm = $("select[name='" + self.component_id + "']").parents('form').first();
- var tmpFormId = $(tmpForm).attr('id');
- var tmpFormDataHandler = new mgFormControler(tmpFormId);
- var formData = tmpFormDataHandler.getFieldsData();
- if (typeof formData.formData !== 'undefined') {
- formData = formData.formData;
- }
- } else {
- var formData = {};
- }
- var requestParams = {
- loadData: self.component_id,
- namespace: self.component_namespace,
- index: self.component_index,
- searchQuery: query
- };
- for (var key in formData) {
- if (!formData.hasOwnProperty(key)) {
- continue;
- }
- requestParams[key] = formData[key];
- }
- var response = mgPageControler.vueLoader.vloadData(requestParams);
- return response.done(function(data){
- self.options = [];
- for (var key in data.data.rawData.options) {
- if (!data.data.rawData.options.hasOwnProperty(key)) {
- continue;
- }
- var tmpOpt = {};
- tmpOpt[key] = data.data.rawData.options[key];
- self.options.push({}[key] = data.data.rawData.options[key]);
- }
- self.$nextTick(function() {
- self.showSelectIfHidden();
- });
- }).fail(function(){
- });
- },
- showSelectIfHidden : function() {
- var self = this;
- if (self.hide_by_default_if_no_data && self.options.length > 0) {
- if ($('#' + self.component_id).parents('.lu-form-group').first().length > 0) {
- $('#' + self.component_id).parents('.lu-form-group').first().removeAttr('hidden');
- }
- }
- },
- selectChangeAction : function() {
- mgEventHandler.runCallback('SelectFieldValueChanged', this.component_id, {data: this});
- },
- }
- });
|