{"version":3,"file":"BookGame-BuT7SLcx.js","sources":["../../../app/frontend/entrypoints/src/BookGame.tsx"],"sourcesContent":["import * as React from \"react\";\nimport axios from 'axios';\n\ninterface Book { id: Number, title: string, book_series: string, cover_url: string }\ninterface Post { id: Number, text: string, book: Book, user: string };\ninterface PostGameState { data: Array, correctResult: Post, previousResult: Book, photoUrl: string, answer_state: string, score: number, numAnswered: number, loading: boolean };\ninterface PostResponse { books: Array, correct_result: Post, photo_url: string };\n\nconst STATES = {\n unanswered: 'UNANSWERED',\n correct: 'CORRECT',\n wrong: 'WRONG'\n}\n\nexport default class BookGame extends React.Component<{}, PostGameState> {\n constructor(props: Readonly<{}>) {\n super(props);\n this.state = {\n data: [],\n correctResult: null,\n previousResult: null,\n photoUrl: null,\n answer_state: STATES.unanswered,\n score: 0,\n numAnswered: 0,\n loading: false\n };\n this.fetchData = this.fetchData.bind(this);\n }\n\n requestData() {\n return axios.get(\n \"/api/book_game.json\"\n );\n };\n\n fetchData() {\n this.setState({ loading: true });\n this.requestData().then(res => {\n const { books, correct_result, photo_url } = res.data;\n this.setState({\n data: books,\n correctResult: correct_result,\n photoUrl: photo_url,\n loading: false\n });\n });\n }\n\n componentDidMount() {\n this.fetchData();\n }\n\n selectResult(id: Number) {\n const { correctResult, score, numAnswered } = this.state;\n this.setState({ numAnswered: numAnswered + 1, previousResult: correctResult.book });\n if (id == correctResult.book.id) {\n this.setState({ score: score + 1, answer_state: STATES.correct });\n } else {\n this.setState({ answer_state: STATES.wrong });\n }\n this.fetchData();\n }\n\n renderSelection(book: Book) {\n return (\n
\n \n {this.renderBook(book)}\n
\n )\n }\n\n renderAnswer() {\n const { answer_state, previousResult } = this.state;\n if (answer_state == STATES.unanswered) {\n return null;\n }\n switch (answer_state) {\n case STATES.unanswered:\n return null;\n case STATES.correct:\n return (\n
\n

Correct

\n {this.renderBook(previousResult)}\n
\n );\n case STATES.wrong:\n return (\n
\n

WRONG

\n {this.renderBook(previousResult)}\n
\n );\n }\n }\n\n renderScore() {\n const { score, numAnswered } = this.state;\n\n if (numAnswered == 0) {\n return null;\n }\n\n const percent = 100.0 * score / numAnswered;\n\n return (\n

\n Score ({score}/{numAnswered}), {percent}%\n

\n );\n }\n\n renderQuestion() {\n const { correctResult, photoUrl } = this.state;\n\n if (correctResult) {\n return (\n
\n

{correctResult.user}

\n

{correctResult.text}

\n \n
\n );\n }\n\n return null;\n }\n\n renderBook(book: Book) {\n return (\n
\n \n
\n {book.book_series}:\n

{book.title}

\n
\n
\n );\n }\n\n render() {\n const { data, loading } = this.state;\n\n if (loading) {\n return (\n

Loading...

\n );\n }\n\n return (\n
\n {this.renderAnswer()}\n {this.renderScore()}\n {this.renderQuestion()}\n
\n {data.map((Book) => (this.renderSelection(Book)))}\n
\n
\n );\n }\n}\n"],"names":["STATES","BookGame","React.Component","props","axios","res","books","correct_result","photo_url","id","correctResult","score","numAnswered","book","jsxs","jsx","e","answer_state","previousResult","percent","photoUrl","data","loading","Book"],"mappings":"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"}