Advertisement
Guest User

complex-cyoa.js

a guest
Feb 26th, 2020
107
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. import React, { Component } from "react";
  2.  
  3. import "./styles.css";
  4.  
  5. var pages = {
  6.   start: {
  7.     content: (getData, setData) =>
  8.       <p>
  9.         What is your name?
  10.         <br />
  11.         <br />
  12.         <input type="text" value={getData("name")} onChange={event => setData("name", event.target.value)} />
  13.         <br />
  14.         <br />
  15.         What is your birthday?
  16.         <br />
  17.         <br />
  18.         <input type="date" value={getData("birthday")} onChange={event => setData("birthday", event.target.value)} />
  19.       </p>,
  20.     buttons: [{ label: "Continue", page: "welcome" }]
  21.   },
  22.   welcome: {
  23.     content: (getData, setName) =>
  24.       <p>Welcome, {getData("name")}! How would you like to get to your destination?</p>,
  25.     buttons: [
  26.       { label: "Train", page: "onthetrain" },
  27.       { label: "Ship", page: "ontheship" }
  28.     ]
  29.   },
  30.   onthetrain: {
  31.     content: (getData, setName) =>
  32.       <p>
  33.         Welcome aboard the choo-choo train! Please make your way to your seat.
  34.         What's the number?
  35.      </p>,
  36.    buttons: [{ label: "12E", page: "death" }, { label: "97C", page: "life" }]
  37.  }
  38. };
  39.  
  40. class App extends Component {
  41.  constructor(props) {
  42.    super(props);
  43.  
  44.    this.state = {
  45.      page: "start",
  46.      name: ""
  47.    };
  48.  }
  49.  
  50.  goToPage(pageName) {
  51.    this.setState({
  52.      page: pageName
  53.    });
  54.  }
  55.  
  56.  setData(dataName, dataValue) {
  57.    var newState = {};
  58.    newState[dataName] = dataValue;
  59.    this.setState(newState);
  60.  }
  61.  
  62.  render() {
  63.    var pageData = pages[this.state.page];
  64.  
  65.    return (
  66.      <div className="App">
  67.        {pageData.content((dataName) => this.state[dataName], (name, value) => this.setData(name, value))}
  68.        {pageData.buttons.map(buttonInfo => (
  69.          <button onClick={() => this.goToPage(buttonInfo.page)}>
  70.            {buttonInfo.label}
  71.          </button>
  72.        ))}
  73.      </div>
  74.    );
  75.  }
  76. }
  77.  
  78. export default App;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement