import React, { useState } from 'react'; import { TextField, Typography, IconButton, Box, Collapse, Dialog, DialogActions, DialogContent, DialogContentText, DialogTitle, Button } from '@mui/material'; import DeleteIcon from '@mui/icons-material/Delete'; import VisibilityIcon from '@mui/icons-material/Visibility'; import ExpandMoreIcon from '@mui/icons-material/ExpandMore'; import ExpandLessIcon from '@mui/icons-material/ExpandLess'; import { DragDropContext, Droppable, Draggable } from 'react-beautiful-dnd'; interface EditorProps { label: string; values: string[]; onValuesChange: (values: string[]) => void; onFocusQuestion?: (index: number) => void; } const Editor: React.FC = ({ label, values, onValuesChange, onFocusQuestion }) => { const [collapsed, setCollapsed] = useState(Array(values.length).fill(false)); const [dialogOpen, setDialogOpen] = useState(false); const [deleteIndex, setDeleteIndex] = useState(null); const handleChange = (index: number) => (event: React.ChangeEvent) => { const newValues = [...values]; newValues[index] = event.target.value; onValuesChange(newValues); }; const handleDeleteQuestion = (index: number) => () => { if (values[index].trim() === '') { const newValues = values.filter((_, i) => i !== index); onValuesChange(newValues); setCollapsed((prev) => prev.filter((_, i) => i !== index)); } else { setDeleteIndex(index); setDialogOpen(true); } }; const handleConfirmDelete = () => { if (deleteIndex !== null) { const newValues = values.filter((_, i) => i !== deleteIndex); onValuesChange(newValues); setCollapsed((prev) => prev.filter((_, i) => i !== deleteIndex)); } setDialogOpen(false); setDeleteIndex(null); }; const handleCancelDelete = () => { setDialogOpen(false); setDeleteIndex(null); }; const handleFocusQuestion = (index: number) => () => { if (onFocusQuestion) { onFocusQuestion(index); } }; const handleToggleCollapse = (index: number) => () => { setCollapsed((prev) => { const newCollapsed = [...prev]; newCollapsed[index] = !newCollapsed[index]; return newCollapsed; }); }; const onDragEnd = (result: any) => { if (!result.destination) return; const newValues = [...values]; const [reorderedItem] = newValues.splice(result.source.index, 1); newValues.splice(result.destination.index, 0, reorderedItem); onValuesChange(newValues); const newCollapsed = [...collapsed]; const [reorderedCollapsed] = newCollapsed.splice(result.source.index, 1); newCollapsed.splice(result.destination.index, 0, reorderedCollapsed); setCollapsed(newCollapsed); }; if (collapsed.length !== values.length) { setCollapsed((prev) => { const newCollapsed = [...prev]; while (newCollapsed.length < values.length) newCollapsed.push(false); while (newCollapsed.length > values.length) newCollapsed.pop(); return newCollapsed; }); } return (
{label} {(provided) => (
{values.map((value, index) => ( {(provided) => ( Question {index + 1} {collapsed[index] ? : } )} ))} {provided.placeholder}
)}
{/* Confirmation Dialog */} Suppression Confirmez vous la suppression de Question {deleteIndex !== null ? deleteIndex + 1 : ''} ?
); }; export default Editor;