'use client'; import { useState } from 'react'; import { useRouter } from 'next/navigation'; import { Card, CardContent } from '@/components/ui/card'; import { Button } from '@/components/ui/button'; import { Badge } from '@/components/ui/badge'; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue, } from '@/components/ui/select'; import { toast } from 'sonner'; import type { TodayIssueListItem, TodayIssueListBadgeType } from '../types'; // 뱃지 색상 매핑 const BADGE_COLORS: Record = { '수주 성공': 'bg-blue-100 text-blue-700 hover:bg-blue-100', '주식 이슈': 'bg-purple-100 text-purple-700 hover:bg-purple-100', '직정 제고': 'bg-orange-100 text-orange-700 hover:bg-orange-100', '지출예상내역서': 'bg-green-100 text-green-700 hover:bg-green-100', '세금 신고': 'bg-red-100 text-red-700 hover:bg-red-100', '결재 요청': 'bg-yellow-100 text-yellow-700 hover:bg-yellow-100', '기타': 'bg-gray-100 text-gray-700 hover:bg-gray-100', }; // 필터 옵션 const FILTER_OPTIONS = [ { value: 'all', label: '전체' }, { value: '수주 성공', label: '수주 성공' }, { value: '주식 이슈', label: '주식 이슈' }, { value: '직정 제고', label: '직정 제고' }, { value: '지출예상내역서', label: '지출예상내역서' }, { value: '세금 신고', label: '세금 신고' }, { value: '결재 요청', label: '결재 요청' }, ]; interface TodayIssueSectionProps { items: TodayIssueListItem[]; } export function TodayIssueSection({ items }: TodayIssueSectionProps) { const router = useRouter(); const [filter, setFilter] = useState('all'); const [dismissedIds, setDismissedIds] = useState>(new Set()); // 확인되지 않은 아이템만 필터링 const activeItems = items.filter((item) => !dismissedIds.has(item.id)); // 필터링된 아이템 const filteredItems = filter === 'all' ? activeItems : activeItems.filter((item) => item.badge === filter); // 아이템 클릭 const handleItemClick = (item: TodayIssueListItem) => { if (item.path) { router.push(item.path); } }; // 확인 버튼 클릭 (목록에서 제거) const handleDismiss = (item: TodayIssueListItem) => { setDismissedIds((prev) => new Set(prev).add(item.id)); toast.success(`"${item.content}" 확인 완료`); }; // 승인 버튼 클릭 const handleApprove = (item: TodayIssueListItem) => { setDismissedIds((prev) => new Set(prev).add(item.id)); toast.success(`"${item.content}" 승인 처리되었습니다.`); }; // 반려 버튼 클릭 const handleReject = (item: TodayIssueListItem) => { setDismissedIds((prev) => new Set(prev).add(item.id)); toast.error(`"${item.content}" 반려 처리되었습니다.`); }; return ( {/* 헤더 */}

오늘의 이슈

{/* 리스트 */}
{filteredItems.length === 0 ? (
표시할 이슈가 없습니다.
) : ( filteredItems.map((item) => (
handleItemClick(item)} > {/* 좌측: 뱃지 + 내용 */}
{item.badge} {item.content}
{/* 우측: 시간 + 버튼 */}
e.stopPropagation()}> {item.time} {item.needsApproval ? (
) : ( )}
)) )}
); }