Feat/LOY-391 my points transactions table design * feat(LOY-391): Added new design to point transaction table * fix(LOY-391): rebase fix * fix(LOY-391): fix * fix(LOY-391): fix * fix(LOY-391): fixed sticky header etc. * feat(LOY-391): added focus on the newest loaded item in the list * fix(LOY-391): cleaned up * fix(LOY-391): style fix * fix(LOY-391): fixed PR-comments, types, removed the old files for earn and burn table * fix(LOY-391): fixed PR-comments * feat(LOY-391): added useCallback so scrolling is avoided when clicking see all on expiring points Approved-by: Anton Gunnarsson Approved-by: Matilda Landström
100 lines
3.6 KiB
TypeScript
100 lines
3.6 KiB
TypeScript
import { JsonToHtml } from "@scandic-hotels/design-system/JsonToHtml"
|
|
import { BlocksEnums } from "@scandic-hotels/trpc/types/blocksEnum"
|
|
import { DynamicContentEnum } from "@scandic-hotels/trpc/types/dynamicContent"
|
|
|
|
import Overview from "@/components/Blocks/DynamicContent/Overview"
|
|
import PointsOverview from "@/components/Blocks/DynamicContent/Points/Overview"
|
|
import { PointTransactions } from "@/components/Blocks/DynamicContent/Points/PointTransactions"
|
|
import CurrentRewardsBlock from "@/components/Blocks/DynamicContent/Rewards/CurrentRewards"
|
|
import NextLevelRewardsBlock from "@/components/Blocks/DynamicContent/Rewards/NextLevel"
|
|
import ShortcutsList from "@/components/Blocks/ShortcutsList"
|
|
import { getLang } from "@/i18n/serverContext"
|
|
import { modWebviewLink } from "@/utils/webviews"
|
|
|
|
import type {
|
|
AccountPageContentProps,
|
|
ContentProps,
|
|
} from "@/types/components/myPages/myPage/accountPage"
|
|
|
|
async function DynamicComponent({ dynamic_content }: AccountPageContentProps) {
|
|
const lang = await getLang()
|
|
const dynamicContent = {
|
|
...dynamic_content,
|
|
link: dynamic_content.link
|
|
? {
|
|
...dynamic_content.link,
|
|
href: await modWebviewLink(dynamic_content.link.href, lang),
|
|
}
|
|
: undefined,
|
|
}
|
|
switch (dynamic_content.component) {
|
|
case DynamicContentEnum.Blocks.components.membership_overview:
|
|
return <Overview {...dynamicContent} />
|
|
case DynamicContentEnum.Blocks.components.points_overview:
|
|
return <PointsOverview {...dynamicContent} />
|
|
case DynamicContentEnum.Blocks.components.current_benefits:
|
|
return <CurrentRewardsBlock {...dynamicContent} />
|
|
case DynamicContentEnum.Blocks.components.next_benefits:
|
|
return <NextLevelRewardsBlock {...dynamicContent} />
|
|
case DynamicContentEnum.Blocks.components.expiring_points:
|
|
// TODO: Add once available
|
|
// return <ExpiringPoints />
|
|
return null
|
|
case DynamicContentEnum.Blocks.components.earn_and_burn:
|
|
return <PointTransactions {...dynamicContent} />
|
|
default:
|
|
return null
|
|
}
|
|
}
|
|
|
|
export default async function Content({ content }: ContentProps) {
|
|
const lang = await getLang()
|
|
return (
|
|
<>
|
|
{await Promise.all(
|
|
content.map(async (item, idx) => {
|
|
switch (item.typename) {
|
|
case BlocksEnums.block.DynamicContent:
|
|
return (
|
|
<DynamicComponent
|
|
key={`${item.dynamic_content.title}-${idx}`}
|
|
dynamic_content={item.dynamic_content}
|
|
/>
|
|
)
|
|
case BlocksEnums.block.Shortcuts:
|
|
const shortcuts = await Promise.all(
|
|
item.shortcuts.shortcuts.map(async (shortcut) => {
|
|
return {
|
|
...shortcut,
|
|
url: await modWebviewLink(shortcut.url, lang),
|
|
}
|
|
})
|
|
)
|
|
return (
|
|
<ShortcutsList
|
|
key={`${item.shortcuts.title}-${idx}`}
|
|
shortcuts={shortcuts}
|
|
subtitle={item.shortcuts.subtitle}
|
|
title={item.shortcuts.title}
|
|
hasTwoColumns={item.shortcuts.hasTwoColumns}
|
|
/>
|
|
)
|
|
case BlocksEnums.block.TextContent:
|
|
return (
|
|
<JsonToHtml
|
|
key={`${item.__typename}-${idx}`}
|
|
embeds={
|
|
item.text_content.content.embedded_itemsConnection.edges
|
|
}
|
|
nodes={item.text_content.content.json.children}
|
|
/>
|
|
)
|
|
default:
|
|
return null
|
|
}
|
|
})
|
|
)}
|
|
</>
|
|
)
|
|
}
|