/** * 관리자 멤버 목록 페이지 */ 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} 수정 ); } 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;
멤버 정보 및 프로필을 관리합니다