/* * This file is part of the Kimai time-tracking app. * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ /*! * [KIMAI] KimaiFormSelect: enhanced functionality for HTML select's */ import KimaiPlugin from "../KimaiPlugin"; import jQuery from "jquery"; export default class KimaiFormSelect extends KimaiPlugin { constructor(selector) { super(); this.selector = selector; } getId() { return 'form-select'; } activateSelectPicker(selector, container) { let options = {}; if (container !== undefined) { options = { dropdownParent: $(container), }; } options = {...options, ...{ language: this.getContainer().getConfiguration().get('locale'), theme: "bootstrap" }}; jQuery(selector + ' ' + this.selector).select2(options); } destroySelectPicker(selector) { jQuery(selector + ' ' + this.selector).select2('destroy'); } updateOptions(selectIdentifier, data) { let select = jQuery(selectIdentifier); let emptyOption = jQuery(selectIdentifier + ' option[value=""]'); select.find('option').remove().end().find('optgroup').remove().end(); if (emptyOption.length !== 0) { select.append(''); } let htmlOptions = ''; let emptyOptions = ''; for (const [key, value] of Object.entries(data)) { if (key === '__empty__') { for (const entity of value) { emptyOptions += ''; } continue; } htmlOptions += ''; for (const entity of value) { htmlOptions += ''; } htmlOptions += ''; } select.append(htmlOptions); select.append(emptyOptions); // if we don't trigger the change, the other selects won't be resetted select.trigger('change'); // if the beta test kimai.theme.select_type is active, this will tell the selects to refresh if (select.hasClass('selectpicker')) { select.trigger('change.select2'); } } }