2020-04-28 19:28:15 +02:00
import { useState , Fragment } from 'react' ;
2020-04-28 18:46:13 +02:00
import redirect from '../../utils/redirect' ;
import FunctionPage from '../../components/FunctionPage/FunctionPage' ;
import FunctionTabs from '../../components/FunctionPage/FunctionTabs' ;
import FunctionArticle from '../../components/FunctionPage/FunctionArticle' ;
import FunctionComments from '../../components/FunctionPage/FunctionComments/FunctionComments' ;
import Loader from '../../components/Loader' ;
import api from '../../utils/api' ;
import '../../public/css/pages/FunctionComponent.css' ;
import '../../components/FunctionCard/FunctionCard.css' ;
import '../../public/css/pages/functions/rightPrice.css' ;
const PlayRightPrice = ( ) => {
const [ isPlaying , setIsPlaying ] = useState ( false ) ;
const [ productToGuess , setProductToGuess ] = useState ( { } ) ;
const [ isLoadingProduct , setIsLoadingProduct ] = useState ( false ) ;
const [ enteredPrice , setEnteredPrice ] = useState ( "" ) ;
const [ attemptsArray , setAttemptsArray ] = useState ( [ ] ) ;
const handlePlaying = ( ) => {
setIsPlaying ( true ) ;
setAttemptsArray ( [ ] ) ;
fetchRandomAmazonProduct ( ) ;
}
const fetchRandomAmazonProduct = async ( ) => {
setIsLoadingProduct ( true ) ;
const { data } = await api . post ( '/functions/rightPrice' ) ;
setProductToGuess ( data ) ;
setIsLoadingProduct ( false ) ;
}
const handleChange = ( event ) => {
setEnteredPrice ( event . target . value ) ;
}
const handleSubmit = async ( event ) => {
event . preventDefault ( ) ;
const objectTry = { } ;
const guessedPrice = Number ( ( enteredPrice ) . replace ( "," , "." ) . replace ( " " , "" ) ) ;
if ( ! isNaN ( guessedPrice ) ) {
objectTry . guessedPrice = guessedPrice ;
objectTry . numberTry = attemptsArray . length + 1 ;
if ( guessedPrice > productToGuess . price ) {
objectTry . message = "C'est moins !" ;
} else if ( guessedPrice < productToGuess . price ) {
objectTry . message = "C'est plus !" ;
} else {
objectTry . message = "Bravo, vous avez trouvé le juste prix !" ;
}
setAttemptsArray ( [ objectTry , ... attemptsArray ] ) ;
}
setEnteredPrice ( "" ) ;
}
return (
< div className = "container-fluid" >
{
( ! isPlaying ) ?
< div className = "row justify-content-center" >
< div className = "form-group text-center" >
< button onClick = { handlePlaying } type = "submit" className = "btn btn-dark" > Jouer < / b u t t o n >
< / d i v >
< / d i v >
: ( isLoadingProduct ) ?
< div className = "row justify-content-center" >
< Loader / >
< / d i v >
:
< Fragment >
< div className = "row justify-content-center" >
< div style = { { marginBottom : '20px' } } className = "col-24 text-center" >
< h4 > { productToGuess . name } < / h 4 >
< img src = { productToGuess . image } alt = { productToGuess . name } className = "Product__image" / >
< / d i v >
< / d i v >
< div className = "row justify-content-center" >
< div style = { { marginBottom : '25px' } } className = "col-24" >
{ ( ( attemptsArray . length > 0 ) && attemptsArray [ 0 ] . message === "Bravo, vous avez trouvé le juste prix !" ) ?
< div className = "form-group text-center" >
< button onClick = { handlePlaying } type = "submit" className = "btn btn-dark" > Rejouer ? < / b u t t o n >
< / d i v >
:
< form onSubmit = { handleSubmit } >
< div className = "text-center" >
< input value = { enteredPrice } onChange = { handleChange } name = "enteredPrice" id = "enteredPrice" type = "number" step = "0.01" className = "form-control" autoComplete = "off" placeholder = "Devinez le prix (prix à virgule possible!)" / >
< / d i v >
< div className = "form-group text-center" >
< button type = "submit" className = "btn btn-dark" > Deviner < / b u t t o n >
< / d i v >
< / f o r m >
}
< / d i v >
< / d i v >
< div style = { { marginBottom : '30px' } } className = "row justify-content-center" >
{ attemptsArray . map ( ( attempt , index ) => {
const { message } = attempt ;
let priceResultClass ;
if ( message === "C'est moins !" ) {
priceResultClass = "Price__result-moins" ;
} else if ( message === "C'est plus !" ) {
priceResultClass = "Price__result-plus" ;
} else {
priceResultClass = "Price__result-success" ;
}
return (
< div key = { index } className = { ` col-24 Price__result ${ priceResultClass } ` } >
# { attempt . numberTry } ( { attempt . guessedPrice } ) { message }
< / d i v >
) ;
} ) }
< / d i v >
< / F r a g m e n t >
}
< / d i v >
) ;
}
const FunctionTabManager = ( props ) => {
return (
< FunctionTabs setSlideIndex = { props . setSlideIndex } slideIndex = { props . slideIndex } >
< div style = { { marginTop : '10px' } } >
< PlayRightPrice / >
< / d i v >
< div className = "FunctionComponent__slide" >
< FunctionArticle article = { props . article } / >
< / d i v >
< div className = "FunctionComponent__slide" >
< FunctionComments functionId = { props . id } / >
< / d i v >
< / F u n c t i o n T a b s >
) ;
}
const rightPrice = ( props ) => (
< FunctionPage
FunctionTabManager = { FunctionTabManager }
{ ... props }
tabNames = { [ "⚙️ Utilisation" , "📝 Article" , "📬 Commentaires" ] }
/ >
) ;
export async function getServerSideProps ( context ) {
return api . get ( ` /functions/rightPrice ` )
. then ( ( response ) => ( { props : response . data } ) )
. catch ( ( ) => redirect ( context , '/404' ) ) ;
}
export default rightPrice ;