'use client'; import { FoxBadge } from '@fox/core/components/fox-badge'; import { FoxIconButton } from '@fox/core/components/fox-icon-button'; import { FoxStatusIndicator } from '@fox/core/components/fox-status-indicator'; import type { FoxListColumn } from '@fox/core/components/fox-list-container'; import { FoxPaperclipIcon } from '@fox/core/icons'; import { formatPhoneNumber } from '@/lib/domain/phone-number'; import { formatAnswerStatusLabel, formatBoardCategoryLabel, formatFaqTypeLabel, formatInquiryTypeLabel, formatOptionalValue, formatVisibilityLabel, type BoardPost, type BoardType, } from '@/lib/domain/board-post'; import { BoardRowActions } from './board-row-actions'; function numberColumn(page: number, pageSize: number): FoxListColumn { return { key: 'no', header: '번호', width: 80, render: (_row, index) => (page - 1) * pageSize + index + 1, }; } function visibilityColumn(): FoxListColumn { return { key: 'isVisible', header: '사용여부', width: 120, render: (row) => ( ), }; } function actionsColumn(boardType: BoardType): FoxListColumn { return { key: 'actions', header: '관리', width: 120, render: (row) => ( event.stopPropagation()}> ), }; } function noticeColumns(page: number, pageSize: number): FoxListColumn[] { return [ numberColumn(page, pageSize), { key: 'category', header: '구분', width: 120, render: (row) => ( {formatBoardCategoryLabel(row.categoryCode)} ), }, { key: 'title', header: '제목', width: 320, emphasis: true }, { key: 'attachment', header: '첨부', width: 100, render: (row) => row.attachmentId ? ( } label={`${row.title} 첨부파일`} /> ) : null, }, { key: 'authorName', header: '작성자', width: 160, render: (row) => formatOptionalValue(row.authorName), }, visibilityColumn(), { key: 'createdAt', header: '작성일', width: 140, render: (row) => formatOptionalValue(row.createdAt), }, actionsColumn('notice'), ]; } function faqColumns(page: number, pageSize: number): FoxListColumn[] { return [ numberColumn(page, pageSize), { key: 'category', header: '구분', width: 120, render: (row) => ( {formatBoardCategoryLabel(row.categoryCode)} ), }, { key: 'type', header: '유형', width: 120, render: (row) => formatFaqTypeLabel(row.typeCode), }, { key: 'title', header: '제목', width: 320, emphasis: true }, { key: 'authorName', header: '작성자', width: 160, render: (row) => formatOptionalValue(row.authorName), }, { key: 'createdAt', header: '등록일', width: 140, render: (row) => formatOptionalValue(row.createdAt), }, visibilityColumn(), actionsColumn('faq'), ]; } function inquiryColumns(page: number, pageSize: number): FoxListColumn[] { return [ numberColumn(page, pageSize), { key: 'type', header: '질문유형', width: 120, render: (row) => formatInquiryTypeLabel(row.typeCode), }, { key: 'title', header: '질문제목', width: 280, emphasis: true }, { key: 'authorName', header: '질문자명', width: 140, render: (row) => formatOptionalValue(row.authorName), }, { key: 'authorPhoneNumber', header: '전화번호', width: 160, render: (row) => formatOptionalValue(formatPhoneNumber(row.authorPhoneNumber)), }, { key: 'createdAt', header: '질문일', width: 140, render: (row) => formatOptionalValue(row.createdAt), }, { key: 'answerStatus', header: '상태', width: 120, render: (row) => ( ), }, { key: 'answeredAt', header: '답변일', width: 140, render: (row) => formatOptionalValue(row.answeredAt), }, actionsColumn('inquiry'), ]; } export function boardPostColumns( boardType: BoardType, page: number, pageSize: number ): FoxListColumn[] { if (boardType === 'notice') return noticeColumns(page, pageSize); if (boardType === 'faq') return faqColumns(page, pageSize); return inquiryColumns(page, pageSize); }