'use client'; import { useState } from 'react'; import { useRouter } from 'next/navigation'; import { fetchApi } from '@/lib/utils/client'; import { useStudioContext } from '@/app/studio/context'; import { useCrewWidgetConfigContext } from '../context'; import { CREW_PERIODS, CREW_WIDGET_THEMES } from '../constants'; import { formatDateTime } from '../types'; import { Button } from '@/components/ui/button'; import { Checkbox } from '@/components/ui/checkbox'; export default function CrewWidgetListPanel() { const router = useRouter(); const { channelID } = useStudioContext(); const { items, loading, fetchList } = useCrewWidgetConfigContext(); const [selected, setSelected] = useState>(new Set()); const toggleSelect = (id: number) => { setSelected(prev => { const next = new Set(prev); if (next.has(id)) next.delete(id); else next.add(id); return next; }); }; const toggleAll = () => { if (selected.size === items.length) { setSelected(new Set()); } else { setSelected(new Set(items.map(i => i.id))); } }; const handleBatchDelete = async () => { if (selected.size === 0) { return; } if (!confirm(`${selected.size}개 설정을 삭제하시겠습니까?`)) { return; } for (const id of selected) { try { await fetchApi(`/api/studio/crew/widget/config/${id}/${channelID}`, { method: 'DELETE' }); } catch {} } setSelected(new Set()); fetchList(); }; const getPeriodLabel = (p: number) => CREW_PERIODS.find(x => x.value === p)?.label ?? '-'; const getThemeLabel = (t: number) => CREW_WIDGET_THEMES.find(x => x.value === t)?.label ?? '-'; if (loading) return

준비 중...

; return (

크루 위젯 설정

{selected.size > 0 && ( )}
{items.length === 0 ? ( ) : items.map(item => ( ))}
0 && selected.size === items.length} onCheckedChange={toggleAll} /> 제목 기간 테마 최대 표시 활성 작업
등록된 위젯 설정이 없습니다.
toggleSelect(item.id)} /> {item.title} {getPeriodLabel(item.period)} {item.period === 5 && item.startAt && item.endAt && (
{formatDateTime(item.startAt)} ~ {formatDateTime(item.endAt)}
)}
{getThemeLabel(item.theme)} {item.maxDisplayCount}명 {item.isActive ? '활성' : '비활성'}
); }