UNPKG

vuestic-ui

Version:
1 lines 5.77 kB
{"version":3,"file":"model-value-helper.mjs","sources":["../../../../../../src/components/va-date-picker/hooks/model-value-helper.ts"],"sourcesContent":["import { isRange, isSingleDate, isDates } from '../utils/date-utils'\nimport { DatePickerModelValue, DatePickerRange, DatePickerMode } from '../types'\n\nconst modeInitialValue = (date: Date, mode: DatePickerMode) => {\n if (mode === 'single') {\n return date\n } else if (mode === 'range') {\n return { start: date, end: null }\n } else if (mode === 'multiple') {\n return [date]\n } else if (mode === 'auto') {\n return date\n }\n\n throw new Error('Unknown mode')\n}\n\nconst throwIncorrectModelValueError = (modelValue: DatePickerModelValue, mode: DatePickerMode) : never => {\n throw Error(`Incorrect modelValue for mode ${mode}. Got ${JSON.stringify(modelValue)}`)\n}\n\nconst modeFromModelValue = (modelValue: DatePickerModelValue): DatePickerMode => {\n if (isSingleDate(modelValue)) {\n return 'single'\n } else if (isRange(modelValue)) {\n return 'range'\n } else if (isDates(modelValue)) {\n return 'multiple'\n }\n\n return throwIncorrectModelValueError(modelValue, 'auto')\n}\n\nconst sortRange = (modelValue: DatePickerRange) => {\n if (modelValue.start && modelValue.end) {\n if (modelValue.start > modelValue.end) {\n return { start: modelValue.end, end: modelValue.start }\n }\n }\n\n return modelValue\n}\n\nexport const useDatePickerModelValue = (\n props: {\n [key: string]: any,\n modelValue?: DatePickerModelValue,\n mode: DatePickerMode\n },\n emit: (event: 'update:modelValue', newValue: DatePickerModelValue) => any,\n dateEqual: (date1?: Date | null, date2?: Date | null) => boolean,\n) => {\n const updateModelValue = (date: Date) => {\n if (!props.modelValue) {\n emit('update:modelValue', modeInitialValue(date, props.mode))\n return\n }\n\n const mode = props.mode === 'auto' ? modeFromModelValue(props.modelValue) : props.mode\n\n if (mode === 'single') {\n if (!isSingleDate(props.modelValue)) {\n return throwIncorrectModelValueError(props.modelValue, mode)\n }\n\n emit('update:modelValue', date)\n } else if (mode === 'range') {\n if (!isRange(props.modelValue)) {\n return throwIncorrectModelValueError(props.modelValue, mode)\n }\n\n if (props.modelValue.end && dateEqual(props.modelValue.end, date)) {\n return emit('update:modelValue', { start: props.modelValue.start, end: null })\n }\n if (props.modelValue.start && dateEqual(props.modelValue.start, date)) {\n return emit('update:modelValue', { start: null, end: props.modelValue.end })\n }\n\n if (props.modelValue.end === null) {\n return emit('update:modelValue', sortRange({ start: props.modelValue.start, end: date }))\n }\n if (props.modelValue.start === null) {\n return emit('update:modelValue', sortRange({ end: props.modelValue.end, start: date }))\n }\n\n emit('update:modelValue', { start: date, end: null })\n } else if (mode === 'multiple') {\n if (!isDates(props.modelValue)) {\n return throwIncorrectModelValueError(props.modelValue, mode)\n }\n\n const isDatesIncludesDate = !!props.modelValue.find((d) => dateEqual(d, date))\n\n if (isDatesIncludesDate) {\n emit('update:modelValue', props.modelValue.filter((d) => !dateEqual(d, date)))\n } else {\n emit('update:modelValue', [...props.modelValue, date].sort((a, b) => a.getTime() - b.getTime()))\n }\n }\n }\n\n return {\n updateModelValue,\n }\n}\n"],"names":[],"mappings":"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"}