From b0c5baa9d3d7dd2e7c7dae291e23cf0a42527118 Mon Sep 17 00:00:00 2001 From: Thomas Heartman Date: Wed, 3 Jan 2024 13:48:43 +0100 Subject: [PATCH] chore: format schedule information according to user preferences (#5747) This pr uses the user's preferred timezone to display the scheduled times. If the user has no preferences, the default will be used. With norwegian locale set as preference: image With nothing set (falls back to my system setting): image --- .../ChangeRequestReviewStatus.tsx | 29 +++++++++++++++---- .../ChangeRequestTimeline.tsx | 9 +++++- frontend/src/utils/formatDate.ts | 2 +- 3 files changed, 33 insertions(+), 7 deletions(-) diff --git a/frontend/src/component/changeRequest/ChangeRequestOverview/ChangeRequestReviewStatus/ChangeRequestReviewStatus.tsx b/frontend/src/component/changeRequest/ChangeRequestOverview/ChangeRequestReviewStatus/ChangeRequestReviewStatus.tsx index 1372727856..b74e4b7fb1 100644 --- a/frontend/src/component/changeRequest/ChangeRequestOverview/ChangeRequestReviewStatus/ChangeRequestReviewStatus.tsx +++ b/frontend/src/component/changeRequest/ChangeRequestOverview/ChangeRequestReviewStatus/ChangeRequestReviewStatus.tsx @@ -8,6 +8,7 @@ import { useTheme, } from '@mui/material'; import { ReactComponent as ChangesAppliedIcon } from 'assets/icons/merge.svg'; +import { useLocationSettings } from 'hooks/useLocationSettings'; import { StyledOuterContainer, StyledButtonContainer, @@ -30,6 +31,7 @@ import { } from 'component/changeRequest/changeRequest.types'; import { getBrowserTimezone } from './utils'; import { ConditionallyRender } from '../../../common/ConditionallyRender/ConditionallyRender'; +import { formatDateYMDHMS } from 'utils/formatDate'; interface ISuggestChangeReviewsStatusProps { changeRequest: IChangeRequest; @@ -232,6 +234,7 @@ interface IScheduledProps { const Scheduled = ({ schedule, onEditClick }: IScheduledProps) => { const theme = useTheme(); const timezone = getBrowserTimezone(); + const { locationSettings } = useLocationSettings(); if (!schedule?.scheduledAt) { return null; @@ -273,18 +276,24 @@ const ScheduledFailed = ({ }: { schedule: IChangeRequestSchedule }) => { const theme = useTheme(); const timezone = getBrowserTimezone(); + const { locationSettings } = useLocationSettings(); if (!schedule?.scheduledAt) { return null; } + + const scheduledTime = formatDateYMDHMS( + new Date(schedule?.scheduledAt), + locationSettings?.locale, + ); + return ( - Changes failed to be applied on{' '} - {new Date(schedule?.scheduledAt).toLocaleString()} because - of {schedule?.failureReason} + Changes failed to be applied on {scheduledTime} because of{' '} + {schedule?.failureReason} Your timezone is {timezone} @@ -297,13 +306,23 @@ const ScheduledPending = ({ }: { schedule: IChangeRequestSchedule }) => { const theme = useTheme(); const timezone = getBrowserTimezone(); + const { locationSettings } = useLocationSettings(); + + if (!schedule?.scheduledAt) { + return null; + } + + const scheduledTime = formatDateYMDHMS( + new Date(schedule?.scheduledAt), + locationSettings?.locale, + ); + return ( - Changes are scheduled to be applied on:{' '} - {new Date(schedule?.scheduledAt).toLocaleString()} + Changes are scheduled to be applied on: {scheduledTime} Your timezone is {timezone} diff --git a/frontend/src/component/changeRequest/ChangeRequestOverview/ChangeRequestTimeline/ChangeRequestTimeline.tsx b/frontend/src/component/changeRequest/ChangeRequestOverview/ChangeRequestTimeline/ChangeRequestTimeline.tsx index 8ea89c5398..e79cb2c9ce 100644 --- a/frontend/src/component/changeRequest/ChangeRequestOverview/ChangeRequestTimeline/ChangeRequestTimeline.tsx +++ b/frontend/src/component/changeRequest/ChangeRequestOverview/ChangeRequestTimeline/ChangeRequestTimeline.tsx @@ -10,6 +10,8 @@ import { ChangeRequestState } from '../../changeRequest.types'; import { ConditionallyRender } from '../../../common/ConditionallyRender/ConditionallyRender'; import { HtmlTooltip } from '../../../common/HtmlTooltip/HtmlTooltip'; import { Info } from '@mui/icons-material'; +import { useLocationSettings } from 'hooks/useLocationSettings'; +import { formatDateYMDHMS } from 'utils/formatDate'; interface ISuggestChangeTimelineProps { state: ChangeRequestState; @@ -103,6 +105,8 @@ export const ChangeRequestTimeline: FC = ({ } const activeIndex = data.findIndex((item) => item === state); + const { locationSettings } = useLocationSettings(); + return ( @@ -112,7 +116,10 @@ export const ChangeRequestTimeline: FC = ({ scheduledAt && state === 'Scheduled' && state === title - ? new Date(scheduledAt).toLocaleString() + ? formatDateYMDHMS( + new Date(scheduledAt), + locationSettings?.locale, + ) : undefined; const color = determineColor( state, diff --git a/frontend/src/utils/formatDate.ts b/frontend/src/utils/formatDate.ts index 3b20e4bb32..e071c6ea25 100644 --- a/frontend/src/utils/formatDate.ts +++ b/frontend/src/utils/formatDate.ts @@ -1,6 +1,6 @@ export const formatDateYMDHMS = ( date: number | string | Date, - locale: string, + locale?: string, ): string => { return new Date(date).toLocaleString(locale, { day: '2-digit',