// Rôle : fournit l'outil compteurs personnalisables. import { Icon } from "../../../components/Icon.jsx"; import { useDraftForm } from "../../../hooks/useDraftForm.js"; import { moveItem, useGroupedReorder } from "../../../hooks/useGroupedReorder.js"; export function CountersModule({ toolboxId, moduleId, context, editing }) { const data = context.normalizeCountersData(context.getModuleData(toolboxId, moduleId, { counters: [] })); const textContent = context.moduleText?.counters || {}; const counterDraft = useDraftForm({ label: "" }); const { itemReorder, getItemProps, isItemDragging, isItemDropTarget, getDropPlacement } = useGroupedReorder({ namespace: "counters", items: data.counters, getItemId: (counter) => counter.id, getParentId: () => moduleId, orientation: "horizontal", onItemMove: (operation) => save(moveItem(data.counters, operation.sourceId, operation.targetId, operation.placement)), hierarchy: { enabled: true, stickyParents: true } }); function save(counters) { context.setModuleData(toolboxId, moduleId, { counters }); } function addCounter(event) { counterDraft.handleSubmit(event, (draft, { reset }) => { const cleanLabel = draft.label.trim(); if (!cleanLabel) return; save([...data.counters, { id: context.uid("counter"), label: cleanLabel, value: 0 }]); reset(); }); } function updateCounter(counterId, updater) { save(data.counters.map((counter) => counter.id === counterId ? updater(counter) : counter)); } return ( <> {editing && (
)}