import { useState } from "react"; import { Icon } from "../../../components/Icon.jsx"; import { parseColonImportLines } from "./textImport.js"; export function ChecklistModule({ toolboxId, moduleId, context, editing }) { const data = context.normalizeChecklistData(context.getModuleData(toolboxId, moduleId, { items: [] })); const textContent = context.moduleText?.checklist || {}; const [label, setLabel] = useState(""); const [qty, setQty] = useState(1); const [textImport, setTextImport] = useState(""); function save(items) { context.setModuleData(toolboxId, moduleId, { items }); } function addItem(event) { event.preventDefault(); const cleanLabel = label.trim(); if (!cleanLabel) return; save([...data.items, { id: context.uid("item"), label: cleanLabel, qtyTarget: Math.max(1, Number(qty) || 1), qtyCurrent: 0 }]); setLabel(""); setQty(1); } function importItems(event) { event.preventDefault(); const imported = parseColonImportLines(textImport).map((entry) => ({ id: context.uid("item"), label: entry.label, qtyTarget: Math.max(1, Number.parseInt(entry.value, 10) || 1), qtyCurrent: 0 })); if (!imported.length) return; save([...data.items, ...imported]); setTextImport(""); } return ( <> {editing && (
setLabel(event.target.value)} /> setQty(event.target.value)} aria-label={textContent.quantityLabel || "Quantité cible"} />