Files
web/components/Header/MainMenu/MyPagesMenuWrapper/index.tsx
Joakim Jäderberg 2791f07f67 Merged in fix/mypages-clientside-menu (pull request #1344)
Fix/mypages clientside menu

* feat: move mypages menu to client side

* Merge branch 'master' of bitbucket.org:scandic-swap/web into fix/mypages-clientside-menu

* wip

* wip

* wip

* refactor: reorganize MyPages navigation logic and improve type definitions

* refactor: enhance MyPagesMobileDropdown with loading states and skeletons

* refactor: clean up header component and improve myPagesNavigation query structure

* Merge branch 'master' of bitbucket.org:scandic-swap/web into fix/mypages-clientside-menu


Approved-by: Linus Flood
2025-02-17 07:47:33 +00:00

82 lines
2.1 KiB
TypeScript

"use client"
import { useIntl } from "react-intl"
import { MembershipLevelEnum } from "@/constants/membershipLevels"
import { trpc } from "@/lib/trpc/client"
import LoginButton from "@/components/LoginButton"
import useLang from "@/hooks/useLang"
import Avatar from "../Avatar"
import MyPagesMenu, { MyPagesMenuSkeleton } from "../MyPagesMenu"
import MyPagesMobileMenu, {
MyPagesMobileMenuSkeleton,
} from "../MyPagesMobileMenu"
import styles from "./myPagesMenuWrapper.module.css"
export default function MyPagesMenuWrapper() {
const intl = useIntl()
const lang = useLang()
const { data: user, isLoading: isLoadingUser } = trpc.user.name.useQuery()
const { data: membership, isLoading: isLoadingMembership } =
trpc.user.safeMembershipLevel.useQuery()
const { data: membershipLevel, isLoading: isLoadingMembershipLevel } =
trpc.contentstack.loyaltyLevels.byLevel.useQuery(
{
lang: lang,
level: MembershipLevelEnum[membership?.membershipLevel ?? "L1"],
},
{
enabled: !!membership?.membershipLevel,
}
)
if (isLoadingUser || isLoadingMembership || isLoadingMembershipLevel) {
return <MyPagesMenuWrapperSkeleton />
}
return (
<>
{user ? (
<>
<MyPagesMenu
membershipLevel={membershipLevel ?? null}
membership={membership}
user={user}
/>
<MyPagesMobileMenu
membershipLevel={membershipLevel ?? null}
membership={membership}
user={user}
/>
</>
) : (
<LoginButton
className={styles.loginLink}
aria-label={intl.formatMessage({ id: "Log in/Join" })}
position="top menu"
trackingId="loginStartNewTopMenu"
>
<Avatar />
<span className={styles.loginText}>
{intl.formatMessage({ id: "Log in/Join" })}
</span>
</LoginButton>
)}
</>
)
}
export function MyPagesMenuWrapperSkeleton() {
return (
<div>
<MyPagesMenuSkeleton />
<MyPagesMobileMenuSkeleton />
</div>
)
}