@@ -2012,7 +2012,6 @@ | |||||
"version": "19.1.4", | "version": "19.1.4", | ||||
"resolved": "https://registry.npmjs.org/@types/react/-/react-19.1.4.tgz", | "resolved": "https://registry.npmjs.org/@types/react/-/react-19.1.4.tgz", | ||||
"integrity": "sha512-EB1yiiYdvySuIITtD5lhW4yPyJ31RkJkkDw794LaQYrxCSaQV/47y5o1FMC4zF9ZyjUjzJMZwbovEnT5yHTW6g==", | "integrity": "sha512-EB1yiiYdvySuIITtD5lhW4yPyJ31RkJkkDw794LaQYrxCSaQV/47y5o1FMC4zF9ZyjUjzJMZwbovEnT5yHTW6g==", | ||||
"dev": true, | |||||
"license": "MIT", | "license": "MIT", | ||||
"dependencies": { | "dependencies": { | ||||
"csstype": "^3.0.2" | "csstype": "^3.0.2" | ||||
@@ -2022,7 +2021,7 @@ | |||||
"version": "19.1.5", | "version": "19.1.5", | ||||
"resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-19.1.5.tgz", | "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-19.1.5.tgz", | ||||
"integrity": "sha512-CMCjrWucUBZvohgZxkjd6S9h0nZxXjzus6yDfUb+xLxYM7VvjKNH1tQrE9GWLql1XoOP4/Ds3bwFqShHUYraGg==", | "integrity": "sha512-CMCjrWucUBZvohgZxkjd6S9h0nZxXjzus6yDfUb+xLxYM7VvjKNH1tQrE9GWLql1XoOP4/Ds3bwFqShHUYraGg==", | ||||
"dev": true, | |||||
"devOptional": true, | |||||
"license": "MIT", | "license": "MIT", | ||||
"peerDependencies": { | "peerDependencies": { | ||||
"@types/react": "^19.0.0" | "@types/react": "^19.0.0" | ||||
@@ -2883,7 +2882,6 @@ | |||||
"version": "3.1.3", | "version": "3.1.3", | ||||
"resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", | "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", | ||||
"integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", | "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", | ||||
"dev": true, | |||||
"license": "MIT" | "license": "MIT" | ||||
}, | }, | ||||
"node_modules/debug": { | "node_modules/debug": { | ||||
@@ -1,10 +1,8 @@ | |||||
import axios from 'axios' | import axios from 'axios' | ||||
import toCamel from 'camelcase-keys' | import toCamel from 'camelcase-keys' | ||||
import React, { useEffect, useState } from 'react' | |||||
import { useEffect, useState } from 'react' | |||||
import { BrowserRouter as Router, Route, Routes, Navigate } from 'react-router-dom' | import { BrowserRouter as Router, Route, Routes, Navigate } from 'react-router-dom' | ||||
import TagDetailSidebar from '@/components/TagDetailSidebar' | |||||
import TagSidebar from '@/components/TagSidebar' | |||||
import TopNav from '@/components/TopNav' | import TopNav from '@/components/TopNav' | ||||
import { Toaster } from '@/components/ui/toaster' | import { Toaster } from '@/components/ui/toaster' | ||||
import { API_BASE_URL } from '@/config' | import { API_BASE_URL } from '@/config' | ||||
@@ -21,7 +19,7 @@ import WikiHistoryPage from '@/pages/wiki/WikiHistoryPage' | |||||
import WikiNewPage from '@/pages/wiki/WikiNewPage' | import WikiNewPage from '@/pages/wiki/WikiNewPage' | ||||
import WikiSearchPage from '@/pages/wiki/WikiSearchPage' | import WikiSearchPage from '@/pages/wiki/WikiSearchPage' | ||||
import type { Post, Tag, User } from '@/types' | |||||
import type { User } from '@/types' | |||||
export default () => { | export default () => { | ||||
@@ -29,11 +27,12 @@ export default () => { | |||||
useEffect (() => { | useEffect (() => { | ||||
const createUser = async () => { | const createUser = async () => { | ||||
const { data } = await axios.post (`${ API_BASE_URL }/users`) | |||||
const res = await axios.post (`${ API_BASE_URL }/users`) | |||||
const data = res.data as { code: string; user: any } | |||||
if (data.code) | if (data.code) | ||||
{ | { | ||||
localStorage.setItem ('user_code', data.code) | localStorage.setItem ('user_code', data.code) | ||||
setUser (toCamel (data.user, { deep: true })) | |||||
setUser (toCamel (data.user, { deep: true }) as User) | |||||
} | } | ||||
} | } | ||||
@@ -41,7 +40,8 @@ export default () => { | |||||
if (code) | if (code) | ||||
{ | { | ||||
void (async () => { | void (async () => { | ||||
const { data } = await axios.post (`${ API_BASE_URL }/users/verify`, { code }) | |||||
const res = await axios.post (`${ API_BASE_URL }/users/verify`, { code }) | |||||
const data = res.data as { valid: boolean, user: any } | |||||
if (data.valid) | if (data.valid) | ||||
setUser (toCamel (data.user, { deep: true })) | setUser (toCamel (data.user, { deep: true })) | ||||
else | else | ||||
@@ -1,8 +1,5 @@ | |||||
import React, { useRef, useLayoutEffect, useEffect, useState, CSSProperties } from 'react' | import React, { useRef, useLayoutEffect, useEffect, useState, CSSProperties } from 'react' | ||||
import axios from 'axios' | |||||
import { Link, useNavigate, useLocation } from 'react-router-dom' | import { Link, useNavigate, useLocation } from 'react-router-dom' | ||||
import { API_BASE_URL } from '../config' | |||||
type Props = { id: string, | type Props = { id: string, | ||||
width: number, | width: number, | ||||
height: number, | height: number, | ||||
@@ -10,7 +10,7 @@ import { cn } from '@/lib/utils' | |||||
import type { Tag, User, WikiPage } from '@/types' | import type { Tag, User, WikiPage } from '@/types' | ||||
type Props = { user: User | |||||
type Props = { user: User | null | |||||
setUser: (user: User) => void } | setUser: (user: User) => void } | ||||
const enum Menu { None, | const enum Menu { None, | ||||
@@ -20,7 +20,7 @@ const enum Menu { None, | |||||
Wiki } | Wiki } | ||||
const TopNav: React.FC = ({ user, setUser }: Props) => { | |||||
export default ({ user, setUser }: Props) => { | |||||
const location = useLocation () | const location = useLocation () | ||||
const navigate = useNavigate () | const navigate = useNavigate () | ||||
@@ -230,6 +230,3 @@ const TopNav: React.FC = ({ user, setUser }: Props) => { | |||||
}) ()} | }) ()} | ||||
</>) | </>) | ||||
} | } | ||||
export default TopNav |
@@ -16,7 +16,7 @@ import { cn } from '@/lib/utils' | |||||
import type { Post, Tag, User } from '@/types' | import type { Post, Tag, User } from '@/types' | ||||
type Props = { user: User } | |||||
type Props = { user: User | null } | |||||
export default ({ user }: Props) => { | export default ({ user }: Props) => { | ||||
@@ -21,7 +21,11 @@ | |||||
"noUnusedParameters": true, | "noUnusedParameters": true, | ||||
"erasableSyntaxOnly": true, | "erasableSyntaxOnly": true, | ||||
"noFallthroughCasesInSwitch": true, | "noFallthroughCasesInSwitch": true, | ||||
"noUncheckedSideEffectImports": true | |||||
"noUncheckedSideEffectImports": true, | |||||
"baseUrl": "./src", | |||||
"paths": { | |||||
"@/*": ["*"] | |||||
} | |||||
}, | }, | ||||
"include": ["src"] | "include": ["src"] | ||||
} | } |