use js_sys::*;
use serde::{Deserialize, Serialize};
use serde_wasm_bindgen::to_value;
use wasm_bindgen::prelude::*;
#[wasm_bindgen]
extern "C" {
#[wasm_bindgen(js_namespace = wx, js_name = showTabBarRedDot)]
fn show_tab_bar_red_dot(params: &Object);
#[wasm_bindgen(js_namespace = wx, js_name = showTabBar)]
fn show_tab_bar(params: &Object);
#[wasm_bindgen(js_namespace = wx, js_name = setTabBarStyle)]
fn set_tab_bar_style(params: &Object);
#[wasm_bindgen(js_namespace = wx, js_name = setTabBarItem)]
fn set_tab_bar_item(params: &Object);
#[wasm_bindgen(js_namespace = wx, js_name = setTabBarBadge)]
fn set_tab_bar_badge(params: &Object);
#[wasm_bindgen(js_namespace = wx, js_name = removeTabBarBadge)]
fn remove_tab_bar_badge(params: &Object);
#[wasm_bindgen(js_namespace = wx, js_name = hideTabBarRedDot)]
fn hide_tab_bar_red_dot(params: &Object);
#[wasm_bindgen(js_namespace = wx, js_name = hideTabBar)]
fn hide_tab_bar(params: &Object);
}
pub fn wx_show_tab_bar_red_dot(index: u8) {
let params = Object::new();
Reflect::set(
¶ms,
&JsValue::from("index"),
&JsValue::from(to_value(&index).unwrap()),
)
.unwrap();
show_tab_bar_red_dot(¶ms);
}
pub fn wx_show_tab_bar(animation: bool) {
let params = Object::new();
Reflect::set(
¶ms,
&JsValue::from("animation"),
&JsValue::from(to_value(&animation).unwrap()),
)
.unwrap();
show_tab_bar(¶ms);
}
#[derive(Deserialize, Serialize, Debug, PartialEq, Eq, Default)]
pub enum SetTabBarStyleBorder {
#[default]
#[serde(rename = "white")]
White,
#[serde(rename = "black")]
Black,
}
#[derive(Deserialize, Serialize, Debug, Default)]
#[serde(rename_all = "camelCase")]
pub struct SetTabBarStyle<'a> {
pub color: Option<&'a str>,
pub selected_color: Option<&'a str>,
pub background_color: Option<&'a str>,
pub border_style: Option<SetTabBarStyleBorder>,
}
pub fn wx_set_tab_bar_style<'a>(data: SetTabBarStyle<'a>) {
let params = Object::new();
if let Some(v) = data.color {
let value = to_value(v).unwrap();
Reflect::set(¶ms, &JsValue::from("color"), &value).unwrap();
}
if let Some(v) = data.selected_color {
let value = to_value(v).unwrap();
Reflect::set(¶ms, &JsValue::from("selectedColor"), &value).unwrap();
}
if let Some(v) = data.background_color {
let value = to_value(v).unwrap();
Reflect::set(¶ms, &JsValue::from("backgroundColor"), &value).unwrap();
}
if let Some(v) = data.border_style {
let value = to_value(&v).unwrap();
Reflect::set(
¶ms,
&JsValue::from("borderStyle"),
&JsValue::from(&value),
)
.unwrap();
}
set_tab_bar_style(¶ms);
}
#[derive(Deserialize, Serialize, Debug, Default)]
#[serde(rename_all = "camelCase")]
pub struct SetTabBarItem<'a> {
pub index: u8,
pub text: Option<&'a str>,
pub icon_path: Option<&'a str>,
pub selected_icon_path: Option<&'a str>,
}
pub fn wx_set_tab_bar_item<'a>(data: SetTabBarItem<'a>) {
let params = Object::new();
Reflect::set(
¶ms,
&JsValue::from("index"),
&JsValue::from(to_value(&data.index).unwrap()),
)
.unwrap();
if let Some(v) = data.text {
let value = to_value(v).unwrap();
Reflect::set(¶ms, &JsValue::from("text"), &value).unwrap();
}
if let Some(v) = data.icon_path {
let value = to_value(v).unwrap();
Reflect::set(¶ms, &JsValue::from("iconPath"), &value).unwrap();
}
if let Some(v) = data.selected_icon_path {
let value = to_value(v).unwrap();
Reflect::set(¶ms, &JsValue::from("selectedIconPath"), &value).unwrap();
}
set_tab_bar_item(¶ms);
}
#[derive(Deserialize, Serialize, Debug, Default)]
#[serde(rename_all = "camelCase")]
pub struct SetTabBarBadge<'a> {
pub index: u8,
pub text: &'a str,
}
pub fn wx_set_tab_bar_badge<'a>(data: SetTabBarBadge<'a>) {
let params = Object::new();
Reflect::set(
¶ms,
&JsValue::from("index"),
&JsValue::from(to_value(&data.index).unwrap()),
)
.unwrap();
Reflect::set(
¶ms,
&JsValue::from("text"),
&JsValue::from(to_value(data.text).unwrap()),
)
.unwrap();
set_tab_bar_badge(¶ms);
}
pub fn wx_remove_tab_bar_badge(index: u8) {
let params = Object::new();
Reflect::set(
¶ms,
&JsValue::from("index"),
&JsValue::from(to_value(&index).unwrap()),
)
.unwrap();
remove_tab_bar_badge(¶ms);
}
pub fn wx_hide_tab_bar_red_dot(index: u8) {
let params = Object::new();
Reflect::set(
¶ms,
&JsValue::from("index"),
&JsValue::from(to_value(&index).unwrap()),
)
.unwrap();
hide_tab_bar_red_dot(¶ms);
}
pub fn wx_hide_tab_bar(animation: bool) {
let params = Object::new();
Reflect::set(
¶ms,
&JsValue::from("animation"),
&JsValue::from(to_value(&animation).unwrap()),
)
.unwrap();
hide_tab_bar(¶ms);
}