From 163a756d268b3a12e3a26f0a2f04f1c6b888280f Mon Sep 17 00:00:00 2001 From: y00eunji Date: Fri, 15 May 2026 16:47:05 +0900 Subject: [PATCH 1/2] =?UTF-8?q?feat(pyconkr-2026):=20=ED=8E=98=EC=9D=B4?= =?UTF-8?q?=EC=A7=80=20=EC=9D=B4=EB=8F=99=20=EC=8B=9C=20=EC=8A=A4=ED=81=AC?= =?UTF-8?q?=EB=A1=A4=20=EC=83=81=EB=8B=A8=20=EC=9D=B4=EB=8F=99=20=EB=B0=8F?= =?UTF-8?q?=20=EB=92=A4=EB=A1=9C=EA=B0=80=EA=B8=B0=20=EC=8B=9C=20=EC=8A=A4?= =?UTF-8?q?=ED=81=AC=EB=A1=A4=20=EC=9C=84=EC=B9=98=20=EB=B3=B5=EA=B5=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit BrowserRouter에서 createBrowserRouter로 마이그레이션하여 React Router 공식 ScrollRestoration 컴포넌트를 적용 --- apps/pyconkr-2026/src/App.tsx | 20 +++++------------- apps/pyconkr-2026/src/main.tsx | 36 +++++++++++++++----------------- apps/pyconkr-2026/src/router.tsx | 26 +++++++++++++++++++++++ 3 files changed, 48 insertions(+), 34 deletions(-) create mode 100644 apps/pyconkr-2026/src/router.tsx diff --git a/apps/pyconkr-2026/src/App.tsx b/apps/pyconkr-2026/src/App.tsx index 051811e..b0a6ffc 100644 --- a/apps/pyconkr-2026/src/App.tsx +++ b/apps/pyconkr-2026/src/App.tsx @@ -2,14 +2,9 @@ import { useBackendClient, useFlattenSiteMapQuery, useSponsorQuery } from "@fron import * as BackendAPISchemas from "@frontend/common/src/schemas/backendAPI"; import { buildNestedSiteMap } from "@frontend/common/src/utils"; import * as React from "react"; -import { Route, Routes, useLocation } from "react-router-dom"; +import { Outlet, ScrollRestoration, useLocation } from "react-router-dom"; import * as R from "remeda"; -import MainLayout from "./components/layout/index.tsx"; -import { PageIdParamRenderer, RouteRenderer } from "./components/pages/dynamic_route.tsx"; -import { PresentationDetailPage } from "./components/pages/presentation_detail.tsx"; -import { ShopSignInPage } from "./components/pages/sign_in.tsx"; -import { SponsorDetailPage } from "./components/pages/sponsor_detail.tsx"; import { useAppContext } from "./contexts/app_context"; export const App: React.FC = () => { @@ -43,14 +38,9 @@ export const App: React.FC = () => { }, [location, language, flatSiteMap, sponsorTiers]); return ( - - }> - } /> - } /> - } /> - } /> - } /> - - + <> + + + ); }; diff --git a/apps/pyconkr-2026/src/main.tsx b/apps/pyconkr-2026/src/main.tsx index cf24b1f..bdd66fc 100644 --- a/apps/pyconkr-2026/src/main.tsx +++ b/apps/pyconkr-2026/src/main.tsx @@ -9,13 +9,13 @@ import { ReactQueryDevtools } from "@tanstack/react-query-devtools"; import { SnackbarProvider } from "notistack"; import * as React from "react"; import * as ReactDom from "react-dom/client"; -import { BrowserRouter } from "react-router-dom"; +import { RouterProvider } from "react-router-dom"; -import { App } from "./App.tsx"; import { IS_DEBUG_ENV } from "./consts"; import { LOCAL_STORAGE_LANGUAGE_KEY } from "./consts/local_stroage.ts"; import { PyConKRMDXComponents } from "./consts/mdx_components.ts"; import { AppContext, AppContextType } from "./contexts/app_context.tsx"; +import { router } from "./router.tsx"; import { globalStyles, muiTheme } from "./styles/globalStyles.ts"; const queryClient = new QueryClient({ @@ -85,23 +85,21 @@ const MainApp: React.FC = () => { - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + diff --git a/apps/pyconkr-2026/src/router.tsx b/apps/pyconkr-2026/src/router.tsx new file mode 100644 index 0000000..4fd035a --- /dev/null +++ b/apps/pyconkr-2026/src/router.tsx @@ -0,0 +1,26 @@ +import { createBrowserRouter } from "react-router-dom"; + +import { App } from "./App.tsx"; +import MainLayout from "./components/layout/index.tsx"; +import { PageIdParamRenderer, RouteRenderer } from "./components/pages/dynamic_route.tsx"; +import { PresentationDetailPage } from "./components/pages/presentation_detail.tsx"; +import { ShopSignInPage } from "./components/pages/sign_in.tsx"; +import { SponsorDetailPage } from "./components/pages/sponsor_detail.tsx"; + +export const router = createBrowserRouter([ + { + element: , + children: [ + { + element: , + children: [ + { path: "/account/sign-in", element: }, + { path: "/sponsors/:id", element: }, + { path: "/presentations/:id", element: }, + { path: "/pages/:id", element: }, + { path: "*", element: }, + ], + }, + ], + }, +]); From cc201eb2a5d019f04907607be006ac69f2ee887a Mon Sep 17 00:00:00 2001 From: y00eunji Date: Fri, 15 May 2026 16:50:17 +0900 Subject: [PATCH 2/2] =?UTF-8?q?feat:=20=20=EB=8F=99=EC=9D=BC=ED=95=98?= =?UTF-8?q?=EA=B2=8C=202025=EC=97=90=EB=8F=84=20=EC=A0=81=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/pyconkr-2025/src/App.tsx | 25 ++++++---------------- apps/pyconkr-2025/src/main.tsx | 36 +++++++++++++++----------------- apps/pyconkr-2025/src/router.tsx | 29 +++++++++++++++++++++++++ 3 files changed, 52 insertions(+), 38 deletions(-) create mode 100644 apps/pyconkr-2025/src/router.tsx diff --git a/apps/pyconkr-2025/src/App.tsx b/apps/pyconkr-2025/src/App.tsx index 7ce3a4c..b0a6ffc 100644 --- a/apps/pyconkr-2025/src/App.tsx +++ b/apps/pyconkr-2025/src/App.tsx @@ -1,17 +1,10 @@ import { useBackendClient, useFlattenSiteMapQuery, useSponsorQuery } from "@frontend/common/src/hooks/useAPI"; +import * as BackendAPISchemas from "@frontend/common/src/schemas/backendAPI"; import { buildNestedSiteMap } from "@frontend/common/src/utils"; import * as React from "react"; -import { Route, Routes, useLocation } from "react-router-dom"; +import { Outlet, ScrollRestoration, useLocation } from "react-router-dom"; import * as R from "remeda"; -import * as BackendAPISchemas from "@frontend/common/src/schemas/backendAPI"; -import MainLayout from "./components/layout/index.tsx"; -import { PageIdParamRenderer, RouteRenderer } from "./components/pages/dynamic_route.tsx"; -import { PresentationDetailPage } from "./components/pages/presentation_detail.tsx"; -import { ShopSignInPage } from "./components/pages/sign_in.tsx"; -import { SponsorDetailPage } from "./components/pages/sponsor_detail.tsx"; -import { Test } from "./components/pages/test.tsx"; -import { IS_DEBUG_ENV } from "./consts"; import { useAppContext } from "./contexts/app_context"; export const App: React.FC = () => { @@ -45,15 +38,9 @@ export const App: React.FC = () => { }, [location, language, flatSiteMap, sponsorTiers]); return ( - - }> - {IS_DEBUG_ENV && } />} - } /> - } /> - } /> - } /> - } /> - - + <> + + + ); }; diff --git a/apps/pyconkr-2025/src/main.tsx b/apps/pyconkr-2025/src/main.tsx index eef13e6..63c3dc4 100644 --- a/apps/pyconkr-2025/src/main.tsx +++ b/apps/pyconkr-2025/src/main.tsx @@ -9,9 +9,9 @@ import { ReactQueryDevtools } from "@tanstack/react-query-devtools"; import { SnackbarProvider } from "notistack"; import * as React from "react"; import * as ReactDom from "react-dom/client"; -import { BrowserRouter } from "react-router-dom"; +import { RouterProvider } from "react-router-dom"; -import { App } from "./App.tsx"; +import { router } from "./router.tsx"; import { IS_DEBUG_ENV } from "./consts"; import { LOCAL_STORAGE_LANGUAGE_KEY } from "./consts/local_stroage.ts"; import { PyConKRMDXComponents } from "./consts/mdx_components.ts"; @@ -85,23 +85,21 @@ const MainApp: React.FC = () => { - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + diff --git a/apps/pyconkr-2025/src/router.tsx b/apps/pyconkr-2025/src/router.tsx new file mode 100644 index 0000000..3cd7990 --- /dev/null +++ b/apps/pyconkr-2025/src/router.tsx @@ -0,0 +1,29 @@ +import { createBrowserRouter } from "react-router-dom"; + +import { App } from "./App.tsx"; +import MainLayout from "./components/layout/index.tsx"; +import { PageIdParamRenderer, RouteRenderer } from "./components/pages/dynamic_route.tsx"; +import { PresentationDetailPage } from "./components/pages/presentation_detail.tsx"; +import { ShopSignInPage } from "./components/pages/sign_in.tsx"; +import { SponsorDetailPage } from "./components/pages/sponsor_detail.tsx"; +import { Test } from "./components/pages/test.tsx"; +import { IS_DEBUG_ENV } from "./consts"; + +export const router = createBrowserRouter([ + { + element: , + children: [ + { + element: , + children: [ + ...(IS_DEBUG_ENV ? [{ path: "/debug", element: }] : []), + { path: "/account/sign-in", element: }, + { path: "/sponsors/:id", element: }, + { path: "/presentations/:id", element: }, + { path: "/pages/:id", element: }, + { path: "*", element: }, + ], + }, + ], + }, +]);