summaryrefslogtreecommitdiff
path: root/webapp/src/components/game.rs
diff options
context:
space:
mode:
Diffstat (limited to 'webapp/src/components/game.rs')
-rw-r--r--webapp/src/components/game.rs42
1 files changed, 19 insertions, 23 deletions
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>
</>
}