import { type Moment } from 'moment'
import {
defineComponent, type PropType, ref, type Ref,
} from 'vue'
import useClickOutside from '../../../../composables/use-click-outside'
import MultipleCalendar from '../../calendars/multiple-calendar/multiple-calendar'
import './multiple-calendar-input.scss'
/**
* Календарь с возможностью выбора нескольких дат.
*
* Дизайн
*
*/
export default defineComponent({
props: {
/**
* Определяет, активен ли компонент или отключен.
*/
isDisabled: { type: Boolean, default: false },
/**
* Показать или скрыть лейбл-название над инпутом.
*/
isShowLabel: { type: Boolean, default: true },
/**
* Текст лейбла (названия) над инпутом.
*/
label: { type: String, default: '' },
/**
* Текст, который будет отображаться в случае отсутствия выбранных дат.
*/
placeholder: { type: String, default: '__.__.____' },
/**
* Массив строк, представляющих ошибки, связанные с компонентом.
*/
errors: { type: Array as PropType, default: () => [] },
/**
* Массив дат, представляющих выбранные дни.
*/
days: { type: Array as PropType, required: true },
/**
* Функция, которая вызывается при изменении выбранных дней.
*/
onValueChange: { type: Function as PropType<(days: Moment[]) => void>, required: true },
/**
* Максимальное количество отображаемых выбранных дат в заголовке компонента.
*/
maxChipsShow: { type: Number, default: 2 },
},
setup(props) {
const isShowMultipleCalendar = ref(false)
const calendar: Ref = ref(null)
const isShowDropdown = ref(false)
const onShowDropdown = () => {
if (props.isDisabled || props.days.length < props.maxChipsShow || isShowMultipleCalendar.value) {
return
}
isShowDropdown.value = !isShowDropdown.value
}
const onCloseDropdown = () => {
if (isShowDropdown.value) isShowDropdown.value = false
}
const changeFlagShowMultipleCalendar = () => {
if (props.isDisabled) return
isShowMultipleCalendar.value = !isShowMultipleCalendar.value
if (isShowMultipleCalendar.value) isShowDropdown.value = false
}
const clear = (e: MouseEvent) => {
e.stopPropagation()
if (props.onValueChange) props.onValueChange([])
}
const clearOneDate = (clearDate: Moment) => {
if (props.onValueChange) props.onValueChange(props.days.filter((el) => el !== clearDate))
}
useClickOutside(calendar, () => {
isShowMultipleCalendar.value = false
})
const rednerChips = (d: Moment) => (