fix(LOY-64): abstract membershipbadge to its own component
This commit is contained in:
@@ -17,7 +17,7 @@ export default function ClientCurrentRewards({
|
|||||||
rewards,
|
rewards,
|
||||||
pageSize,
|
pageSize,
|
||||||
showRedeem,
|
showRedeem,
|
||||||
memberId,
|
membershipNumber,
|
||||||
}: CurrentRewardsClientProps) {
|
}: CurrentRewardsClientProps) {
|
||||||
const containerRef = useRef<HTMLDivElement>(null)
|
const containerRef = useRef<HTMLDivElement>(null)
|
||||||
const [currentPage, setCurrentPage] = useState(1)
|
const [currentPage, setCurrentPage] = useState(1)
|
||||||
@@ -56,7 +56,7 @@ export default function ClientCurrentRewards({
|
|||||||
</div>
|
</div>
|
||||||
{showRedeem && "redeem_description" in reward && (
|
{showRedeem && "redeem_description" in reward && (
|
||||||
<div className={styles.btnContainer}>
|
<div className={styles.btnContainer}>
|
||||||
<Redeem reward={reward} memberId={memberId} />
|
<Redeem reward={reward} membershipNumber={membershipNumber} />
|
||||||
</div>
|
</div>
|
||||||
)}
|
)}
|
||||||
</article>
|
</article>
|
||||||
|
|||||||
@@ -11,7 +11,6 @@ import {
|
|||||||
import { useIntl } from "react-intl"
|
import { useIntl } from "react-intl"
|
||||||
|
|
||||||
import { trpc } from "@/lib/trpc/client"
|
import { trpc } from "@/lib/trpc/client"
|
||||||
import { Reward } from "@/server/routers/contentstack/reward/output"
|
|
||||||
|
|
||||||
import Countdown from "@/components/Countdown"
|
import Countdown from "@/components/Countdown"
|
||||||
import { CheckCircleIcon, CloseLargeIcon } from "@/components/Icons"
|
import { CheckCircleIcon, CloseLargeIcon } from "@/components/Icons"
|
||||||
@@ -30,11 +29,12 @@ import type {
|
|||||||
RedeemProps,
|
RedeemProps,
|
||||||
RedeemStep,
|
RedeemStep,
|
||||||
} from "@/types/components/myPages/myPage/accountPage"
|
} from "@/types/components/myPages/myPage/accountPage"
|
||||||
|
import type { Reward } from "@/server/routers/contentstack/reward/output"
|
||||||
|
|
||||||
const MotionOverlay = motion(ModalOverlay)
|
const MotionOverlay = motion(ModalOverlay)
|
||||||
const MotionModal = motion(Modal)
|
const MotionModal = motion(Modal)
|
||||||
|
|
||||||
export default function Redeem({ reward, memberId }: RedeemProps) {
|
export default function Redeem({ reward, membershipNumber }: RedeemProps) {
|
||||||
const [animation, setAnimation] = useState<RedeemModalState>("unmounted")
|
const [animation, setAnimation] = useState<RedeemModalState>("unmounted")
|
||||||
const intl = useIntl()
|
const intl = useIntl()
|
||||||
const update = trpc.contentstack.rewards.redeem.useMutation()
|
const update = trpc.contentstack.rewards.redeem.useMutation()
|
||||||
@@ -121,16 +121,10 @@ export default function Redeem({ reward, memberId }: RedeemProps) {
|
|||||||
)}
|
)}
|
||||||
{redeemStep === "redeemed" &&
|
{redeemStep === "redeemed" &&
|
||||||
isRestaurantOnSiteTierReward(reward) &&
|
isRestaurantOnSiteTierReward(reward) &&
|
||||||
memberId && (
|
membershipNumber && (
|
||||||
<div className={styles.memberIdBadge}>
|
<MemberShipNumberBadge
|
||||||
<Caption
|
membershipNumber={membershipNumber}
|
||||||
textTransform="uppercase"
|
/>
|
||||||
textAlign="center"
|
|
||||||
color="uiTextHighContrast"
|
|
||||||
>
|
|
||||||
{intl.formatMessage({ id: "Member ID:" })} {memberId}
|
|
||||||
</Caption>
|
|
||||||
</div>
|
|
||||||
)}
|
)}
|
||||||
</div>
|
</div>
|
||||||
{redeemStep === "initial" && (
|
{redeemStep === "initial" && (
|
||||||
@@ -246,3 +240,23 @@ function TimedRedeemedBadge() {
|
|||||||
</>
|
</>
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function MemberShipNumberBadge({
|
||||||
|
membershipNumber,
|
||||||
|
}: {
|
||||||
|
membershipNumber: string
|
||||||
|
}) {
|
||||||
|
const intl = useIntl()
|
||||||
|
|
||||||
|
return (
|
||||||
|
<div className={styles.memberShipNumberBadge}>
|
||||||
|
<Caption
|
||||||
|
textTransform="uppercase"
|
||||||
|
textAlign="center"
|
||||||
|
color="uiTextHighContrast"
|
||||||
|
>
|
||||||
|
{intl.formatMessage({ id: "Membership ID:" })} {membershipNumber}
|
||||||
|
</Caption>
|
||||||
|
</div>
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|||||||
@@ -138,8 +138,8 @@
|
|||||||
color: var(--UI-Semantic-Success);
|
color: var(--UI-Semantic-Success);
|
||||||
}
|
}
|
||||||
|
|
||||||
.memberIdBadge {
|
.memberShipNumberBadge {
|
||||||
border-radius: var(--Small);
|
border-radius: var(--Small);
|
||||||
padding: var(--Spacing-x1) var(--Spacing-x-one-and-half);
|
padding: var(--Spacing-x1) var(--Spacing-x-one-and-half);
|
||||||
background: var(--Base-Surface-Secondary-light-Normal);
|
background: var(--Base-Surface-Secondary-light-Normal);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -31,7 +31,7 @@ export default async function CurrentRewardsBlock({
|
|||||||
rewards={rewardsResponse.rewards}
|
rewards={rewardsResponse.rewards}
|
||||||
pageSize={6}
|
pageSize={6}
|
||||||
showRedeem={env.USE_NEW_REWARDS_ENDPOINT && env.USE_NEW_REWARD_MODEL}
|
showRedeem={env.USE_NEW_REWARDS_ENDPOINT && env.USE_NEW_REWARD_MODEL}
|
||||||
memberId={membershipLevel?.membershipNumber}
|
membershipNumber={membershipLevel?.membershipNumber}
|
||||||
/>
|
/>
|
||||||
<SectionLink link={link} variant="mobile" />
|
<SectionLink link={link} variant="mobile" />
|
||||||
</SectionContainer>
|
</SectionContainer>
|
||||||
|
|||||||
@@ -1,13 +1,12 @@
|
|||||||
import { z } from "zod"
|
import type { z } from "zod"
|
||||||
|
|
||||||
import { blocksSchema } from "@/server/routers/contentstack/accountPage/output"
|
import type { DynamicContent } from "@/types/trpc/routers/contentstack/blocks"
|
||||||
import {
|
import type { blocksSchema } from "@/server/routers/contentstack/accountPage/output"
|
||||||
|
import type {
|
||||||
Reward,
|
Reward,
|
||||||
RewardWithRedeem,
|
RewardWithRedeem,
|
||||||
} from "@/server/routers/contentstack/reward/output"
|
} from "@/server/routers/contentstack/reward/output"
|
||||||
|
|
||||||
import { DynamicContent } from "@/types/trpc/routers/contentstack/blocks"
|
|
||||||
|
|
||||||
export interface AccountPageContentProps
|
export interface AccountPageContentProps
|
||||||
extends Pick<DynamicContent, "dynamic_content"> {}
|
extends Pick<DynamicContent, "dynamic_content"> {}
|
||||||
|
|
||||||
@@ -27,12 +26,12 @@ export interface CurrentRewardsClientProps {
|
|||||||
rewards: (Reward | RewardWithRedeem)[]
|
rewards: (Reward | RewardWithRedeem)[]
|
||||||
pageSize: number
|
pageSize: number
|
||||||
showRedeem: boolean
|
showRedeem: boolean
|
||||||
memberId?: string | null
|
membershipNumber?: string | null
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface RedeemProps {
|
export interface RedeemProps {
|
||||||
reward: RewardWithRedeem
|
reward: RewardWithRedeem
|
||||||
memberId?: string | null
|
membershipNumber?: string | null
|
||||||
}
|
}
|
||||||
|
|
||||||
export type RedeemModalState = "unmounted" | "hidden" | "visible"
|
export type RedeemModalState = "unmounted" | "hidden" | "visible"
|
||||||
|
|||||||
Reference in New Issue
Block a user