[Customer Portal MicroApp] fix: guard against invalid user timezone - #1015
Conversation
…from /me The /me endpoint returns the ServiceNow placeholder --None-- when a user has no timezone set. This passed the nullish check in useDateTime and crashed dayjs.tz() with RangeError: invalid time zone, breaking the Support page lists. useDateTime now validates the timezone via Intl and falls back to the device timezone; MeProvider normalizes --None-- to undefined at the data boundary.
|
Warning Review limit reached
Next review available in: 16 minutes Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available. How can I continue?After more reviews become available, a review can be triggered using the To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews. How do review limits work?CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability. For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window. Please refer docs for additional details. Review details⚙️ Run configurationConfiguration used: Path: .coderabbit.yaml Review profile: CHILL Plan: Pro Run ID: 📒 Files selected for processing (2)
✨ Finishing Touches🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
There was a problem hiding this comment.
Pull request overview
This PR hardens Customer Portal MicroApp date/time formatting against invalid or placeholder timezone values coming from the /me endpoint, preventing dayjs.tz() from throwing and triggering error boundaries on Support page item cards.
Changes:
- Added timezone validation via
Intl.DateTimeFormatand fallback logic inuseDateTime. - Normalized ServiceNow’s
"--None--"timezone placeholder toundefinedat theMeProviderboundary.
Reviewed changes
Copilot reviewed 2 out of 2 changed files in this pull request and generated 1 comment.
| File | Description |
|---|---|
| apps/customer-portal/microapp/src/utils/useDateTime.ts | Adds resolveTimezone() to validate incoming timezone strings and fall back to the device timezone before calling dayjs.tz(). |
| apps/customer-portal/microapp/src/context/me/MeProvider.tsx | Normalizes the ServiceNow "--None--" placeholder to undefined when populating the Me context. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
The /me endpoint returns the ServiceNow placeholder "--None--" when a
user has no timezone set. This string passed the nullish check in
useDateTime and crashed dayjs.tz() with RangeError: invalid time zone,
causing every ItemCard on the Support page to hit the error boundary.
useDateTime: validate the timezone via Intl and fall back to the
device timezone when missing or invalid
MeProvider: normalize "--None--" to undefined at the data boundary