Advertisement
Guest User

Untitled

a guest
Jun 22nd, 2019
181
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. import React, { useState } from 'react';
  2. import './RehearsePage.css';
  3. import Header from '../Header/Header';
  4.  
  5. function RehearsePage() {
  6.     const [dictionary, setDictionary] = useState([]);
  7.     const [startPage, setStartPage] = useState();
  8.     const [endPage, setEndPage] = useState();
  9.     const [fetchError, setFetchError] = useState();
  10.     const [wordIndex, setWordIndex] = useState();
  11.     const [remainingWords, setRemainingWords] = useState();
  12.     const [process, setProcess] = useState('selecting');
  13.  
  14.     const updateWordParams = event => {
  15.         if (event.target.name === 'startPage') setStartPage(event.target.value);
  16.         if (event.target.name === 'endPage') setEndPage(event.target.value);
  17.     }
  18.  
  19.     const startRehearsingWithSelection = () => {
  20.         try {
  21.             if (!startPage || !endPage) throw Error('Invalid start/end page')
  22.             setProcess('loading');
  23.             fetch(`/db/specific/${startPage}/${endPage}`)
  24.                 .then(response => {
  25.                     if (response.ok) return response.json();
  26.                     throw Error('Failed fetching data');
  27.                 })
  28.                 .then(jsonResponse => setDictionary(jsonResponse)) // the data is being saved to the dictionary state
  29.                 .then(startRehearsal); // startRehearsal is being called using .then(), so setDictionary has already completed
  30.         } catch (error) {
  31.             setFetchError(String(error));
  32.         }
  33.     }
  34.  
  35.     const startRehearsingWithoutSelection = () => {
  36.         try {
  37.             setProcess('loading');
  38.             fetch('/db/full')
  39.                 .then(response => {
  40.                     if (response.ok) return response.json();
  41.                     throw Error('Failed fetching data')
  42.                 })
  43.                 .then(jsonResponse => setDictionary(jsonResponse.rows))
  44.                 .then(startRehearsal);
  45.         } catch (error) {
  46.             setFetchError(String(error));
  47.         }
  48.     }
  49.  
  50.     const startRehearsal = () => {
  51.         setProcess('rehearsing');
  52.         setWordIndex(Math.floor(Math.random() * dictionary.length));
  53.         console.log(dictionary); // Yet, this still throws an error because dictionary would be an empty array.
  54.         setRemainingWords(dictionary.slice().splice(wordIndex, 1)).then(() => console.log(remainingWords));
  55.     }
  56.  
  57.     let selectingHTML = (
  58.         <div className="word-select">
  59.             <h1>Selecteer een begin- en eindpagina:</h1>
  60.             <input name="startPage" placeholder="Beginpagina" onChange={updateWordParams} autoComplete="off" />
  61.             <input name="endPage" placeholder="Eindpagina" onChange={updateWordParams} autoComplete="off" />
  62.             <button className="select-btn" onClick={startRehearsingWithSelection}>Overhoren</button>
  63.             {fetchError ? <div className="error">Er ging iets mis met het opvragen van de data. Het volgende errorbericht werd meegegeven: <span className="error-msg">{fetchError}</span></div> : ''}
  64.             <h1>Of</h1>
  65.             <h1>Overhoor de hele database:</h1>
  66.             <button className="select-btn" onClick={startRehearsingWithoutSelection}>Overhoren</button>
  67.         </div>
  68.     )
  69.  
  70.     const loadingHTML = <div className="loading" />
  71.  
  72.     const rehearsalHTML = '';
  73.  
  74.     let displayHTML;
  75.  
  76.     switch (process) {
  77.         case 'selecting':
  78.             displayHTML = selectingHTML;
  79.             break;
  80.         case 'loading':
  81.             displayHTML = loadingHTML;
  82.             break;
  83.         case 'rehearsing':
  84.             displayHTML = rehearsalHTML;
  85.             break;
  86.     }
  87.  
  88.     return (
  89.         <div className="rehearse-page">
  90.             <Header />
  91.             {displayHTML}
  92.         </div>
  93.     )
  94. }
  95.  
  96. export default RehearsePage;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement