/
spirzen
/
it-knowledge-base
Обзор
Документация
Войти
/
spirzen
/
it-knowledge-base
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
Mobile
src/components/TestingLifecyclePlay.jsx
75 строк
2 KB
Spirzen
Components pack 2
23 май 2026, 03:42
23 май 2026, 03:42
b7f65e4
Код
Авторство
О чём код?
import React, {useCallback, useRef, useState} from 'react'; import BrowserOnly from '@docusaurus/BrowserOnly'; import clsx from 'clsx'; import DemoShell, {DemoCard} from './shared/DemoShell'; import {demoLoadingFallback} from './shared/demoFallback'; import {LIFECYCLE_PHASES} from './shared/testingPlayEngines'; import styles from './shared/testingDemo.module.css'; function TestingLifecyclePlayInner() { const [idx, setIdx] = useState(0); const [playing, setPlaying] = useState(false); const timers = useRef([]); const phase = LIFECYCLE_PHASES[idx]; const clearTimers = useCallback(() => { timers.current.forEach(clearTimeout); timers.current = []; }, []); const play = () => { clearTimers(); setPlaying(true); setIdx(0); LIFECYCLE_PHASES.forEach((_, i) => { const id = setTimeout(() => { setIdx(i); if (i === LIFECYCLE_PHASES.length - 1) setPlaying(false); }, i * 1800); timers.current.push(id); }); }; return ( <DemoShell className={styles.root}> <DemoCard title="Жизненный цикл тестирования (ISO/IEEE 29119)" subtitle="Пять фаз: от стратегии до закрытия цикла" > <div className={styles.flowSteps}> {LIFECYCLE_PHASES.map((p, i) => ( <button key={p.id} type="button" className={clsx(styles.flowStep, i === idx && styles.flowStepActive)} onClick={() => !playing && setIdx(i)} disabled={playing} > {p.icon} {p.label.split(' ')[0]} </button> ))} </div> {phase && ( <div className={styles.detailBox}> <strong> Фаза {idx + 1}: {phase.label} </strong> <p style={{margin: '0.35rem 0 0'}}>{phase.detail}</p> </div> )} <button type="button" className="it-demo__btn it-demo__btn--primary" onClick={play} disabled={playing}> {playing ? 'Воспроизведение…' : 'Пройти цикл'} </button> </DemoCard> </DemoShell> ); } export default function TestingLifecyclePlay() { return ( <BrowserOnly fallback={demoLoadingFallback}> {() => <TestingLifecyclePlayInner />} </BrowserOnly> ); }