refactor: structure YMB as enterprise React app

This commit is contained in:
Zhou Weidong committed 2026-11-10 15:35:16 +08:00
1 parent e575ebd948
commit eb3eb8dfc6
18 files changed
+182 -20

No files matched your search

+10
View File
@@ -0,0 +1,10 @@
// Author: fruit.com.cn
import { BrowserRouter, Route, Routes } from 'react-router-dom';
import { StoreProvider } from './store';
import { AppShell } from '../layouts/AppShell';
import { HomePage } from '../pages/HomePage';
import { ListingPage } from '../pages/ListingPage';
import { SearchPage } from '../pages/SearchPage';
import { WatchPage } from '../pages/WatchPage';
export function App() { return <BrowserRouter><StoreProvider><Routes><Route element={<AppShell />}><Route path="/" element={<HomePage />} /><Route path="/shorts" element={<ListingPage type="shorts" />} /><Route path="/subscriptions" element={<ListingPage type="subscriptions" />} /><Route path="/library" element={<ListingPage type="library" />} /><Route path="/history" element={<ListingPage type="history" />} /><Route path="/search" element={<SearchPage />} /><Route path="/watch/:id" element={<WatchPage />} /></Route></Routes></StoreProvider></BrowserRouter>; }
+7
View File
@@ -0,0 +1,7 @@
// Author: fruit.com.cn
import { createContext, useContext, useMemo, useState } from 'react';
import { getLocale } from '../i18n';
const StoreContext = createContext(null);
export function StoreProvider({ children }) { const initial = new URLSearchParams(location.search).get('lang'); const [lang, setLangState] = useState(initial || 'id'); const [query, setQuery] = useState(''); const [sidebarOpen, setSidebarOpen] = useState(false); const setLang = (next) => { setLangState(next); const url = new URL(location.href); url.searchParams.set('lang', next); history.replaceState(null, '', url); }; const value = useMemo(() => ({ lang, locale: getLocale(lang), setLang, query, setQuery, sidebarOpen, setSidebarOpen }), [lang, query, sidebarOpen]); return <StoreContext.Provider value={value}>{children}</StoreContext.Provider>; }
export function useAppStore() { return useContext(StoreContext); }