From 672b1176d6126794dbce322a75c2dc59f9d854bf Mon Sep 17 00:00:00 2001 From: Arvid Norlin Date: Wed, 22 May 2024 16:41:37 +0200 Subject: [PATCH] feat: add initial mobile layout for earn and burn --- components/MyPages/AccountPage/Content.tsx | 4 +- .../currentPointsBalance.module.css | 10 +- .../Points/CurrentPointsBalance/index.tsx | 31 ++-- .../Points/EarnAndBurn/earnAndBurn.module.css | 50 +++++- .../Blocks/Points/EarnAndBurn/index.tsx | 147 +++++++++++------- 5 files changed, 159 insertions(+), 83 deletions(-) diff --git a/components/MyPages/AccountPage/Content.tsx b/components/MyPages/AccountPage/Content.tsx index af4ce9027..f82420bd2 100644 --- a/components/MyPages/AccountPage/Content.tsx +++ b/components/MyPages/AccountPage/Content.tsx @@ -35,13 +35,13 @@ function DynamicComponent({ component, props }: AccountPageContentProps) { case DynamicContentComponents.next_benefits: return case DynamicContentComponents.my_points: - return + return case DynamicContentComponents.expiring_points: // TODO: Add once available // return return null case DynamicContentComponents.earn_and_burn: - return + return default: return null } diff --git a/components/MyPages/Blocks/Points/CurrentPointsBalance/currentPointsBalance.module.css b/components/MyPages/Blocks/Points/CurrentPointsBalance/currentPointsBalance.module.css index a471dc374..b87ffc0be 100644 --- a/components/MyPages/Blocks/Points/CurrentPointsBalance/currentPointsBalance.module.css +++ b/components/MyPages/Blocks/Points/CurrentPointsBalance/currentPointsBalance.module.css @@ -1,14 +1,14 @@ .card { - background-color: var(--Base-Fill-Normal); - border-radius: 16px; - color: var(--Theme-Primary-Light-On-Surface-Text); + background-color: var(--Main-Grey-10); + border-radius: var(--Corner-radius-xLarge); + color: var(--Main-Brand-Burgundy); display: flex; flex-direction: column; align-items: center; - gap: 16px; + gap: var(--Spacing-x2); } .points { - font-size: var(--typography-Title2-Desktop-fontSize); + font-size: var(--typography-Title-2-Desktop-fontSize); margin: 0; } diff --git a/components/MyPages/Blocks/Points/CurrentPointsBalance/index.tsx b/components/MyPages/Blocks/Points/CurrentPointsBalance/index.tsx index ef406ce76..2663f0e47 100644 --- a/components/MyPages/Blocks/Points/CurrentPointsBalance/index.tsx +++ b/components/MyPages/Blocks/Points/CurrentPointsBalance/index.tsx @@ -1,19 +1,32 @@ import { _ } from "@/lib/translation" import { serverClient } from "@/lib/trpc/server" +import Header from "@/components/MyPages/Blocks/Header" + import styles from "./currentPointsBalance.module.css" -async function CurrentPointsBalance() { +import { AccountPageComponentProps } from "@/types/components/myPages/myPage/accountPage" + +async function CurrentPointsBalance({ + title, + subtitle, + link, + lang, +}: AccountPageComponentProps) { const user = await serverClient().user.get() return ( -
-

{`${_("Total points")}*`}

-

{`${_("Points")}: ${user.membership?.currentPoints || "N/A"}`}

-

- {`*${_("Points may take up to 10 days to be displayed.")}`} -

+
+
+ +
+

{`${_("Total points")}*`}

+

{`${_("Points")}: ${user.membership?.currentPoints || "N/A"}`}

+

+ {`*${_("Points may take up to 10 days to be displayed.")}`} +

+
) } diff --git a/components/MyPages/Blocks/Points/EarnAndBurn/earnAndBurn.module.css b/components/MyPages/Blocks/Points/EarnAndBurn/earnAndBurn.module.css index 5af9de08f..0716d088f 100644 --- a/components/MyPages/Blocks/Points/EarnAndBurn/earnAndBurn.module.css +++ b/components/MyPages/Blocks/Points/EarnAndBurn/earnAndBurn.module.css @@ -1,8 +1,29 @@ .container { - display: flex; - flex-direction: column; - gap: 16px; - overflow-x: auto; + display: grid; + gap: var(--Spacing-x3); +} + +.mobileTable { + border-spacing: 0; + width: 100%; +} + +.mobileThead { + background-color: var(--Main-Grey-10); +} + +.mobileTh { + padding: var(--Spacing-x2); +} + +.mobilePlaceholder { + text-align: center; + padding: var(--Spacing-x4); + border: 1px solid var(--Main-Grey-10); +} + +.tableContainer { + display: none; } .table { @@ -12,9 +33,9 @@ } .thead { - background-color: var(--Base-Fill-Normal); - border-left: 1px solid var(--Base-Fill-Normal); - border-right: 1px solid var(--Base-Fill-Normal); + background-color: var(--Main-Grey-10); + border-left: 1px solid var(--Main-Grey-10); + border-right: 1px solid var(--Main-Grey-10); } .tr { @@ -35,5 +56,18 @@ width: 100%; padding: 24px; text-align: center; - border: 1px solid var(--Base-Fill-Normal); + border: 1px solid var(--Main-Grey-10); +} + +@media screen and (min-width: 950px) { + .mobileTableContainer { + display: none; + } + + .tableContainer { + display: flex; + flex-direction: column; + gap: 16px; + overflow-x: auto; + } } diff --git a/components/MyPages/Blocks/Points/EarnAndBurn/index.tsx b/components/MyPages/Blocks/Points/EarnAndBurn/index.tsx index 3510b2787..867277194 100644 --- a/components/MyPages/Blocks/Points/EarnAndBurn/index.tsx +++ b/components/MyPages/Blocks/Points/EarnAndBurn/index.tsx @@ -4,15 +4,13 @@ import { dt } from "@/lib/dt" import { _ } from "@/lib/translation" import { trpc } from "@/lib/trpc/client" +import Header from "@/components/MyPages/Blocks/Header" import Button from "@/components/TempDesignSystem/Button" import styles from "./earnAndBurn.module.css" -import { - EarnAndBurnProps, - Page, - RowProps, -} from "@/types/components/myPages/myPage/earnAndBurn" +import { AccountPageComponentProps } from "@/types/components/myPages/myPage/accountPage" +import { Page, RowProps } from "@/types/components/myPages/myPage/earnAndBurn" const tableHeadings = [ _("Arrival date"), @@ -22,7 +20,12 @@ const tableHeadings = [ _("Points"), ] -function EarnAndBurn({ lang }: EarnAndBurnProps) { +function EarnAndBurn({ + lang, + title, + subtitle, + link, +}: AccountPageComponentProps) { const { data, hasNextPage, isFetching, fetchNextPage } = trpc.user.transaction.friendTransactions.useInfiniteQuery( { limit: 5 }, @@ -38,59 +41,85 @@ function EarnAndBurn({ lang }: EarnAndBurnProps) { } const transactions = data?.pages.flatMap((page) => page.data) ?? [] - return transactions.length ? ( -
- - - - {tableHeadings.map((heading) => ( - - ))} - - - - {transactions.map((transaction) => ( - - ))} - -
- {heading} -
- {/* TODO: add once pagination is available through API */} - {/* */} -
- ) : ( -
- - - - {tableHeadings.map((heading) => ( - - ))} - - - - - - - -
- {heading} -
- {_("No transactions available")} -
+ return ( +
+
+ +
+ + + + + + + {transactions.length ? ( + transactions.map((transaction) => ( + + + + + )) + ) : ( + + + + )} + +
{_("Transactions")}{_("Points")}
{transaction.hotelName}{transaction.awardPoints}
+ Empty +
+
+
+ {transactions.length ? ( + + + + {tableHeadings.map((heading) => ( + + ))} + + + + {transactions.map((transaction) => ( + + ))} + +
+ {heading} +
+ ) : ( + // TODO: add once pagination is available through API + // + + + + {tableHeadings.map((heading) => ( + + ))} + + + + + +
+ {heading} +
+ {_("No transactions available")} +
+ )} +
) }