Compare commits
	
		
			No commits in common. "273a66fbff33539ce03a5819a4a29fde69ef51b8" and "637166ff58a4276ff8cf6f2af85a01e6cd69e5e5" have entirely different histories. 
		
	
	
		
			273a66fbff
			...
			637166ff58
		
	
		| 
						 | 
				
			
			@ -1,7 +1,6 @@
 | 
			
		|||
use yew::prelude::*;
 | 
			
		||||
use crate::components::{EmptyRow, CurrentRow, AttemptRow};
 | 
			
		||||
use crate::consts::{Attempts, MAX_ATTEMPTS};
 | 
			
		||||
use std::cmp::Ordering;
 | 
			
		||||
 | 
			
		||||
#[derive(Properties, PartialEq)]
 | 
			
		||||
pub struct BoardProps {
 | 
			
		||||
| 
						 | 
				
			
			@ -24,10 +23,12 @@ pub fn Board(props: &BoardProps) -> Html {
 | 
			
		|||
        <div class="board" onkeyup={onkeypress} tabindex="0">
 | 
			
		||||
            {
 | 
			
		||||
                for (0..MAX_ATTEMPTS).map(|i| {
 | 
			
		||||
                    match i.cmp(attempt_index) {
 | 
			
		||||
                        Ordering::Less => html! { <AttemptRow attempt={ attempts.fields[i].clone() } /> },
 | 
			
		||||
                        Ordering::Equal => html! { <CurrentRow text={ current_attempt } /> },
 | 
			
		||||
                        Ordering::Greater => html! { <EmptyRow /> }
 | 
			
		||||
                    if i < *attempt_index {
 | 
			
		||||
                        html! { <AttemptRow attempt={ attempts.fields[i].clone() } /> }
 | 
			
		||||
                    } else if i == *attempt_index {
 | 
			
		||||
                        html! { <CurrentRow text={ current_attempt } /> }
 | 
			
		||||
                    } else {
 | 
			
		||||
                        html! { <EmptyRow /> }
 | 
			
		||||
                    }
 | 
			
		||||
                })
 | 
			
		||||
            }
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,4 +1,4 @@
 | 
			
		|||
use crate::consts::MAX_ATTEMPTS;
 | 
			
		||||
use crate::consts::{GameResult, MAX_ATTEMPTS};
 | 
			
		||||
use yew::prelude::*;
 | 
			
		||||
use crate::consts::{Attempts, Status};
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,4 +1,7 @@
 | 
			
		|||
use yew::html::IntoPropValue;
 | 
			
		||||
 | 
			
		||||
pub const MAX_ATTEMPTS: usize = 6;
 | 
			
		||||
pub const WORD_LEN: usize = 5;
 | 
			
		||||
 | 
			
		||||
#[derive(Clone, PartialEq)]
 | 
			
		||||
pub enum KeyboardKeyType {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -99,13 +99,23 @@ impl UseBoardHandle {
 | 
			
		|||
 | 
			
		||||
#[hook]
 | 
			
		||||
pub fn use_board() -> UseBoardHandle {
 | 
			
		||||
    let current_attempt = use_state(String::new);
 | 
			
		||||
    let attempts: UseStateHandle<Attempts> = use_state(Attempts::new);
 | 
			
		||||
    let current_attempt = use_state(|| "".to_string());
 | 
			
		||||
    let attempts: UseStateHandle<Attempts> = use_state(|| Attempts::new());
 | 
			
		||||
    let attempt_index = use_mut_ref(|| 0usize);
 | 
			
		||||
    let answer = use_memo(|_| get_word_of_the_day(), None::<()>);
 | 
			
		||||
    let virtual_keyboard = use_state(|| new_empty_virtual_keyboard().into());
 | 
			
		||||
    let result = use_state(|| None::<GameResult>);
 | 
			
		||||
 | 
			
		||||
    let send_key = {
 | 
			
		||||
        let current_attempt = current_attempt.clone();
 | 
			
		||||
        let current_attempt_len = current_attempt.chars().count();
 | 
			
		||||
        let attempts = attempts.clone();
 | 
			
		||||
        let answer = (*answer).clone();
 | 
			
		||||
        let attempt_index = attempt_index.clone();
 | 
			
		||||
        let result = result.clone();
 | 
			
		||||
 | 
			
		||||
        move |k: Key| {}
 | 
			
		||||
    };
 | 
			
		||||
    UseBoardHandle {
 | 
			
		||||
        current_attempt,
 | 
			
		||||
        attempts,
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										14
									
								
								src/main.rs
								
								
								
								
							
							
						
						
									
										14
									
								
								src/main.rs
								
								
								
								
							| 
						 | 
				
			
			@ -1,12 +1,13 @@
 | 
			
		|||
use yew::prelude::*;
 | 
			
		||||
 | 
			
		||||
use crate::components::Board;
 | 
			
		||||
use crate::components::{AttemptRow, Board};
 | 
			
		||||
use crate::components::CurrentRow;
 | 
			
		||||
use crate::components::EmptyRow;
 | 
			
		||||
use crate::components::Keyboard;
 | 
			
		||||
use crate::components::ResultBoard;
 | 
			
		||||
use crate::consts::{Key};
 | 
			
		||||
use crate::consts::{Key, MAX_ATTEMPTS};
 | 
			
		||||
use crate::hooks::use_board;
 | 
			
		||||
 | 
			
		||||
#[cfg(debug_assertions)]
 | 
			
		||||
use gloo::console;
 | 
			
		||||
 | 
			
		||||
mod components;
 | 
			
		||||
| 
						 | 
				
			
			@ -25,7 +26,6 @@ fn App() -> Html {
 | 
			
		|||
        Callback::from(move |event: KeyboardEvent| {
 | 
			
		||||
            let key_code = event.key_code();
 | 
			
		||||
            board.send_key(Key::from(key_code));
 | 
			
		||||
            #[cfg(debug_assertions)]
 | 
			
		||||
            console::log!(&event);
 | 
			
		||||
        })
 | 
			
		||||
    };
 | 
			
		||||
| 
						 | 
				
			
			@ -52,9 +52,9 @@ fn App() -> Html {
 | 
			
		|||
            />
 | 
			
		||||
            <div>
 | 
			
		||||
                <span> {
 | 
			
		||||
                    match *board.result {
 | 
			
		||||
                        Some(_) => html! { <ResultBoard attempts={(*board.attempts).clone()} /> },
 | 
			
		||||
                        None => html! { <Keyboard
 | 
			
		||||
                    match (*board.result).clone() {
 | 
			
		||||
                        Some(res) => html! { <ResultBoard attempts={(*board.attempts).clone()} /> },
 | 
			
		||||
                        _ => html! { <Keyboard
 | 
			
		||||
                                        keyboard={ (board.virtual_keyboard).clone() }
 | 
			
		||||
                                        onclick={ onclick } /> }
 | 
			
		||||
                    }
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -3,12 +3,15 @@ use lazy_static::lazy_static;
 | 
			
		|||
 | 
			
		||||
lazy_static! {
 | 
			
		||||
    pub static ref WORDS: Vec<String> = include_str!("../../words.txt")
 | 
			
		||||
        .trim()
 | 
			
		||||
        .lines()
 | 
			
		||||
        .map(|w| w.trim().into())
 | 
			
		||||
        .map(|w| w.to_string())
 | 
			
		||||
        .collect();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
pub fn get_all_words() -> &'static WORDS {
 | 
			
		||||
    &WORDS
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
pub fn get_word_of_the_day() -> String {
 | 
			
		||||
    let date = chrono::Utc::now();
 | 
			
		||||
    let year = date.year() as usize;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -89,14 +89,12 @@ main {
 | 
			
		|||
.keyboard {
 | 
			
		||||
    display: grid;
 | 
			
		||||
    grid-template-columns: repeat(20, 1fr);
 | 
			
		||||
    gap: 2px;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.keyboard > button {
 | 
			
		||||
    grid-column: span 2;
 | 
			
		||||
    width: auto;
 | 
			
		||||
    height: 60px;
 | 
			
		||||
    border: 2px solid lightgray;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.keyboard > button.key-big {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue