diff options
author | Kjetil Orbekk <kj@orbekk.com> | 2022-09-05 18:15:09 -0400 |
---|---|---|
committer | Kjetil Orbekk <kj@orbekk.com> | 2022-09-05 18:15:09 -0400 |
commit | 6f2dbd6db9836b5b60c78ec457b07d1202527690 (patch) | |
tree | 83dc5a3c4d8bfa646cbadc697f780d733701ba20 | |
parent | 1bead88ffe47ef193a8b2adc36b167967d8450ef (diff) |
Start bidding table component
-rw-r--r-- | webapp/src/bridge_engine.rs | 2 | ||||
-rw-r--r-- | webapp/src/main.rs | 41 |
2 files changed, 42 insertions, 1 deletions
diff --git a/webapp/src/bridge_engine.rs b/webapp/src/bridge_engine.rs index a30591c..702faa9 100644 --- a/webapp/src/bridge_engine.rs +++ b/webapp/src/bridge_engine.rs @@ -237,7 +237,7 @@ pub struct Contract { modifier: ContractModifier, } -#[derive(Debug)] +#[derive(Debug, PartialEq, Eq, Clone)] pub struct Bidding { pub dealer: Player, pub bids: Vec<Bid>, diff --git a/webapp/src/main.rs b/webapp/src/main.rs index 4316d84..81b8b39 100644 --- a/webapp/src/main.rs +++ b/webapp/src/main.rs @@ -4,6 +4,8 @@ use log::{debug, error, info, warn}; use yew::prelude::*; pub mod bridge_engine; pub mod card; +use bridge_engine::Bidding; +use bridge_engine::Player; use bridge_engine::Raise; extern crate wee_alloc; @@ -139,6 +141,42 @@ pub fn bid_css_class(suit: Option<Suit>) -> &'static str { } } +fn padding(dealer: Player) -> Html { + let mut padding : Vec<Html> = vec![]; + let mut player = Player::West; + while player != dealer { + padding.push(html! { <div /> }); + player = player.next(); + } + padding.into_iter().collect() +} + +#[function_component(BiddingTable)] +pub fn bidding_table(props: &BiddingTableProps) -> Html { + let bids: Html = props + .bidding + .bids + .iter() + .map(|bid| { + html! { + <div class="bid">{ bid }</div> + } + }) + .collect(); + let padding : Html = padding(props.bidding.dealer); + html! { + <div class="bidding-table"> + { padding } + { bids } + </div> + } +} + +#[derive(PartialEq, Properties, Clone)] +pub struct BiddingTableProps { + bidding: Bidding, +} + #[function_component(BiddingBox)] pub fn bidding_box(props: &BiddingBoxProps) -> Html { let bids: Html = Raise::all_raises() @@ -161,6 +199,9 @@ pub fn bidding_box(props: &BiddingBoxProps) -> Html { html! { <div class="bidding-box"> { bids } + <div>{ "Pass" }</div> + <div>{ "X" }</div> + <div>{ "XX" }</div> </div> } } |