diff options
author | Kjetil Orbekk <kj@orbekk.com> | 2022-09-11 11:12:16 -0400 |
---|---|---|
committer | Kjetil Orbekk <kj@orbekk.com> | 2022-09-11 11:12:16 -0400 |
commit | 3fb6f32a46b0cdfc59643bee255648e1ef401116 (patch) | |
tree | 8d96d1dadae5e82b92e6d1ee7f4203724eb08609 /webapp/src/components | |
parent | 55a24a3b7d1b3fcc07f0bb8e53b00abf23e651b3 (diff) |
Refactor passed contract into Option<Contract>
Diffstat (limited to 'webapp/src/components')
-rw-r--r-- | webapp/src/components/bidding.rs | 6 | ||||
-rw-r--r-- | webapp/src/components/game.rs | 42 | ||||
-rw-r--r-- | webapp/src/components/hand.rs | 2 | ||||
-rw-r--r-- | webapp/src/components/show_bid.rs | 12 |
4 files changed, 31 insertions, 31 deletions
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<Contract>, 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<Option<(Contract, bridge_engine::Bidding)>> = use_state(|| None); + let contract: UseStateHandle<Option<(Option<Contract>, 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 { } </div> <div class="hand west"> - <Hand ..(*west).clone() /> + <Hand ..{ dealt_cards.west.clone().into_iter().collect() }/> </div> <div class="hand north"> - <Hand ..(*north).clone() /> + <Hand ..{ dealt_cards.north.clone().into_iter().collect() }/> </div> <div class="hand east"> - <Hand ..(*east).clone() /> + <Hand ..{ dealt_cards.east.clone().into_iter().collect() }/> </div> <div class="hand south"> - <Hand ..(*south).clone() /> + <Hand ..{ dealt_cards.south.clone().into_iter().collect() }/> </div> </> } 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<CardProps>, + pub cards: Vec<CardProps>, } impl<C: Into<CardProps>> FromIterator<C> 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<Contract>, pub bidding: Bidding, } @@ -12,7 +11,12 @@ pub struct ShowBidProps { pub fn show_bid(props: &ShowBidProps) -> Html { html! { <> - <p>{ format!("{}", props.contract) }</p> + <p>{ + match props.contract { + None => "Passed".to_string(), + Some(c) => format!("{}", c), + } + }</p> </> } } |