Merged in fix/SW-2801-correct-date-formats (pull request #2400)

fix(SW-2801): Added lang specific date formats

* fix(SW-2801): Added lang specific date formats

* fix: wrong type import


Approved-by: Michael Zetterberg
This commit is contained in:
Tobias Johansson
2025-06-25 11:12:28 +00:00
parent c0efbd17ff
commit 8272327993
18 changed files with 114 additions and 33 deletions

View File

@@ -6,6 +6,7 @@ import { Divider } from "@scandic-hotels/design-system/Divider"
import { MaterialIcon } from "@scandic-hotels/design-system/Icons/MaterialIcon"
import { Typography } from "@scandic-hotels/design-system/Typography"
import { longDateFormat } from "@/constants/dateFormats"
import { dt } from "@/lib/dt"
import { useBookingConfirmationStore } from "@/stores/booking-confirmation"
@@ -50,10 +51,10 @@ export default function Receipt() {
</Typography>
<Typography variant="Body/Paragraph/mdBold">
<p className={styles.dates}>
{dt(fromDate).locale(lang).format("ddd, D MMM")}
{dt(fromDate).locale(lang).format(longDateFormat[lang])}
<MaterialIcon icon="arrow_forward" size={15} color="CurrentColor" />
{/* eslint-disable-next-line formatjs/no-literal-string-in-jsx */}
{dt(toDate).locale(lang).format("ddd, D MMM")} ({nights})
{dt(toDate).locale(lang).format(longDateFormat[lang])} ({nights})
</p>
</Typography>
</header>

View File

@@ -6,6 +6,10 @@ import { MaterialIcon } from "@scandic-hotels/design-system/Icons/MaterialIcon"
import { Typography } from "@scandic-hotels/design-system/Typography"
import { CancellationRuleEnum } from "@/constants/booking"
import {
changeOrCancelDateFormat,
longDateFormat,
} from "@/constants/dateFormats"
import { dt } from "@/lib/dt"
import Image from "@/components/Image"
@@ -128,7 +132,7 @@ export default function Room({
defaultMessage: "{checkInDate} from {checkInTime}",
},
{
checkInDate: fromDate.format("ddd, D MMM"),
checkInDate: fromDate.format(longDateFormat[lang]),
checkInTime: checkInTime,
}
)}
@@ -146,7 +150,7 @@ export default function Room({
defaultMessage: "{checkOutDate} from {checkOutTime}",
},
{
checkOutDate: toDate.format("ddd, D MMM"),
checkOutDate: toDate.format(longDateFormat[lang]),
checkOutTime: checkOutTime,
}
)}
@@ -172,7 +176,10 @@ export default function Room({
{
defaultMessage: "Until {time}, {date}",
},
{ time: "18:00", date: fromDate.format("dddd D MMM") }
{
time: "18:00",
date: fromDate.format(changeOrCancelDateFormat[lang]),
}
)}
</p>
</li>

View File

@@ -8,6 +8,7 @@ import { Divider } from "@scandic-hotels/design-system/Divider"
import { MaterialIcon } from "@scandic-hotels/design-system/Icons/MaterialIcon"
import { Typography } from "@scandic-hotels/design-system/Typography"
import { longDateFormat } from "@/constants/dateFormats"
import { dt } from "@/lib/dt"
import BookingCodeChip from "@/components/BookingCodeChip"
@@ -96,14 +97,15 @@ export default function SummaryUI({
})}
</Subtitle>
<Body className={styles.date} color="baseTextMediumContrast">
{dt(booking.fromDate).locale(lang).format("ddd, D MMM")}
{dt(booking.fromDate).locale(lang).format(longDateFormat[lang])}
<MaterialIcon
icon="arrow_right"
color="Icon/Interactive/Secondary"
size={15}
/>
{/* eslint-disable-next-line formatjs/no-literal-string-in-jsx */}
{dt(booking.toDate).locale(lang).format("ddd, D MMM")} ({nightsMsg})
{/* eslint-disable formatjs/no-literal-string-in-jsx */}
{dt(booking.toDate).locale(lang).format(longDateFormat[lang])} (
{nightsMsg}){/* eslint-enable formatjs/no-literal-string-in-jsx */}
</Body>
<MaterialIcon
className={styles.chevronIcon}

View File

@@ -1,5 +1,6 @@
import { Typography } from "@scandic-hotels/design-system/Typography"
import { longDateWithYearFormat } from "@/constants/dateFormats"
import { dt } from "@/lib/dt"
import { getIntl } from "@/i18n"
@@ -71,7 +72,9 @@ export default async function Footer({ booking, room }: FooterProps) {
</Typography>
<Typography variant="Body/Supporting text (caption)/smRegular">
<dd>
{dt(booking.checkInDate).locale(lang).format("ddd, D MMM YYYY")}
{dt(booking.checkInDate)
.locale(lang)
.format(longDateWithYearFormat[lang])}
</dd>
</Typography>
</div>
@@ -86,7 +89,9 @@ export default async function Footer({ booking, room }: FooterProps) {
</Typography>
<Typography variant="Body/Supporting text (caption)/smRegular">
<dd>
{dt(booking.checkOutDate).locale(lang).format("ddd, D MMM YYYY")}
{dt(booking.checkOutDate)
.locale(lang)
.format(longDateWithYearFormat[lang])}
</dd>
</Typography>
</div>

View File

@@ -4,6 +4,7 @@ import { useIntl } from "react-intl"
import { Typography } from "@scandic-hotels/design-system/Typography"
import { longDateWithYearFormat } from "@/constants/dateFormats"
import { dt } from "@/lib/dt"
import { useMyStayStore } from "@/stores/my-stay"
@@ -41,8 +42,12 @@ export default function CancelStayConfirmation({
})
)
const checkInDate = dt(fromDate).locale(lang).format("dddd D MMM YYYY")
const checkOutDate = dt(toDate).locale(lang).format("dddd D MMM YYYY")
const checkInDate = dt(fromDate)
.locale(lang)
.format(longDateWithYearFormat[lang])
const checkOutDate = dt(toDate)
.locale(lang)
.format(longDateWithYearFormat[lang])
const title = intl.formatMessage({ defaultMessage: "Cancel booking" })
const primaryLabel = intl.formatMessage({

View File

@@ -3,6 +3,7 @@ import { useIntl } from "react-intl"
import { Divider } from "@scandic-hotels/design-system/Divider"
import { longDateWithYearFormat } from "@/constants/dateFormats"
import { dt } from "@/lib/dt"
import { trpc } from "@/lib/trpc/client"
import { useMyStayStore } from "@/stores/my-stay"
@@ -26,7 +27,7 @@ interface ConfirmationProps {
}
function formatDate(date: Date | string, lang: Lang) {
return dt(date).locale(lang).format("dddd, DD MMM, YYYY")
return dt(date).locale(lang).format(longDateWithYearFormat[lang])
}
export default function Confirmation({

View File

@@ -10,6 +10,7 @@ import { useIntl } from "react-intl"
import { MaterialIcon } from "@scandic-hotels/design-system/Icons/MaterialIcon"
import { Typography } from "@scandic-hotels/design-system/Typography"
import { longDateWithYearFormat } from "@/constants/dateFormats"
import { dt } from "@/lib/dt"
import DatePickerSingleDesktop from "@/components/DatePicker/Single/Desktop"
@@ -65,8 +66,12 @@ export default function NewDates({ checkInDate, checkOutDate }: NewDatesProps) {
const checkInLabel = intl.formatMessage({ defaultMessage: "Check-in" })
const checkOutLabel = intl.formatMessage({ defaultMessage: "Check-out" })
const checkInText = dt(fromDate).locale(lang).format("dddd, DD MMM, YYYY")
const checkOutText = dt(toDate).locale(lang).format("dddd, DD MMM, YYYY")
const checkInText = dt(fromDate)
.locale(lang)
.format(longDateWithYearFormat[lang])
const checkOutText = dt(toDate)
.locale(lang)
.format(longDateWithYearFormat[lang])
return (
<>
<div className={styles.container}>

View File

@@ -4,6 +4,7 @@ import { useIntl } from "react-intl"
import { MaterialIcon } from "@scandic-hotels/design-system/Icons/MaterialIcon"
import { Typography } from "@scandic-hotels/design-system/Typography"
import { shortDateFormat } from "@/constants/dateFormats"
import { dt } from "@/lib/dt"
import { useMyStayStore } from "@/stores/my-stay"
@@ -19,9 +20,9 @@ export default function Dates() {
checkOutDate: state.bookedRoom.checkOutDate,
}))
const from = dt(checkInDate).locale(lang).format("D MMM")
const from = dt(checkInDate).locale(lang).format(shortDateFormat[lang])
const fromYear = dt(checkInDate).year()
const to = dt(checkOutDate).locale(lang).format("D MMM")
const to = dt(checkOutDate).locale(lang).format(shortDateFormat[lang])
const toYear = dt(checkOutDate).year()
const isSameYear = fromYear === toYear

View File

@@ -7,6 +7,7 @@ import { MaterialIcon } from "@scandic-hotels/design-system/Icons/MaterialIcon"
import { Typography } from "@scandic-hotels/design-system/Typography"
import { CancellationRuleEnum } from "@/constants/booking"
import { changeOrCancelDateFormat } from "@/constants/dateFormats"
import { dt } from "@/lib/dt"
import { IconForFeatureCode } from "@/components/HotelReservation/utils"
@@ -296,7 +297,7 @@ export default function Room({ booking, roomNr, user }: RoomProps) {
<Typography variant="Body/Paragraph/mdRegular">
{/* eslint-disable-next-line formatjs/no-literal-string-in-jsx */}
<p>18:00, {fromDate.format("dddd D MMM")}</p>
<p>18:00, {fromDate.format(changeOrCancelDateFormat[lang])}</p>
</Typography>
</div>
)}

View File

@@ -1,5 +1,6 @@
import { useIntl } from "react-intl"
import { changeOrCancelDateFormat } from "@/constants/dateFormats"
import { dt } from "@/lib/dt"
import { useMyStayStore } from "@/stores/my-stay"
@@ -31,7 +32,7 @@ export default function ModifyBy() {
},
{
time: "18:00",
date: fromDate.format("dddd D MMM"),
date: fromDate.format(changeOrCancelDateFormat[lang]),
}
)

View File

@@ -4,6 +4,7 @@ import { useIntl } from "react-intl"
import { Typography } from "@scandic-hotels/design-system/Typography"
import { longDateFormat } from "@/constants/dateFormats"
import { dt } from "@/lib/dt"
import useLang from "@/hooks/useLang"
@@ -82,8 +83,8 @@ export default function PriceDetailsTable({
{ totalNights: nights }
)
const arrival = dt(fromDate).locale(lang).format("ddd, D MMM")
const departue = dt(toDate).locale(lang).format("ddd, D MMM")
const arrival = dt(fromDate).locale(lang).format(longDateFormat[lang])
const departue = dt(toDate).locale(lang).format(longDateFormat[lang])
const duration = ` ${arrival} - ${departue} (${nightsMsg})`
const isAllBreakfastIncluded = rooms.every((room) => room.breakfastIncluded)

View File

@@ -7,6 +7,7 @@ import { IconButton } from "@scandic-hotels/design-system/IconButton"
import { MaterialIcon } from "@scandic-hotels/design-system/Icons/MaterialIcon"
import { Typography } from "@scandic-hotels/design-system/Typography"
import { longDateFormat } from "@/constants/dateFormats"
import { dt } from "@/lib/dt"
import { useRatesStore } from "@/stores/select-rate"
@@ -84,10 +85,11 @@ export default function SummaryContent({
</div>
<Typography variant="Body/Paragraph/mdBold">
<p className={styles.dates}>
{dt(booking.fromDate).locale(lang).format("ddd, D MMM")}
{dt(booking.fromDate).locale(lang).format(longDateFormat[lang])}
<MaterialIcon icon="arrow_forward" size={15} color="CurrentColor" />
{/* eslint-disable-next-line formatjs/no-literal-string-in-jsx */}
{dt(booking.toDate).locale(lang).format("ddd, D MMM")} ({nights})
{/* eslint-disable formatjs/no-literal-string-in-jsx */}
{dt(booking.toDate).locale(lang).format(longDateFormat[lang])} (
{nights}){/* eslint-enable formatjs/no-literal-string-in-jsx */}
</p>
</Typography>
</header>

View File

@@ -7,6 +7,7 @@ import { Button } from "@scandic-hotels/design-system/Button"
import { Divider } from "@scandic-hotels/design-system/Divider"
import { MaterialIcon } from "@scandic-hotels/design-system/Icons/MaterialIcon"
import { longDateFormat } from "@/constants/dateFormats"
import { dt } from "@/lib/dt"
import { useRatesStore } from "@/stores/select-rate"
@@ -84,14 +85,15 @@ export default function Summary({
})}
</Subtitle>
<Body className={styles.date} color="baseTextMediumContrast">
{dt(booking.fromDate).locale(lang).format("ddd, D MMM")}
{dt(booking.fromDate).locale(lang).format(longDateFormat[lang])}
<MaterialIcon
icon="arrow_forward"
size={15}
color="Icon/Interactive/Secondary"
/>
{/* eslint-disable-next-line formatjs/no-literal-string-in-jsx */}
{dt(booking.toDate).locale(lang).format("ddd, D MMM")} ({nights})
{/* eslint-disable formatjs/no-literal-string-in-jsx */}
{dt(booking.toDate).locale(lang).format(longDateFormat[lang])} (
{nights}){/* eslint-enable formatjs/no-literal-string-in-jsx */}
</Body>
<MaterialIcon
className={styles.chevronIcon}