App.js 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. import React from "react";
  2. import "./App.css";
  3. import {
  4. BrowserRouter as Router,
  5. Route,
  6. Switch,
  7. Redirect,
  8. } from "react-router-dom";
  9. import { Provider } from "@scripters/use-socket.io";
  10. import { RecoilRoot } from "recoil";
  11. import { nanoid } from "nanoid";
  12. import { useParams } from "react-router-dom";
  13. import { C2CProvider } from "./hooks/useC2C";
  14. import BoardView from "./views/BoardView";
  15. const SOCKET_URL = process.env.REACT_APP_SOCKET_URL || "http://localhost:4000";
  16. const SOCKET_PATH = process.env.REACT_APP_SOCKET_PATH || "/socket.io";
  17. const SOCKET_OPTIONS = {
  18. forceNew: true,
  19. path: SOCKET_PATH,
  20. };
  21. const genRoomName = () => {
  22. return nanoid();
  23. };
  24. /**
  25. * Micro component to give room url parameters to C2CProvider
  26. */
  27. export const ConnectedBoardView = () => {
  28. const { room } = useParams();
  29. return (
  30. <C2CProvider room={room}>
  31. <BoardView />
  32. </C2CProvider>
  33. );
  34. };
  35. function App() {
  36. return (
  37. <RecoilRoot>
  38. <Provider url={SOCKET_URL} options={SOCKET_OPTIONS}>
  39. <div className="App">
  40. <Router>
  41. <Switch>
  42. <Route path="/room/:room/">
  43. <ConnectedBoardView />
  44. </Route>
  45. <Redirect path="/room/" to={`/room/${genRoomName()}`} />
  46. {/*<Route exact path='/home'>
  47. <HomePage />
  48. </Route>*/}
  49. <Redirect from="/" to="/room/" />
  50. </Switch>
  51. </Router>
  52. </div>
  53. </Provider>
  54. </RecoilRoot>
  55. );
  56. }
  57. export default App;