import { Lang, languages } from "@scandic-hotels/common/constants/language" import { profileEdit } from "@scandic-hotels/common/constants/routes/myPages" import { isValidLang } from "@scandic-hotels/common/utils/languages" import ButtonLink from "@scandic-hotels/design-system/ButtonLink" import { Divider } from "@scandic-hotels/design-system/Divider" import { MaterialIcon, type MaterialIconProps, } from "@scandic-hotels/design-system/Icons/MaterialIcon" import { Typography } from "@scandic-hotels/design-system/Typography" import { countriesMap } from "@scandic-hotels/trpc/constants/countries" import { getProfile } from "@/lib/trpc/memoizedRequests" import Header from "@/components/Profile/Header" import { getIntl } from "@/i18n" import { getLang } from "@/i18n/serverContext" import { isValidCountry } from "@/utils/countries" import ChangeNameDisclaimer from "./ChangeNameDisclaimer" import { CommunicationSettings } from "./CommunicationSettings" import { Payment } from "./Payment" 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 = await 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({ id: "common.NA", 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] const userDataItems: { icon: MaterialIconProps["icon"] label: string value: string }[] = [ { icon: "calendar_month", label: intl.formatMessage({ id: "profile.dateOfBirth", defaultMessage: "Date of birth", }), value: user.dateOfBirth, }, { icon: "phone_enabled", label: intl.formatMessage({ id: "common.phoneNumber", defaultMessage: "Phone number", }), value: user.phoneNumber ?? "", }, { icon: "globe", label: intl.formatMessage({ id: "profile.language", defaultMessage: "Language", }), value: normalizedLanguage, }, { icon: "mail", label: intl.formatMessage({ id: "common.email", defaultMessage: "Email", }), value: user.email, }, { icon: "location_on", label: intl.formatMessage({ id: "common.address", defaultMessage: "Address", }), value: addressOutput, }, { icon: "lock", label: intl.formatMessage({ id: "profile.password", defaultMessage: "Password", }), value: "**********", }, ] return (

{intl.formatMessage({ id: "common.welcome", defaultMessage: "Welcome", })}
{user.name}

{intl.formatMessage({ id: "myPages.editProfile", defaultMessage: "Edit profile", })}
{userDataItems.map(({ icon, label, value }) => (

{label}

{value}

))}
{/* */}
) }