import React, { Component } from 'react'; import { Router, Route, Link, NavLink} from 'react-router-dom'; import createHistory from 'history/createBrowserHistory'; import { connect } from 'react-redux'; import TestComponentItem from './TestComponentItem'; import FontAwesome from 'react-fontawesome'; class TestComponent extends Component { constructor(props){ super(props); this.state = { readMore: false, showReadMoreControls: false, showResults: false, answerArray: [], selectedArray: [], answerNumber: '', questionNumber: 0, zIndex: 1, zIndex2: 0, questionNumber2: 0, testObject: this.props.tests[+this.props.match.params.id] } } render(){ if(this.state.readMore){ var isReadMore = (
{this.state.testObject.readMore}
{this.readMoreUp()}}/>
); }else{ var isReadMore = (
Read more about {this.state.testObject.keyword} {this.readMoreDown()}}/>
); } window.TestComponentState = this.state; if(this.state.showResults){ return(
Your score as a percentage for {this.state.testObject.keyword}:
{this.state.answerNumber}%
{isReadMore}
) } else{ return(
) } } //custom functions showResults = (canIClick) => { if(canIClick){ this.setState({showResults: true}); this.resultScore(); } } nextQuestion = () => { this.setState((prevState)=>({questionNumber: prevState.questionNumber + 2})) } nextQuestion2 = () => { if(this.state.questionNumber == 0){ this.setState((prevState)=>({questionNumber2: ++prevState.questionNumber2})) } else{ this.setState((prevState)=>({questionNumber2: prevState.questionNumber2 + 2})) } } changeZIndex = () => { if(this.state.zIndex == 1){ this.setState({zIndex: 0,zIndex2: 1}); } else{ this.setState({zIndex: 1,zIndex2: 0}) } } answer = (questionNumber,res,i) => { // e.target.previousSibling.className = 'answer-circle answer-circle-active'; var arr = this.state.answerArray; var arr2 = this.state.selectedArray; arr[questionNumber] = res; arr2[questionNumber] = i; this.setState({answerArray: arr}); } resultScore = (i = 0) => { var totalScore = this.state.answerArray.reduce((item1,item2)=>{ return item1 + item2; }) var percentage = Math.floor(totalScore / (this.state.testObject.questions.length * 4) * 100); // works if only i have 5 questions in each test this.setState({answerNumber: i}); if(i < percentage){ setTimeout(()=>{ this.resultScore(++i); },50) } else{ setTimeout(()=>{ this.setState({showReadMoreControls: true}); },500) } } readMoreDown = () => { this.refs.readMore.style.opacity = '0'; setTimeout(()=>{ this.refs.readMore.style.transition = 'opacity 1s, max-height 4s ease' this.refs.readMore.style.maxHeight = '800px'; this.setState({readMore: true}); this.refs.readMore.style.opacity = '1'; },1000) if(document.documentElement.scrollTop || document.body.scrollTop == 0){ setTimeout(()=>{ this.scrollDown(document.documentElement.scrollTop || document.body.scrollTop) },1300) } } readMoreUp = (i) => { this.refs.readMore.style.maxHeight = '90px'; this.refs.readMore.style.opacity = '0'; setTimeout(()=>{ if(this.refs.readMore){ this.setState({readMore: false}); this.refs.readMore.style.opacity = '1'; } },4000) // if(i == document.documentElement.scrollTop || document.body.scrollTop){ // this.setState({readMore: false}); // } // window.scrollTo(0, i); // if(i < document.body.scrollHeight){ // setTimeout(()=>{ // this.readMoreDown(i - 3); // },3) // } } scrollDown = (i) => { window.scrollTo(0, i); if(i < document.body.scrollHeight){ setTimeout(()=>{ this.scrollDown(i + 3); },1) } } } const mapStateToProps = (state) => { return { tests: state, } } export default connect(mapStateToProps)(TestComponent); // if(i < document.body.scrollHeight){ // if(i / document.body.scrollHeight > 0.2){ // setTimeout(()=>{ // this.readMore(i + 1); // console.log(`from decelerate ${2 * (1 + 4 * (i / document.body.scrollHeight)*(i / document.body.scrollHeight))}`) // },2 * (1 + 4 * (i / document.body.scrollHeight)*(i / document.body.scrollHeight))) // } else{ // setTimeout(()=>{ // this.readMore(i + 1); // console.log(`from accelerate ${5 - (1 + 4 * (i / document.body.scrollHeight)*(i / document.body.scrollHeight))}`) // },5 - (1 + 4 * (i / document.body.scrollHeight)*(i / document.body.scrollHeight))) // } // }