From 3fb6f32a46b0cdfc59643bee255648e1ef401116 Mon Sep 17 00:00:00 2001 From: Kjetil Orbekk Date: Sun, 11 Sep 2022 11:12:16 -0400 Subject: Refactor passed contract into Option --- webapp/src/components/bidding.rs | 6 +++--- webapp/src/components/game.rs | 42 ++++++++++++++++++--------------------- webapp/src/components/hand.rs | 2 +- webapp/src/components/show_bid.rs | 12 +++++++---- 4 files changed, 31 insertions(+), 31 deletions(-) (limited to 'webapp/src/components') diff --git a/webapp/src/components/bidding.rs b/webapp/src/components/bidding.rs index d142dec..a7e1e43 100644 --- a/webapp/src/components/bidding.rs +++ b/webapp/src/components/bidding.rs @@ -1,13 +1,13 @@ -use crate::bridge_engine::{self, Bid, BiddingResult, Contract, Player}; +use crate::bridge_engine::{self, BiddingResult, Contract, Player}; use crate::components::{BiddingBox, BiddingTable}; -use log::{info, error}; +use log::{error}; use yew::prelude::*; #[derive(PartialEq, Properties, Clone)] pub struct BiddingProperties { pub dealer: Player, - pub on_contract: Callback<(Contract, bridge_engine::Bidding)>, + pub on_contract: Callback<(Option, bridge_engine::Bidding)>, } #[function_component(Bidding)] diff --git a/webapp/src/components/game.rs b/webapp/src/components/game.rs index 0f25fc3..1544f13 100644 --- a/webapp/src/components/game.rs +++ b/webapp/src/components/game.rs @@ -12,20 +12,26 @@ enum Phase { Cardplay, } -#[function_component(Game)] -pub fn game() -> Html { +pub fn deal() -> card::Deal { let mut rng = rand::thread_rng(); let mut deal = card::deal(&mut rng); deal.sort(&SUIT_DISPLAY_ORDER, card::RankOrder::Descending); + deal +} - let north = use_state(|| HandProps::from_iter(deal.north.into_iter())); - let west = use_state(|| HandProps::from_iter(deal.west.into_iter())); - let south = use_state(|| HandProps::from_iter(deal.south.into_iter())); - let east = use_state(|| HandProps::from_iter(deal.east.into_iter())); +#[function_component(Game)] +pub fn game() -> Html { + let dealt_cards = use_state(|| deal()); + + // let north = use_state(|| HandProps::from_iter(deal.north.into_iter())); + // let west = use_state(|| HandProps::from_iter(deal.west.into_iter())); + // let south = use_state(|| HandProps::from_iter(deal.south.into_iter())); + // let east = use_state(|| HandProps::from_iter(deal.east.into_iter())); let dealer = use_state(|| Player::East); - let contract: UseStateHandle> = use_state(|| None); + let contract: UseStateHandle, bridge_engine::Bidding)>> = + use_state(|| None); let on_contract = { let contract = contract.clone(); Callback::from(move |c| contract.set(Some(c))) @@ -38,22 +44,12 @@ pub fn game() -> Html { }; let shuffle = { - let north = north.clone(); - let west = west.clone(); - let south = south.clone(); - let east = east.clone(); + let dealt_cards = dealt_cards.clone(); let dealer = dealer.clone(); let contract = contract.clone(); Callback::from(move |_| { - let mut rng = rand::thread_rng(); - let mut deal = card::deal(&mut rng); - deal.sort(&SUIT_DISPLAY_ORDER, card::RankOrder::Descending); - north.set(deal.north.into_iter().collect()); - west.set(deal.west.into_iter().collect()); - south.set(deal.south.into_iter().collect()); - east.set(deal.east.into_iter().collect()); - + dealt_cards.set(deal()); dealer.set(dealer.next()); contract.set(None); }) @@ -77,16 +73,16 @@ pub fn game() -> Html { }
- +
- +
- +
- +
} diff --git a/webapp/src/components/hand.rs b/webapp/src/components/hand.rs index 85b4dd2..bb6e372 100644 --- a/webapp/src/components/hand.rs +++ b/webapp/src/components/hand.rs @@ -20,7 +20,7 @@ pub fn hand(props: &HandProps) -> Html { #[derive(Clone, Default, PartialEq, Properties)] pub struct HandProps { #[prop_or_default] - cards: Vec, + pub cards: Vec, } impl> FromIterator for HandProps { diff --git a/webapp/src/components/show_bid.rs b/webapp/src/components/show_bid.rs index b0c917e..2ab2d5c 100644 --- a/webapp/src/components/show_bid.rs +++ b/webapp/src/components/show_bid.rs @@ -1,10 +1,9 @@ -use crate::bridge_engine::{Bid, Bidding, Contract}; -use crate::components::bid_css_class; +use crate::bridge_engine::{Bidding, Contract}; use yew::prelude::*; #[derive(PartialEq, Properties, Clone)] pub struct ShowBidProps { - pub contract: Contract, + pub contract: Option, pub bidding: Bidding, } @@ -12,7 +11,12 @@ pub struct ShowBidProps { pub fn show_bid(props: &ShowBidProps) -> Html { html! { <> -

{ format!("{}", props.contract) }

+

{ + match props.contract { + None => "Passed".to_string(), + Some(c) => format!("{}", c), + } + }

} } -- cgit v1.2.3