src/views/Layout/index.jsx (53 lines of code) (raw):

import { ConfigProvider, FloatButton } from "antd"; import { useParams, Navigate, Outlet } from "react-router-dom"; import { NavBar, Footer } from "../../components"; import { getLanguageCodeFromLS } from "../../utils/getLanguageCodeFromLS"; import { LocaleContext } from "../../LocaleContext"; import { useTitle } from "./useTitle"; import "./index.scss"; const Content = () => { useTitle(); return ( <section className="ds-content"> <Outlet /> </section> ); }; const Layout = () => { const params = useParams(); if (params.locale && ["en-us", "zh-cn"].includes(params.locale)) { const locales = JSON.parse(sessionStorage.getItem("locales")) || {}; return ( <ConfigProvider theme={{ components: { Menu: { colorActiveBarHeight: 0, colorSubItemBg: "#fff", colorItemBg: "#fff", }, }, token: { colorPrimary: "rgb(0, 151, 224)", }, }} > <LocaleContext.Provider value={{ locales: locales, locale: params.locale }} > <NavBar /> <article className="ds-main" id="ds-scroll-content"> <Content /> <FloatButton.BackTop target={() => document.getElementById("ds-scroll-content")} /> <Footer /> </article> </LocaleContext.Provider> </ConfigProvider> ); } const locale = getLanguageCodeFromLS(); return <Navigate to={`/${locale}`} />; }; export default Layout;