diff options
author | Kjetil Orbekk <kj@orbekk.com> | 2022-09-06 21:00:00 -0400 |
---|---|---|
committer | Kjetil Orbekk <kj@orbekk.com> | 2022-09-06 21:00:00 -0400 |
commit | 397214caf0fe46cb1cd455908a67d36a931e7ec4 (patch) | |
tree | 943cab72b679c069f93744e0bd91eba059318652 /webapp/src/main.rs | |
parent | 6f2dbd6db9836b5b60c78ec457b07d1202527690 (diff) |
Finish bidding table component
Diffstat (limited to 'webapp/src/main.rs')
-rw-r--r-- | webapp/src/main.rs | 35 |
1 files changed, 28 insertions, 7 deletions
diff --git a/webapp/src/main.rs b/webapp/src/main.rs index 81b8b39..846514a 100644 --- a/webapp/src/main.rs +++ b/webapp/src/main.rs @@ -4,6 +4,7 @@ use log::{debug, error, info, warn}; use yew::prelude::*; pub mod bridge_engine; pub mod card; +use bridge_engine::Bid; use bridge_engine::Bidding; use bridge_engine::Player; use bridge_engine::Raise; @@ -49,9 +50,20 @@ pub fn app() -> Html { }) }; + let bidding = Bidding::new(Player::North); + let bidding = bidding.bid("1NT".parse().unwrap()).unwrap().bidding(); + let bidding = bidding.bid("pass".parse().unwrap()).unwrap().bidding(); + let bidding = bidding.bid("2♦".parse().unwrap()).unwrap().bidding(); + let bidding = bidding.bid("pass".parse().unwrap()).unwrap().bidding(); + let bidding = bidding.bid("2♥".parse().unwrap()).unwrap().bidding(); + let bidding = bidding.bid("pass".parse().unwrap()).unwrap().bidding(); + let bidding = bidding.bid("4♥".parse().unwrap()).unwrap().bidding(); + html! { <> - <p>{ "Bids" }</p> + <p>{ "Bidding table" }</p> + <BiddingTable { bidding } /> + <p>{ "Bidding box" }</p> <BiddingBox lower_limit={"1H".parse::<Raise>().unwrap()} /> <p>{ "North" }</p> <Hand ..(*north).clone() /> @@ -145,7 +157,7 @@ fn padding(dealer: Player) -> Html { let mut padding : Vec<Html> = vec![]; let mut player = Player::West; while player != dealer { - padding.push(html! { <div /> }); + padding.push(html! { <div/> }); player = player.next(); } padding.into_iter().collect() @@ -153,19 +165,28 @@ fn padding(dealer: Player) -> Html { #[function_component(BiddingTable)] pub fn bidding_table(props: &BiddingTableProps) -> Html { + let bid = |bid: &Bid| match bid.as_raise() { + None => html!{ <div class="bid">{ bid }</div> }, + Some(raise) => html!{ + <div class="bid"> + { raise.level } + <div class={ bid_css_class(raise.suit) }/> + </div> + }, + }; let bids: Html = props .bidding .bids .iter() - .map(|bid| { - html! { - <div class="bid">{ bid }</div> - } - }) + .map(|b| { bid(b) }) .collect(); let padding : Html = padding(props.bidding.dealer); html! { <div class="bidding-table"> + <div class="header">{ "West" }</div> + <div class="header">{ "North" }</div> + <div class="header">{ "East" }</div> + <div class="header">{ "South" }</div> { padding } { bids } </div> |