use wasm_bindgen::prelude::*;
#[wasm_bindgen]
extern "C" {
#[derive(Debug, Clone, PartialEq)]
pub type EventClickInfo;
#[wasm_bindgen(method, js_name = preventDefault)]
pub fn prevent_default(this: &EventClickInfo);
}
impl EventClickInfo {
#[must_use]
pub fn event(&self) -> Option<CalendarEvent> {
web_sys::js_sys::Reflect::get(self, &JsValue::from_str("event"))
.ok()
.map(web_sys::wasm_bindgen::JsCast::unchecked_into::<CalendarEvent>)
}
#[must_use]
pub fn js_event(&self) -> Option<web_sys::Event> {
web_sys::js_sys::Reflect::get(self, &JsValue::from_str("jsEvent"))
.ok()
.and_then(|v| {
v.dyn_into::<web_sys::Event>()
.inspect_err(|e| web_sys::console::error_1(&format!("{e:#?}").into()))
.ok()
})
}
#[must_use]
pub fn view(&self) -> Option<super::CalendarView> {
web_sys::js_sys::Reflect::get(self, &JsValue::from_str("view"))
.ok()
.map(web_sys::wasm_bindgen::JsCast::unchecked_into::<super::CalendarView>)
}
#[must_use]
pub fn html_element(&self) -> Option<web_sys::Element> {
web_sys::js_sys::Reflect::get(self, &JsValue::from_str("el"))
.ok()
.and_then(|v| {
v.dyn_into::<web_sys::Element>()
.inspect_err(|e| web_sys::console::error_1(&format!("{e:#?}").into()))
.ok()
})
}
}
#[wasm_bindgen]
extern "C" {
#[derive(Debug, Clone, PartialEq)]
pub type CalendarEvent;
#[wasm_bindgen(method, js_name = remove)]
pub fn remove(this: &CalendarEvent);
}
impl CalendarEvent {
#[must_use]
pub fn id(&self) -> Option<String> {
web_sys::js_sys::Reflect::get(self, &JsValue::from_str("id"))
.ok()
.and_then(|v| v.as_string())
}
#[must_use]
pub fn group_id(&self) -> Option<String> {
web_sys::js_sys::Reflect::get(self, &JsValue::from_str("groupId"))
.ok()
.and_then(|v| v.as_string())
}
#[must_use]
pub fn all_day(&self) -> Option<bool> {
web_sys::js_sys::Reflect::get(self, &JsValue::from_str("allDay"))
.ok()
.and_then(|v| v.as_bool())
}
#[must_use]
pub fn start(&self) -> Option<web_sys::js_sys::Date> {
web_sys::js_sys::Reflect::get(self, &JsValue::from_str("start"))
.ok()
.and_then(|v| {
v.dyn_into::<web_sys::js_sys::Date>()
.inspect_err(|e| web_sys::console::error_1(&format!("{e:#?}").into()))
.ok()
})
}
#[must_use]
pub fn end(&self) -> Option<web_sys::js_sys::Date> {
web_sys::js_sys::Reflect::get(self, &JsValue::from_str("end"))
.ok()
.and_then(|v| {
v.dyn_into::<web_sys::js_sys::Date>()
.inspect_err(|e| web_sys::console::error_1(&format!("{e:#?}").into()))
.ok()
})
}
#[must_use]
pub fn start_str(&self) -> Option<String> {
web_sys::js_sys::Reflect::get(self, &JsValue::from_str("startStr"))
.ok()
.and_then(|v| v.as_string())
}
#[must_use]
pub fn end_str(&self) -> Option<String> {
web_sys::js_sys::Reflect::get(self, &JsValue::from_str("endStr"))
.ok()
.and_then(|v| v.as_string())
}
#[must_use]
pub fn title(&self) -> Option<String> {
web_sys::js_sys::Reflect::get(self, &JsValue::from_str("title"))
.ok()
.and_then(|v| v.as_string())
}
#[must_use]
pub fn url(&self) -> Option<String> {
web_sys::js_sys::Reflect::get(self, &JsValue::from_str("url"))
.ok()
.and_then(|v| v.as_string())
}
#[must_use]
pub fn class_names(&self) -> Option<Vec<String>> {
web_sys::js_sys::Reflect::get(self, &JsValue::from_str("classNames"))
.ok()
.and_then(|v| {
v.dyn_into::<web_sys::js_sys::Array>()
.inspect_err(|e| web_sys::console::error_1(&format!("{e:#?}").into()))
.ok()
})
.and_then(|arr| {
arr.iter()
.map(|v| v.as_string())
.collect::<Option<Vec<String>>>()
})
}
#[must_use]
pub fn editable(&self) -> Option<bool> {
web_sys::js_sys::Reflect::get(self, &JsValue::from_str("editable"))
.ok()
.and_then(|v| v.as_bool())
}
#[must_use]
pub fn start_editable(&self) -> Option<bool> {
web_sys::js_sys::Reflect::get(self, &JsValue::from_str("startEditable"))
.ok()
.and_then(|v| v.as_bool())
}
#[must_use]
pub fn duration_editable(&self) -> Option<bool> {
web_sys::js_sys::Reflect::get(self, &JsValue::from_str("durationEditable"))
.ok()
.and_then(|v| v.as_bool())
}
#[must_use]
pub fn resource_editable(&self) -> Option<bool> {
web_sys::js_sys::Reflect::get(self, &JsValue::from_str("resourceEditable"))
.ok()
.and_then(|v| v.as_bool())
}
#[must_use]
pub fn display(&self) -> Option<crate::EventDisplay> {
web_sys::js_sys::Reflect::get(self, &JsValue::from_str("display"))
.ok()
.and_then(|v| v.as_string())
.and_then(|s| s.as_str().parse().ok())
}
#[must_use]
pub fn overlap(&self) -> Option<bool> {
web_sys::js_sys::Reflect::get(self, &JsValue::from_str("overlap"))
.ok()
.and_then(|v| v.as_bool())
}
#[must_use]
pub fn background_color(&self) -> Option<String> {
web_sys::js_sys::Reflect::get(self, &JsValue::from_str("backgroundColor"))
.ok()
.and_then(|v| v.as_string())
}
#[must_use]
pub fn border_color(&self) -> Option<String> {
web_sys::js_sys::Reflect::get(self, &JsValue::from_str("borderColor"))
.ok()
.and_then(|v| v.as_string())
}
#[must_use]
pub fn text_color(&self) -> Option<String> {
web_sys::js_sys::Reflect::get(self, &JsValue::from_str("textColor"))
.ok()
.and_then(|v| v.as_string())
}
#[must_use]
pub fn extended_props<T>(&self) -> Option<T>
where
T: serde::de::DeserializeOwned,
{
web_sys::js_sys::Reflect::get(self, &JsValue::from_str("extendedProps"))
.ok()
.and_then(|v| {
serde_wasm_bindgen::from_value(v)
.inspect_err(|e| web_sys::console::error_1(&format!("{e:#?}").into()))
.ok()
})
}
}