Skip to content

Commit 475d0dd

Browse files
committed
migrate tabs
1 parent c254562 commit 475d0dd

File tree

6 files changed

+99
-58
lines changed

6 files changed

+99
-58
lines changed

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@
4646
"@radix-ui/react-radio-group": "^1.2.0",
4747
"@radix-ui/react-slot": "^1.1.0",
4848
"@radix-ui/react-switch": "^1.1.0",
49+
"@radix-ui/react-tabs": "^1.1.0",
4950
"@radix-ui/react-tooltip": "^1.1.2",
5051
"@radix-ui/react-visually-hidden": "^1.1.0",
5152
"@socialgouv/matomo-next": "^1.8.0",

src/components/Tabs.tsx

Lines changed: 0 additions & 45 deletions
This file was deleted.

src/components/ui/tabs.tsx

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
import * as React from "react"
2+
import * as TabsPrimitive from "@radix-ui/react-tabs"
3+
4+
import { cn } from "@/lib/utils/cn"
5+
6+
const Tabs = TabsPrimitive.Root
7+
8+
const TabsList = React.forwardRef<
9+
React.ElementRef<typeof TabsPrimitive.List>,
10+
React.ComponentPropsWithoutRef<typeof TabsPrimitive.List>
11+
>(({ className, ...props }, ref) => (
12+
<TabsPrimitive.List
13+
ref={ref}
14+
className={cn(
15+
"inline-flex h-10 items-center justify-center rounded-md bg-background-highlight p-1",
16+
className
17+
)}
18+
{...props}
19+
/>
20+
))
21+
TabsList.displayName = TabsPrimitive.List.displayName
22+
23+
const TabsTrigger = React.forwardRef<
24+
React.ElementRef<typeof TabsPrimitive.Trigger>,
25+
React.ComponentPropsWithoutRef<typeof TabsPrimitive.Trigger>
26+
>(({ className, ...props }, ref) => (
27+
<TabsPrimitive.Trigger
28+
ref={ref}
29+
className={cn(
30+
"inline-flex items-center justify-center whitespace-nowrap rounded-t border-b border-b-primary px-4 py-1.5 ring-offset-background transition-all focus-visible:outline focus-visible:outline-4 focus-visible:-outline-offset-1 focus-visible:outline-primary-hover disabled:pointer-events-none disabled:opacity-50 data-[state=active]:bg-primary data-[state=active]:text-body-inverse",
31+
className
32+
)}
33+
{...props}
34+
/>
35+
))
36+
TabsTrigger.displayName = TabsPrimitive.Trigger.displayName
37+
38+
const TabsContent = React.forwardRef<
39+
React.ElementRef<typeof TabsPrimitive.Content>,
40+
React.ComponentPropsWithoutRef<typeof TabsPrimitive.Content>
41+
>(({ className, ...props }, ref) => (
42+
<TabsPrimitive.Content
43+
ref={ref}
44+
className={cn(
45+
"mt-4 rounded-lg border p-6 ring-offset-background focus-visible:outline focus-visible:outline-4 focus-visible:-outline-offset-1 focus-visible:outline-primary-hover",
46+
className
47+
)}
48+
{...props}
49+
/>
50+
))
51+
TabsContent.displayName = TabsPrimitive.Content.displayName
52+
53+
export { Tabs, TabsContent, TabsList, TabsTrigger }

src/pages/get-eth.tsx

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@ import type { GetStaticProps, InferGetStaticPropsType } from "next/types"
22
import { useTranslation } from "next-i18next"
33
import { serverSideTranslations } from "next-i18next/serverSideTranslations"
44
import type { ReactNode } from "react"
5-
import { useBreakpointValue } from "@chakra-ui/react"
65

76
import type { BasePageProps, ChildOnlyProp, Lang } from "@/lib/types"
87

@@ -38,6 +37,7 @@ import { trackCustomEvent } from "@/lib/utils/matomo"
3837
import { getLocaleTimestamp } from "@/lib/utils/time"
3938
import { getRequiredNamespacesForPage } from "@/lib/utils/translations"
4039

40+
import { useBreakpointValue } from "@/hooks/useBreakpointValue"
4141
import uniswap from "@/public/images/dapps/uni.png"
4242
import dapps from "@/public/images/doge-computer.png"
4343
import oneinch from "@/public/images/exchanges/1inch.png"
@@ -104,6 +104,12 @@ const GetEthPage = ({
104104
}: InferGetStaticPropsType<typeof getStaticProps>) => {
105105
const { t } = useTranslation("page-get-eth")
106106

107+
const walletImageWidth = useBreakpointValue({
108+
base: "full",
109+
sm: "60%",
110+
md: "50%",
111+
})
112+
107113
const tokenSwaps: CardListItem[] = [
108114
{
109115
title: "Uniswap",
@@ -144,12 +150,6 @@ const GetEthPage = ({
144150
},
145151
]
146152

147-
const walletImageWidth = useBreakpointValue({
148-
base: "full",
149-
sm: "60%",
150-
md: "50%",
151-
})
152-
153153
return (
154154
<MainArticle>
155155
<Stack className="gap-16 p-8">

src/pages/what-is-ethereum.tsx

Lines changed: 18 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,6 @@ import MainArticle from "@/components/MainArticle"
3030
import PageMetadata from "@/components/PageMetadata"
3131
import { StandaloneQuizWidget } from "@/components/Quiz/QuizWidget"
3232
import StatErrorMessage from "@/components/StatErrorMessage"
33-
import Tabs from "@/components/Tabs"
3433
import Tooltip from "@/components/Tooltip"
3534
import Translation from "@/components/Translation"
3635
import { Button, ButtonLink } from "@/components/ui/buttons/Button"
@@ -42,6 +41,7 @@ import {
4241
SwiperNavigation,
4342
SwiperSlide,
4443
} from "@/components/ui/swiper"
44+
import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/components/ui/tabs"
4545

4646
import { cn } from "@/lib/utils/cn"
4747
import { existsNamespace } from "@/lib/utils/existsNamespace"
@@ -288,7 +288,7 @@ const WhatIsEthereumPage = ({
288288
</Stack>
289289
),
290290
},
291-
]
291+
] as const
292292

293293
const slides = [
294294
{ eventName: "Payments slide" },
@@ -383,15 +383,28 @@ const WhatIsEthereumPage = ({
383383
<TwoColumnContent>
384384
<Width60>
385385
<Tabs
386-
onTabClick={(index) => {
386+
defaultValue="0"
387+
onValueChange={(index) => {
387388
trackCustomEvent({
388389
eventCategory: `Blockchain/crypto tab`,
389390
eventAction: `Clicked`,
390391
eventName: tabs[index].eventName,
391392
})
392393
}}
393-
tabs={tabs}
394-
/>
394+
>
395+
<TabsList>
396+
{tabs.map((tab, index) => (
397+
<TabsTrigger key={index} value={index.toString()}>
398+
{tab.title}
399+
</TabsTrigger>
400+
))}
401+
</TabsList>
402+
{tabs.map((tab, index) => (
403+
<TabsContent key={index} value={index.toString()}>
404+
{tab.content}
405+
</TabsContent>
406+
))}
407+
</Tabs>
395408
</Width60>
396409
<Width40 />
397410
</TwoColumnContent>

yarn.lock

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4150,6 +4150,20 @@
41504150
"@radix-ui/react-use-previous" "1.1.0"
41514151
"@radix-ui/react-use-size" "1.1.0"
41524152

4153+
"@radix-ui/react-tabs@^1.1.0":
4154+
version "1.1.0"
4155+
resolved "https://registry.yarnpkg.com/@radix-ui/react-tabs/-/react-tabs-1.1.0.tgz#0a6db1caed56776a1176aae68532060e301cc1c0"
4156+
integrity sha512-bZgOKB/LtZIij75FSuPzyEti/XBhJH52ExgtdVqjCIh+Nx/FW+LhnbXtbCzIi34ccyMsyOja8T0thCzoHFXNKA==
4157+
dependencies:
4158+
"@radix-ui/primitive" "1.1.0"
4159+
"@radix-ui/react-context" "1.1.0"
4160+
"@radix-ui/react-direction" "1.1.0"
4161+
"@radix-ui/react-id" "1.1.0"
4162+
"@radix-ui/react-presence" "1.1.0"
4163+
"@radix-ui/react-primitive" "2.0.0"
4164+
"@radix-ui/react-roving-focus" "1.1.0"
4165+
"@radix-ui/react-use-controllable-state" "1.1.0"
4166+
41534167
"@radix-ui/react-tooltip@^1.1.2":
41544168
version "1.1.2"
41554169
resolved "https://registry.yarnpkg.com/@radix-ui/react-tooltip/-/react-tooltip-1.1.2.tgz#c42db2ffd7dcc6ff3d65407c8cb70490288f518d"
@@ -12175,7 +12189,7 @@ prelude-ls@^1.2.1:
1217512189
resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396"
1217612190
integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==
1217712191

12178-
"prettier-fallback@npm:prettier@^3", prettier@^3.1.1:
12192+
"prettier-fallback@npm:prettier@^3":
1217912193
version "3.3.2"
1218012194
resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.3.2.tgz#03ff86dc7c835f2d2559ee76876a3914cec4a90a"
1218112195
integrity sha512-rAVeHYMcv8ATV5d508CFdn+8/pHPpXeIid1DdrPwXnaAdH7cqjVbpJaT5eq4yRAFU/lsbwYwSF/n5iNrdJHPQA==
@@ -12190,6 +12204,11 @@ prettier@^2.0.5, prettier@^2.8.8:
1219012204
resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.8.8.tgz#e8c5d7e98a4305ffe3de2e1fc4aca1a71c28b1da"
1219112205
integrity sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==
1219212206

12207+
prettier@^3.1.1:
12208+
version "3.3.2"
12209+
resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.3.2.tgz#03ff86dc7c835f2d2559ee76876a3914cec4a90a"
12210+
integrity sha512-rAVeHYMcv8ATV5d508CFdn+8/pHPpXeIid1DdrPwXnaAdH7cqjVbpJaT5eq4yRAFU/lsbwYwSF/n5iNrdJHPQA==
12211+
1219312212
prettier@^3.3.3:
1219412213
version "3.3.3"
1219512214
resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.3.3.tgz#30c54fe0be0d8d12e6ae61dbb10109ea00d53105"

0 commit comments

Comments
 (0)