import React, {useState, useCallback, useEffect} from 'react'; import PropTypes from 'prop-types'; import {Plus, Loader, Play} from 'lucide-react'; import UnitTest from './UnitTest'; import AddUnitTestModal from './AddUnitTestModal'; const RegexTestingTab = ({ pattern, tests, onTestsChange, isRunningTests, onRunTests }) => { const [isModalOpen, setIsModalOpen] = useState(false); const [editingTest, setEditingTest] = useState(null); useEffect(() => { const needsAutoRun = tests?.length > 0 && pattern && tests.some(test => test.passes !== undefined && !test.matchSpan); if (needsAutoRun && !isRunningTests) { onRunTests(pattern, tests); } }, []); const handleAddOrUpdateTest = useCallback( testData => { let updatedTests; if (editingTest) { updatedTests = tests.map(test => test.id === testData.id ? { ...testData, passes: false, lastRun: null, matchedContent: null, matchSpan: null, matchedGroups: [] } : test ); } else { updatedTests = [ ...tests, { ...testData, passes: false, lastRun: null, matchedContent: null, matchSpan: null, matchedGroups: [] } ]; } onTestsChange(updatedTests); onRunTests(pattern, updatedTests); setEditingTest(null); }, [tests, onTestsChange, onRunTests, pattern, editingTest] ); const handleEditTest = useCallback(test => { setEditingTest(test); setIsModalOpen(true); }, []); const handleDeleteTest = useCallback( testId => { const updatedTests = tests.filter(test => test.id !== testId); onTestsChange(updatedTests); }, [tests, onTestsChange] ); const handleCloseModal = useCallback(() => { setIsModalOpen(false); setEditingTest(null); }, []); const totalTests = tests?.length || 0; const passedTests = tests?.filter(test => test.passes)?.length || 0; return (
No tests added yet