feat(events): add displayTimezone field and zoned datetime helpers
Events stored UTC have always been interpreted in viewer-local TZ at the admin form and render layer. Adding an event-owned IANA timezone unblocks accurate scheduling and display regardless of the admin's or viewer's browser TZ. - Event.displayTimezone (default "America/Toronto") on the model. - displayTimezone added to admin create/update Zod schemas. - app/utils/timezones.js: zonedLocalToUTC, utcToZonedLocal, shortTimezoneName — Intl-based helpers, no new dependencies.
This commit is contained in:
parent
9e4030ccfd
commit
e6f05b5471
3 changed files with 81 additions and 0 deletions
|
|
@ -173,6 +173,7 @@ export const adminEventCreateSchema = z.object({
|
|||
description: z.string().min(1).max(50000),
|
||||
startDate: z.string().min(1),
|
||||
endDate: z.string().min(1),
|
||||
displayTimezone: z.string().max(100).optional(),
|
||||
location: z.string().max(500).optional(),
|
||||
maxAttendees: z.preprocess(emptyStringToUndefined, z.number().int().positive().optional().nullable()),
|
||||
membersOnly: z.boolean().optional(),
|
||||
|
|
@ -204,6 +205,7 @@ export const adminEventUpdateSchema = z.object({
|
|||
description: z.string().min(1).max(50000),
|
||||
startDate: z.string().min(1),
|
||||
endDate: z.string().min(1),
|
||||
displayTimezone: z.string().max(100).optional(),
|
||||
location: z.string().max(500).optional(),
|
||||
maxAttendees: z.preprocess(emptyStringToUndefined, z.number().int().positive().optional().nullable()),
|
||||
membersOnly: z.boolean().optional(),
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue