import React, { useEffect } from 'react'; import { dimensToCssVars, themeToCssVars } from '../../os/utils/themeToCssVars'; import { applySkinToThemeColors } from '../../os/SkinService'; import { useDarkMode } from '../../os/hooks/useDarkMode'; import { manifest } from './manifest'; import { colors, colorsDark } from './res/colors'; import { colorStates, colorStatesDark } from './res/colors.states'; import { dimens } from './res/dimens'; import { anim } from './res/anim'; import { MemoryRouter, Routes, Route } from 'react-router-dom'; import { preload } from './data/loader'; import { RedBookNavigationHandler } from './components/RedBookNavigationHandler'; import { Layout } from './pages/Layout'; import { DetailPage } from './pages/DetailPage'; import { PublishTextEntryPage } from './pages/publish/PublishTextEntryPage'; import { PublishTextTemplatePage } from './pages/publish/PublishTextTemplatePage'; import { PublishTextFinalPage } from './pages/publish/PublishTextFinalPage'; import { SearchPage } from './pages/SearchPage'; import { ChatPage } from './pages/ChatPage'; import { ChatSettingsPage } from './pages/ChatSettingsPage'; import { SettingsPage } from './pages/SettingsPage'; import { AccountSecurityPage } from './pages/AccountSecurityPage'; import { GeneralSettingsPage } from './pages/GeneralSettingsPage'; import { StoragePage } from './pages/StoragePage'; import NotificationSettingsPage from './pages/NotificationSettingsPage'; import PrivateMessageSettingsPage from './pages/notification/PrivateMessageSettingsPage'; import FollowUpdatesPage from './pages/notification/FollowUpdatesPage'; import LiveStreamReminderPage from './pages/notification/LiveStreamReminderPage'; import ContentRecommendationPage from './pages/notification/ContentRecommendationPage'; import UserRecommendationPage from './pages/notification/UserRecommendationPage'; import OtherNotificationsPage from './pages/notification/OtherNotificationsPage'; import InAppBannerPage from './pages/notification/InAppBannerPage'; import LanguageSettingsPage from './pages/LanguageSettingsPage'; import PrivacySettingsPage from './pages/PrivacySettingsPage'; import OnlineStatusPage from './pages/privacy/OnlineStatusPage'; import MessagePermissionPage from './pages/privacy/MessagePermissionPage'; import CollectPrivacyPage from './pages/privacy/CollectPrivacyPage'; import CommentPrivacyPage from './pages/privacy/CommentPrivacyPage'; import FindMeWayPage from './pages/privacy/FindMeWayPage'; import FollowListPrivacyPage from './pages/privacy/FollowListPrivacyPage'; import SystemPermissionPage from './pages/privacy/SystemPermissionPage'; import PersonalizationPage from './pages/privacy/PersonalizationPage'; import { EditProfilePage } from './pages/EditProfilePage'; import { FollowListPage } from './pages/FollowListPage'; import { UserPage } from './pages/UserPage'; import { LikesAndCollectionsPage } from './pages/LikesAndCollectionsPage'; import { NewFollowersPage } from './pages/NewFollowersPage'; import { CommentsAndAtPage } from './pages/CommentsAndAtPage'; import { AddFriendPage } from './pages/AddFriendPage'; import { HistoryPage } from './pages/HistoryPage'; export const RedBookApp: React.FC = () => { const { isDark } = useDarkMode(); // base dataset 的加载已经由 OS 的 lazy() + Suspense + AppLaunchSplash 三件套 // 在 component mount **之前**完成(见 os/data/appRegistry.tsx 的 lazy 包装)。 // 到这里 mount 时 `getBaseDataset()` 必非 null,无需 in-app gate / splash。 // 保留 useEffect(preload()) 作幂等兜底:极少数路径(hot reload / 直接 mount) // 可能绕过 OS lazy,preload() 内部有 cache 短路,重复调用零成本。 useEffect(() => { void preload(); }, []); const themeColors = isDark ? { ...manifest.theme.colors, ...(manifest.theme.colorsDark ?? {}) } : manifest.theme.colors; const appColors = isDark ? { ...colors, ...colorsDark } : colors; const appColorStates = isDark ? { ...colorStates, ...colorStatesDark } : colorStates; const cssVars = { ...themeToCssVars(applySkinToThemeColors(themeColors)), ...dimensToCssVars(appColors, { prefix: '--app-c-' }), ...dimensToCssVars(appColorStates, { prefix: '--app-cs-' }), ...dimensToCssVars(dimens), ...dimensToCssVars(anim, { prefix: '--app-' }), }; return (
}> } /> {/* Persistent HomePage is handled in Layout */} } /> {/* Persistent ShopPage (Market) is handled in Layout */} } /> {/* Persistent Message is handled in Layout */} } /> {/* Persistent MePage is handled in Layout */} } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } />
); }; export default RedBookApp;