<template> <div class="dropdown-selector"> <select :id="this.selectorId" :data-select-by-group="groupSelector" :data-combine-tags="dataCombineTags" :data-select-multiple-all-selected="dataSelectMultipleAllSelected" :data-select-multiple-name="dataSelectMultipleName" :data-placeholder="placeholder" :data-view-mode="viewMode" > <template v-if="groupSelector"> <optgroup v-for="group in this.options" :label="group.label" :key="group.label"> <option v-for="option in group.options" :key="option.value" :value="option.value" :selected="option.value == selectedValue || (Array.isArray(selectedValue) && selectedValue.some(e => e == option.value))" :data-selected="option.value == selectedValue || (Array.isArray(selectedValue) && selectedValue.some(e => e == option.value))" :data-params="JSON.stringify(option.params)" :data-group="group.label"> {{ option.label }} </option> </optgroup> </template> <template v-else> <option v-for="option in this.options" :key="option.value" :value="option.value" :selected="option.value == selectedValue || (Array.isArray(selectedValue) && selectedValue.some(e => e == option.value))" :data-selected="option.value == selectedValue || (Array.isArray(selectedValue) && selectedValue.some(e => e == option.value))" :data-params="JSON.stringify(option.params)"> {{ option.label }} </option> </template> </select> </div> </template> <script> export default { name: 'DropdownSelector', props: { options: Array, selectorId: String, groupSelector: { type: Boolean, default: false }, noEmptyOption: { type: Boolean, default: true }, placeholder: { type: String, default: '' }, selectedValue: { type: [String, Number, Boolean, Array], default: null }, singleSelect: { type: Boolean, default: true }, closeOnSelect: { type: Boolean, default: true }, selectAppearance: { type: String, default: 'simple' }, disableSearch: { type: Boolean, default: false }, labelHTML: { type: Boolean, default: false }, tagLabel: { type: Function }, optionClass: { type: String, default: '' }, dataCombineTags: { type: Boolean, default: false }, dataSelectMultipleAllSelected: { type: String, default: '' }, dataSelectMultipleName: { type: String, default: '' }, optionLabel: { type: Function }, onOpen: { type: Function }, inputTagMode: { type: Boolean, default: false }, viewMode: { type: Boolean, default: false }, onChange: Function }, mounted: function() { dropdownSelector.init(`#${this.selectorId}`, { inputTagMode: this.inputTagMode, optionClass: this.optionClass, optionLabel: this.optionLabel, noEmptyOption: this.noEmptyOption, singleSelect: this.singleSelect, closeOnSelect: this.closeOnSelect, selectAppearance: this.selectAppearance, disableSearch: this.disableSearch, tagLabel: this.tagLabel, labelHTML: this.labelHTML, onOpen: this.onOpen, onChange: () => { if (this.onChange) this.onChange(); this.selectChanged(dropdownSelector.getValues(`#${this.selectorId}`)) } }); }, methods: { selectChanged(value) { this.$emit( 'dropdown:changed', value ); }, selectValues(value) { dropdownSelector.selectValues(`#${this.selectorId}`, value); } } } </script>