diff --git a/src/components/keyboard.rs b/src/components/keyboard.rs
index 0ced525..b3ebc36 100644
--- a/src/components/keyboard.rs
+++ b/src/components/keyboard.rs
@@ -1,4 +1,4 @@
-use crate::consts::{Key, KeyboardKeyType, VirtualKey};
+use crate::consts::{Key, KeyboardKeyType, VirtualKey, Status};
use yew::prelude::*;
#[derive(Properties, PartialEq)]
@@ -21,7 +21,19 @@ pub fn Keyboard(props: &KeyboardProps) -> Html {
{
for (props.keyboard).iter().map(|vk: &VirtualKey| {
match vk.key {
- KeyboardKeyType::CharKey(c) => html! { },
+ KeyboardKeyType::CharKey(c) => html! {
+
+ },
KeyboardKeyType::Backspace => html! { },
KeyboardKeyType::Enter => html! { }
}
diff --git a/src/consts.rs b/src/consts.rs
index 65a89f4..b789a94 100644
--- a/src/consts.rs
+++ b/src/consts.rs
@@ -10,6 +10,15 @@ pub enum KeyboardKeyType {
CharKey(char),
}
+impl KeyboardKeyType {
+ pub fn cmp_char(&self, char_to_compare: &char) -> bool {
+ match self {
+ KeyboardKeyType::CharKey(ch) => ch == char_to_compare,
+ _ => false
+ }
+ }
+}
+
#[derive(Clone, PartialEq)]
pub enum Status {
NotFound,
diff --git a/src/hooks/use_board.rs b/src/hooks/use_board.rs
index 2a6da38..5675230 100644
--- a/src/hooks/use_board.rs
+++ b/src/hooks/use_board.rs
@@ -1,4 +1,4 @@
-use crate::consts::{AttemptField, Attempts, GameResult, Key, VirtualKey, MAX_ATTEMPTS};
+use crate::consts::{AttemptField, Attempts, GameResult, Key, VirtualKey, MAX_ATTEMPTS, Status};
use crate::services::words::{get_word_of_the_day, WORDS};
use crate::utils::{evaluate_status, new_empty_virtual_keyboard};
use std::cell::RefCell;
@@ -64,8 +64,22 @@ impl UseBoardHandle {
char_field: att,
status,
}
- }).collect();
- new_attempts.fields.push(new_attempt_row);
+ }).collect::>();
+ new_attempts.fields.push(new_attempt_row.clone());
+
+ let mut new_keyboard = (*self.virtual_keyboard).clone();
+ for key in new_keyboard.iter_mut() {
+ for attempt_field in new_attempt_row.iter() {
+ if key.key.cmp_char(&attempt_field.char_field) {
+ if key.status.is_none() {
+ key.status = Some(attempt_field.status.clone());
+ } else if key.status == Some(Status::Almost) && attempt_field.status == Status::Found {
+ key.status = Some(Status::Found);
+ }
+ }
+ }
+ }
+ self.virtual_keyboard.set(new_keyboard);
self.attempts.set(new_attempts);
*self.attempt_index.borrow_mut() += 1;