import CheckSquareIcon from './icons/CheckSquareIcon'; import Trash2Icon from './icons/Trash2Icon'; import Edit2Icon from './icons/Edit2Icon'; import PlusIcon from './icons/PlusIcon'; import { useModal } from '../context/modals/useModal'; import { CreateChecklistModal } from './CreateChecklistModal'; import { DeleteChecklistModal } from './DeleteChecklistModal'; import { EditCheckItemModal } from './EditCheckItemModal'; import { CheckItem } from '../types/kanban'; interface CardChecklistsProps { checklists: any[]; cardId: number; addChecklist: (name: string, pos: number) => Promise; removeChecklist: (id: number) => Promise; addCheckItem: ( checklistId: number, name: string, pos: number, state?: 'incomplete' | 'complete' ) => Promise; toggleCheckItem: (item: CheckItem, currentState: 'incomplete' | 'complete') => Promise; editCheckItem: ( itemId: number, name: string, pos: number, state: 'incomplete' | 'complete' ) => Promise; removeCheckItem: (itemId: number) => Promise; } export function CardChecklists({ checklists, addChecklist, removeChecklist, addCheckItem, toggleCheckItem, editCheckItem, removeCheckItem, }: CardChecklistsProps) { const { openModal } = useModal(); const handleAddChecklist = () => { openModal((props) => ( { const checklistCount = checklists?.length || 0; return await addChecklist(name, checklistCount); }} onClose={props.onClose} /> )); }; const handleDeleteChecklist = (checklist: any) => { openModal((props) => ( { const success = await removeChecklist(checklist.id); if (success) { props.onClose(); } }} onClose={props.onClose} /> )); }; const handleAddCheckItem = (checklist: any) => { const itemName = prompt('Enter item name:'); if (itemName && itemName.trim()) { const itemCount = checklist.items?.length || 0; addCheckItem(checklist.id, itemName.trim(), itemCount); } }; const handleToggleCheckItem = async (item: any) => { await toggleCheckItem(item, item.state); }; const handleEditCheckItem = (item: any) => { openModal((props) => ( { return await editCheckItem(item.id, name, item.pos, item.state); }} onClose={props.onClose} /> )); }; const handleDeleteCheckItem = (item: any) => { if (confirm('Are you sure you want to delete this item?')) { removeCheckItem(item.id); } }; return (

Checklists

{checklists && checklists.length > 0 ? (
{checklists.map((checklist: any) => { const completedCount = checklist.items?.filter((item: any) => item.state === 'complete').length || 0; const totalCount = checklist.items?.length || 0; const progress = totalCount > 0 ? (completedCount / totalCount) * 100 : 0; return (

{checklist.name}

{completedCount}/{totalCount}
{checklist.items && checklist.items.length > 0 ? ( checklist.items.map((item: any) => (
handleToggleCheckItem(item)} className="w-5 h-5 rounded cursor-pointer" /> handleToggleCheckItem(item)} className={`flex-1 text-sm cursor-pointer ${item.state === 'complete' ? 'text-gray-400 line-through' : 'text-white'}`} > {item.name}
)) ) : (

No items yet

)}
); })}
) : (

No checklists yet. Add one to get started!

)}
); }