import useExamEditorStore from '@/stores/examEditor'; import ExamEditorStore from '@/stores/examEditor/types'; import { useCallback, useState } from 'react'; interface Props { sectionId: number; editing?: boolean; setEditing?: React.Dispatch>; onSave?: () => void; onDiscard?: () => void; onDelete?: () => void; onPractice?: () => void; onEdit?: () => void; } const useSectionEdit = ({ sectionId, editing: externalEditing = false, setEditing: externalSetEditing, onSave, onDiscard, onDelete, onPractice, onEdit }: Props) => { const { dispatch } = useExamEditorStore(); const [internalEditing, setInternalEditing] = useState(externalEditing); const editing = externalSetEditing !== undefined ? externalEditing : internalEditing; const setEditing = externalSetEditing !== undefined ? externalSetEditing : setInternalEditing; const updateRoot = useCallback((updates: Partial) => { dispatch({ type: 'UPDATE_ROOT', payload: { updates } }); }, [dispatch]); const handleEdit = useCallback(() => { setEditing(!editing); if (onEdit) { onEdit(); } // eslint-disable-next-line react-hooks/exhaustive-deps }, [sectionId, editing, setEditing, updateRoot]); const handleSave = useCallback(() => { if (onSave) { onSave(); } else { setEditing(false); } // eslint-disable-next-line react-hooks/exhaustive-deps }, [setEditing, updateRoot, onSave, sectionId]); const handleDiscard = useCallback(() => { setEditing(false); onDiscard?.(); // eslint-disable-next-line react-hooks/exhaustive-deps }, [setEditing, updateRoot, onDiscard, sectionId]); const handleDelete = useCallback(() => { setEditing(!editing); onDelete?.(); // eslint-disable-next-line react-hooks/exhaustive-deps }, [setEditing, editing, updateRoot, onDelete, sectionId]); const handlePractice = useCallback(() => { onPractice?.(); // eslint-disable-next-line react-hooks/exhaustive-deps }, [setEditing, editing, updateRoot, onPractice, sectionId]); return { editing, setEditing, handleEdit, handleSave, handleDiscard, handleDelete, handlePractice, }; }; export default useSectionEdit;