diff options
Diffstat (limited to 'webapp/src/components/bidding_box.rs')
-rw-r--r-- | webapp/src/components/bidding_box.rs | 36 |
1 files changed, 22 insertions, 14 deletions
diff --git a/webapp/src/components/bidding_box.rs b/webapp/src/components/bidding_box.rs index 38a543f..04f82f9 100644 --- a/webapp/src/components/bidding_box.rs +++ b/webapp/src/components/bidding_box.rs @@ -1,32 +1,39 @@ use yew::prelude::*; -use crate::bridge_engine::Raise; +use crate::bridge_engine::{Bid, Raise}; use crate::components::bid_css_class; #[function_component(BiddingBox)] pub fn bidding_box(props: &BiddingBoxProps) -> Html { - let bids: Html = Raise::all_raises() - .iter() - .map(|bid| { - let mut class = if Some(*bid) <= props.current_bid { + let bids = Raise::all_raises() + .into_iter() + .map(|raise| { + let mut class = if Some(raise) <= props.current_bid { classes!("disabled") } else { classes!("enabled") }; - class.extend(classes!(bid_css_class(bid.suit))); + class.extend(classes!(bid_css_class(raise.suit))); + let onclick = { + let on_bid = props.on_bid.clone(); + Callback::from(move |_| on_bid.emit(Bid::Raise(raise))) + }; html! { - <div class={class}> - { bid.level } + <div class={class} {onclick}> + { raise.level } </div> } - }) - .collect(); + }); + let onclick = |bid| { + let on_bid = props.on_bid.clone(); + Callback::from(move |_| on_bid.emit(bid)) + }; html! { <div class="bidding-box"> - { bids } - <div>{ "Pass" }</div> - <div>{ "X" }</div> - <div>{ "XX" }</div> + { for bids } + <div onclick={ onclick(Bid::Pass) }>{ "Pass" }</div> + <div onclick={ onclick(Bid::Double) }>{ "X" }</div> + <div onclick={ onclick(Bid::Redouble) }>{ "XX" }</div> </div> } } @@ -34,4 +41,5 @@ pub fn bidding_box(props: &BiddingBoxProps) -> Html { #[derive(PartialEq, Properties, Clone)] pub struct BiddingBoxProps { pub current_bid: Option<Raise>, + pub on_bid: Callback<Bid>, } |