"use client" import { usePathname, useSearchParams } from "next/navigation" import { useState } from "react" import { useIntl } from "react-intl" import { serializeBookingSearchParams } from "@scandic-hotels/booking-flow/utils/url" import { BOOK_NOW_SESSION_KEY } from "@scandic-hotels/common/constants/sessionKeys" import { LinkList } from "@scandic-hotels/design-system/LinkList" import { MessageBanner } from "@scandic-hotels/design-system/MessageBanner" import Modal from "@scandic-hotels/design-system/Modal" import { Typography } from "@scandic-hotels/design-system/Typography" import { trackClick, trackEvent } from "@scandic-hotels/tracking/base" import { SEARCH_TYPE_REDEMPTION } from "@scandic-hotels/trpc/constants/booking" import { rewardNightsURL } from "@/constants/rewards" import InfoCardWithImage from "@/components/ContentType/StartPage/InfoCardWithImage" import { UsePointsButton } from "./UsePointsButton" import styles from "./UsePoints.module.css" import type { ButtonProps } from "@scandic-hotels/design-system/Button" import type { UsePointsModalData } from "@scandic-hotels/trpc/routers/contentstack/UsePointsModal/output" function trackButtonClick(label: string) { trackClick(label) if (label === "book now") { sessionStorage.setItem(BOOK_NOW_SESSION_KEY, "true") } } function trackLinkListClick(linkText: string) { if (!linkText) return trackEvent({ event: "linkClick", link: { name: linkText }, }) } type UsePointsModalProps = { buttonVariant: ButtonProps["variant"] contentData: UsePointsModalData points: number className?: string } export function UsePointsModal({ buttonVariant, contentData, points, className, }: UsePointsModalProps) { const intl = useIntl() const [isOpen, setIsOpen] = useState(false) const pathname = usePathname() const initialSearchParams = useSearchParams() const searchParams = serializeBookingSearchParams( { searchType: SEARCH_TYPE_REDEMPTION, focusWidget: true, }, { initialSearchParams } ) const bookLink = `${pathname}?${searchParams}` const items = contentData?.all_usepointsmodal?.items?.[0] if (!items) { return null } const linkListItems = items.link_group.map((link) => ({ text: link.text, isExternal: link.isExternal, href: link.href, illustration: link.illustration, onClick: () => trackLinkListClick(link.text), })) return ( <> { setIsOpen(true) trackButtonClick("use points") }} className={className} />

{intl.formatMessage({ id: "myPages.membershipPoints.youHave", defaultMessage: "You have", })}

{intl.formatNumber(points)}

{intl.formatMessage({ id: "myPages.membershipPoints.pointsToSpend", defaultMessage: "points to spend", })}

{points >= 10000 ? ( trackButtonClick("book now"), }} secondaryButton={{ href: rewardNightsURL, text: intl.formatMessage({ id: "myPages.membershipPointsModal.priceList", defaultMessage: "Price list", }), openInNewTab: true, trailingIconName: "open_in_new", onClick: () => trackButtonClick("price list"), }} theme="Primary 3" imagePosition="top" height="dynamic" /> ) : ( trackButtonClick("price list"), }} theme="Primary 3" imagePosition="top" height="dynamic" /> )}
) }