ファイル
btrc-hub/frontend/src/pages/users/SettingPage.tsx
T
みてるぞ eb975e5301 プリフェッチ実装(#140) (#256)
Merge branch 'main' into feature/140

#140

Merge remote-tracking branch 'origin/main' into feature/140

#140

#140

#140

#140

#140

Merge remote-tracking branch 'origin/main' into feature/140

#140

#140

#140

#140

#140

#140

#140

#140

#140

#140

#140

Merge remote-tracking branch 'origin/main' into feature/140

Merge remote-tracking branch 'origin/main' into feature/140

#140 ぼちぼち

Merge remote-tracking branch 'origin/main' into feature/140

#140

#140

#140

Co-authored-by: miteruzo <miteruzo@naver.com>
Reviewed-on: #256
2026-02-11 13:27:28 +09:00

113 行
3.0 KiB
TypeScript

import { useEffect, useState } from 'react'
import { Helmet } from 'react-helmet-async'
import Form from '@/components/common/Form'
import Label from '@/components/common/Label'
import PageTitle from '@/components/common/PageTitle'
import MainArea from '@/components/layout/MainArea'
import InheritDialogue from '@/components/users/InheritDialogue'
import UserCodeDialogue from '@/components/users/UserCodeDialogue'
import { Button } from '@/components/ui/button'
import { toast } from '@/components/ui/use-toast'
import { SITE_TITLE } from '@/config'
import { apiPut } from '@/lib/api'
import type { User } from '@/types'
type Props = { user: User | null
setUser: React.Dispatch<React.SetStateAction<User | null>> }
export default ({ user, setUser }: Props) => {
const [name, setName] = useState ('')
const [userCodeVsbl, setUserCodeVsbl] = useState (false)
const [inheritVsbl, setInheritVsbl] = useState (false)
const handleSubmit = async () => {
if (!(user))
return
const formData = new FormData
formData.append ('name', name)
try
{
const data = await apiPut<User> (
`/users/${ user.id }`, formData,
{ headers: { 'Content-Type': 'multipart/form-data' } })
setUser (user => ({ ...user, ...data }))
toast ({ title: '設定を更新しました.' })
}
catch
{
toast ({ title: 'しっぱい……' })
}
}
useEffect (() => {
if (!user)
return
setName (user.name ?? '')
}, [user])
return (
<MainArea>
<Helmet>
<meta name="robots" content="noindex"/>
<title> | {SITE_TITLE}</title>
</Helmet>
<Form>
<PageTitle></PageTitle>
{user ? (
<>
{/* 名前 */}
<div>
<Label></Label>
<input type="text"
className="w-full border rounded p-2"
value={name}
placeholder="名もなきニジラー"
onChange={ev => setName (ev.target.value)}/>
{(user && !(user.name)) && (
<p className="mt-1 text-sm text-red-500">
30 !!!!
</p>)}
</div>
{/* 送信 */}
<Button onClick={handleSubmit}
className="px-4 py-2 bg-blue-600 text-white rounded disabled:bg-gray-400">
</Button>
{/* 引継ぎ */}
<div>
<Label></Label>
<Button onClick={() => setUserCodeVsbl (true)}
className="px-4 py-2 bg-gray-600 text-white rounded disabled:bg-gray-400"
disabled={!(user)}>
</Button>
<Button onClick={() => setInheritVsbl (true)}
className="ml-2 px-4 py-2 bg-red-600 text-white rounded disabled:bg-gray-400"
disabled={!(user)}>
</Button>
</div>
</>) : 'Loading...'}
</Form>
<UserCodeDialogue visible={userCodeVsbl}
onVisibleChange={setUserCodeVsbl}
user={user}
setUser={setUser}/>
<InheritDialogue visible={inheritVsbl}
onVisibleChange={setInheritVsbl}
setUser={setUser}/>
</MainArea>)
}