diff --git a/components/Blocks/DynamicContent/Overview/Stats/Points/PointsColumn/index.tsx b/components/Blocks/DynamicContent/Overview/Stats/Points/PointsColumn/index.tsx index d8263a7fd..d65a04e9d 100644 --- a/components/Blocks/DynamicContent/Overview/Stats/Points/PointsColumn/index.tsx +++ b/components/Blocks/DynamicContent/Overview/Stats/Points/PointsColumn/index.tsx @@ -4,53 +4,18 @@ import { getIntl } from "@/i18n" import styles from "./pointsColumn.module.css" -import type { - NightsColumn, - PointsColumn, - PointsColumnProps, -} from "@/types/components/myPages/points" +import type { PointsColumnProps } from "@/types/components/myPages/points" -export const YourPointsColumn = ({ points }: PointsColumn) => - PointsColumn({ - points, - title: "Your points to spend", - subtitle: "as of today", - }) - -export const NextLevelPointsColumn = ({ points, subtitle }: PointsColumn) => - PointsColumn({ - points, - title: "Points needed to level up", - subtitle, - }) - -export const StayOnLevelColumn = ({ points, subtitle }: PointsColumn) => - PointsColumn({ - points, - title: "Points needed to stay on level", - subtitle, - }) - -export const NextLevelNightsColumn = ({ nights, subtitle }: NightsColumn) => - PointsColumn({ - nights, - title: "Nights needed to level up", - subtitle, - }) - -async function PointsColumn({ - points, - nights, +export async function PointsColumn({ title, subtitle, + value, }: PointsColumnProps) { const intl = await getIntl() let number = "N/A" - if (typeof points === "number") { - number = intl.formatNumber(points) - } else if (typeof nights === "number") { - number = intl.formatNumber(nights) + if (typeof value === "number") { + number = intl.formatNumber(value) } return ( @@ -61,16 +26,14 @@ async function PointsColumn({ textAlign="center" className={styles.firstRow} > - {intl.formatMessage({ - id: title, - })} + {title} {number} {subtitle ? ( - {intl.formatMessage({ id: subtitle })} + {subtitle} ) : null} diff --git a/components/Blocks/DynamicContent/Overview/Stats/Points/index.tsx b/components/Blocks/DynamicContent/Overview/Stats/Points/index.tsx index d06581ff7..364b3d064 100644 --- a/components/Blocks/DynamicContent/Overview/Stats/Points/index.tsx +++ b/components/Blocks/DynamicContent/Overview/Stats/Points/index.tsx @@ -5,7 +5,7 @@ import { getIntl } from "@/i18n" import { getMembership } from "@/utils/user" import PointsContainer from "./Container" -import { NextLevelPointsColumn, YourPointsColumn } from "./PointsColumn" +import { PointsColumn } from "./PointsColumn" import type { UserProps } from "@/types/components/myPages/user" @@ -23,11 +23,19 @@ export default async function Points({ user }: UserProps) { return ( - + {nextLevel && ( - )} {/* TODO: Show NextLevelNightsColumn when nightsToTopTier data is correct from Antavo */} diff --git a/components/Blocks/DynamicContent/Points/Overview/Points/index.tsx b/components/Blocks/DynamicContent/Points/Overview/Points/index.tsx deleted file mode 100644 index b11699391..000000000 --- a/components/Blocks/DynamicContent/Points/Overview/Points/index.tsx +++ /dev/null @@ -1,60 +0,0 @@ -import { MembershipLevelEnum } from "@/constants/membershipLevels" -import { serverClient } from "@/lib/trpc/server" - -import { getIntl } from "@/i18n" -import { getMembership } from "@/utils/user" - -import PointsContainer from "../../../Overview/Stats/Points/Container" -import { - NextLevelNightsColumn, - NextLevelPointsColumn, - StayOnLevelColumn, - YourPointsColumn, -} from "../../../Overview/Stats/Points/PointsColumn" - -import type { UserProps } from "@/types/components/myPages/user" -import type { LangParams } from "@/types/params" - -/* TODO */ -export default async function Points({ user, lang }: UserProps & LangParams) { - const intl = await getIntl() - - const membership = getMembership(user.memberships) - if (!membership?.nextLevel || !MembershipLevelEnum[membership.nextLevel]) { - return null - } - const nextLevel = await serverClient().contentstack.loyaltyLevels.byLevel({ - level: MembershipLevelEnum[membership.nextLevel], - }) - return ( - - - {nextLevel && ( - <> - {membership?.currentPoints ? ( - - ) : ( - <> - - {membership?.nightsToTopTier && ( - - )} - - )} - - )} - - ) -} diff --git a/server/routers/contentstack/loyaltyLevel/output.ts b/server/routers/contentstack/loyaltyLevel/output.ts index c449c65c2..95a7d0924 100644 --- a/server/routers/contentstack/loyaltyLevel/output.ts +++ b/server/routers/contentstack/loyaltyLevel/output.ts @@ -21,4 +21,4 @@ export const validateLoyaltyLevelsSchema = z export type LoyaltyLevelsResponse = z.input -export type LoyaltyLevel = z.output[0] +export type LoyaltyLevel = z.output[number] diff --git a/server/routers/contentstack/loyaltyLevel/query.ts b/server/routers/contentstack/loyaltyLevel/query.ts index 3b8cfa6b4..edd33d5d7 100644 --- a/server/routers/contentstack/loyaltyLevel/query.ts +++ b/server/routers/contentstack/loyaltyLevel/query.ts @@ -2,7 +2,7 @@ import { metrics } from "@opentelemetry/api" import { cache } from "react" import { - MembershipLevel, + type MembershipLevel, MembershipLevelEnum, } from "@/constants/membershipLevels" import { @@ -10,14 +10,19 @@ import { GetLoyaltyLevel, } from "@/lib/graphql/Query/LoyaltyLevels.graphql" import { request } from "@/lib/graphql/request" -import { Context } from "@/server/context" import { notFound } from "@/server/errors/trpc" import { contentstackBaseProcedure, router } from "@/server/trpc" import { generateLoyaltyConfigTag } from "@/utils/generateTag" import { loyaltyLevelInput } from "./input" -import { LoyaltyLevelsResponse, validateLoyaltyLevelsSchema } from "./output" +import { + type LoyaltyLevel, + type LoyaltyLevelsResponse, + validateLoyaltyLevelsSchema, +} from "./output" + +import type { Context } from "@/server/context" const meter = metrics.getMeter("trpc.loyaltyLevel") // OpenTelemetry metrics: Loyalty Level @@ -147,7 +152,7 @@ export const getLoyaltyLevel = cache( } getByLevelLoyaltyLevelSuccessCounter.add(1) - return validatedLoyaltyLevels.data[0] + return validatedLoyaltyLevels.data[0] as LoyaltyLevel } ) diff --git a/types/components/myPages/points.ts b/types/components/myPages/points.ts index 224da2a60..7f301e26e 100644 --- a/types/components/myPages/points.ts +++ b/types/components/myPages/points.ts @@ -1,15 +1,5 @@ -interface PointsOrNightColumn { - title?: string +export type PointsColumnProps = { + title: string subtitle?: string + value?: number } - -export interface PointsColumn extends PointsOrNightColumn { - points: number | undefined - nights?: never -} -export interface NightsColumn extends PointsOrNightColumn { - points?: never - nights: number | undefined -} - -export type PointsColumnProps = PointsColumn | NightsColumn