import React from 'react';
import { connect } from 'react-redux';
import './css/Intro.css';
import {hideNavigation, showNavigation} from '../actions';
import Topic from './subcomponents/Topic';
import { ChevronDoubleUp, ChevronDoubleDown } from 'react-bootstrap-icons';
class Intro extends React.Component {
constructor() {
super();
// Defaults for the state
this.state = {
start: false,
prev: 'previous',
curr: 'current',
next: 'next',
prevLoc: -1,
currLoc: 0,
nextLoc: 1,
};
}
handleKey = (e) => {
/**
* handleKey - Handle key events and hand off to handleInput
*/
switch(e.key) {
case "ArrowUp": // If received an up Arrow
this.handleInput('up');
break;
case "ArrowDown": // If received a down Arrow
this.handleInput('down')
break;
default:
break;
}
}
handleInput = (input) => {
/**
* handleInput - handle input events. A majority of the functionality is to scroll through Intro topics
*/
// Up Arrow
if (input === "up" && this.state.currLoc > 0) {
// Activate animation going to next topic
this.setState({
prev: 'current',
curr: 'next',
});
// Wait 500 ms until the transition is finished
setTimeout(()=>{
// Once timeout finishes, place topics in correct location without transition
let prevloc = this.state.prevLoc-1;
let currloc = this.state.currLoc-1;
let nextloc = this.state.nextLoc-1;
this.setState({
prev: 'previous notrans',
curr: 'current notrans',
prevLoc: prevloc, // Move correct topics into necessary divs
currLoc: currloc,
nextLoc: nextloc,
});
// wait another 20 ms to
setTimeout(()=>{
this.setState({ // remove notrans from each div
prev: 'previous',
curr: 'current',
});
}, 20);
}, 500);
} else if (input === "down" && this.state.nextLoc < this.topics.length) {
// Activate transition going to previous topic
this.setState({
curr: 'previous',
next: 'current'
});
// wait 500 ms before placing all topics into correct divs
setTimeout(()=>{
// move all topics into correct divs
let prevloc = this.state.prevLoc+1;
let currloc = this.state.currLoc+1;
let nextloc = this.state.nextLoc+1;
this.setState({
curr: 'current notrans',
next: 'next notrans',
prevLoc: prevloc, // Move correct topics into necessary divs
currLoc: currloc,
nextLoc: nextloc,
});
// wait 20ms and remove notrans
setTimeout(()=>{
this.setState({
curr: 'current',
next: 'next',
});
}, 20);
}, 500);
} else if (input === "down" && this.state.nextLoc >= this.topics.length) {
// Set something to happen when you reach the end
this.props.showNavigation();
localStorage.setItem('intro', true);
}
};
componentDidMount() {
setTimeout(()=>{ // At the start, wait 100ms and enable intro
this.setState({
start: true,
});
}, 100);
document.title = "HomePage"; // Set document title
// Hide the navigation
if (!localStorage.getItem('intro')) {
this.props.hideNavigation();
}
}
// Topics to display in intro
// DISCLAIMER: Please add content to the topic or bugs may occur...
topics = [