UNPKG

livewire-select2-adapter

Version:

Enables seamless integration between Select2 and Laravel Livewire.

11 lines (10 loc) 4.22 kB
(function(r){typeof define=="function"&&define.amd?define(r):r()})(function(){"use strict";/** * Livewire Select2 Adapter (xdn27) * Version: 1.2.2 * Enables seamless integration between Select2 and Laravel Livewire. * * @author * xdn27 - https://github.com/xdn27 * * @license MIT */(function(r){typeof define=="function"&&define.amd?define(["jquery","select2"],r):typeof exports=="object"?module.exports=r(require("jquery"),require("select2")):r(jQuery,window.jQuery.fn.select2)})(function(r,w){if(!r.fn.select2){console.error("[LivewireSelect2Adapter] Select2 is not loaded!");return}var l=r.fn.select2.amd.require("select2/data/array");function n(e,i){l.call(this,e,i),this._defaultEventName="select2-results",this._defaultEmitName="select2-query",this.livewireConfig=r.extend({eventName:this._defaultEventName,emitName:this._defaultEmitName,eventOnSelect:"model",delay:300},i.get("livewire")||{}),this._element=e,this._wireModel=e.attr("wire:model")||e.attr("wire:model.live"),this._registeredEventName=this.livewireConfig.eventName,this._registeredEventName===this._defaultEventName&&this._wireModel&&(this._registeredEventName+="-"+this._wireModel),this._initLivewireListener(),this._attachLivewireReinit()}n.prototype=Object.create(l.prototype),n.prototype.constructor=n,n.prototype.current=function(e){var i=[];this._element.find(":selected").each(function(){var t=r(this);i.push({id:t.val(),text:t.text(),selected:!0})}),e(i)},n.prototype._initLivewireListener=function(){var e=this;this._eventHandler=function(i){e._pendingCallback&&(e._pendingCallback({results:i.detail[0].results}),e._pendingCallback=null)},window.addEventListener(this._registeredEventName,this._eventHandler),e._element.prop("multiple")||this._element.on("select2:select",function(i){e._handleSelection(i)}),this._observer=new MutationObserver(function(i){i.forEach(function(t){t.removedNodes.forEach(function(o){o.contains(e._element[0])&&e.destroy()})})}),this._observer.observe(document.body,{childList:!0,subtree:!0})},n.prototype._handleSelection=function(e){var i=this;if(i.livewireConfig.eventOnSelect==="model"){var t=i._wireModel;if(t&&window.Livewire){var o=e.target.closest("[wire\\:id]"),s=o?o.getAttribute("wire:id"):null;if(s){var a=window.Livewire.find(s);if(a){var d=!t.includes(".live"),c=e.params.data.id;a.set(t,c,d)}}}}else i.livewireConfig.eventOnSelect&&window.Livewire&&(typeof window.Livewire.dispatch=="function"?window.Livewire.dispatch(i.livewireConfig.eventOnSelect,e.params.data):typeof window.Livewire.emit=="function"?window.Livewire.emit(i.livewireConfig.eventOnSelect,e.params.data):console.error("[LivewireSelect2Adapter] Livewire emit/dispatch is not available."))},n.prototype._attachLivewireReinit=function(){window.__livewire_select2_reinit_hook_attached||(window.__livewire_select2_reinit_hook_attached=!0,document.addEventListener("livewire:init",function(){window.Livewire&&window.Livewire.hook&&window.Livewire.hook("morphed",function(){r("[data-select2-livewire]").each(function(){var e=r(this);if(e.data("select2")){var i=e.data("select2").options.options;e.select2(i)}})})}))},n.prototype.query=function(e,i){var t=this;clearTimeout(this._queryTimeout),this._queryTimeout=setTimeout(function(){if(t._pendingCallback=i,window.Livewire){var o=t.livewireConfig.emitName;o===t._defaultEmitName&&t._wireModel&&(o+="-"+t._wireModel),typeof window.Livewire.dispatch=="function"?window.Livewire.dispatch(o,e):typeof window.Livewire.emit=="function"?window.Livewire.emit(o,e):console.error("[LivewireSelect2Adapter] Livewire emit/dispatch is not available.")}else console.error("[LivewireSelect2Adapter] Livewire is not available.")},this.livewireConfig.delay)},n.prototype.destroy=function(){this._eventHandler&&(window.removeEventListener(this._registeredEventName,this._eventHandler),this._eventHandler=null),this._observer&&(this._observer.disconnect(),this._observer=null),this._element&&this._element.off("select2:select")},n.prototype.render=function(){return l.prototype.render.call(this)},n.prototype.bind=function(e,i){return l.prototype.bind.call(this,e,i)},window.select2=window.select2||{},window.select2.LivewireModelAdapter=n,window.select2.LivewireModelAdapterVersion="1.2.0"})});