'use client'; import './style.scss'; import Link from 'next/link'; import { useState, useCallback, useRef } from 'react'; import { useConfigContext } from '@/contexts/configProvider'; import { useMemberContext } from '@/contexts/memberProvider'; import useErrorAlert from '@/hooks/useErrorAlert'; import { ChangeNameRequest } from '@/types/request/account'; import { fetchApi } from '@/lib/utils/client'; import Loading from '@/app/component/Loading'; export default function ChangeName() { const config = useConfigContext(); const { member, setMember } = useMemberContext(); const { setError } = useErrorAlert(); const [loading, setLoading] = useState(false); const [newName, setNewName] = useState(''); const newNameRef = useRef(null); const handleSubmit = async (e: React.FormEvent) => { e.preventDefault(); if (!member) { return; } if (!newName) { newNameRef.current?.focus(); return setError('별명을 입력하세요.'); } setLoading(true); fetchApi('/api/mypage/name', { method: 'POST', body: { Name: newName } as ChangeNameRequest }).then(() => { member.name = newName; setMember(member); localStorage.setItem('member', JSON.stringify(member)); alert("별명이 변경되었습니다."); }).catch(err => { setError(err.message); }).finally(() => { setLoading(false); setNewName(''); }); } const handleChange = useCallback((e: React.ChangeEvent) => { setNewName(e.target.value.trim()); }, []); const handleDelete = async () => { if (confirm("별명을 삭제하시겠습니까?")) { if (!member || !member.name) { return; } setLoading(true); fetchApi('/api/mypage/name', { method: 'DELETE' }).then(() => { member.name = null; setMember(member); localStorage.setItem('member', JSON.stringify(member)); alert("별명이 삭제되었습니다."); }).catch(err => { setError(err.message); }).finally(() => { setLoading(false); setNewName(''); }); } }; return ( <>
{ loading && }

별명 변경

개성을 담아 별명을 지어보세요!
일 간격으로 별명을 변경할 수 있습니다.
현재 별명 {member?.name ?? '-'}  
새 별명  
{ member?.name && ( )} 취소

등록할 수 없는 별명
  1. 별명은 최대 20자 이내로 입력 가능합니다.
  2. 욕설 및 비속어는 별명으로 만들 수 없습니다.
  3. 부적절한 별명은 별도의 고지 없이 변경될 수 있습니다.
  4. {(config.account.changeNameDay ?? 0) > 0 &&
  5. 별명 변경 주기는 {config.account.changeNameDay}일입니다.
  6. }
); }