import {
BrowserRouter,
Navigate,
Route,
Routes,
useLocation,
useParams,
} from "react-router-dom";
import { I18nProvider } from "./i18n";
import { MotionProvider } from "./motion";
import { ToastProvider } from "./components/Toast";
import { SaveToAlbumGuideProvider } from "./components/SaveToAlbumGuide";
import { FavoritesProvider } from "./favorites/FavoritesProvider";
import { AutoInjectedLogin } from "./wallet/AutoInjectedLogin";
import { RainbowWalletProvider } from "./wallet/RainbowWalletProvider";
import { WalletLoginModal } from "./wallet/WalletLoginModal";
import { WalletProvider } from "./wallet/WalletProvider";
import { WalletStackErrorBoundary } from "./wallet/WalletStackErrorBoundary";
import { PublicLayout } from "./layouts/PublicLayout";
import { LocalizedHomePage } from "./pages/LocalizedHome";
import { Browse } from "./pages/Browse";
import { CategoriesPage } from "./pages/Categories";
import { CategoryPage } from "./pages/Category";
import { OfficialRecommendationsPage } from "./pages/OfficialRecommendations";
import { SearchPage } from "./pages/Search";
import { PostRedirect } from "./pages/PostRedirect";
import { ScrollToTop } from "./components/ScrollToTop";
import { PageTitleProvider } from "./components/PageTitleContext";
import Favorites from "./pages/Favorites";
import { adminUiPrefix } from "./adminPaths";
import { AdminRouteTree } from "./adminRouteTree";
import { AdminRouterModeProvider } from "./adminRouterMode";
import { ImageLightboxProvider } from "./components/messageStream/overlays/ImageLightbox";
import { VideoPlayerProvider } from "./components/messageStream/overlays/VideoPlayer";
import { legacyLanguageRedirects, localizedHomeRoutes } from "./languageRoutes";
/**
* Redirects shared links that still use the old long-form language prefix
* (e.g. /chinese, /malay/browse) to the new short codes (/cn, /ms/browse).
* Preserves the sub-path, query string, and hash.
*/
function LegacyLangRedirect({ to }: { to: string }) {
const params = useParams();
const { search, hash } = useLocation();
const splat = params["*"];
const sub = splat ? `/${splat}` : "";
return ;
}
const adminEnabled = import.meta.env.VITE_DISABLE_ADMIN !== "true";
export default function App() {
return (
}>
}
/>
} />
}
/>
}
/>
}
/>
} />
}
/>
}
/>
{localizedHomeRoutes.map((route) => (
}
/>
} />
}
/>
}
/>
}
/>
}
/>
}
/>
}
/>
))}
{/* Legacy long-form language URLs → short-code
redirects. Shared links (e.g. WeChat) keep working. */}
{legacyLanguageRedirects.map((redirect) => (
}
/>
}
/>
))}
{adminEnabled ? (
AdminRouteTree()
) : (
}
/>
)}
}
/>
);
}