import { h, render, Component } from 'preact'; // eslint-disable-line no-unused-vars
// content and config:
import content from '../content/module.json';
import data from '../content/data.json';
import config from '../config';
// services and helper:
import { fixedDigits } from '../utilities/formatter';
// screens and items:
import TitleScreen from './TitleScreen.jsx';
import PollScreen from './PollScreen.jsx';
/**
* titlescreen -> pollscreen (*n)
*/
export default class App extends Component {
// construct and initialize functions
constructor (props) {
super(props);
this.state = {
route: 'titlescreen',
iteration: 0,
currentAnswerIndex: null
};
if (window.location.hash) this.state.route = window.location.hash.replace('#', '');
// context binding
this.navigate = this.navigate.bind(this);
this.reset = this.reset.bind(this);
this.toNext = this.toNext.bind(this);
this.setAnswer = this.setAnswer.bind(this);
this.jumpTo = this.jumpTo.bind(this);
}
// set navigation state
navigate (route) {
this.setState({ route });
}
// reset everything to restart the module
reset () {
this.setState({
route: 'titlescreen',
currentAnswerIndex: null
});
}
// shortcut: jump to specific screen using `#question_2`
jumpTo () {
if (window.location.hash) {
const hashInfo = window.location.hash.replace('#', '').split('_');
if (hashInfo[1] === '1') {
this.setState({ iteration: 8, continue: false, question: 0, route: 'pollscreen' });
this.toNext();
} else if (hashInfo[1] === '2') {
this.setState({ iteration: 9, continue: false, question: 1, route: 'pollscreen' });
this.toNext();
}
}
}
// to next question, if finished trigger restart
toNext () {
if (this.state.iteration < config.numberQuestions - 1) {
this.setState({
iteration: this.state.iteration + 1,
currentAnswerIndex: null
});
} else {
location.reload();
}
}
// set and check answer
setAnswer (checked) {
if (this.state.currentAnswerIndex === null) {
this.setState({ currentAnswerIndex: checked });
}
}
// LIFECYLCE
componentWillMount () {
this.jumpTo();
}
// RENDER
render () {
let outputContent;
// get header content
const total = fixedDigits(config.numberQuestions, 2);
const index = this.state.iteration + 1; // 0-indexed
const headerState = `${fixedDigits(index, 2)}/${total}`;
// get header and intro content
const header = { title: content.title, number: content.number, headerState };
const introContent = { number: content.number, title: content.title, introtext: content.introtext, start: content.start };
switch (this.state.route) {
case 'pollscreen':
outputContent = ;
break;
case 'titlescreen':
default:
outputContent = ;
break;
}
return outputContent;
}
}