UNPKG

reka-ui

Version:

Vue port for Radix UI Primitives.

1 lines 12 kB
{"version":3,"file":"parser.cjs","sources":["../../src/shared/date/parser.ts"],"sourcesContent":["import { DATE_SEGMENT_PARTS, type DateSegmentPart, EDITABLE_SEGMENT_PARTS, type Granularity, type HourCycle, type SegmentContentObj, type SegmentPart, type SegmentValueObj, TIME_SEGMENT_PARTS, type TimeSegmentPart, getOptsByGranularity, getPlaceholder, isDateSegmentPart, isSegmentPart } from '@/shared/date'\nimport { isZonedDateTime, toDate } from '@/date'\nimport type { Formatter } from '@/shared'\nimport type { DateFields, DateValue } from '@internationalized/date'\nimport type { Ref } from 'vue'\n\nconst calendarDateTimeGranularities = ['hour', 'minute', 'second']\n\ntype SyncDateSegmentValuesProps = {\n value: DateValue\n formatter: Formatter\n}\n\ntype SyncTimeSegmentValuesProps = {\n value: DateValue\n formatter: Formatter\n}\n\nexport function syncTimeSegmentValues(props: SyncTimeSegmentValuesProps) {\n return Object.fromEntries(TIME_SEGMENT_PARTS.map((part) => {\n if (part === 'dayPeriod')\n return [part, props.formatter.dayPeriod(toDate(props.value))]\n return [part, props.value[part as keyof DateValue]]\n })) as SegmentValueObj\n}\n\nexport function syncSegmentValues(props: SyncDateSegmentValuesProps) {\n const { formatter } = props\n\n const dateValues = DATE_SEGMENT_PARTS.map((part) => {\n return [part, props.value[part]]\n })\n if ('hour' in props.value) {\n const timeValues = syncTimeSegmentValues({ value: props.value, formatter })\n\n return { ...Object.fromEntries(dateValues), ...timeValues } as SegmentValueObj\n }\n\n return Object.fromEntries(dateValues) as SegmentValueObj\n}\n\nexport function initializeTimeSegmentValues(granularity: 'hour' | 'minute' | 'second'): SegmentValueObj {\n return Object.fromEntries(\n TIME_SEGMENT_PARTS.map((part) => {\n if (part === 'dayPeriod')\n return [part, 'AM']\n return [part, null]\n }).filter(([key]) => {\n if (key === 'literal' || key === null)\n return false\n if (granularity === 'minute' && key === 'second')\n return false\n if (granularity === 'hour' && (key === 'second' || key === 'minute'))\n return false\n else return true\n }),\n )\n}\n\nexport function initializeSegmentValues(granularity: Granularity): SegmentValueObj {\n const initialParts = EDITABLE_SEGMENT_PARTS.map((part) => {\n if (part === 'dayPeriod')\n return [part, 'AM']\n\n return [part, null]\n }).filter(([key]) => {\n if (key === 'literal' || key === null)\n return false\n if (granularity === 'minute' && key === 'second')\n return false\n if (granularity === 'hour' && (key === 'second' || key === 'minute'))\n return false\n if (granularity === 'day')\n return !calendarDateTimeGranularities.includes(key) && key !== 'dayPeriod'\n else return true\n })\n\n return Object.fromEntries(initialParts)\n}\n\ntype SharedContentProps = {\n granularity: Granularity\n dateRef: DateValue\n formatter: Formatter\n hideTimeZone: boolean\n hourCycle: HourCycle\n isTimeValue?: boolean\n}\n\ntype CreateContentObjProps = SharedContentProps & {\n segmentValues: SegmentValueObj\n locale: Ref<string>\n}\n\ntype CreateContentArrProps = SharedContentProps & {\n contentObj: SegmentContentObj\n}\n\nfunction createContentObj(props: CreateContentObjProps) {\n const { segmentValues, formatter, locale } = props\n function getPartContent(part: DateSegmentPart | TimeSegmentPart) {\n if ('hour' in segmentValues) {\n const value = segmentValues[part]\n if (value !== null) {\n /**\n * Edge case for when the month field is filled and the day field snaps to the maximum value of the value of the placeholder month\n */\n if (part === 'day' && segmentValues.month !== null) {\n return formatter.part(props.dateRef.set({ [part as keyof DateFields]: value, month: segmentValues.month }), part, {\n hourCycle: props.hourCycle === 24 ? 'h23' : undefined,\n })\n }\n return formatter.part(props.dateRef.set({ [part]: value }), part, {\n hourCycle: props.hourCycle === 24 ? 'h23' : undefined,\n })\n }\n else {\n return getPlaceholder(part, '', locale.value)\n }\n }\n else {\n if (isDateSegmentPart(part)) {\n const value = segmentValues[part]\n if (value !== null) {\n if (part === 'day' && segmentValues.month !== null)\n /**\n * As described above, same function\n */\n return formatter.part(props.dateRef.set({ [part]: value, month: segmentValues.month }), part)\n\n return formatter.part(props.dateRef.set({ [part]: value }), part)\n }\n\n else {\n return getPlaceholder(part, '', locale.value)\n }\n }\n return ''\n }\n }\n\n const content = Object.keys(segmentValues).reduce((obj, part) => {\n if (!isSegmentPart(part))\n return obj\n if ('hour' in segmentValues && part === 'dayPeriod') {\n const value = segmentValues[part]\n\n if (value !== null)\n obj[part] = value\n\n else\n obj[part] = getPlaceholder(part, 'AM', locale.value)\n }\n else {\n obj[part] = getPartContent(part)\n }\n\n return obj\n }, {} as SegmentContentObj)\n\n return content\n}\n\nfunction createContentArr(props: CreateContentArrProps) {\n const { granularity, formatter, contentObj, hideTimeZone, hourCycle, isTimeValue } = props\n const parts = formatter.toParts(props.dateRef, getOptsByGranularity(granularity, hourCycle, isTimeValue))\n\n const segmentContentArr = parts\n .map((part) => {\n const defaultParts = ['literal', 'timeZoneName', null]\n\n if (defaultParts.includes(part.type) || !isSegmentPart(part.type)) {\n return {\n part: part.type,\n value: part.value,\n }\n }\n\n return {\n part: part.type,\n value: contentObj[part.type],\n }\n })\n .filter((segment): segment is { part: SegmentPart, value: string } => {\n if (segment.part === null || segment.value === null)\n return false\n if (segment.part === 'timeZoneName' && (!isZonedDateTime(props.dateRef) || hideTimeZone))\n return false\n\n return true\n })\n\n return segmentContentArr\n}\n\ntype CreateContentProps = CreateContentObjProps\n\nexport function createContent(props: CreateContentProps) {\n const contentObj = createContentObj(props)\n\n const contentArr = createContentArr({\n contentObj,\n ...props,\n })\n\n return {\n obj: contentObj,\n arr: contentArr,\n }\n}\n"],"names":["TIME_SEGMENT_PARTS","toDate","DATE_SEGMENT_PARTS","EDITABLE_SEGMENT_PARTS","getPlaceholder","isDateSegmentPart","isSegmentPart","getOptsByGranularity","isZonedDateTime"],"mappings":"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"}