diff --git a/apps/scandic-web/components/Blocks/DynamicContent/Overview/index.tsx b/apps/scandic-web/components/Blocks/DynamicContent/Overview/index.tsx
index ad772614b..631f5c6e8 100644
--- a/apps/scandic-web/components/Blocks/DynamicContent/Overview/index.tsx
+++ b/apps/scandic-web/components/Blocks/DynamicContent/Overview/index.tsx
@@ -1,13 +1,16 @@
import { Divider } from "@scandic-hotels/design-system/Divider"
+import { MaterialIcon } from "@scandic-hotels/design-system/Icons/MaterialIcon"
import { env } from "@/env/server"
import { getProfile } from "@/lib/trpc/memoizedRequests"
+import { TeamMemberCardTrigger } from "@/components/DigitalTeamMemberCard/Trigger"
import DigitalTeamMemberCard from "@/components/MyPages/DigitalTeamMemberCard"
import DigitalTeamMemberCardAlert from "@/components/MyPages/DigitalTeamMemberCard/Alert"
import SectionContainer from "@/components/Section/Container"
import SectionHeader from "@/components/Section/Header"
import SectionLink from "@/components/Section/Link"
+import { getIntl } from "@/i18n"
import Hero from "./Friend/Hero"
import MembershipNumber from "./Friend/MembershipNumber"
@@ -23,6 +26,7 @@ export default async function Overview({
subtitle,
title,
}: AccountPageComponentProps) {
+ const intl = await getIntl()
const user = await getProfile()
if (!user || "error" in user) {
return null
@@ -38,7 +42,21 @@ export default async function Overview({
headingAs="h3"
headingLevel="h1"
/>
-
+
+
+ <>
+
+ {intl.formatMessage({
+ defaultMessage: "Show Team Member Card",
+ })}
+ >
+
+
diff --git a/apps/scandic-web/components/Blocks/DynamicContent/Overview/overview.module.css b/apps/scandic-web/components/Blocks/DynamicContent/Overview/overview.module.css
index b1b2b62a0..f64bf5954 100644
--- a/apps/scandic-web/components/Blocks/DynamicContent/Overview/overview.module.css
+++ b/apps/scandic-web/components/Blocks/DynamicContent/Overview/overview.module.css
@@ -2,6 +2,16 @@
margin-top: var(--Spacing-x2);
}
+.teamMemberCardButton {
+ border-radius: var(--Corner-radius-md);
+ color: var(--Text-Brand-OnPrimary-3-Accent);
+
+ &:focus,
+ &:not(:disabled):hover {
+ color: var(--Text-Brand-OnPrimary-3-Accent);
+ }
+}
+
@media screen and (max-width: 767px) {
.container {
/* Full-width override styling */
diff --git a/apps/scandic-web/components/DigitalTeamMemberCard/EmployeeBenefits/CallToActions/index.tsx b/apps/scandic-web/components/DigitalTeamMemberCard/EmployeeBenefits/CallToActions/index.tsx
index cfa6e8faa..e6d13ab65 100644
--- a/apps/scandic-web/components/DigitalTeamMemberCard/EmployeeBenefits/CallToActions/index.tsx
+++ b/apps/scandic-web/components/DigitalTeamMemberCard/EmployeeBenefits/CallToActions/index.tsx
@@ -2,26 +2,28 @@ import React from "react"
import { signup } from "@scandic-hotels/common/constants/routes/signup"
import { Typography } from "@scandic-hotels/design-system/Typography"
-import { isValidSession } from "@scandic-hotels/trpc/utils/session"
import { dtmcLogin } from "@/constants/routes/dtmc"
import { login } from "@/constants/routes/handleAuth"
+import { getProfileSafely } from "@/lib/trpc/memoizedRequests"
-import { auth } from "@/auth"
import ButtonLink from "@/components/ButtonLink"
+import { TeamMemberCardTrigger } from "@/components/DigitalTeamMemberCard/Trigger"
+import DigitalTeamMemberCard from "@/components/MyPages/DigitalTeamMemberCard"
import { getIntl } from "@/i18n"
import { getLang } from "@/i18n/serverContext"
+import { isEmployeeLinked } from "@/utils/user"
import styles from "./callToActions.module.css"
export default async function EmployeeBenefitsCallToActions() {
- const session = await auth()
+ const user = await getProfileSafely()
const intl = await getIntl()
const lang = await getLang()
const loginAndLinkURL = `${login[lang]}?redirectTo=${encodeURIComponent(dtmcLogin[lang])}`
- if (!isValidSession(session)) {
+ if (!user) {
return (
<>
@@ -57,9 +59,24 @@ export default async function EmployeeBenefitsCallToActions() {
)
}
- // -- TODO [LOY-196] --
- // Handle case of authed user and already connected work account.
- // Show member card modal.
+ if (isEmployeeLinked(user)) {
+ return (
+
+
+
+ {intl.formatMessage({
+ defaultMessage: "Show Team Member Card",
+ })}
+
+
+
+ )
+ }
return (
diff --git a/apps/scandic-web/components/DigitalTeamMemberCard/Trigger.tsx b/apps/scandic-web/components/DigitalTeamMemberCard/Trigger.tsx
new file mode 100644
index 000000000..b6c86062f
--- /dev/null
+++ b/apps/scandic-web/components/DigitalTeamMemberCard/Trigger.tsx
@@ -0,0 +1,16 @@
+"use client"
+
+import { type ComponentProps } from "react"
+
+import { Button } from "@scandic-hotels/design-system/Button"
+
+interface TeamMemberCardTriggerProps extends ComponentProps {
+ children: React.ReactNode
+}
+
+export function TeamMemberCardTrigger({
+ children,
+ ...props
+}: TeamMemberCardTriggerProps) {
+ return
+}
diff --git a/apps/scandic-web/components/Modal/index.tsx b/apps/scandic-web/components/Modal/index.tsx
index 835e40ec0..a67614bce 100644
--- a/apps/scandic-web/components/Modal/index.tsx
+++ b/apps/scandic-web/components/Modal/index.tsx
@@ -136,6 +136,7 @@ export default function Modal({
trigger,
isOpen,
onToggle,
+ onOpenChange,
title,
subtitle,
children,
@@ -185,11 +186,12 @@ export default function Modal({
return (
+ onOpenChange={(isOpen) => {
setAnimation(
isOpen ? AnimationStateEnum.visible : AnimationStateEnum.hidden
)
- }
+ onOpenChange?.(isOpen)
+ }}
>
{trigger}
diff --git a/apps/scandic-web/components/Modal/modal.ts b/apps/scandic-web/components/Modal/modal.ts
index 0b8492743..6de0813ad 100644
--- a/apps/scandic-web/components/Modal/modal.ts
+++ b/apps/scandic-web/components/Modal/modal.ts
@@ -16,11 +16,17 @@ export type ModalProps = {
hideHeader?: boolean
className?: string
} & (
- | { trigger: JSX.Element; isOpen?: never; onToggle?: never }
+ | {
+ trigger: JSX.Element
+ isOpen?: never
+ onToggle?: never
+ onOpenChange?: (open: boolean) => void
+ }
| {
trigger?: never
isOpen: boolean
onToggle: (open: boolean) => void
+ onOpenChange?: never
}
)
diff --git a/apps/scandic-web/components/MyPages/DigitalTeamMemberCard/Client.tsx b/apps/scandic-web/components/MyPages/DigitalTeamMemberCard/Client.tsx
index 6cc809ffa..f2c7e325f 100644
--- a/apps/scandic-web/components/MyPages/DigitalTeamMemberCard/Client.tsx
+++ b/apps/scandic-web/components/MyPages/DigitalTeamMemberCard/Client.tsx
@@ -1,9 +1,7 @@
"use client"
-import { useState } from "react"
import { useIntl } from "react-intl"
-import { Button } from "@scandic-hotels/design-system/Button"
import { MaterialIcon } from "@scandic-hotels/design-system/Icons/MaterialIcon"
import { Typography } from "@scandic-hotels/design-system/Typography"
@@ -19,68 +17,56 @@ import type { User } from "@scandic-hotels/trpc/types/user"
interface DigitalTeamMemberCardClientProps {
user: User
+ children: React.ReactElement
}
export default function DigitalTeamMemberCardClient({
user,
+ children,
}: DigitalTeamMemberCardClientProps) {
const intl = useIntl()
- const [isOpen, setIsOpen] = useState(false)
const { release, request } = useWakeLock({
reacquireOnPageVisible: true,
})
- function onToggle(modalState: boolean) {
- setIsOpen(modalState)
- if (modalState) {
- request()
+ function onOpenChange(isOpen: boolean) {
+ if (isOpen) {
+ request() // Acquire wake lock when modal opens
} else {
- release()
+ release() // Release wake lock when modal closes
}
}
return (
- <>
-
-
-
+
+
-
-
- {intl.formatMessage({
- defaultMessage:
- "Book discounted stays for yourself, family and friends!",
- })}
-
-
-
-
- {intl.formatMessage({
- defaultMessage: "Check out all your benefits",
- })}
-
-
-
-
- >
+
+
+ {intl.formatMessage({
+ defaultMessage:
+ "Book discounted stays for yourself, family and friends!",
+ })}
+