index.js (2739B)
1 /** 2 * WordPress dependencies 3 */ 4 import {__} from '@wordpress/i18n' 5 import ChallengeStepItem from './ChallengeStepItem'; 6 import ProgressBar from './ProgressBar'; 7 import CONFIG from '../config'; 8 import './style.scss' 9 10 const {compose} = wp.compose; 11 const {withDispatch, withSelect} = wp.data; 12 const {useState, useEffect} = wp.element; 13 14 function ChallengeListBlock(props) { 15 const {started, onStarted} = props; 16 const {challengeStep, finalStatus, setChallengeOpen, setChallengeStep} = props; 17 const [buttonRowClassname, setButtonRowClassname] = useState('challenge-button-row'); 18 useEffect(() => { 19 setButtonRowClassname(challengeStep !== CONFIG.beginningStep ? 'challenge-button-row started' : 'challenge-button-row'); 20 }, [challengeStep]) 21 22 const onCancelChallenge = () => { 23 setChallengeOpen(false); 24 setChallengeStep(-1); 25 } 26 27 return ( 28 <div className='challenge-list-block'> 29 <p>{__('Complete the challenge and get up and running within 5 minutes', redux_templates.i18n)}</p> 30 <ProgressBar currentStep={finalStatus === 'success' ? CONFIG.totalStep : challengeStep} /> 31 <ul className='challenge-list'> 32 { 33 CONFIG.list.map((item, i) => { 34 return (<ChallengeStepItem key={i} step={i} currentStep={challengeStep} finalStatus={finalStatus} caption={item.caption} />); 35 }) 36 } 37 </ul> 38 { finalStatus === '' && 39 <div className={buttonRowClassname}> 40 {challengeStep === CONFIG.beginningStep && 41 <button className='btn-challenge-start' onClick={onStarted}>{__('Start Challenge', redux_templates.i18n)}</button>} 42 {challengeStep === CONFIG.beginningStep && <button className='btn-challenge-skip' onClick={onCancelChallenge}>{__('Skip Challenge', redux_templates.i18n)}</button>} 43 {challengeStep !== CONFIG.beginningStep && <button className='btn-challenge-cancel' onClick={onCancelChallenge}>{__('Cancel Challenge', redux_templates.i18n)}</button>} 44 </div> 45 } 46 </div> 47 ); 48 49 } 50 51 52 export default compose([ 53 withDispatch((dispatch) => { 54 const {setChallengeOpen, setChallengeStep} = dispatch('redux-templates/sectionslist'); 55 return { 56 setChallengeOpen, 57 setChallengeStep 58 }; 59 }), 60 61 withSelect((select) => { 62 const {getChallengeStep, getChallengeFinalStatus} = select('redux-templates/sectionslist'); 63 return { 64 challengeStep: getChallengeStep(), 65 finalStatus: getChallengeFinalStatus() 66 }; 67 }) 68 ])(ChallengeListBlock);