feature/tauri-js-rs
tsx 76 lines 2.08 KB
Raw
1 'use client';
2
3 import React, { Suspense } from 'react';
4 import { usePathname, useSearchParams } from 'next/navigation';
5 import { HomeIcon } from '@heroicons/react/solid';
6
7 function Params() {
8 const searchParams = useSearchParams()!;
9
10 return searchParams.toString().length !== 0 ? (
11 <div className="px-2 text-gray-500">
12 <span>?</span>
13 {Array.from(searchParams.entries()).map(([key, value], index) => {
14 return (
15 <React.Fragment key={key}>
16 {index !== 0 ? <span>&</span> : null}
17 <span className="px-1">
18 <span
19 key={key}
20 className="animate-[highlight_1s_ease-in-out_1] text-gray-100"
21 >
22 {key}
23 </span>
24 <span>=</span>
25 <span
26 key={value}
27 className="animate-[highlight_1s_ease-in-out_1] text-gray-100"
28 >
29 {value}
30 </span>
31 </span>
32 </React.Fragment>
33 );
34 })}
35 </div>
36 ) : null;
37 }
38
39 export function AddressBar() {
40 const pathname = usePathname();
41 return (
42 <div className="flex items-center gap-x-2 p-3.5 lg:px-5 lg:py-3">
43 <div className="text-gray-600">
44 <HomeIcon width={16} />
45 </div>
46 <div className="flex gap-x-1 text-sm font-medium">
47 {pathname ? (
48 <>
49 <span className="text-gray-600">/</span>
50 {pathname
51 .split('/')
52 .slice(1)
53 .map((segment) => {
54 return (
55 <React.Fragment key={segment}>
56 <span>
57 <span
58 key={segment}
59 className="animate-[highlight_1s_ease-in-out_1] rounded-full px-1.5 py-0.5 text-gray-100"
60 >
61 {segment}
62 </span>
63 </span>
64 </React.Fragment>
65 );
66 })}
67 </>
68 ) : null}
69
70 <Suspense>
71 <Params />
72 </Suspense>
73 </div>
74 </div>
75 );
76 }