import ApiMixin from '../Api/ApiMixin.js'; import eventBus from "../eventBus.js"; const template = ` `; const CustomSelect = { props: { options: { type: Array, required: true, }, placeholder: { type: String, default: '', }, modelValue: { type: [String, Number, Array], default: null, }, selectedGroup: { type: Object, default: null, }, }, data() { return { pagination: 0, } }, template, mixins: [ApiMixin], mounted() { this.initSelect2(this.selectedGroup); eventBus.on('trigger-group-created', (group) => { this.initSelect2(group); }); }, methods: { initSelect2(group = null) { // Initialize select2 with the provided options and value const vm = this; jQuery(this.$el) .select2({ ajax: { url: woo_mailerlite_admin_data.ajaxUrl, method: "post", data: function (params) { return { filter: params.term, page: params.page || 1, action: "woo_mailerlite_get_groups", nonce: woo_mailerlite_admin_data.woo_mailerlite_admin_nonce, } }, // delay: 1000, dataType: 'json', processResults: function (data, params) { let groupSelect = []; if (data.data) { for (let [key, value] of Object.entries(data.data)) { groupSelect.push({id : value.id, text: value.name}); } } if (data.pagination?.next === 'classic') { data.pagination = !!data.data.length; } return { results: groupSelect, pagination: { more: data.pagination } }; }, // cache: true, placeholder: 'Search for a group', }, theme: 'mailerlite' }) .val(this.value) // Set initial value .trigger('change') .on('change', function () { vm.$emit('update:modelValue', jQuery(this).val()); }); if (group) { jQuery(this.$el).append(jQuery('