UNPKG

vueless

Version:

Vue Styleless UI Component Library, powered by Tailwind CSS.

83 lines (60 loc) 2.81 kB
import { computed } from "vue"; import { isSameDay, isSameMonth } from "../ui.form-calendar/utilDate.ts"; import { formatDate, parseDate } from "../ui.form-calendar/utilCalendar.ts"; import { getTokenIndexes } from "./utilDateRange.ts"; import type { Ref } from "vue"; import type { IsPeriod, SortedLocale } from "./types.ts"; import type { RangeDate } from "../ui.form-calendar/types.ts"; export function useUserFormat( localValue: Ref<RangeDate>, userFormatLocale: Ref<SortedLocale>, dateFormat: string, isPeriod: Ref<IsPeriod>, locale: Ref<SortedLocale>, userDateFormat: string, ) { const userFormatDate = computed(() => { if ((!localValue.value.from && !localValue.value.to) || !localValue.value.from) return ""; let title = ""; const isDefaultTitle = isPeriod.value.week || isPeriod.value.custom || isPeriod.value.ownRange; const from = parseDate(localValue.value.from, dateFormat, locale.value); const to = localValue.value.to !== null ? parseDate(localValue.value.to, dateFormat, locale.value) : null; let fromFormat = userDateFormat; if (isDefaultTitle && from && to) { let startMonthName = userFormatLocale.value.months.longhand[from.getMonth()]; const endMonthName = userFormatLocale.value.months.longhand[to.getMonth()]; const endYear = String(to.getFullYear()); if (startMonthName === endMonthName && endMonthName === endYear) { startMonthName = ""; } const isDateToSameMonth = isSameMonth(from, to); const isDateToSameYear = from.getFullYear() === to.getFullYear(); const isSameDate = isSameDay(from, to); if (isDateToSameMonth && isDateToSameYear) { fromFormat = fromFormat.replace(/[YyMmFnU]/g, ""); } if (!isDateToSameMonth && isDateToSameYear) { fromFormat = fromFormat.replace(/[Yy]/g, ""); } fromFormat = fromFormat.slice(...getTokenIndexes(fromFormat)); const fromTitle = from ? formatDate(from, fromFormat, userFormatLocale.value) : ""; const toTitle = to ? formatDate(to, userDateFormat, userFormatLocale.value) : ""; title = isSameDate ? toTitle.trim() : `${fromTitle.trim()}${toTitle.trim()}`; } if (isPeriod.value.month) { title = formatDate(from, "F Y", userFormatLocale.value); } if (isPeriod.value.quarter || isPeriod.value.year) { fromFormat = fromFormat.replace(/[Yy]/g, ""); fromFormat = fromFormat.slice(...getTokenIndexes(fromFormat)); const fromTitle = from ? formatDate(from, fromFormat, userFormatLocale.value) : ""; const toTitle = to ? formatDate(to, userDateFormat, userFormatLocale.value) : ""; title = `${fromTitle.trim()}${toTitle.trim()}`; } return title; }); return { userFormatDate }; }