UNPKG

vuestic-ui

Version:
1 lines 4.64 kB
{"version":3,"file":"use-picker.mjs","sources":["../../../../../../src/components/va-date-picker/hooks/use-picker.ts"],"sourcesContent":["import { computed, ComputedRef, ref, watch } from 'vue'\n\nimport { isDatesMonthEqual, isDatesDayEqual, isDatesYearEqual, isDates, isRange, isSingleDate } from './../utils/date-utils'\nimport { useDatePickerModelValue } from './model-value-helper'\nimport { DatePickerMode, DatePickerModelValue, DatePickerType } from '../types'\n\nconst getDateEqualFunction = (type: DatePickerType) => {\n return {\n month: isDatesMonthEqual,\n day: isDatesDayEqual,\n year: isDatesYearEqual,\n }[type]\n}\n\nexport const useDatePicker = (\n type: DatePickerType,\n dates: ComputedRef<Date[]>,\n props: {\n modelValue?: DatePickerModelValue,\n mode: DatePickerMode,\n readonly: boolean,\n allowedDays?: (date: Date) => boolean,\n allowedMonths?: (date: Date) => boolean,\n allowedYears?: (date: Date) => boolean,\n },\n emit: (event: 'update:modelValue' | any, ...args: any[]) => void,\n) => {\n const datesEqual = getDateEqualFunction(type)\n const isAllowedDate = props.allowedDays || props.allowedMonths || props.allowedYears\n const isDateDisabled = (date: Date) => isAllowedDate === undefined ? false : !isAllowedDate(date)\n\n const hoveredIndex = ref(-1)\n const hoveredValue = computed(() => dates.value[hoveredIndex.value])\n\n const { updateModelValue } = useDatePickerModelValue(\n props,\n emit,\n datesEqual,\n )\n\n const onClick = (date: Date) => {\n if (props.readonly || isDateDisabled(date)) { return }\n\n updateModelValue(date)\n emit(`click:${type}`, date)\n }\n\n const isToday = (date: Date): boolean => {\n const today = new Date()\n return datesEqual(today, date)\n }\n\n const isSelected = (date: Date): boolean => {\n if (!props.modelValue) { return false }\n\n if (isSingleDate(props.modelValue)) {\n return datesEqual(props.modelValue, date)\n } else if (isDates(props.modelValue)) {\n return !!props.modelValue.find((d) => datesEqual(d, date))\n } else if (isRange(props.modelValue)) {\n return datesEqual(props.modelValue.start, date) || datesEqual(props.modelValue.end, date)\n }\n\n return false\n }\n\n const isInRange = (date: Date): boolean => {\n if (!props.modelValue) { return false }\n\n if (!isRange(props.modelValue)) { return false }\n\n if (props.modelValue.start && props.modelValue.end) {\n return props.modelValue.start < date && props.modelValue.end > date\n }\n\n const selectedDate = props.modelValue.start || props.modelValue.end\n\n if (selectedDate) {\n if (!hoveredValue.value) { return false }\n\n return selectedDate < date\n ? (hoveredValue.value >= date)\n : (hoveredValue.value <= date)\n }\n\n return false\n }\n\n watch(hoveredValue, (date) => { emit(`hover:${type}`, date) })\n\n return {\n hoveredIndex,\n hoveredValue,\n onClick,\n isToday,\n isSelected,\n isInRange,\n }\n}\n"],"names":[],"mappings":";;;AAMA,MAAM,uBAAuB,CAAC,SAAyB;AAC9C,SAAA;AAAA,IACL,OAAO;AAAA,IACP,KAAK;AAAA,IACL,MAAM;AAAA,IACN,IAAI;AACR;AAEO,MAAM,gBAAgB,CAC3B,MACA,OACA,OAQA,SACG;AACG,QAAA,aAAa,qBAAqB,IAAI;AAC5C,QAAM,gBAAgB,MAAM,eAAe,MAAM,iBAAiB,MAAM;AAClE,QAAA,iBAAiB,CAAC,SAAe,kBAAkB,SAAY,QAAQ,CAAC,cAAc,IAAI;AAE1F,QAAA,eAAe,IAAI,EAAE;AAC3B,QAAM,eAAe,SAAS,MAAM,MAAM,MAAM,aAAa,KAAK,CAAC;AAE7D,QAAA,EAAE,qBAAqB;AAAA,IAC3B;AAAA,IACA;AAAA,IACA;AAAA,EAAA;AAGI,QAAA,UAAU,CAAC,SAAe;AAC9B,QAAI,MAAM,YAAY,eAAe,IAAI,GAAG;AAAE;AAAA,IAAO;AAErD,qBAAiB,IAAI;AAChB,SAAA,SAAS,IAAI,IAAI,IAAI;AAAA,EAAA;AAGtB,QAAA,UAAU,CAAC,SAAwB;AACjC,UAAA,4BAAY;AACX,WAAA,WAAW,OAAO,IAAI;AAAA,EAAA;AAGzB,QAAA,aAAa,CAAC,SAAwB;AACtC,QAAA,CAAC,MAAM,YAAY;AAAS,aAAA;AAAA,IAAM;AAElC,QAAA,aAAa,MAAM,UAAU,GAAG;AAC3B,aAAA,WAAW,MAAM,YAAY,IAAI;AAAA,IAC/B,WAAA,QAAQ,MAAM,UAAU,GAAG;AAC7B,aAAA,CAAC,CAAC,MAAM,WAAW,KAAK,CAAC,MAAM,WAAW,GAAG,IAAI,CAAC;AAAA,IAChD,WAAA,QAAQ,MAAM,UAAU,GAAG;AAC7B,aAAA,WAAW,MAAM,WAAW,OAAO,IAAI,KAAK,WAAW,MAAM,WAAW,KAAK,IAAI;AAAA,IAC1F;AAEO,WAAA;AAAA,EAAA;AAGH,QAAA,YAAY,CAAC,SAAwB;AACrC,QAAA,CAAC,MAAM,YAAY;AAAS,aAAA;AAAA,IAAM;AAEtC,QAAI,CAAC,QAAQ,MAAM,UAAU,GAAG;AAAS,aAAA;AAAA,IAAM;AAE/C,QAAI,MAAM,WAAW,SAAS,MAAM,WAAW,KAAK;AAClD,aAAO,MAAM,WAAW,QAAQ,QAAQ,MAAM,WAAW,MAAM;AAAA,IACjE;AAEA,UAAM,eAAe,MAAM,WAAW,SAAS,MAAM,WAAW;AAEhE,QAAI,cAAc;AACZ,UAAA,CAAC,aAAa,OAAO;AAAS,eAAA;AAAA,MAAM;AAExC,aAAO,eAAe,OACjB,aAAa,SAAS,OACtB,aAAa,SAAS;AAAA,IAC7B;AAEO,WAAA;AAAA,EAAA;AAGH,QAAA,cAAc,CAAC,SAAS;AAAO,SAAA,SAAS,IAAI,IAAI,IAAI;AAAA,EAAA,CAAG;AAEtD,SAAA;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EAAA;AAEJ;"}