feat: add initial support for points page
This commit is contained in:
@@ -2,11 +2,14 @@ import JsonToHtml from "@/components/JsonToHtml"
|
|||||||
import CurrentBenefitsBlock from "@/components/MyPages/Blocks/Benefits/CurrentLevel"
|
import CurrentBenefitsBlock from "@/components/MyPages/Blocks/Benefits/CurrentLevel"
|
||||||
import NextLevelBenefitsBlock from "@/components/MyPages/Blocks/Benefits/NextLevel"
|
import NextLevelBenefitsBlock from "@/components/MyPages/Blocks/Benefits/NextLevel"
|
||||||
import Overview from "@/components/MyPages/Blocks/Overview"
|
import Overview from "@/components/MyPages/Blocks/Overview"
|
||||||
|
import CurrentPointsBalance from "@/components/MyPages/Blocks/Points/CurrentPointsBalance"
|
||||||
|
import EarnAndBurn from "@/components/MyPages/Blocks/Points/EarnAndBurn"
|
||||||
import Shortcuts from "@/components/MyPages/Blocks/Shortcuts"
|
import Shortcuts from "@/components/MyPages/Blocks/Shortcuts"
|
||||||
|
import PreviousStays from "@/components/MyPages/Blocks/Stays/Previous"
|
||||||
import SoonestStays from "@/components/MyPages/Blocks/Stays/Soonest"
|
import SoonestStays from "@/components/MyPages/Blocks/Stays/Soonest"
|
||||||
import UpcomingStays from "@/components/MyPages/Blocks/Stays/Upcoming"
|
import UpcomingStays from "@/components/MyPages/Blocks/Stays/Upcoming"
|
||||||
|
|
||||||
import PreviousStays from "../Blocks/Stays/Previous"
|
import { ExpiringPoints } from "../Blocks/Points/ExpiringPoints"
|
||||||
|
|
||||||
import {
|
import {
|
||||||
AccountPageContentProps,
|
AccountPageContentProps,
|
||||||
@@ -31,6 +34,12 @@ function DynamicComponent({ component, props }: AccountPageContentProps) {
|
|||||||
return <CurrentBenefitsBlock {...props} />
|
return <CurrentBenefitsBlock {...props} />
|
||||||
case DynamicContentComponents.next_benefits:
|
case DynamicContentComponents.next_benefits:
|
||||||
return <NextLevelBenefitsBlock {...props} />
|
return <NextLevelBenefitsBlock {...props} />
|
||||||
|
case DynamicContentComponents.my_points:
|
||||||
|
return <CurrentPointsBalance />
|
||||||
|
case DynamicContentComponents.expiring_points:
|
||||||
|
return <ExpiringPoints />
|
||||||
|
case DynamicContentComponents.earn_and_burn:
|
||||||
|
return <EarnAndBurn />
|
||||||
default:
|
default:
|
||||||
return null
|
return null
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,14 @@
|
|||||||
|
.card {
|
||||||
|
background-color: var(--Base-Fill-Normal);
|
||||||
|
border-radius: 16px;
|
||||||
|
color: var(Theme/Primary/Light/On Surface/Text);
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
align-items: center;
|
||||||
|
gap: 16px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.points {
|
||||||
|
font-size: var(--typography-Title2-Desktop-fontSize);
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
@@ -0,0 +1,19 @@
|
|||||||
|
import { _ } from "@/lib/translation"
|
||||||
|
|
||||||
|
import styles from "./currentPointsBalance.module.css"
|
||||||
|
|
||||||
|
const CurrentPointsBalance = () => {
|
||||||
|
const points = 30000
|
||||||
|
|
||||||
|
return (
|
||||||
|
<div className={styles.card}>
|
||||||
|
<h2>{_("Total points*")}</h2>
|
||||||
|
<p className={styles.points}>{`${_("Points")}: ${points}`}</p>
|
||||||
|
<p className={styles.disclaimer}>
|
||||||
|
{_("*Points may take up to 10 days to be displayed.")}
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
export default CurrentPointsBalance
|
||||||
@@ -0,0 +1,32 @@
|
|||||||
|
.container {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
align-items: center;
|
||||||
|
gap: 16px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.table {
|
||||||
|
border-spacing: 0;
|
||||||
|
border-collapse: collapse;
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.thead {
|
||||||
|
background-color: var(--Base-Fill-Normal);
|
||||||
|
border-left: 1px solid var(--Base-Fill-Normal);
|
||||||
|
border-right: 1px solid var(--Base-Fill-Normal);
|
||||||
|
}
|
||||||
|
|
||||||
|
.tr {
|
||||||
|
border: 1px solid #e6e9ec;
|
||||||
|
}
|
||||||
|
|
||||||
|
.th {
|
||||||
|
text-align: left;
|
||||||
|
padding: 20px 32px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.td {
|
||||||
|
text-align: left;
|
||||||
|
padding: 16px 32px;
|
||||||
|
}
|
||||||
44
components/MyPages/Blocks/Points/EarnAndBurn/index.tsx
Normal file
44
components/MyPages/Blocks/Points/EarnAndBurn/index.tsx
Normal file
@@ -0,0 +1,44 @@
|
|||||||
|
import { _ } from "@/lib/translation"
|
||||||
|
|
||||||
|
import Button from "@/components/TempDesignSystem/Button"
|
||||||
|
|
||||||
|
import styles from "./earnAndBurn.module.css"
|
||||||
|
|
||||||
|
const EarnAndBurn = () => {
|
||||||
|
return (
|
||||||
|
<div className={styles.container}>
|
||||||
|
<table className={styles.table}>
|
||||||
|
<thead className={styles.thead}>
|
||||||
|
<tr>
|
||||||
|
<th className={styles.th}>{_("Arrival date")}</th>
|
||||||
|
<th className={styles.th}>{_("Description")}</th>
|
||||||
|
<th className={styles.th}>{_("Booking number")}</th>
|
||||||
|
<th className={styles.th}>{_("Transaction date")}</th>
|
||||||
|
<th className={styles.th}>{_("Points")}</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<tr className={styles.tr}>
|
||||||
|
<td className={styles.td}>23 May 2023</td>
|
||||||
|
<td className={styles.td}>Scandic Mölndal, Mölndal 2 nights</td>
|
||||||
|
<td className={styles.td}>5123456576</td>
|
||||||
|
<td className={styles.td}>26 May 2023</td>
|
||||||
|
<td className={styles.td}>30000</td>
|
||||||
|
</tr>
|
||||||
|
<tr className={styles.tr}>
|
||||||
|
<td className={styles.td}>23 May 2023</td>
|
||||||
|
<td className={styles.td}>Scandic Mölndal, Mölndal 2 nights</td>
|
||||||
|
<td className={styles.td}>5123456576</td>
|
||||||
|
<td className={styles.td}>26 May 2023</td>
|
||||||
|
<td className={styles.td}>-30000</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
<Button intent="primary" bgcolor="white" type="button">
|
||||||
|
{_("See more transactions")}
|
||||||
|
</Button>
|
||||||
|
</div>
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
export default EarnAndBurn
|
||||||
@@ -0,0 +1,25 @@
|
|||||||
|
.table {
|
||||||
|
border-spacing: 0;
|
||||||
|
border-collapse: collapse;
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.thead {
|
||||||
|
background-color: var(--Base-Fill-Normal);
|
||||||
|
border-left: 1px solid var(--Base-Fill-Normal);
|
||||||
|
border-right: 1px solid var(--Base-Fill-Normal);
|
||||||
|
}
|
||||||
|
|
||||||
|
.tr {
|
||||||
|
border: 1px solid #e6e9ec;
|
||||||
|
}
|
||||||
|
|
||||||
|
.th {
|
||||||
|
text-align: left;
|
||||||
|
padding: 20px 32px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.td {
|
||||||
|
text-align: left;
|
||||||
|
padding: 16px 32px;
|
||||||
|
}
|
||||||
26
components/MyPages/Blocks/Points/ExpiringPoints/index.tsx
Normal file
26
components/MyPages/Blocks/Points/ExpiringPoints/index.tsx
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
import { _ } from "@/lib/translation"
|
||||||
|
|
||||||
|
import styles from "./expiringPoints.module.css"
|
||||||
|
|
||||||
|
export const ExpiringPoints = () => {
|
||||||
|
return (
|
||||||
|
<table className={styles.table}>
|
||||||
|
<thead className={styles.thead}>
|
||||||
|
<tr>
|
||||||
|
<th className={styles.th}>{_("Arrival date")}</th>
|
||||||
|
<th className={styles.th}>{_("Points")}</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<tr className={styles.tr}>
|
||||||
|
<td className={styles.td}>23 May 2023</td>
|
||||||
|
<td className={styles.td}>30000</td>
|
||||||
|
</tr>
|
||||||
|
<tr className={styles.tr}>
|
||||||
|
<td className={styles.td}>23 May 2023</td>
|
||||||
|
<td className={styles.td}>-15000</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
)
|
||||||
|
}
|
||||||
@@ -2,6 +2,7 @@ import {
|
|||||||
benefits,
|
benefits,
|
||||||
myPages,
|
myPages,
|
||||||
overview,
|
overview,
|
||||||
|
points,
|
||||||
profile,
|
profile,
|
||||||
profileEdit,
|
profileEdit,
|
||||||
stays,
|
stays,
|
||||||
@@ -19,4 +20,5 @@ export const authRequired = [
|
|||||||
...Object.values(profile),
|
...Object.values(profile),
|
||||||
...Object.values(profileEdit),
|
...Object.values(profileEdit),
|
||||||
...Object.values(stays),
|
...Object.values(stays),
|
||||||
|
...Object.values(points),
|
||||||
]
|
]
|
||||||
|
|||||||
@@ -48,6 +48,16 @@ export const profileEdit = {
|
|||||||
sv: `${profile.sv}/redigera`,
|
sv: `${profile.sv}/redigera`,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** @type {import('@/types/routes').LangRoute} */
|
||||||
|
export const points = {
|
||||||
|
da: `${myPages.da}/points`,
|
||||||
|
de: `${myPages.de}/points`,
|
||||||
|
en: `${myPages.en}/points`,
|
||||||
|
fi: `${myPages.fi}/points`,
|
||||||
|
no: `${myPages.no}/points`,
|
||||||
|
sv: `${myPages.sv}/points`,
|
||||||
|
}
|
||||||
|
|
||||||
/** @type {import('@/types/routes').LangRoute} */
|
/** @type {import('@/types/routes').LangRoute} */
|
||||||
export const benefits = {
|
export const benefits = {
|
||||||
da: `${myPages.da}/fordele`,
|
da: `${myPages.da}/fordele`,
|
||||||
|
|||||||
@@ -5,6 +5,9 @@ export enum DynamicContentComponents {
|
|||||||
upcoming_stays = "upcoming_stays",
|
upcoming_stays = "upcoming_stays",
|
||||||
current_benefits = "current_benefits",
|
current_benefits = "current_benefits",
|
||||||
next_benefits = "next_benefits",
|
next_benefits = "next_benefits",
|
||||||
|
my_points = "my_points",
|
||||||
|
expiring_points = "expiring_points",
|
||||||
|
earn_and_burn = "earn_and_burn",
|
||||||
}
|
}
|
||||||
|
|
||||||
export enum ContentEntries {
|
export enum ContentEntries {
|
||||||
|
|||||||
Reference in New Issue
Block a user