'use client'; import { useRouter } from 'next/navigation'; import { useState, type ChangeEvent } from 'react'; import { Button } from '@/components/ui/button'; import { Select } from '@/components/ui/select'; import { ADMIN_MEMBER_PAGE_SIZE_OPTIONS, ADMIN_MEMBER_SORT_OPTIONS, buildAdminMemberHref, type AdminMemberPageSize, type AdminMemberQuery, type AdminMemberSortOption, } from '@/lib/domain/admin-member-query'; import { AdminMemberCreateModal } from './admin-member-create-modal'; interface AdminMemberListToolbarProps { query: AdminMemberQuery; } const EXCEL_UNSUPPORTED_NOTE = '엑셀 다운로드는 추후 제공됩니다.'; /** * 목록 툴바(시안 ADM_ADM_101 ②③) — 정렬/페이지 크기 select는 변경 즉시 URL을 갱신해 서버 * 데이터를 다시 조회하게 한다. 두 값 모두 바뀌면 1페이지로 되돌린다(기존 페이지 번호가 새 정렬· * 크기 기준으로는 의미가 달라지므로). * * **엑셀다운로드는 버튼만 배치하고 동작은 구현하지 않는다**(사용자 지시 — 추후 진행). * disabled로 두어 클릭해도 아무 일도 일어나지 않게 한다. 학생 회원 목록처럼 백엔드에 엑셀 API가 * 있으면 라우트 핸들러로 중계하면 되지만, 관리자 쪽에는 그 API가 아직 없다 * (`/api/v1/mngr/admin/**`에 목록 조회 하나뿐). * * [신규 등록]은 시안대로 등록 팝업을 연다 — 팝업 열림 상태를 이 컴포넌트가 소유한다. */ export function AdminMemberListToolbar({ query }: AdminMemberListToolbarProps) { const router = useRouter(); const [isCreateOpen, setIsCreateOpen] = useState(false); function handleSortChange(event: ChangeEvent) { const sort = event.target.value as AdminMemberSortOption; router.replace(buildAdminMemberHref(query, { sort, page: 1 })); } function handlePageSizeChange(event: ChangeEvent) { const pageSize = Number(event.target.value) as AdminMemberPageSize; router.replace(buildAdminMemberHref(query, { pageSize, page: 1 })); } return (
{isCreateOpen && ( setIsCreateOpen(false)} /> )}
); }