You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

289 lines
12 KiB

11 months ago
10 months ago
11 months ago
11 months ago
10 months ago
11 months ago
11 months ago
  1. import React, { lazy, Suspense } from "react";
  2. import { Routes, Route } from "react-router-dom";
  3. import { I18nextProvider } from "react-i18next";
  4. import { ContextWrapper } from "@/AuthContext";
  5. import PrivateRoute, {
  6. AdminRoute,
  7. ManagerRoute,
  8. } from "@/components/PrivateRoute";
  9. import { ToastContainer } from "react-toastify";
  10. import "react-toastify/dist/ReactToastify.css";
  11. import Login from "@/pages/Login";
  12. import SimpleSSOPassthrough from "@/pages/Login/SSO/simple";
  13. import OnboardingFlow from "@/pages/OnboardingFlow";
  14. import i18n from "./i18n";
  15. import { PfpProvider } from "./PfpContext";
  16. import { LogoProvider } from "./LogoContext";
  17. import { FullScreenLoader } from "./components/Preloader";
  18. import { ThemeProvider } from "./ThemeContext";
  19. const Main = lazy(() => import("@/pages/Main")); // 原首页-AI问政
  20. const Home = lazy(() => import("@/pages/Home")); // 新首页
  21. const PolicyLibrary = lazy(() => import("@/pages/PolicyLibrary")); // 政策库
  22. const DataAnalysis = lazy(() => import("@/pages/DataAnalysis")); // 数据分析
  23. const Tendency = lazy(() => import("@/pages/Tendency")); // 趋势洞察
  24. const ReportGeneration = lazy(() => import("@/pages/ReportGeneration")); // 报告生成
  25. const GeneralView = lazy(() => import("@/pages/GeneralView")); // 数据详情
  26. const InvitePage = lazy(() => import("@/pages/Invite"));
  27. const WorkspaceChat = lazy(() => import("@/pages/WorkspaceChat"));
  28. const AdminUsers = lazy(() => import("@/pages/Admin/Users"));
  29. const AdminSection = lazy(() => import("@/pages/Admin/Section"));
  30. const AdminInvites = lazy(() => import("@/pages/Admin/Invitations"));
  31. const AdminWorkspaces = lazy(() => import("@/pages/Admin/Workspaces"));
  32. const AdminLogs = lazy(() => import("@/pages/Admin/Logging"));
  33. const AdminAgents = lazy(() => import("@/pages/Admin/Agents"));
  34. const GeneralChats = lazy(() => import("@/pages/GeneralSettings/Chats"));
  35. const GeneralAppearance = lazy(
  36. () => import("@/pages/GeneralSettings/Appearance")
  37. );
  38. const GeneralApiKeys = lazy(() => import("@/pages/GeneralSettings/ApiKeys"));
  39. const GeneralLLMPreference = lazy(
  40. () => import("@/pages/GeneralSettings/LLMPreference")
  41. );
  42. const GeneralTranscriptionPreference = lazy(
  43. () => import("@/pages/GeneralSettings/TranscriptionPreference")
  44. );
  45. const GeneralAudioPreference = lazy(
  46. () => import("@/pages/GeneralSettings/AudioPreference")
  47. );
  48. const GeneralEmbeddingPreference = lazy(
  49. () => import("@/pages/GeneralSettings/EmbeddingPreference")
  50. );
  51. const EmbeddingTextSplitterPreference = lazy(
  52. () => import("@/pages/GeneralSettings/EmbeddingTextSplitterPreference")
  53. );
  54. const GeneralVectorDatabase = lazy(
  55. () => import("@/pages/GeneralSettings/VectorDatabase")
  56. );
  57. const GeneralSecurity = lazy(() => import("@/pages/GeneralSettings/Security"));
  58. const GeneralBrowserExtension = lazy(
  59. () => import("@/pages/GeneralSettings/BrowserExtensionApiKey")
  60. );
  61. const WorkspaceSettings = lazy(() => import("@/pages/WorkspaceSettings"));
  62. const EmbedConfigSetup = lazy(
  63. () => import("@/pages/GeneralSettings/EmbedConfigs")
  64. );
  65. const EmbedChats = lazy(() => import("@/pages/GeneralSettings/EmbedChats"));
  66. const PrivacyAndData = lazy(
  67. () => import("@/pages/GeneralSettings/PrivacyAndData")
  68. );
  69. const ExperimentalFeatures = lazy(
  70. () => import("@/pages/Admin/ExperimentalFeatures")
  71. );
  72. const LiveDocumentSyncManage = lazy(
  73. () => import("@/pages/Admin/ExperimentalFeatures/Features/LiveSync/manage")
  74. );
  75. const AgentBuilder = lazy(() => import("@/pages/Admin/AgentBuilder"));
  76. const CommunityHubTrending = lazy(
  77. () => import("@/pages/GeneralSettings/CommunityHub/Trending")
  78. );
  79. const CommunityHubAuthentication = lazy(
  80. () => import("@/pages/GeneralSettings/CommunityHub/Authentication")
  81. );
  82. const CommunityHubImportItem = lazy(
  83. () => import("@/pages/GeneralSettings/CommunityHub/ImportItem")
  84. );
  85. export default function App() {
  86. return (
  87. <ThemeProvider>
  88. <Suspense fallback={<FullScreenLoader />}>
  89. <ContextWrapper>
  90. <LogoProvider>
  91. <PfpProvider>
  92. <I18nextProvider i18n={i18n}>
  93. <Routes>
  94. <Route path="/Main" element={<PrivateRoute Component={Main} />} />
  95. <Route path="/" element={<PrivateRoute Component={Home} />} />
  96. <Route
  97. path="/home/PolicyLibrary"
  98. element={<ManagerRoute Component={PolicyLibrary} />}
  99. />
  100. <Route
  101. path="/home/Tendency"
  102. element={<ManagerRoute Component={Tendency} />}
  103. />
  104. <Route
  105. path="/home/DataAnalysis"
  106. element={<ManagerRoute Component={DataAnalysis} />}
  107. />
  108. <Route
  109. path="/home/GeneralView"
  110. element={<ManagerRoute Component={GeneralView} />}
  111. />
  112. <Route
  113. path="/home/ReportGeneration"
  114. element={<ManagerRoute Component={ReportGeneration} />}
  115. />
  116. <Route path="/login" element={<Login />} />
  117. <Route
  118. path="/sso/simple"
  119. element={<SimpleSSOPassthrough />}
  120. />
  121. <Route
  122. path="/workspace/:slug/settings/:tab"
  123. element={<ManagerRoute Component={WorkspaceSettings} />}
  124. />
  125. <Route
  126. path="/workspace/:slug"
  127. element={<PrivateRoute Component={WorkspaceChat} />}
  128. />
  129. <Route
  130. path="/workspace/:slug/t/:threadSlug"
  131. element={<PrivateRoute Component={WorkspaceChat} />}
  132. />
  133. <Route path="/accept-invite/:code" element={<InvitePage />} />
  134. {/* Admin */}
  135. <Route
  136. path="/settings/llm-preference"
  137. element={<AdminRoute Component={GeneralLLMPreference} />}
  138. />
  139. <Route
  140. path="/settings/transcription-preference"
  141. element={
  142. <AdminRoute Component={GeneralTranscriptionPreference} />
  143. }
  144. />
  145. <Route
  146. path="/settings/audio-preference"
  147. element={<AdminRoute Component={GeneralAudioPreference} />}
  148. />
  149. <Route
  150. path="/settings/embedding-preference"
  151. element={
  152. <AdminRoute Component={GeneralEmbeddingPreference} />
  153. }
  154. />
  155. <Route
  156. path="/settings/text-splitter-preference"
  157. element={
  158. <AdminRoute Component={EmbeddingTextSplitterPreference} />
  159. }
  160. />
  161. <Route
  162. path="/settings/vector-database"
  163. element={<AdminRoute Component={GeneralVectorDatabase} />}
  164. />
  165. <Route
  166. path="/settings/agents"
  167. element={<AdminRoute Component={AdminAgents} />}
  168. />
  169. <Route
  170. path="/settings/agents/builder"
  171. element={
  172. <AdminRoute
  173. Component={AgentBuilder}
  174. hideUserMenu={true}
  175. />
  176. }
  177. />
  178. <Route
  179. path="/settings/agents/builder/:flowId"
  180. element={
  181. <AdminRoute
  182. Component={AgentBuilder}
  183. hideUserMenu={true}
  184. />
  185. }
  186. />
  187. <Route
  188. path="/settings/event-logs"
  189. element={<AdminRoute Component={AdminLogs} />}
  190. />
  191. <Route
  192. path="/settings/embed-config"
  193. element={<AdminRoute Component={EmbedConfigSetup} />}
  194. />
  195. <Route
  196. path="/settings/embed-chats"
  197. element={<AdminRoute Component={EmbedChats} />}
  198. />
  199. {/* Manager */}
  200. <Route
  201. path="/settings/security"
  202. element={<ManagerRoute Component={GeneralSecurity} />}
  203. />
  204. <Route
  205. path="/settings/privacy"
  206. element={<AdminRoute Component={PrivacyAndData} />}
  207. />
  208. <Route
  209. path="/settings/appearance"
  210. element={<ManagerRoute Component={GeneralAppearance} />}
  211. />
  212. <Route
  213. path="/settings/beta-features"
  214. element={<AdminRoute Component={ExperimentalFeatures} />}
  215. />
  216. <Route
  217. path="/settings/api-keys"
  218. element={<AdminRoute Component={GeneralApiKeys} />}
  219. />
  220. <Route
  221. path="/settings/browser-extension"
  222. element={
  223. <ManagerRoute Component={GeneralBrowserExtension} />
  224. }
  225. />
  226. <Route
  227. path="/settings/workspace-chats"
  228. element={<ManagerRoute Component={GeneralChats} />}
  229. />
  230. <Route
  231. path="/settings/invites"
  232. element={<ManagerRoute Component={AdminInvites} />}
  233. />
  234. <Route
  235. path="/settings/users"
  236. element={<ManagerRoute Component={AdminUsers} />}
  237. />
  238. <Route
  239. path="/settings/section"
  240. element={<ManagerRoute Component={AdminSection} />}
  241. />
  242. <Route
  243. path="/settings/workspaces"
  244. element={<ManagerRoute Component={AdminWorkspaces} />}
  245. />
  246. {/* Onboarding Flow */}
  247. <Route path="/onboarding" element={<OnboardingFlow />} />
  248. <Route
  249. path="/onboarding/:step"
  250. element={<OnboardingFlow />}
  251. />
  252. {/* Experimental feature pages */}
  253. {/* Live Document Sync feature */}
  254. <Route
  255. path="/settings/beta-features/live-document-sync/manage"
  256. element={<AdminRoute Component={LiveDocumentSyncManage} />}
  257. />
  258. <Route
  259. path="/settings/community-hub/trending"
  260. element={<AdminRoute Component={CommunityHubTrending} />}
  261. />
  262. <Route
  263. path="/settings/community-hub/authentication"
  264. element={
  265. <AdminRoute Component={CommunityHubAuthentication} />
  266. }
  267. />
  268. <Route
  269. path="/settings/community-hub/import-item"
  270. element={<AdminRoute Component={CommunityHubImportItem} />}
  271. />
  272. </Routes>
  273. <ToastContainer />
  274. </I18nextProvider>
  275. </PfpProvider>
  276. </LogoProvider>
  277. </ContextWrapper>
  278. </Suspense>
  279. </ThemeProvider>
  280. );
  281. }