fix: cleanup profile pages in renaming to follow naming convention

cleanup profile page html to be valid

replace old temp design system components with new ones

divider is now correctly an hr element

less section elements to be valid html
This commit is contained in:
Christian Andolf
2025-05-21 18:15:43 +02:00
parent 502ffa449d
commit aa06a0654d
19 changed files with 423 additions and 375 deletions

View File

@@ -0,0 +1,182 @@
import { MaterialIcon } from "@scandic-hotels/design-system/Icons/MaterialIcon"
import { Typography } from "@scandic-hotels/design-system/Typography"
import { countriesMap } from "@/constants/countries"
import { Lang, languages } from "@/constants/languages"
import { profileEdit } from "@/constants/routes/myPages"
import { getProfile } from "@/lib/trpc/memoizedRequests"
import ButtonLink from "@/components/ButtonLink"
import CommunicationSlot from "@/components/MyPages/Profile/Communication"
import CreditCardSlot from "@/components/MyPages/Profile/CreditCards"
import Header from "@/components/Profile/Header"
import Divider from "@/components/TempDesignSystem/Divider"
import { getIntl } from "@/i18n"
import { getLang } from "@/i18n/serverContext"
import { isValidCountry } from "@/utils/countries"
import { isValidLang } from "@/utils/languages"
import styles from "./profile.module.css"
export default async function Profile() {
const user = await getProfile()
if (!user || "error" in user) {
return null
}
const intl = await getIntl()
const lang = getLang()
const addressParts = []
if (user.address.streetAddress) {
addressParts.push(user.address.streetAddress)
}
if (user.address.city) {
addressParts.push(user.address.city)
}
const displayNames = {
language: new Intl.DisplayNames([lang], { type: "language" }),
region: new Intl.DisplayNames([lang], { type: "region" }),
}
if (user.address.country) {
const countryCode = isValidCountry(user.address.country)
? countriesMap[user.address.country]
: null
const localizedCountry = countryCode
? displayNames.region.of(countryCode)
: user.address.country
addressParts.push(localizedCountry)
}
const addressOutput =
addressParts.length > 0
? addressParts.join(", ")
: intl.formatMessage({
defaultMessage: "N/A",
})
const userLang = isValidLang(user.language) ? user.language : Lang.en
const localizedLanguage = displayNames.language.of(userLang)
const normalizedLanguage = localizedLanguage
? localizedLanguage.charAt(0).toUpperCase() + localizedLanguage.slice(1)
: languages[userLang]
return (
<section className={styles.container}>
<Header>
<Typography variant="Title/xs">
<h2 className={styles.title}>
{intl.formatMessage({
defaultMessage: "Welcome",
})}
<br />
<span data-hj-suppress className={styles.titleName}>
{user.name}
</span>
</h2>
</Typography>
<ButtonLink
size="Small"
prefetch={false}
href={profileEdit[lang]}
typography="Body/Supporting text (caption)/smBold"
>
{intl.formatMessage({
defaultMessage: "Edit profile",
})}
</ButtonLink>
</Header>
<div className={styles.info}>
<div className={styles.item}>
<MaterialIcon
icon="calendar_month"
color="Icon/Interactive/Default"
/>
<Typography variant="Body/Paragraph/mdBold">
<p>
{intl.formatMessage({
defaultMessage: "Date of Birth",
})}
</p>
</Typography>
<Typography variant="Body/Paragraph/mdRegular">
<p>{user.dateOfBirth}</p>
</Typography>
</div>
<div className={styles.item}>
<MaterialIcon icon="phone" color="Icon/Interactive/Default" />
<Typography variant="Body/Paragraph/mdBold">
<p>
{intl.formatMessage({
defaultMessage: "Phone number",
})}
</p>
</Typography>
<Typography variant="Body/Paragraph/mdRegular">
<p>{user.phoneNumber}</p>
</Typography>
</div>
<div className={styles.item}>
<MaterialIcon icon="globe" color="Icon/Interactive/Default" />
<Typography variant="Body/Paragraph/mdBold">
<p>
{intl.formatMessage({
defaultMessage: "Language",
})}
</p>
</Typography>
<Typography variant="Body/Paragraph/mdRegular">
<p>{normalizedLanguage}</p>
</Typography>
</div>
<div className={styles.item}>
<MaterialIcon icon="mail" color="Icon/Interactive/Default" />
<Typography variant="Body/Paragraph/mdBold">
<p>
{intl.formatMessage({
defaultMessage: "Email",
})}
</p>
</Typography>
<Typography variant="Body/Paragraph/mdRegular">
<p>{user.email}</p>
</Typography>
</div>
<div className={styles.item}>
<MaterialIcon icon="location_on" color="Icon/Interactive/Default" />
<Typography variant="Body/Paragraph/mdBold">
<p>
{intl.formatMessage({
defaultMessage: "Address",
})}
</p>
</Typography>
<Typography variant="Body/Paragraph/mdRegular">
<p>{addressOutput}</p>
</Typography>
</div>
<div className={styles.item}>
<MaterialIcon icon="lock" color="Icon/Interactive/Default" />
<Typography variant="Body/Paragraph/mdBold">
<p>
{intl.formatMessage({
defaultMessage: "Password",
})}
</p>
</Typography>
<Typography variant="Body/Paragraph/mdRegular">
{/* eslint-disable-next-line formatjs/no-literal-string-in-jsx */}
<p>**********</p>
</Typography>
</div>
</div>
<Divider color="burgundy" opacity={8} />
<CreditCardSlot />
{/* <MembershipCardSlot /> */}
<CommunicationSlot />
</section>
)
}