diff --git a/src/components/Banner/Banner.js b/src/components/Banner/Banner.js
new file mode 100644
index 000000000..93cf0e1df
--- /dev/null
+++ b/src/components/Banner/Banner.js
@@ -0,0 +1,17 @@
+import React from 'react';
+
+function Banner({ gameResult, answer, guesses}) {
+ const bannerStyle = gameResult === 'win' ? 'happy' : 'sad';
+ const loseText =
Sorry, the correct answer is {answer}
+ const winText = Congratulations! Got it in {`${guesses.length} ${guesses.length > 1 ? 'guesses' : 'guess'}`}.
+
+ return (
+ gameResult && (
+
+ {gameResult === 'win' ? winText : loseText}
+
+ )
+ );
+}
+
+export default Banner;
diff --git a/src/components/Banner/index.js b/src/components/Banner/index.js
new file mode 100644
index 000000000..1a3d55b83
--- /dev/null
+++ b/src/components/Banner/index.js
@@ -0,0 +1,2 @@
+export * from './Banner';
+export { default } from './Banner';
diff --git a/src/components/Game/Game.js b/src/components/Game/Game.js
index fc7615d24..9ab9cc083 100644
--- a/src/components/Game/Game.js
+++ b/src/components/Game/Game.js
@@ -2,14 +2,29 @@ import React from 'react';
import { sample } from '../../utils';
import { WORDS } from '../../data';
+import UserInput from '../UserInput';
+import UserGuesses from '../UserGuesses';
+import Banner from '../Banner';
// Pick a random word on every pageload.
const answer = sample(WORDS);
// To make debugging easier, we'll log the solution in the console.
-console.info({ answer });
+console.log({ answer });
+
function Game() {
- return <>Put a game here!>;
+ const [guesses, setGuesses] = React.useState([]);
+ const [gameResult, setGameResult] = React.useState(null);
+
+ function finishGame(result) {
+ setGameResult(result);
+ }
+
+ return <>
+
+
+ {gameResult && ()}
+ >;
}
export default Game;
diff --git a/src/components/UserGuesses/UserGuesses.js b/src/components/UserGuesses/UserGuesses.js
new file mode 100644
index 000000000..1aaa828e6
--- /dev/null
+++ b/src/components/UserGuesses/UserGuesses.js
@@ -0,0 +1,50 @@
+import React, { useEffect } from 'react';
+import { range } from '../../utils';
+import { NUM_OF_GUESSES_ALLOWED } from '../../constants';
+import { checkGuess} from '../../game-helpers';
+
+function UserGuesses({ guesses, answer, finishGame }) {
+ let guessesResult = guesses.map((guess) => checkGuess(guess, answer));
+
+ const emptySlots = Array(5).fill({letter: '', status: ''});
+
+ let guessesArray = range(NUM_OF_GUESSES_ALLOWED).fill([]).map((_, index) => {
+ return guessesResult[index] || [ ...emptySlots ];
+ });
+
+ const randonIndex = () => (Math.random());
+
+ function checkIfWon(guesses) {
+ const hasWon = guesses.filter(guess => (
+ guess.every(letter => letter.status === 'correct')
+ ));
+
+ // hasWon.length > 0 ? finishGame('win') : null;
+ return hasWon.length > 0;
+ }
+
+ useEffect(() => {
+ if (checkIfWon(guessesResult)) {
+ finishGame('win');
+ }
+ }, [guessesResult, finishGame]);
+
+ return (
+ <>
+ Your guesses:
+
+ {guessesArray.map((guess) => (
+
+ {guess.map(( {letter, status} ) => (
+
+ {letter}
+
+ ))}
+
+ ))}
+
+ >
+ );
+}
+
+export default UserGuesses;
diff --git a/src/components/UserGuesses/index.js b/src/components/UserGuesses/index.js
new file mode 100644
index 000000000..3eb446173
--- /dev/null
+++ b/src/components/UserGuesses/index.js
@@ -0,0 +1,2 @@
+export * from './UserGuesses';
+export { default } from './UserGuesses';
diff --git a/src/components/UserInput/UserInput.js b/src/components/UserInput/UserInput.js
new file mode 100644
index 000000000..f5a63c445
--- /dev/null
+++ b/src/components/UserInput/UserInput.js
@@ -0,0 +1,48 @@
+import React from 'react';
+
+function UserInput({ guesses, setGuesses, gameResult }) {
+ const [guess, setGuess] = React.useState('');
+
+ const handleChange = (event) => {
+ setGuess(event.target.value.toUpperCase());
+ }
+
+ const handleSubmit = (event) => {
+ event.preventDefault();
+
+ const newGuesses = [...guesses];
+
+ newGuesses.push(guess);
+
+ setGuesses(newGuesses);
+
+ setGuess('');
+ }
+
+ const stopPlaying = () => {
+ if (gameResult || guesses.length === 6) {
+ return true;
+ }
+ return false;
+ }
+
+ return (
+
+ );
+}
+
+export default UserInput;
diff --git a/src/components/UserInput/index.js b/src/components/UserInput/index.js
new file mode 100644
index 000000000..1486f08dd
--- /dev/null
+++ b/src/components/UserInput/index.js
@@ -0,0 +1,2 @@
+export * from './UserInput';
+export { default } from './UserInput';