11"use client" ;
22import { MainHomeLayout } from "@repo/web-ui/layout" ;
3- import React , { useState } from "react" ;
3+ import React , { useCallback , Suspense } from "react" ;
4+ import { useSearchParams , useRouter } from "next/navigation" ;
45import "./page.module.css" ;
56import QuizMarkdownEditor from "../components/markdown-editor" ;
67import ChatgptEditor from "../components/chatgpt-editor" ;
@@ -22,16 +23,33 @@ const tabs = [
2223 }
2324] ;
2425
25- export default function Home ( ) {
26- const [ tab , setTab ] = useState ( "markdown" ) ;
26+ function HomeContent ( ) {
27+ const searchParams = useSearchParams ( ) ;
28+ const router = useRouter ( ) ;
29+
30+ const currentTab = searchParams . get ( "t" ) || "markdown" ;
31+
32+ const setTab = useCallback ( ( newTab : string ) => {
33+ const params = new URLSearchParams ( searchParams . toString ( ) ) ;
34+ params . set ( "t" , newTab ) ;
35+ router . push ( `?${ params . toString ( ) } ` ) ;
36+ } , [ searchParams , router ] ) ;
2737
2838 return (
29- < MainHomeLayout tab = { tab } tabs = { tabs } setTab = { setTab } >
39+ < MainHomeLayout tab = { currentTab } tabs = { tabs } setTab = { setTab } >
3040 < CardSizeProvider >
31- { tab === "markdown" ? < QuizMarkdownEditor /> : null }
32- { tab === "chatgpt" ? < ChatgptEditor /> : null }
33- { tab === "gradient" ? < GradientEditor /> : null }
41+ { currentTab === "markdown" ? < QuizMarkdownEditor /> : null }
42+ { currentTab === "chatgpt" ? < ChatgptEditor /> : null }
43+ { currentTab === "gradient" ? < GradientEditor /> : null }
3444 </ CardSizeProvider >
3545 </ MainHomeLayout >
3646 ) ;
3747}
48+
49+ export default function Home ( ) {
50+ return (
51+ < Suspense fallback = { < div > Loading...</ div > } >
52+ < HomeContent />
53+ </ Suspense >
54+ ) ;
55+ }
0 commit comments