summaryrefslogtreecommitdiff
path: root/webapp/src/components
diff options
context:
space:
mode:
authorKjetil Orbekk <kj@orbekk.com>2022-09-11 11:12:16 -0400
committerKjetil Orbekk <kj@orbekk.com>2022-09-11 11:12:16 -0400
commit3fb6f32a46b0cdfc59643bee255648e1ef401116 (patch)
tree8d96d1dadae5e82b92e6d1ee7f4203724eb08609 /webapp/src/components
parent55a24a3b7d1b3fcc07f0bb8e53b00abf23e651b3 (diff)
Refactor passed contract into Option<Contract>
Diffstat (limited to 'webapp/src/components')
-rw-r--r--webapp/src/components/bidding.rs6
-rw-r--r--webapp/src/components/game.rs42
-rw-r--r--webapp/src/components/hand.rs2
-rw-r--r--webapp/src/components/show_bid.rs12
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>
</>
}
}