From d727e7a7ab317dd197d2ec4b3a7fe4e8c8edf083 Mon Sep 17 00:00:00 2001 From: Jared Vititoe Date: Sat, 11 Jul 2026 13:52:29 -0400 Subject: [PATCH] refactor(schedule): dedup formatSendAt into shared formatFriendlyDateTime MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ScheduleMessageModal had a local formatSendAt(Date) byte-equivalent to the tested formatFriendlyDateTime (utils/datetimeInput). Reuse the shared, unit- tested helper instead of a second copy — identical output. (Also prettier-clean.) Co-Authored-By: Claude Opus 4.8 --- .../features/room/ScheduleMessageModal.tsx | 32 +++++++------------ 1 file changed, 11 insertions(+), 21 deletions(-) diff --git a/src/app/features/room/ScheduleMessageModal.tsx b/src/app/features/room/ScheduleMessageModal.tsx index 253eac0a6..3874d3ce6 100644 --- a/src/app/features/room/ScheduleMessageModal.tsx +++ b/src/app/features/room/ScheduleMessageModal.tsx @@ -21,7 +21,13 @@ import { useMatrixClient } from '../../hooks/useMatrixClient'; import { stopPropagation } from '../../utils/keyboard'; import { scheduleMessage } from '../../utils/scheduledMessages'; import { useModalStyle } from '../../hooks/useModalStyle'; -import { toLocalDate, toLocalTime, parseLocalDateTime, pickerInputStyle } from '../../utils/datetimeInput'; +import { + toLocalDate, + toLocalTime, + parseLocalDateTime, + pickerInputStyle, + formatFriendlyDateTime, +} from '../../utils/datetimeInput'; interface ScheduleMessageModalProps { roomId: string; @@ -47,25 +53,6 @@ function formatRelativeTime(ms: number): string { return 'in less than a minute'; } -function formatSendAt(sendAt: Date): string { - const now = new Date(); - const isToday = - sendAt.getFullYear() === now.getFullYear() && - sendAt.getMonth() === now.getMonth() && - sendAt.getDate() === now.getDate(); - const tomorrow = new Date(now); - tomorrow.setDate(tomorrow.getDate() + 1); - const isTomorrow = - sendAt.getFullYear() === tomorrow.getFullYear() && - sendAt.getMonth() === tomorrow.getMonth() && - sendAt.getDate() === tomorrow.getDate(); - - const timeStr = sendAt.toLocaleTimeString(undefined, { hour: '2-digit', minute: '2-digit' }); - if (isToday) return `Today at ${timeStr}`; - if (isTomorrow) return `Tomorrow at ${timeStr}`; - return `${sendAt.toLocaleDateString()} at ${timeStr}`; -} - export function ScheduleMessageModal({ roomId, initialBody, @@ -112,7 +99,10 @@ export function ScheduleMessageModal({ setPreview(null); return; } - setPreview({ label: formatSendAt(sendAt), relative: formatRelativeTime(diffMs) }); + setPreview({ + label: formatFriendlyDateTime(sendAt.getTime()), + relative: formatRelativeTime(diffMs), + }); }, [getSendAt]); useEffect(() => {