diff --git a/api/src/model.rs b/api/src/model.rs index d119761..e8f1455 100644 --- a/api/src/model.rs +++ b/api/src/model.rs @@ -142,6 +142,7 @@ pub struct CompanyPrice { pub long_name: String, pub regular_market_price: CompanyRegularMarketPrice, pub regular_market_previous_close: CompanyRegularMarketPreviousClose, + pub currency: Option, } #[serde(rename_all = "camelCase")] @@ -206,6 +207,7 @@ pub struct OptionsContract { pub ask: Option, pub implied_volatility: Option, pub in_the_money: Option, + pub currency: Option, } fn deserialize_vec<'de, D, T>(deserializer: D) -> Result, D::Error> diff --git a/src/widget/options.rs b/src/widget/options.rs index 2627958..80bd683 100644 --- a/src/widget/options.rs +++ b/src/widget/options.rs @@ -175,7 +175,7 @@ impl OptionsState { self.exp_dates = dates; - if prev_len == 0 { + if prev_len == 0 && !self.exp_dates.is_empty() { self.set_exp_date(self.exp_dates[0]); } } @@ -323,8 +323,8 @@ impl StatefulWidget for OptionsWidget { let rows = selected_data.iter().map(|d| { Row::StyledData( vec![ - format!("${: <7.2}", d.strike), - format!("${: <7.2}", d.last_price), + format!("{: <7.2}", d.strike), + format!("{: <7.2}", d.last_price), format!("{: >7.2}%", d.percent_change), ] .into_iter(), @@ -392,10 +392,12 @@ impl StatefulWidget for OptionsWidget { columns[1] = add_padding(columns[1], 2, PaddingDirection::Left); - let gap_strike = 18 - (format!("${:.2}", option.strike).len() + 7); - let gap_last = 18 - (format!("${:.2}", option.last_price).len() + 6); - let gap_ask = 18 - (format!("${:.2}", option.ask.unwrap_or_default()).len() + 4); - let gap_bid = 18 - (format!("${:.2}", option.bid.unwrap_or_default()).len() + 4); + let currency = option.currency.as_deref().unwrap_or("USD"); + + let gap_strike = 19 - (format!("{:.2} {}", option.strike, currency).len() + 7); + let gap_last = 15 - (format!("{:.2}", option.last_price).len() + 6); + let gap_ask = 15 - (format!("{:.2}", option.ask.unwrap_or_default()).len() + 4); + let gap_bid = 15 - (format!("{:.2}", option.bid.unwrap_or_default()).len() + 4); let gap_volume = 18 - (format!("{}", option.volume.unwrap_or_default()).len() + 7); let gap_open_int = 18 - (format!("{}", option.open_interest.unwrap_or_default()).len() + 9); @@ -409,24 +411,25 @@ impl StatefulWidget for OptionsWidget { let column_0 = [ Text::raw(format!( - "strike:{}${:.2}\n\n", + "strike:{}{:.2} {}\n\n", " ".repeat(gap_strike), - option.strike + option.strike, + currency )), Text::raw(format!( - "price:{}${:.2}\n\n", + "price:{}{:.2}\n\n", " ".repeat(gap_last), - option.last_price + option.last_price, )), Text::raw(format!( - "bid:{}${:.2}\n\n", + "bid:{}{:.2}\n\n", " ".repeat(gap_ask), - option.bid.unwrap_or_default() + option.bid.unwrap_or_default(), )), Text::raw(format!( - "ask:{}${:.2}", + "ask:{}{:.2}", " ".repeat(gap_bid), - option.ask.unwrap_or_default() + option.ask.unwrap_or_default(), )), ]; diff --git a/src/widget/stock.rs b/src/widget/stock.rs index 4e8bf04..900fbcf 100644 --- a/src/widget/stock.rs +++ b/src/widget/stock.rs @@ -180,13 +180,16 @@ impl StatefulWidget for StockWidget { fn render(self, area: Rect, buf: &mut Buffer, state: &mut Self::State) { let pct_change = state.pct_change(); + let (company_name, currency) = match state.profile.as_ref() { + Some(profile) => ( + profile.price.short_name.as_str(), + profile.price.currency.as_deref().unwrap_or("USD"), + ), + None => ("", ""), + }; + // Draw widget block { - let company_name = match state.profile.as_ref() { - Some(profile) => &profile.price.short_name, - None => "", - }; - block::new(&format!(" {} - {} ", state.symbol, company_name), None).render(area, buf); } @@ -231,7 +234,7 @@ impl StatefulWidget for StockWidget { let company_info = [ Text::raw("c: "), Text::styled( - format!("${:.2}", state.current_price), + format!("{:.2} {}", state.current_price, currency), Style::default().modifier(Modifier::BOLD).fg(Color::Yellow), ), Text::styled( @@ -246,14 +249,11 @@ impl StatefulWidget for StockWidget { ), Text::raw("h: "), Text::styled( - format!("${:.2}\n", high), + format!("{:.2}\n", high), Style::default().fg(Color::LightCyan), ), Text::raw("l: "), - Text::styled( - format!("${:.2}", low), - Style::default().fg(Color::LightCyan), - ), + Text::styled(format!("{:.2}", low), Style::default().fg(Color::LightCyan)), ]; let expand_info = [