use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Default)]
#[serde(rename_all = "lowercase")]
pub enum NavigationStyle {
#[serde(rename = "default")]
#[default]
Default,
#[serde(rename = "custom")]
Custom,
}
#[derive(Debug, Clone, Serialize, Deserialize, Default)]
#[serde(rename_all = "camelCase")]
pub struct NavigationBarConfig {
#[serde(default)]
pub navigation_bar_background_color: String,
#[serde(default)]
pub navigation_bar_text_style: String,
#[serde(default)]
pub navigation_bar_title_text: String,
#[serde(default)]
pub navigation_style: NavigationStyle,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[allow(non_snake_case)]
pub struct NavigationBarState {
#[serde(default)]
pub navigationBarBackgroundColor: String,
#[serde(default)]
pub navigationBarTextStyle: String,
#[serde(default)]
pub navigationBarTitleText: String,
#[serde(default)]
pub navigationStyle: NavigationStyle,
#[serde(skip)]
pub show_navbar: bool,
#[serde(skip)]
pub show_back_button: bool,
#[serde(skip)]
pub show_home_button: bool,
}
impl NavigationBarConfig {
pub fn should_show_navbar(&self) -> bool {
matches!(self.navigation_style, NavigationStyle::Default)
}
}
impl Default for NavigationBarState {
fn default() -> Self {
Self::from_config(&NavigationBarConfig::default())
}
}
impl NavigationBarState {
pub fn from_config(config: &NavigationBarConfig) -> Self {
Self {
navigationBarBackgroundColor: config.navigation_bar_background_color.clone(),
navigationBarTextStyle: config.navigation_bar_text_style.clone(),
navigationBarTitleText: config.navigation_bar_title_text.clone(),
navigationStyle: config.navigation_style.clone(),
show_navbar: config.should_show_navbar(),
show_back_button: false,
show_home_button: false,
}
}
pub fn set_back_button_visibility(&mut self, show: bool) {
self.show_back_button = show;
}
pub fn set_home_button_visibility(&mut self, show: bool) {
self.show_home_button = show;
}
pub fn set_navbar_visibility(&mut self, show: bool) {
self.show_navbar = show;
}
pub fn set_title(&mut self, title: String) {
self.navigationBarTitleText = title;
}
pub fn set_background_color(&mut self, color: String) {
self.navigationBarBackgroundColor = color;
}
pub fn set_text_style(&mut self, style: String) {
self.navigationBarTextStyle = style;
}
}