what-is-word-cli
Version:
CLI game where your task is to unscramble words by given definition
104 lines • 4.21 kB
JavaScript
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"))));
}