summaryrefslogtreecommitdiff
path: root/webapp/src/components/bidding_box.rs
diff options
context:
space:
mode:
Diffstat (limited to 'webapp/src/components/bidding_box.rs')
-rw-r--r--webapp/src/components/bidding_box.rs36
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>,
}