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
File name
Commit message
Commit date
'use client';
import { FoxBadge } from '@fox/core/components/fox-badge';
import type { FoxListColumn } from '@fox/core/components/fox-list-container';
import {
formatContentText,
formatGradesLabel,
formatKeywordsLabel,
formatSchoolLabel,
formatVisibilityLabel,
type ContentItem,
type GradesBySchool,
} from '@/lib/domain/content';
import type { CommonCode } from '@/lib/domain/common-code';
import type { ContentQuery } from '@/lib/domain/content-query';
import { ContentListShell } from '../../_components/content-list-shell';
import { ContentRowActions } from '../../_components/content-row-actions';
interface ComicsListProps {
items: ContentItem[];
query: ContentQuery;
currentPage: number;
totalPages: number;
totalCount: number;
schools: readonly CommonCode[];
gradesBySchool: GradesBySchool;
}
export function ComicsList({
items,
query,
currentPage,
totalPages,
totalCount,
schools,
gradesBySchool,
}: ComicsListProps) {
const columns: FoxListColumn<ContentItem>[] = [
{
key: 'no',
header: '번호',
width: 80,
render: (_row, index) => (currentPage - 1) * query.pageSize + index + 1,
},
{
key: 'school',
header: '학교',
width: 120,
render: (row) => formatSchoolLabel(row.schoolCode, schools),
},
{
key: 'grades',
header: '학년',
width: 100,
render: (row) =>
formatGradesLabel(row.grades, gradesBySchool[row.schoolCode] ?? []),
},
{
key: 'name',
header: '콘텐츠명',
width: 320,
emphasis: true,
render: (row) => formatContentText(row.name || row.title),
},
{
key: 'keywords',
header: '키워드',
width: 200,
render: (row) => formatKeywordsLabel(row.keywords),
},
{
key: 'visibility',
header: '비공개',
width: 110,
render: (row) => (
<FoxBadge
type="pastel"
color={row.isVisible ? 'success' : 'neutral'}
size="md"
>
{formatVisibilityLabel(row.isVisible)}
</FoxBadge>
),
},
{
key: 'modifiedAt',
header: '수정일',
width: 140,
render: (row) => formatContentText(row.modifiedAt),
},
{
key: 'actions',
header: '관리',
width: 120,
render: (row) => (
<ContentRowActions
kind="comic"
id={row.cntntsId}
name={row.name || row.title}
/>
),
},
];
return (
<ContentListShell<ContentItem>
kind="comic"
columns={columns}
rows={items}
rowKey={(row) => row.cntntsId}
query={query}
currentPage={currentPage}
totalPages={totalPages}
totalCount={totalCount}
schools={schools}
gradesBySchool={gradesBySchool}
/>
);
}