ぼざクリ タグ広場 https://hub.nizika.monster
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.
 
 
 
 
 
 

80 lines
2.9 KiB

  1. import React, { useEffect, useState } from 'react'
  2. import { BrowserRouter as Router, Route, Routes, Navigate } from 'react-router-dom'
  3. import TagPage from '@/pages/TagPage'
  4. import TopNav from '@/components/TopNav'
  5. import TagSidebar from '@/components/TagSidebar'
  6. import TagDetailSidebar from '@/components/TagDetailSidebar'
  7. import PostPage from '@/pages/PostPage'
  8. import PostNewPage from '@/pages/PostNewPage'
  9. import PostDetailPage from '@/pages/PostDetailPage'
  10. import WikiPage from '@/pages/WikiPage'
  11. import WikiNewPage from '@/pages/WikiNewPage'
  12. import WikiEditPage from '@/pages/WikiEditPage'
  13. import WikiDiffPage from '@/pages/WikiDiffPage'
  14. import WikiDetailPage from '@/pages/WikiDetailPage'
  15. import WikiHistoryPage from '@/pages/WikiHistoryPage'
  16. import { API_BASE_URL } from '@/config'
  17. import axios from 'axios'
  18. import { Toaster } from '@/components/ui/toaster'
  19. import { camelizeKeys } from 'humps'
  20. import type { Post, Tag, User } from '@/types'
  21. export default () => {
  22. const [user, setUser] = useState<User | null> (null)
  23. useEffect (() => {
  24. const createUser = () => (
  25. axios.post (`${ API_BASE_URL }/users`)
  26. .then (res => {
  27. if (res.data.code)
  28. {
  29. localStorage.setItem ('user_code', res.data.code)
  30. setUser (camelizeKeys (res.data.user))
  31. }
  32. }))
  33. const code = localStorage.getItem ('user_code')
  34. if (code)
  35. {
  36. void (axios.post (`${ API_BASE_URL }/users/verify`, { code })
  37. .then (res => {
  38. if (res.data.valid)
  39. setUser (camelizeKeys (res.data.user))
  40. else
  41. createUser ()
  42. }))
  43. }
  44. else
  45. createUser ()
  46. alert ('このサイトはまだ作りかけです!!!!\n出てけ!!!!!!!!!!!!!!!!!!!!')
  47. }, [])
  48. return (
  49. <>
  50. <Router>
  51. <div className="flex flex-col h-screen w-screen">
  52. <TopNav user={user} setUser={setUser} />
  53. <div className="flex flex-1">
  54. <Routes>
  55. <Route path="/" element={<Navigate to="/posts" replace />} />
  56. <Route path="/posts" element={<PostPage />} />
  57. <Route path="/posts/new" element={<PostNewPage />} />
  58. <Route path="/posts/:id" element={<PostDetailPage user={user} />} />
  59. <Route path="/tags/:tag" element={<TagPage />} />
  60. <Route path="/wiki" element={<WikiPage />} />
  61. <Route path="/wiki/:title" element={<WikiDetailPage />} />
  62. <Route path="/wiki/new" element={<WikiNewPage />} />
  63. <Route path="/wiki/:id/edit" element={<WikiEditPage />} />
  64. <Route path="/wiki/:id/diff" element={<WikiDiffPage />} />
  65. <Route path="/wiki/changes" element={<WikiHistoryPage />} />
  66. </Routes>
  67. </div>
  68. </div>
  69. </Router>
  70. <Toaster />
  71. </>)
  72. }