UNPKG

what-is-word-cli

Version:

CLI game where your task is to unscramble words by given definition

104 lines 4.21 kB
import React, { useContext } from 'react'; import { Text, Box, useApp, useInput } from 'ink'; import { StatusMessage } from '@inkjs/ui'; import figureSet from 'figures'; import * as R from 'remeda'; import { useStore } from '@nanostores/react'; import { manager as appManager } from '../store.js'; import { $status, actions as statusActions, manager as statusManager } from '../store/status.js'; import { $settings, actions as settingsActions } from '../store/settings.js'; import { $gameRounds, $score, scoreActions } from '../store/game.js'; import { SettingsContext } from '../app.js'; export default function Results() { const gameRounds = useStore($gameRounds); useStore($status); const score = useStore($score); useStore($settings); const itemToDisplay = R.find(gameRounds, item => item.isDisplaying); const { setSettings } = useContext(SettingsContext); const { exit } = useApp(); useInput((input, key) => { if (statusManager.isFinished()) { if (key.rightArrow) { appManager.displayNextResult(); } else if (key.leftArrow) { appManager.displayPreviousResult(); } else switch (input) { case 'n': { appManager.clearGameRounds(); settingsActions.clear(); scoreActions.reset(); setSettings({}); // SetSettings({topic: 'literature'}); statusActions.setPaused(); break; } case 's': { appManager.clearGameRounds(); scoreActions.reset(); statusActions.setPaused(); break; } case 'q': { exit(); break; } // No default } } }); return /*#__PURE__*/React.createElement(Box, { width: process.stdout.columns, flexDirection: "column", alignItems: "center", justifyContent: "center", marginLeft: 1 }, /*#__PURE__*/React.createElement(Box, { justifyContent: "flex-start", marginBottom: 2, borderStyle: "single" }, /*#__PURE__*/React.createElement(Text, null, "Score: ", score, " out of ", gameRounds.length)), /*#__PURE__*/React.createElement(Box, { flexDirection: "column", alignItems: "center", marginLeft: 2, marginRight: 1, marginBottom: 2 }, /*#__PURE__*/React.createElement(Box, null, itemToDisplay && /*#__PURE__*/React.createElement(Box, { flexDirection: "column" }, /*#__PURE__*/React.createElement(Box, { marginLeft: 1 }, /*#__PURE__*/React.createElement(Text, { color: "#e69a8d" }, itemToDisplay.item.definition)), /*#__PURE__*/React.createElement(Box, { marginLeft: 3, paddingLeft: 2 }, itemToDisplay.userAnswer === itemToDisplay.item.word ? /*#__PURE__*/React.createElement(StatusMessage, { variant: "success" }, itemToDisplay.item.word) : /*#__PURE__*/React.createElement(Box, { flexDirection: "column" }, /*#__PURE__*/React.createElement(StatusMessage, { variant: "error" }, R.pathOr(itemToDisplay, ['userAnswer'], '-')), /*#__PURE__*/React.createElement(StatusMessage, { variant: "success" }, R.pathOr(itemToDisplay, ['item', 'word'], ''))))))), /*#__PURE__*/React.createElement(Box, { flexDirection: "column", alignItems: "center" }, R.findIndex(gameRounds, R.equals(itemToDisplay)) < gameRounds.length - 1 && /*#__PURE__*/React.createElement(Box, null, /*#__PURE__*/React.createElement(Text, { bold: true }, figureSet.arrowRight), /*#__PURE__*/React.createElement(Text, null, "\xA0- next item")), R.findIndex(gameRounds, R.equals(itemToDisplay)) > 0 && /*#__PURE__*/React.createElement(Box, null, /*#__PURE__*/React.createElement(Text, { bold: true }, figureSet.arrowLeft), /*#__PURE__*/React.createElement(Text, null, "\xA0- previous item")), /*#__PURE__*/React.createElement(Box, { marginTop: 3 }, /*#__PURE__*/React.createElement(Text, { bold: true }, "n"), /*#__PURE__*/React.createElement(Text, null, "\xA0- start new round with random category")), /*#__PURE__*/React.createElement(Box, null, /*#__PURE__*/React.createElement(Text, { bold: true }, "q"), /*#__PURE__*/React.createElement(Text, null, "\xA0- quit")))); }