ぼざクリ タグ広場 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.
 
 
 
 
 
 

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