App.tsx 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. import { HashRouter, Outlet, Route, Routes } from 'react-router';
  2. import Header from './components/Header';
  3. import Sidebar from './components/Sidebar';
  4. import { AppContextProvider, useAppContext } from './utils/app.context';
  5. import ChatScreen from './components/ChatScreen';
  6. import SettingDialog from './components/SettingDialog';
  7. import { Toaster } from 'react-hot-toast';
  8. import { ModalProvider } from './components/ModalProvider';
  9. function App() {
  10. return (
  11. <ModalProvider>
  12. <HashRouter>
  13. <div className="flex flex-row drawer lg:drawer-open">
  14. <AppContextProvider>
  15. <Routes>
  16. <Route element={<AppLayout />}>
  17. <Route path="/chat/:convId" element={<ChatScreen />} />
  18. <Route path="*" element={<ChatScreen />} />
  19. </Route>
  20. </Routes>
  21. </AppContextProvider>
  22. </div>
  23. </HashRouter>
  24. </ModalProvider>
  25. );
  26. }
  27. function AppLayout() {
  28. const { showSettings, setShowSettings } = useAppContext();
  29. return (
  30. <>
  31. <Sidebar />
  32. <main
  33. className="drawer-content grow flex flex-col h-screen mx-auto px-4 overflow-auto bg-base-100"
  34. id="main-scroll"
  35. >
  36. <Header />
  37. <Outlet />
  38. </main>
  39. {
  40. <SettingDialog
  41. show={showSettings}
  42. onClose={() => setShowSettings(false)}
  43. />
  44. }
  45. <Toaster />
  46. </>
  47. );
  48. }
  49. export default App;