'use client'; import './style.scss'; import Link from 'next/link'; import Image from 'next/image'; import { useCallback, useEffect, useMemo, useState } from 'react'; import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'; import { faGoogle } from '@fortawesome/free-brands-svg-icons'; import useAuth from '@/hooks/useAuth'; import { fetchApi, getDateTime, stripHtmlTags } from '@/lib/utils/client'; import { SnsLinkItem, SnsListResponse } from '@/types/sns'; import NavTabs from '../navTabs'; import { FEATURE_CHANNEL } from '@/constants/features'; type ProviderMeta = { provider: 'Google' | 'Naver' | 'Kakao'; label: string; enabled: boolean; }; const PROVIDERS: ProviderMeta[] = [ { provider: 'Google', label: 'Google', enabled: true }, { provider: 'Naver', label: 'Naver', enabled: false }, { provider: 'Kakao', label: 'Kakao', enabled: false } ]; export default function Profile() { const { member } = useAuth(); const [snsItems, setSnsItems] = useState([]); const loadSnsItems = useCallback(async () => { try { const res = await fetchApi('/api/mypage/sns', { silent: true }); if (res.data) { setSnsItems(res.data.items); } } catch { // silent } }, []); useEffect(() => { if (!member) { return; } loadSnsItems(); }, [member, loadSnsItems]); const snsItemMap = useMemo(() => { const map = new Map(); snsItems.forEach((item) => map.set(item.provider, item)); return map; }, [snsItems]); if (!member) { return null; } return ( <>

내 정보

등록 정보
사용자 ID {member?.sid}
이메일 {member?.email} 이메일 변경
별명 {member?.name || '-'} 별명 변경
본인인증 {member?.isAuthCertified ? '인증 완료' : '-'}
SNS 연동
{PROVIDERS.map((meta) => { const item = snsItemMap.get(meta.provider); const connected = item?.connected ?? false; const stateText = !meta.enabled ? `${meta.label} 준비중` : (connected ? `${meta.label} 연동됨` : `${meta.label} 미연동`); return ( {meta.provider === 'Google' && } {meta.provider === 'Naver' && N} {meta.provider === 'Kakao' && K} ); })}
SNS 관리
회원가입 일시 {getDateTime(member.createdAt)}
마지막 로그인 일시 {getDateTime(member.lastLoginAt)}
알림 수신
수신 설정
활동 정보
회원 사진 {member?.thumb ? (회원 사진) : '-'} 사진 변경
회원 등급
한마디
{member?.summary || '-'} 한마디 변경
자기소개
{stripHtmlTags(member.intro) || '-'} 자기소개 변경
경험치 {member?.memberStats.exp}
작성 게시글 {member?.memberStats.postCount}
작성 댓글 {member?.memberStats.commentCount}
팔로워 {member?.memberStats.followerCount ?? 0}
팔로잉 {member?.memberStats.followingCount ?? 0}
{/* 채널 기능 OFF 시 스튜디오 진입 링크 미노출 */} {FEATURE_CHANNEL && ( 채널 관리 )}

회원님의 개인정보는 안전하게 보호됩니다.
※ 의심스러운 활동이 감지되면 즉시 비밀번호를 변경하세요.
※ 보안을 위해 비밀번호를 주기적으로 변경하는 것이 좋습니다.
※ 자동 로그인 기능을 사용하면, 로그인 상태가 유지됩니다.
※ 공용 컴퓨터에서는 자동 로그인을 사용하지 않는 것이 좋습니다.
); }