/** * Copyright (c) HashiCorp, Inc. * SPDX-License-Identifier: MPL-2.0 */ import Component from '@ember/component'; import { inject as service } from '@ember/service'; import Slotted from 'block-slots'; export default Component.extend(Slotted, { tagName: '', dom: service('dom'), multiple: false, required: false, onchange: function () {}, addOption: function (option) { if (typeof this._options === 'undefined') { this._options = new Set(); } this._options.add(option); }, removeOption: function (option) { this._options.delete(option); }, actions: { click: function (option, e) { // required={{true}} ? if (!this.multiple) { if (option.selected && this.required) { return e; } [...this._options] .filter((item) => item !== option) .forEach((item) => { item.selected = false; }); } else { if (option.selected && this.required) { const other = [...this._options].find((item) => item !== option && item.selected); if (!other) { return e; } } } option.selected = !option.selected; this.onchange( this.dom.setEventTargetProperties(e, { selected: (target) => option.args.value, selectedItems: (target) => { return [...this._options] .filter((item) => item.selected) .map((item) => item.args.value) .join(','); }, }) ); return e; }, }, });