vuestic-ui
Version:
Vue 3 UI Framework
49 lines (48 loc) • 1.5 kB
JavaScript
import { watch } from "vue";
const useAutocompleteProps = {
autocomplete: { type: Boolean, default: false }
};
const useAutocomplete = (autocompleteValue, props, value, dropdownShown, getText) => {
const getLastOptionText = (v) => (v == null ? void 0 : v.length) ? getText(v.at(-1)) : "";
if (props.autocomplete && !props.multiple) {
autocompleteValue.value = getLastOptionText(value.value);
}
watch(value, (newValue, oldValue) => {
if (!props.autocomplete) {
return;
}
const newValueStringConverted = getLastOptionText(newValue);
const oldValueStringConverted = getLastOptionText(oldValue);
if (newValueStringConverted !== oldValueStringConverted) {
autocompleteValue.value = props.multiple ? "" : newValueStringConverted;
if (!props.multiple) {
dropdownShown.value = false;
}
}
});
watch(autocompleteValue, (newValue) => {
if (!props.autocomplete) {
return;
}
if (newValue && newValue !== getLastOptionText(value.value)) {
dropdownShown.value = true;
}
});
const onDropdownClosed = () => {
autocompleteValue.value = props.multiple ? "" : getLastOptionText(value.value);
};
watch(dropdownShown, (newValue, oldValue) => {
if (!props.autocomplete) {
return;
}
if (!newValue || oldValue) {
onDropdownClosed();
}
});
return autocompleteValue;
};
export {
useAutocomplete as a,
useAutocompleteProps as u
};
//# sourceMappingURL=useAutocomplete.js.map