import { defineComponent, onMounted, type PropType, ref, computed, } from 'vue' import './styles.scss' export interface BooleanSelectExposed { isActive: boolean } export default defineComponent({ props: { modelValue: { type: Object as PropType, default: undefined, }, title: { type: String, }, placeholder: { type: String, }, onValueChange: { type: Function as PropType<(value: boolean|undefined) => void>, required: true, }, resetable: { type: Boolean, default: true, }, errors: { type: Array as PropType, default: () => [], }, }, setup(props, app) { const isActive = ref(false) const value = computed(() => props.modelValue as boolean|undefined) const valueName = computed(() => { if (value.value === true) return 'Да' if (value.value === false) return 'Нет' return '' }) const select = (item: boolean) => { if (props.onValueChange) props.onValueChange(item) isActive.value = false } const deselect = () => { if (props.onValueChange) props.onValueChange(undefined) isActive.value = false } const toggleItem = (item: boolean) => { if (value.value === item) { select(item) } else { deselect() } } onMounted(() => { document.addEventListener('click', () => { isActive.value = false }) }) app.expose({ isActive }) return () => (
0 ? 'has-errors' : ''}`}> { props.title &&
{ props.title }
}
event.stopPropagation()} >
{ isActive.value = !isActive.value }}>
{ props.resetable && value.value &&
}
toggleItem(true)} > Да
toggleItem(false)} > Нет
{ props.errors.map((error) => (
{error}
)) }
) }, })