vuestic-ui
Version:
Vue 3 UI Framework
1 lines • 6.88 kB
Source Map (JSON)
{"version":3,"file":"model-value.mjs","sources":["../../../../../../src/components/va-date-input/hooks/model-value.ts"],"sourcesContent":["import { Ref, computed } from 'vue'\nimport { DateInputDate, DateInputModelValue, DateInputRange, DateInputValue } from '../types'\nimport { formatDateToTheSameStandardFormat, parseDate } from '../utils/parse-date'\nimport { isNil } from '../../../utils/isNilValue'\n\nexport const isRange = (date: DateInputModelValue): date is DateInputRange<DateInputDate> => {\n if (date === null) { return false }\n\n return typeof date === 'object' && ('start' in date || 'end' in date)\n}\n\nexport const isMultiple = (date: DateInputModelValue): date is DateInputDate[] => {\n if (date === null) { return false }\n\n return Array.isArray(date)\n}\n\nexport const isSingleDate = (date: DateInputModelValue): date is DateInputDate => {\n if (date === null) { return false }\n\n return typeof date === 'string' || typeof date === 'number' || date instanceof Date\n}\n\nexport const useDateInputModelValue = (\n modelValue: Ref<DateInputModelValue>,\n mode: Ref<'single' | 'multiple' | 'range' | 'auto'>,\n parseModelValue: (date: string) => DateInputModelValue,\n formatModelValue: (date: DateInputModelValue) => string,\n formatModelValueSingleDate?: (date: Date) => string,\n) => {\n const syncFormat = (original: DateInputDate | null | undefined, target: Date) => {\n if (formatModelValueSingleDate) {\n return formatModelValueSingleDate(target)\n }\n\n if (typeof original === 'string') {\n const standardFormat = formatDateToTheSameStandardFormat(target, original)\n\n if (standardFormat) { return standardFormat }\n\n return formatModelValue(target)\n }\n\n if (typeof original === 'number') {\n return target.getTime()\n }\n\n return target\n }\n\n const normalizeSingleDate = (value: DateInputDate): Date => {\n if (value instanceof Date) {\n return value\n }\n\n return new Date(value)\n }\n\n const dateValue = computed(() => {\n if (modelValue.value === null || modelValue.value === undefined) {\n return null\n }\n\n if (typeof modelValue.value === 'string') {\n return parseModelValue(modelValue.value)\n }\n\n if (typeof modelValue.value === 'number') {\n return new Date(modelValue.value)\n }\n\n return modelValue.value\n })\n\n const normalized = computed({\n get: () => {\n if (dateValue.value === null || dateValue.value === undefined) {\n return null\n }\n\n if (isMultiple(dateValue.value)) {\n return dateValue.value.map(normalizeSingleDate)\n }\n\n if (isRange(dateValue.value)) {\n const { start, end } = dateValue.value\n\n return {\n start: start ? normalizeSingleDate(start) : null,\n end: end ? normalizeSingleDate(end) : null,\n }\n }\n\n return normalizeSingleDate(dateValue.value)\n },\n set (newValue: DateInputValue) {\n if (newValue === null || newValue === undefined) {\n modelValue.value = newValue\n return\n }\n\n if (isMultiple(newValue) && (isMultiple(modelValue.value) || isNil(modelValue.value))) {\n const originalValue = modelValue.value\n\n modelValue.value = newValue\n .map((v, index) => syncFormat((originalValue)?.[index] || (originalValue)?.[0], v))\n return\n }\n\n if (isRange(newValue) && (isRange(modelValue.value) || isNil(modelValue.value))) {\n const { start, end } = newValue\n\n modelValue.value = {\n start: start ? syncFormat(modelValue.value?.start, start) : null,\n // Sync end date only if start date is specified\n end: end ? syncFormat(modelValue.value?.start, end) : null,\n }\n\n return\n }\n\n if (isSingleDate(newValue) && (isSingleDate(modelValue.value) || isNil(modelValue.value))) {\n modelValue.value = syncFormat(modelValue.value, newValue)\n return\n }\n\n throw new Error('Input date is not the same as date from props')\n },\n })\n\n const text = computed({\n get: () => {\n if (normalized.value === null || normalized.value === undefined) {\n return ''\n }\n\n return formatModelValue(normalized.value)\n },\n set: (value: string) => {\n modelValue.value = parseModelValue(value)\n },\n })\n\n return {\n text,\n normalized,\n }\n}\n"],"names":[],"mappings":"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"}