'use client'; import { useState, useEffect } from 'react'; import { useRouter } from 'next/navigation'; import { PageLayout } from '@/components/organisms/PageLayout'; import { PageHeader } from '@/components/organisms/PageHeader'; import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card'; import { Button } from '@/components/ui/button'; import { Input } from '@/components/ui/input'; import { Label } from '@/components/ui/label'; import { RadioGroup, RadioGroupItem } from '@/components/ui/radio-group'; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue, } from '@/components/ui/select'; import { Checkbox } from '@/components/ui/checkbox'; import { ClipboardList, ArrowLeft, Save } from 'lucide-react'; import type { Board, BoardFormData, BoardTarget, BoardStatus } from './types'; import { BOARD_TARGETS, BOARD_STATUS_LABELS } from './types'; // TODO: API에서 부서 목록 가져오기 const MOCK_DEPARTMENTS = [ { id: 1, name: '경영지원팀' }, { id: 2, name: '영업팀' }, { id: 3, name: '개발팀' }, { id: 4, name: '디자인팀' }, { id: 5, name: '마케팅팀' }, ]; // TODO: API에서 권한 목록 가져오기 const MOCK_PERMISSIONS = [ { code: 'admin', name: '관리자' }, { code: 'manager', name: '매니저' }, { code: 'staff', name: '직원' }, { code: 'guest', name: '게스트' }, ]; interface BoardFormProps { mode: 'create' | 'edit'; board?: Board; onSubmit: (data: BoardFormData) => void; } // 날짜/시간 포맷 const formatDateTime = (dateString: string): string => { const date = new Date(dateString); const year = date.getFullYear(); const month = String(date.getMonth() + 1).padStart(2, '0'); const day = String(date.getDate()).padStart(2, '0'); const hours = String(date.getHours()).padStart(2, '0'); const minutes = String(date.getMinutes()).padStart(2, '0'); return `${year}-${month}-${day} ${hours}:${minutes}`; }; // 현재 날짜/시간 const getCurrentDateTime = (): string => { return formatDateTime(new Date().toISOString()); }; export function BoardForm({ mode, board, onSubmit }: BoardFormProps) { const router = useRouter(); const [formData, setFormData] = useState({ target: 'all', targetName: '', permissions: [], boardName: '', status: 'active', }); // 수정 모드일 때 기존 데이터 로드 useEffect(() => { if (mode === 'edit' && board) { setFormData({ target: board.target, targetName: board.targetName || '', permissions: board.permissions || [], boardName: board.boardName, status: board.status, }); } }, [mode, board]); const handleBack = () => { if (mode === 'edit' && board) { router.push(`/ko/board/board-management/${board.id}?mode=view`); } else { router.push('/ko/board/board-management'); } }; const handleSubmit = (e: React.FormEvent) => { e.preventDefault(); onSubmit(formData); }; const handleTargetChange = (value: BoardTarget) => { setFormData(prev => ({ ...prev, target: value, targetName: value === 'department' ? prev.targetName : '', permissions: value === 'permission' ? prev.permissions : [], })); }; // 권한 체크박스 핸들러 const handlePermissionChange = (code: string, checked: boolean) => { setFormData(prev => ({ ...prev, permissions: checked ? [...(prev.permissions || []), code] : (prev.permissions || []).filter(p => p !== code), })); }; // 작성자 (현재 로그인한 사용자 - mock) const currentUser = '홍길동'; // 등록일시 const registeredAt = mode === 'edit' && board ? formatDateTime(board.createdAt) : getCurrentDateTime(); return (
{/* 게시판 정보 */} 게시판 정보 *
{/* 대상 */}
{formData.target === 'department' && ( )} {formData.target === 'permission' && (
{MOCK_PERMISSIONS.map((perm) => (
handlePermissionChange(perm.code, checked as boolean)} />
))}
)}
{/* 작성자 */}
{/* 게시판명 */}
setFormData(prev => ({ ...prev, boardName: e.target.value }))} placeholder="게시판명을 입력해주세요" />
{/* 상태 */}
setFormData(prev => ({ ...prev, status: value as BoardStatus }))} className="flex items-center gap-4" >
{/* 등록일시 */}
{/* 버튼 영역 */}
); }