{"version":3,"file":"dateUtils-C7TTQ0l4.js","sources":["../../../app/javascript/src/utils/dateUtils.ts"],"sourcesContent":["import moment, { Moment } from 'moment-timezone';\nimport { DateTime } from \"@/stores/liteCMS/cmsData\";\nimport { first, last, parseInt, sortBy, range } from 'lodash';\nimport { countUnit } from \"@/utils/stringUtils\";\n\nexport const getUtcTime = (date: any) => {\n const utcDate = moment.utc(date);\n if (utcDate.format('mm') === '00') {\n return utcDate.format('h A');\n }\n return utcDate.format('h:mm A');\n};\n\nexport const getTimezoneTime = (date: any, timezone: any) => {\n const tzDate = moment.tz(date, timezone);\n if (tzDate.format('mm') === '00') {\n return tzDate.format('h A');\n }\n return tzDate.format('h:mm A');\n};\n\nconst tc = (type: any, value: any) => {\n if (value <= 0) return '';\n\n switch (type) {\n case 'second':\n return value > 1 ? `${value} seconds` : `${value} second`;\n case 'minute':\n return value > 1 ? `${value} minutes` : `${value} minute`;\n case 'hour':\n return value > 1 ? `${value} hours` : `${value} hour`;\n case 'day':\n return value > 1 ? `${value} days` : `${value} day`;\n }\n return '';\n};\n\nexport const formattedTimer = (seconds: any) => {\n const secondsInteger = Math.ceil(seconds);\n\n const minutes = Math.floor(secondsInteger / 60);\n const remainingSeconds = secondsInteger % 60;\n\n const hours = Math.floor(minutes / 60);\n const remainingMinutes = minutes % 60;\n\n const days = Math.floor(hours / 24);\n const remainingHours = hours % 24;\n\n return [\n ['day', days],\n ['hour', remainingHours],\n ['minute', remainingMinutes],\n ['second', remainingSeconds]\n ].map(pair => tc(pair[0], pair[1]))\n .filter(v => Boolean(v))\n .join(', ');\n};\n\nexport const formatDate = (date: any, timezone = 'UTC', format = 'MMM D, YYYY') => {\n return moment.tz(date, timezone || 'UTC').format(format);\n}\n\nexport const nullableDate = (str: any) => {\n if (typeof str !== 'string' || str.trim() === '') {\n return null;\n }\n const date = new Date(str);\n return isNaN(date.getTime()) ? null : date;\n}\n\nexport function listDays(startDate: string | null, endDate: string | null) {\n const start = moment(startDate);\n const end = moment(endDate);\n const dates = [] as Moment[];\n while (start.isSameOrBefore(end, 'day')) {\n dates.push(start.clone());\n start.add(1, 'days');\n }\n return dates;\n}\n\nexport function datetime(dt: DateTime): Moment | null {\n if (dt.date) {\n const time = dt.time || '00:00:00';\n return moment(`${dt.date}T${time}Z`).tz('UTC');\n }\n return null;\n}\n\nexport function ymd(dt: any, tz: any = null): string | null {\n return toMoment(dt, tz)?.format('YYYY-MM-DD') ?? null;\n}\n\nexport function hms(dt: any, tz: any = null): string | null {\n return toMoment(dt, tz)?.format('HH:mm:ss') ?? null;\n}\n\nfunction toMoment(dt: Moment | Date | string | null, tz: string | null = null): Moment | null {\n if (dt) {\n const date = moment(dt);\n if (tz) date.tz(tz);\n return date;\n }\n return null;\n}\n\nfunction sortDates(dates: (string | Date)[]): (string | Date)[] {\n return dates.sort((a, b) => {\n const [dtA, dtB] = [toMoment(a), toMoment(b)];\n return dtA && dtB ? dtA.valueOf() - dtB.valueOf() : 0;\n });\n}\n\nexport function earliest(...dates: (string | Date)[]): string | Date | undefined {\n return first(sortDates(dates).filter(d => moment(d).isValid()));\n}\n\nexport function latest(...dates: (string | Date)[]): string | Date | undefined {\n return last(sortDates(dates.filter(d => moment(d).isValid())));\n}\n\nexport function humanizeDuration(length: number, unit: any) {\n const duration = moment.duration(length, unit);\n const hours = Math.floor(duration.asHours());\n const minutes = duration.minutes();\n\n const parts = [] as string[];\n\n if (hours > 0) {\n parts.push(countUnit(hours, 'hr'));\n }\n\n if (minutes > 0 || hours === 0) { // Always include minutes if no hours\n parts.push(countUnit(minutes, 'min'));\n }\n\n return parts.join(' ');\n}\n\nexport function formatMonthYear(months: Record<string|number, (string|number)[] | null>): string {\n const monthNames = [\n \"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\",\n \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\"\n ];\n\n // Extract and sort the years\n const years = Object.keys(months).map(year => parseInt(year)).sort((a, b) => a - b);\n\n if (years.length === 0) return '';\n\n // Check if all month lists are empty or null - handle years-only case\n const hasAnyMonths = Object.values(months).some(monthList =>\n monthList && Array.isArray(monthList) && monthList.length > 0\n );\n\n if (!hasAnyMonths) {\n // Handle years-only formatting\n const yearRanges: Array<[number, number]> = []; // [startYear, endYear]\n let currentYearRange: [number, number] | null = null;\n\n years.forEach(year => {\n if (!currentYearRange) {\n currentYearRange = [year, year];\n return;\n }\n\n if (year === currentYearRange[1] + 1) {\n // Consecutive year\n currentYearRange[1] = year;\n } else {\n // Non-consecutive year\n yearRanges.push([...currentYearRange]);\n currentYearRange = [year, year];\n }\n });\n\n if (currentYearRange) {\n yearRanges.push(currentYearRange);\n }\n\n return yearRanges.map(([startYear, endYear]) => {\n if (startYear === endYear) {\n return `${startYear}`;\n } else {\n return `${startYear} - ${endYear}`;\n }\n }).join(' / ');\n }\n\n // Create and sort year-month pairs\n const yearMonthPairs = sortBy(\n Object.entries(months).flatMap(([year, monthList]) => {\n if (!monthList || !Array.isArray(monthList) || monthList.length === 0) {\n return [];\n }\n return monthList.map(month => [parseInt(year), parseInt(month.toString())] as [number, number]);\n }),\n [0, 1] // Sort by year, then by month\n );\n\n if (!yearMonthPairs.length) return '';\n\n // Group consecutive months\n const ranges: Array<[number, number, number, number]> = [];\n let currentRange: [number, number, number, number] = [...yearMonthPairs[0], ...yearMonthPairs[0]];\n\n for (let i = 1; i < yearMonthPairs.length; i++) {\n const [year, month] = yearMonthPairs[i];\n const [, , endYear, endMonth] = currentRange;\n\n const isConsecutive =\n (year === endYear && month === endMonth + 1) || // Same year, next month\n (year === endYear + 1 && month === 1 && endMonth === 12); // January of next year\n\n if (isConsecutive) {\n currentRange[2] = year;\n currentRange[3] = month;\n } else {\n ranges.push([...currentRange]);\n currentRange = [year, month, year, month];\n }\n }\n\n ranges.push(currentRange);\n\n // Format each range\n return ranges.map(([startYear, startMonth, endYear, endMonth]) => {\n if (startYear === endYear && startMonth === endMonth) {\n return `${monthNames[startMonth - 1]} ${startYear}`;\n } else if (startYear === endYear) {\n return `${monthNames[startMonth - 1]} - ${monthNames[endMonth - 1]} ${startYear}`;\n } else {\n return `${monthNames[startMonth - 1]} ${startYear} - ${monthNames[endMonth - 1]} ${endYear}`;\n }\n }).join(' / ');\n}\n"],"names":["getTimezoneTime","date","timezone","tzDate","moment","tc","type","value","formattedTimer","seconds","secondsInteger","minutes","remainingSeconds","hours","remainingMinutes","days","remainingHours","pair","v","formatDate","format","listDays","startDate","endDate","start","end","dates","datetime","dt","time","ymd","tz","_a","toMoment","hms","sortDates","a","b","dtA","dtB","earliest","first","d","latest","last","humanizeDuration","length","unit","duration","parts","countUnit","formatMonthYear","months","monthNames","years","year","parseInt","monthList","yearRanges","currentYearRange","startYear","endYear","yearMonthPairs","sortBy","month","ranges","currentRange","i","endMonth","startMonth"],"mappings":"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"}