diff options
Diffstat (limited to 'webapp/src/components/game.rs')
-rw-r--r-- | webapp/src/components/game.rs | 42 |
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> </> } |