fix: add temp translation handling for overview table

This commit is contained in:
Arvid Norlin
2024-06-20 15:26:55 +02:00
parent 2c8640fec0
commit aebb223542
2 changed files with 49 additions and 28 deletions

View File

@@ -4,7 +4,7 @@
"tier": 1, "tier": 1,
"name": "New Friend", "name": "New Friend",
"requirement": "0p or 0 nights", "requirement": "0p or 0 nights",
"description": "This is the start of something beautiful: as a New Friend, get ready for a journey of delightful Scandic discoveries", "description": "Detta är början på något speciellt, vi kan känna det. Som New Friend bjuder dina vistelser på nya upptäckter.",
"icon": "/_static/icons/loyaltylevels/new-friend.svg", "icon": "/_static/icons/loyaltylevels/new-friend.svg",
"benefits": [ "benefits": [
{ {

View File

@@ -1,5 +1,6 @@
"use client" "use client"
import { useParams } from "next/navigation"
import { useReducer } from "react" import { useReducer } from "react"
import { type Key } from "react-aria-components" import { type Key } from "react-aria-components"
import { useIntl } from "react-intl" import { useIntl } from "react-intl"
@@ -11,7 +12,12 @@ import Image from "@/components/Image"
import Select from "@/components/TempDesignSystem/Select" import Select from "@/components/TempDesignSystem/Select"
import { getMembership } from "@/utils/user" import { getMembership } from "@/utils/user"
import levelsData from "./data/EN.json" import DA from "./data/DA.json"
import DE from "./data/DE.json"
import EN from "./data/EN.json"
import FI from "./data/FI.json"
import NO from "./data/NO.json"
import SV from "./data/SV.json"
import BenefitList from "./BenefitList" import BenefitList from "./BenefitList"
import LargeTable from "./LargeTable" import LargeTable from "./LargeTable"
import LevelSummary from "./LevelSummary" import LevelSummary from "./LevelSummary"
@@ -25,8 +31,18 @@ import {
OverviewTableProps, OverviewTableProps,
OverviewTableReducerAction, OverviewTableReducerAction,
} from "@/types/components/loyalty/blocks" } from "@/types/components/loyalty/blocks"
import { LangParams } from "@/types/params"
import { User } from "@/types/user" import { User } from "@/types/user"
const levelsTranslations = {
[Lang.en]: EN,
[Lang.sv]: SV,
[Lang.no]: NO,
[Lang.da]: DA,
[Lang.fi]: FI,
[Lang.de]: DE,
}
// These should ultimately be fetched from Contentstack // These should ultimately be fetched from Contentstack
const titleTranslations = { const titleTranslations = {
[Lang.en]: [ [Lang.en]: [
@@ -56,21 +72,21 @@ const titleTranslations = {
], ],
} }
function getLevelByTier(tier: membershipLevels) { function getTranslatedLevelByTier(tier: membershipLevels, lang: Lang) {
return levelsData.levels.find( return levelsTranslations[lang].levels.find(
(level) => level.tier === tier (level) => level.tier === tier
) as ComparisonLevel ) as ComparisonLevel
} }
function getInitialState(user?: User) { function getInitialState({ user, lang }: { user?: User; lang: Lang }) {
const membership = user?.memberships ? getMembership(user.memberships) : null const membership = user?.memberships ? getMembership(user.memberships) : null
if (!membership?.membershipLevel) { if (!membership?.membershipLevel) {
return { return {
selectedLevelAMobile: getLevelByTier(1), selectedLevelAMobile: getTranslatedLevelByTier(1, lang),
selectedLevelBMobile: getLevelByTier(2), selectedLevelBMobile: getTranslatedLevelByTier(2, lang),
selectedLevelADesktop: getLevelByTier(1), selectedLevelADesktop: getTranslatedLevelByTier(1, lang),
selectedLevelBDesktop: getLevelByTier(2), selectedLevelBDesktop: getTranslatedLevelByTier(2, lang),
selectedLevelCDesktop: getLevelByTier(3), selectedLevelCDesktop: getTranslatedLevelByTier(3, lang),
} }
} }
if (!membership.membershipLevel) return null if (!membership.membershipLevel) return null
@@ -79,27 +95,27 @@ function getInitialState(user?: User) {
switch (tier) { switch (tier) {
case 6: case 6:
return { return {
selectedLevelAMobile: getLevelByTier(6), selectedLevelAMobile: getTranslatedLevelByTier(6, lang),
selectedLevelBMobile: getLevelByTier(7), selectedLevelBMobile: getTranslatedLevelByTier(7, lang),
selectedLevelADesktop: getLevelByTier(5), selectedLevelADesktop: getTranslatedLevelByTier(5, lang),
selectedLevelBDesktop: getLevelByTier(6), selectedLevelBDesktop: getTranslatedLevelByTier(6, lang),
selectedLevelCDesktop: getLevelByTier(7), selectedLevelCDesktop: getTranslatedLevelByTier(7, lang),
} }
case 7: case 7:
return { return {
selectedLevelAMobile: getLevelByTier(6), selectedLevelAMobile: getTranslatedLevelByTier(6, lang),
selectedLevelBMobile: getLevelByTier(7), selectedLevelBMobile: getTranslatedLevelByTier(7, lang),
selectedLevelADesktop: getLevelByTier(6), selectedLevelADesktop: getTranslatedLevelByTier(6, lang),
selectedLevelBDesktop: getLevelByTier(7), selectedLevelBDesktop: getTranslatedLevelByTier(7, lang),
selectedLevelCDesktop: getLevelByTier(1), selectedLevelCDesktop: getTranslatedLevelByTier(1, lang),
} }
default: default:
return { return {
selectedLevelAMobile: getLevelByTier(tier), selectedLevelAMobile: getTranslatedLevelByTier(tier, lang),
selectedLevelBMobile: getLevelByTier(tier + 1), selectedLevelBMobile: getTranslatedLevelByTier(tier + 1, lang),
selectedLevelADesktop: getLevelByTier(tier), selectedLevelADesktop: getTranslatedLevelByTier(tier, lang),
selectedLevelBDesktop: getLevelByTier(tier + 1), selectedLevelBDesktop: getTranslatedLevelByTier(tier + 1, lang),
selectedLevelCDesktop: getLevelByTier(tier + 2), selectedLevelCDesktop: getTranslatedLevelByTier(tier + 2, lang),
} }
} }
} }
@@ -138,14 +154,19 @@ function reducer(state: any, action: OverviewTableReducerAction) {
export default function OverviewTable({ user }: OverviewTableProps) { export default function OverviewTable({ user }: OverviewTableProps) {
const intl = useIntl() const intl = useIntl()
const params = useParams<LangParams>()
const [selectionState, dispatch] = useReducer(reducer, user, getInitialState) const levelsData = levelsTranslations[params.lang]
const [selectionState, dispatch] = useReducer(
reducer,
{ user, lang: params.lang },
getInitialState
)
function handleSelectChange(actionType: overviewTableActionsEnum) { function handleSelectChange(actionType: overviewTableActionsEnum) {
return (key: Key) => { return (key: Key) => {
if (typeof key === "number") { if (typeof key === "number") {
dispatch({ dispatch({
payload: getLevelByTier(key), payload: getTranslatedLevelByTier(key, params.lang),
type: actionType, type: actionType,
}) })
} }