File name
Commit message
Commit date
File name
Commit message
Commit date
File name
Commit message
Commit date
File name
Commit message
Commit date
File name
Commit message
Commit date
File name
Commit message
Commit date
import type { Metadata } from 'next';
import Link from 'next/link';
import { Alert } from '@/components/ui/alert';
import { Pagination } from '@/components/ui/pagination';
import { verifySession } from '@/lib/auth/dal';
import { fetchBoardPosts } from '@/lib/data/repositories/board-post-repository';
import {
buildBoardPostHref,
parseBoardPostQuery,
} from '@/lib/domain/board-post-query';
import { BoardFilterBar } from '../_components/board-filter-bar';
import { BoardListToolbar } from '../_components/board-list-toolbar';
import { InquiryTable } from './_components/inquiry-table';
export const metadata: Metadata = {
title: '1:1문의',
};
interface PageProps {
searchParams: Promise<Record<string, string | string[] | undefined>>;
}
/**
* 1:1문의 목록 — 시안 A_BOA_012.
*
* 관리자는 글을 등록하지 않고 **조회·답변·삭제만** 한다(사용자 확인 사항) — 그래서 툴바의
* [신규 등록]을 끈다. 등록을 막는 것은 화면뿐 아니라 Server Action도 마찬가지다.
*/
export default async function Page({ searchParams }: PageProps) {
await verifySession();
const query = parseBoardPostQuery('inquiry', await searchParams);
const { items, totalCount } = await fetchBoardPosts('inquiry', query);
const totalPages = Math.max(1, Math.ceil(totalCount / query.pageSize));
const currentPage = Math.min(query.page, totalPages);
return (
<section className="flex flex-1 flex-col gap-6 p-8">
<h1 className="text-headline-sm text-foreground">1:1문의 목록</h1>
<BoardFilterBar boardType="inquiry" query={query} />
<BoardListToolbar
boardType="inquiry"
query={query}
canCreate={false}
/>
<p className="text-body-md text-foreground-muted">
총 {totalCount}개 | 현재페이지 {currentPage}/{totalPages}
</p>
{items.length === 0 ? (
<Alert
title="검색 결과가 없습니다."
actions={
<Link
href={buildBoardPostHref('inquiry', query, {
keyword: '',
page: 1,
})}
className="bg-foreground px-4 py-2 text-background"
>
확인
</Link>
}
>
다른 검색어로 다시 시도해 주세요.
</Alert>
) : (
<>
<InquiryTable
items={items}
page={currentPage}
pageSize={query.pageSize}
totalCount={totalCount}
/>
<Pagination
currentPage={currentPage}
totalPages={totalPages}
buildHref={(page: number) =>
buildBoardPostHref('inquiry', query, { page })
}
/>
</>
)}
</section>
);
}