2020-08-03 12:04:07 +02:00
import { useState } from 'react'
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 '../../public/css/pages/functions/rightPrice.css'
2020-04-28 18:46:13 +02:00
const PlayRightPrice = ( ) => {
2020-08-03 12:04:07 +02:00
const [ isPlaying , setIsPlaying ] = useState ( false )
const [ productToGuess , setProductToGuess ] = useState ( { } )
const [ isLoadingProduct , setIsLoadingProduct ] = useState ( false )
const [ enteredPrice , setEnteredPrice ] = useState ( '' )
const [ attemptsArray , setAttemptsArray ] = useState ( [ ] )
2020-04-28 18:46:13 +02:00
2020-08-03 12:04:07 +02:00
const handlePlaying = ( ) => {
setIsPlaying ( true )
setAttemptsArray ( [ ] )
fetchRandomAmazonProduct ( )
}
2020-04-28 18:46:13 +02:00
2020-08-03 12:04:07 +02:00
const fetchRandomAmazonProduct = async ( ) => {
setIsLoadingProduct ( true )
const { data } = await api . post ( '/functions/rightPrice' )
setProductToGuess ( data )
setIsLoadingProduct ( false )
}
2020-04-28 18:46:13 +02:00
2020-08-03 12:04:07 +02:00
const handleChange = ( event ) => {
setEnteredPrice ( event . target . value )
}
2020-04-28 18:46:13 +02:00
2020-08-03 12:04:07 +02:00
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 ] )
2020-04-28 18:46:13 +02:00
}
2020-08-03 12:04:07 +02:00
setEnteredPrice ( '' )
}
2020-04-28 18:46:13 +02:00
2020-08-03 12:04:07 +02:00
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 < / button >
< / div >
< / div >
)
: ( isLoadingProduct )
? (
< div className = 'row justify-content-center' >
< Loader / >
< / div >
)
: (
< >
< div className = 'row justify-content-center' >
< div style = { { marginBottom : '20px' } } className = 'col-24 text-center' >
< h4 > { productToGuess . name } < / h4 >
< img src = { productToGuess . image } alt = { productToGuess . name } className = 'Product__image' / >
< / div >
2020-04-28 18:46:13 +02:00
< / div >
2020-08-03 12:04:07 +02:00
< 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 ? < / button >
2020-04-28 18:46:13 +02:00
< / div >
2020-08-03 12:04:07 +02:00
)
: (
< 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!)' / >
< / div >
2020-04-28 18:46:13 +02:00
2020-08-03 12:04:07 +02:00
< div className = 'form-group text-center' >
< button type = 'submit' className = 'btn btn-dark' > Deviner < / button >
< / div >
< / form >
) }
< / div >
< / div >
< 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 }
< / div >
)
} ) }
< / div >
< / >
)
}
< / div >
)
2020-04-28 18:46:13 +02:00
}
const FunctionTabManager = ( props ) => {
2020-08-03 12:04:07 +02:00
return (
< FunctionTabs setSlideIndex = { props . setSlideIndex } slideIndex = { props . slideIndex } >
< div style = { { marginTop : '10px' } } >
< PlayRightPrice / >
< / div >
< div className = 'FunctionComponent__slide' >
< FunctionArticle article = { props . article } / >
< / div >
< div className = 'FunctionComponent__slide' >
< FunctionComments functionId = { props . id } / >
< / div >
< / FunctionTabs >
)
2020-04-28 18:46:13 +02:00
}
const rightPrice = ( props ) => (
2020-08-03 12:04:07 +02:00
< FunctionPage
FunctionTabManager = { FunctionTabManager }
{ ... props }
tabNames = { [ '🕹️ Jouer' , '📝 Article' , '📬 Commentaires' ] }
/ >
)
2020-04-28 18:46:13 +02:00
2020-08-03 12:04:07 +02:00
export async function getServerSideProps ( context ) {
return api . get ( '/functions/rightPrice' )
. then ( ( response ) => ( { props : response . data } ) )
. catch ( ( ) => redirect ( context , '/404' ) )
2020-04-28 18:46:13 +02:00
}
2020-08-03 12:04:07 +02:00
export default rightPrice