import React, { useState, useEffect } from 'react'; import { getNonce, isPro } from '../../Helpers'; import NoticeModal from '../NoticeModal/NoticeModal'; import AddIcon from '@mui/icons-material/Add'; import EditIcon from '@mui/icons-material/Edit'; import DeleteIcon from '@mui/icons-material/Delete'; import QuizIcon from '@mui/icons-material/Quiz'; import VisibilityIcon from '@mui/icons-material/Visibility'; import AssessmentIcon from '@mui/icons-material/Assessment'; import LockIcon from '@mui/icons-material/Lock'; // Declare wp global for WordPress declare const wp: any; interface Quiz { id: number; quiz_name: string; description: string; initial_form_id: number | null; questions: any[]; settings: any; created_at: string; updated_at: string; } interface QuizListProps { onCreateQuiz: () => void; onEditQuiz: (quiz: Quiz) => void; onViewResults: (quiz: Quiz) => void; } const QuizList: React.FC = ({ onCreateQuiz, onEditQuiz, onViewResults }) => { const [quizzes, setQuizzes] = useState([]); const [loading, setLoading] = useState(true); const [deleting, setDeleting] = useState(null); const [isProUser, setIsProUser] = useState(false); const [previewUrl, setPreviewUrl] = useState(null); const [modalConfig, setModalConfig] = useState({ isOpen: false, type: 'confirmation', title: '', message: '', onConfirm: () => { }, confirmText: 'Confirm', declineText: 'Cancel', mode: 'success', position: 'center' as 'center' | 'top-right' }); const closeModal = () => { setModalConfig(prev => ({ ...prev, isOpen: false })); }; useEffect(() => { loadQuizzes(); checkProStatus(); }, []); const checkProStatus = () => { const isProuser = isPro(); setIsProUser(isProuser); }; const showProModal = () => { setModalConfig({ isOpen: true, type: 'premium', title: '🚀 Upgrade to Pro', message: 'Create unlimited quizzes with Pro! Free version is limited to 1 quiz. Upgrade now to unlock unlimited quizzes and advanced features!', mode: 'success', onConfirm: () => { window.open('https://wpazleen.com/simple-form-pricing/', '_blank'); closeModal(); }, confirmText: 'Upgrade Now', declineText: 'Maybe Later', position: 'center' }); }; const handleCreateQuiz = () => { if (!isProUser && quizzes.length >= 1) { showProModal(); return; } onCreateQuiz(); }; const loadQuizzes = () => { setLoading(true); (wp as any).ajax.send('simpleform_get_quizzes', { data: { nonce: getNonce(), }, success(response: any) { if (response.quizzes) { setQuizzes(response.quizzes); } setLoading(false); }, error(error: any) { console.error('Error loading quizzes:', error); setLoading(false); }, }); }; const handleDelete = (quiz: Quiz) => { setModalConfig({ isOpen: true, type: 'confirmation', title: 'Delete Quiz', message: `Are you sure you want to delete "${quiz.quiz_name}"? This action cannot be undone.`, mode: 'warning', onConfirm: () => { setDeleting(quiz.id); (wp as any).ajax.send('simpleform_delete_quiz', { data: { nonce: getNonce(), quiz_id: quiz.id, }, success(response: any) { setQuizzes(prev => prev.filter(q => q.id !== quiz.id)); setDeleting(null); setModalConfig({ isOpen: true, type: 'toast', title: 'Success', message: `Quiz "${quiz.quiz_name}" deleted successfully`, position: 'top-right', mode: 'success', onConfirm: () => {}, confirmText: 'OK', declineText: 'Cancel', }); setTimeout(closeModal, 3000); }, error(error: any) { console.error('Error deleting quiz:', error); setDeleting(null); setModalConfig({ isOpen: true, type: 'toast', title: 'Error', message: 'Failed to delete quiz. Please try again.', position: 'top-right', mode: 'error', onConfirm: () => {}, confirmText: 'OK', declineText: 'Cancel', }); setTimeout(closeModal, 3000); }, }); closeModal(); }, confirmText: 'Yes, Delete', declineText: 'Cancel', position: 'center' }); }; const handlePreview = (quiz: Quiz) => { (wp as any).ajax.send('simpleform_get_quiz_preview_url', { data: { nonce: getNonce(), quiz_id: quiz.id, }, success(response: any) { if (response.preview_url) { setPreviewUrl(response.preview_url); } }, error(error: any) { console.error('Error getting preview URL:', error); setModalConfig({ isOpen: true, type: 'toast', title: 'Error', message: 'Failed to generate preview URL.', position: 'top-right', mode: 'error', onConfirm: () => {}, confirmText: 'OK', declineText: 'Cancel', }); setTimeout(closeModal, 3000); }, }); }; const closePreview = () => { setPreviewUrl(null); }; const formatDate = (dateString: string) => { return new Date(dateString).toLocaleDateString('en-US', { year: 'numeric', month: 'short', day: 'numeric', hour: '2-digit', minute: '2-digit' }); }; if (loading) { return (

Loading quizzes...

); } return (

Quizzes

Create interactive quizzes to engage your audience and collect leads

{quizzes.length === 0 ? (

No quizzes yet

Create your first quiz to start engaging with your audience

) : (
{quizzes.map(quiz => (

{quiz.quiz_name}

{quiz.description || 'No description'}

Questions: {quiz.questions?.length || 0}
Passing Score: {quiz.settings?.passing_score || 70}%
Created: {formatDate(quiz.created_at)}
[simple_quiz id="{quiz.id}"]
))}
)} {previewUrl && (
e.stopPropagation()}>

Quiz Preview