项目文件夹

文件
wehub-resource-sync 2114b14ee0
Sync main into demo / sync (push) Has been cancelled
chore: import upstream snapshot with attribution
2026-07-13 12:35:26 +08:00

139 行
8.3 KiB
TypeScript

此文件含有模棱两可的 Unicode 字符
此文件含有可能会与其他字符混淆的 Unicode 字符。 如果您是想特意这样的,可以安全地忽略该警告。 使用 Escape 按钮显示他们。
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 (
<div className="h-full w-full" style={cssVars as React.CSSProperties}>
<style>{`
* {
font-family: -apple-system, BlinkMacSystemFont, "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Helvetica Neue", Arial, sans-serif;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
`}</style>
<MemoryRouter initialEntries={['/?tab=discover']}>
<RedBookNavigationHandler />
<Routes>
<Route path="/" element={<Layout />}>
<Route index element={<div />} /> {/* Persistent HomePage is handled in Layout */}
<Route path="market" element={<div />} /> {/* Persistent ShopPage (Market) is handled in Layout */}
<Route path="message" element={<div />} /> {/* Persistent Message is handled in Layout */}
<Route path="me" element={<div />} /> {/* Persistent MePage is handled in Layout */}
<Route path="note/:id" element={<DetailPage />} />
<Route path="publish/text" element={<PublishTextEntryPage />} />
<Route path="publish/text/template" element={<PublishTextTemplatePage />} />
<Route path="publish/text/final" element={<PublishTextFinalPage />} />
<Route path="search" element={<SearchPage />} />
<Route path="chat/:userId" element={<ChatPage />} />
<Route path="chat/:userId/settings" element={<ChatSettingsPage />} />
<Route path="settings" element={<SettingsPage />} />
<Route path="settings/storage" element={<StoragePage />} />
<Route path="settings/account" element={<AccountSecurityPage />} />
<Route path="settings/general" element={<GeneralSettingsPage />} />
<Route path="settings/notification" element={<NotificationSettingsPage />} />
<Route path="settings/notification/private" element={<PrivateMessageSettingsPage />} />
<Route path="settings/notification/follow" element={<FollowUpdatesPage />} />
<Route path="settings/notification/live" element={<LiveStreamReminderPage />} />
<Route path="settings/notification/content" element={<ContentRecommendationPage />} />
<Route path="settings/notification/user" element={<UserRecommendationPage />} />
<Route path="settings/notification/other" element={<OtherNotificationsPage />} />
<Route path="settings/notification/banner" element={<InAppBannerPage />} />
<Route path="settings/language" element={<LanguageSettingsPage />} />
<Route path="settings/privacy" element={<PrivacySettingsPage />} />
<Route path="settings/privacy/online-status" element={<OnlineStatusPage />} />
<Route path="settings/privacy/message-permission" element={<MessagePermissionPage />} />
<Route path="settings/privacy/collect" element={<CollectPrivacyPage />} />
<Route path="settings/privacy/comment" element={<CommentPrivacyPage />} />
<Route path="settings/privacy/find-me" element={<FindMeWayPage />} />
<Route path="settings/privacy/follow-list" element={<FollowListPrivacyPage />} />
<Route path="settings/privacy/system-permission" element={<SystemPermissionPage />} />
<Route path="settings/privacy/personalization" element={<PersonalizationPage />} />
<Route path="edit-profile" element={<EditProfilePage />} />
<Route path="user/allUser" element={<FollowListPage />} />
<Route path="user/:userId" element={<UserPage />} />
<Route path="message/likes" element={<LikesAndCollectionsPage />} />
<Route path="message/followers" element={<NewFollowersPage />} />
<Route path="message/comments" element={<CommentsAndAtPage />} />
<Route path="addfriend" element={<AddFriendPage />} />
<Route path="history" element={<HistoryPage />} />
</Route>
</Routes>
</MemoryRouter>
</div>
);
};
export default RedBookApp;