Advertisement
ebleach7

Untitled

Mar 19th, 2024
643
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. import "@/__core/styles/index.scss";
  2. import "@fontsource/montserrat/200.css";
  3. import "@fontsource/montserrat/300.css";
  4. import "@fontsource/montserrat/400.css";
  5. import "@fontsource/montserrat/500.css";
  6. import "@fontsource/montserrat/600.css";
  7. import "@fontsource/montserrat/700.css";
  8. import { Suspense, useLayoutEffect } from "react";
  9. import { useTranslation } from "react-i18next";
  10. import "react-loading-skeleton/dist/skeleton.css";
  11. import { BrowserRouter } from "react-router-dom";
  12. import { ToastContainer } from "react-toastify";
  13. import "react-toastify/dist/ReactToastify.css";
  14. import "../i18n";
  15. import {
  16.   AppPreloaderProvider,
  17.   MenuProvider,
  18.   ReactQueryProvider,
  19. } from "../providers";
  20. import { Router } from "../router";
  21.  
  22. export const removeLngPrefix = (pathname: string) => {
  23.   for (const lang of ["ru", "kz", "zh", "en"]) {
  24.     if (pathname.startsWith(`/${lang}/`) || pathname === `/${lang}`) {
  25.       return pathname.replace(`/${lang}`, "");
  26.     }
  27.   }
  28.   return pathname;
  29. };
  30.  
  31. export const App = () => {
  32.   const {
  33.     i18n,
  34.     i18n: { language },
  35.   } = useTranslation();
  36.  
  37.   useLayoutEffect(() => {
  38.     const currentPathname = window.location.href.replace(
  39.       window.location.origin,
  40.       "",
  41.     );
  42.  
  43.     const newPathname = `/${language}${removeLngPrefix(currentPathname)}`;
  44.  
  45.     if (currentPathname !== newPathname) {
  46.       window.history.replaceState({}, "", newPathname);
  47.     }
  48.   }, [language, i18n]);
  49.  
  50.   return (
  51.     <Suspense fallback={null}>
  52.       <BrowserRouter basename={`/${language}`}>
  53.         <AppPreloaderProvider>
  54.           <MenuProvider>
  55.             <ReactQueryProvider>
  56.               <Router />
  57.               <ToastContainer />
  58.             </ReactQueryProvider>
  59.           </MenuProvider>
  60.         </AppPreloaderProvider>
  61.       </BrowserRouter>
  62.     </Suspense>
  63.   );
  64. };
  65.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement