import React, { useContext, useRef, useState } from 'react'; import { AlertDialog, AlertDialogBody, AlertDialogFooter, AlertDialogHeader, AlertDialogContent, AlertDialogOverlay, Button, useToast, } from '@chakra-ui/react'; /** * Contexts */ import { CoursesPageContext } from '@educt/contexts'; /** * Hooks */ import useIsMountedRef from '@educt/hooks/useIsMountedRef'; import { useErrorHandler } from 'react-error-boundary'; import { useRootStore } from '@educt/hooks/useRootStore'; type DeleteCourseDialogProps = { onClose: () => void; isOpen: boolean; }; const DeleteCourseDialog: React.FC = ({ onClose, isOpen }) => { const { courseStore } = useRootStore(); const { deletingCourse, setDeletingCourse } = useContext(CoursesPageContext); const isMountedRef = useIsMountedRef(); const [isLoading, setIsLoading] = useState(false); const cancelRef = useRef(null); const handleError = useErrorHandler(); const toast = useToast(); /** * Delete course handler * * @param id Course id */ const onDelete = async (id: string) => { try { setIsLoading(true); await courseStore.deleteCourse(id); toast({ title: 'Course deleted.', status: 'info' }); onClose(); setDeletingCourse(undefined); } catch (error: any) { if (error.response) { toast({ title: error.message, status: 'error' }); } else { handleError(error); } } finally { if (isMountedRef.current) { setIsLoading(false); } } }; if (deletingCourse === undefined) return null; return ( <> Confirm deleting The course with title "{deletingCourse.title}" will be removed from the system. After deleting a course, the lessons in it will also be deleted. ); }; export default DeleteCourseDialog;