Skip to content

Commit db48bfa

Browse files
committed
♿ improve pageswitcher accessibility
1 parent 58374de commit db48bfa

File tree

1 file changed

+31
-10
lines changed
  • src/components/marketing/landing/page-switcher

1 file changed

+31
-10
lines changed

src/components/marketing/landing/page-switcher/index.tsx

Lines changed: 31 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,32 +1,53 @@
11
"use client";
22

3-
import { Tabs, TabsList, TabsTrigger } from "@/components/ui/tabs";
3+
import { Tabs, TabsList, TabsTrigger, TabsContent } from "@/components/ui/tabs";
44
import Routes from "@/constants/routes";
5+
import { useRouter, usePathname } from "next/navigation";
56
import Link from "next/link";
6-
import { usePathname } from "next/navigation";
77
import React from "react";
88

99
const PageSwitcher: React.FC = () => {
1010
const pathname = usePathname();
11+
const router = useRouter();
12+
13+
const handleTabChange = (value: string) => {
14+
router.push(value === "customer"
15+
? Routes.landing.customer
16+
: Routes.landing.visitor);
17+
};
1118

1219
return (
1320
<div className="w-full fixed bottom-6 select-none">
1421
<Tabs
1522
defaultValue=""
1623
value={pathname.replace("/", "")}
24+
onValueChange={handleTabChange}
1725
className="w-fit mx-auto"
1826
>
19-
<TabsList className="grid w-full grid-cols-2 bg-background/50 shadow-xs backdrop-blur-2xl">
20-
<Link href={Routes.landing.customer} scroll={false}>
21-
<TabsTrigger value="customer">
27+
<TabsList className="grid grid-cols-2 bg-background/50 shadow-xs backdrop-blur-2xl">
28+
{/*
29+
Customer tab trigger:
30+
- value must match the TabsContent to show
31+
- id and aria-controls for accessibility
32+
*/}
33+
<TabsTrigger value="customer" id="tab-trigger-customer" aria-controls="tab-content-customer">
34+
<Link href={Routes.landing.customer} className="block w-full h-full">
2235
Je suis un potentiel client
23-
</TabsTrigger>
24-
</Link>
36+
</Link>
37+
</TabsTrigger>
2538

26-
<Link href={Routes.landing.visitor} scroll={false}>
27-
<TabsTrigger value="">Je suis un simple visiteur</TabsTrigger>
28-
</Link>
39+
<TabsTrigger value="" id="tab-trigger-visitor" aria-controls="tab-content-visitor">
40+
<Link href={Routes.landing.visitor} className="block w-full h-full">
41+
Je suis un simple visiteur
42+
</Link>
43+
</TabsTrigger>
2944
</TabsList>
45+
{/*
46+
Corresponding content panels for each tab.
47+
They are empty since actual content is rendered elsewhere.
48+
*/}
49+
<TabsContent value="customer" id="tab-content-customer" />
50+
<TabsContent value="" id="tab-content-visitor" />
3051
</Tabs>
3152
</div>
3253
);

0 commit comments

Comments
 (0)