/** * 관리자 멤버 목록 페이지 */ import { useEffect } from 'react'; import { useNavigate, useLocation, Link } from 'react-router-dom'; import { useQuery } from '@tanstack/react-query'; import { motion } from 'framer-motion'; import { Edit2, Home, ChevronRight, Users, User } from 'lucide-react'; import { Toast } from '@/components/common'; import { AdminLayout } from '@/components/pc/admin'; import { useAdminAuth } from '@/hooks/pc/admin'; import { useToast } from '@/hooks/common'; import { adminMemberApi } from '@/api/pc/admin'; /** * 멤버 카드 컴포넌트 */ function MemberCard({ member, index, isFormer = false, onClick }) { return (
{member.image_url ? ( {member.name} ) : (
)}

{member.name}

수정
); } function AdminMembers() { const navigate = useNavigate(); const location = useLocation(); const { user, isAuthenticated } = useAdminAuth(); const { toast, setToast } = useToast(); // 다른 페이지에서 전달된 토스트 메시지 처리 useEffect(() => { if (location.state?.toast) { setToast(location.state.toast); window.history.replaceState({}, ''); } }, [location.state, setToast]); // 멤버 목록 조회 const { data: members = [], isLoading: loading, isError, } = useQuery({ queryKey: ['admin', 'members'], queryFn: adminMemberApi.getMembers, enabled: isAuthenticated, }); // 에러 처리 useEffect(() => { if (isError) { setToast({ message: '멤버 목록을 불러오는데 실패했습니다.', type: 'error' }); } }, [isError, setToast]); // 활동/탈퇴 멤버 분리 const activeMembers = members.filter((m) => !m.is_former); const formerMembers = members.filter((m) => m.is_former); const handleMemberClick = (memberName) => { navigate(`/admin/members/${encodeURIComponent(memberName)}/edit`); }; return ( setToast(null)} />
{/* 브레드크럼 */}
멤버 관리
{/* 타이틀 */}

멤버 관리

멤버 정보 및 프로필을 관리합니다

{/* 멤버 목록 */} {loading ? (
) : (
{/* 활동 멤버 */}

현재 멤버

{activeMembers.length}
{activeMembers.map((member, index) => ( handleMemberClick(member.name)} /> ))}
{/* 탈퇴 멤버 */} {formerMembers.length > 0 && (

이전 멤버

{formerMembers.length}
{formerMembers.map((member, index) => ( handleMemberClick(member.name)} /> ))}
)} {members.length === 0 && (
등록된 멤버가 없습니다.
)}
)}
); } export default AdminMembers;