"use strict"; import $ from "jquery"; import select2 from "select2/dist/js/select2.js"; import Events from "../_events"; const FormSelect2 = (($) => { // Constants const NAME = "jsFormSelect2"; const DATA_KEY = NAME; const $Html = $("html, body"); const W = window; const D = document; class FormSelect2 { constructor(el) { const ui = this; const $el = $(el); ui._el = el; ui.dispose(); console.log(`${NAME}: init`); $el.data(DATA_KEY, this); const $fields = $el.find(Events.FORM_FIELDS); const $selectFields = $el .find("select:not([readonly])") .not(".no-select2"); $selectFields.each((i, el) => { $(el).select2(); }); $el.addClass(`${NAME}-active`); $el.trigger(Events.FORM_INIT_BASICS); } // Public methods dispose() { console.log(`${NAME}: dispose`); const ui = this; const $el = $(ui._el); const $selectFields = $el .find("select:not([readonly])") .not(".no-select2"); $selectFields.each((i, el) => { const $el = $(el); if ($el.hasClass("select2-hidden-accessible")) { $el.select2("destroy"); } }); $.removeData(ui._el, DATA_KEY); ui._el = null; $el.removeClass(`${NAME}-active`); } static _jQueryInterface() { return this.each(() => { // attach functionality to el const $el = $(this); let data = $el.data(DATA_KEY); if (!data) { data = new FormSelect2(this); $el.data(DATA_KEY, data); } }); } } // jQuery interface $.fn[NAME] = FormSelect2._jQueryInterface; $.fn[NAME].Constructor = FormSelect2; $.fn[NAME].noConflict = function () { $.fn[NAME] = JQUERY_NO_CONFLICT; return FormSelect2._jQueryInterface; }; const init = () => { $("form").jsFormSelect2(); }; // auto-apply $(W).on(`${NAME}.init ${Events.AJAX} ${Events.LOADED}`, () => { init(); }); return FormSelect2; })($); export default FormSelect2;