yew_full_calendar/bindings/
date_click.rs

1use wasm_bindgen::prelude::*;
2
3/// dateClickInfo is a plain object with the following properties:
4///
5/// date
6/// a Date for the clicked day/time.
7///
8/// dateStr
9/// An ISO8601 string representation of the date. Will have a time zone offset according to the calendar’s timeZone like 2018-09-01T12:30:00-05:00. If clicked on an all-day cell, won’t have a time part nor a time zone part, like 2018-09-01.
10///
11/// allDay
12/// true or false whether the click happened on an all-day cell.
13///
14/// dayEl
15/// An HTML element that represents the whole-day that was clicked on.
16///
17/// jsEvent
18/// The native JavaScript event with low-level information such as click coordinates.
19///
20/// view
21/// The current View Object.
22///
23/// resource
24/// If the current view is a resource-view, the Resource Object that owns this date. Must be using one of the resource plugins.
25#[wasm_bindgen]
26extern "C" {
27    #[derive(Debug, Clone, PartialEq)]
28    pub type DateClickInfo;
29    #[wasm_bindgen(method, js_name = preventDefault)]
30    pub fn prevent_default(this: &DateClickInfo);
31}
32
33impl DateClickInfo {
34    #[must_use]
35    pub fn date(&self) -> Option<web_sys::js_sys::Date> {
36        web_sys::js_sys::Reflect::get(self, &JsValue::from_str("date"))
37            .ok()
38            .and_then(|v| {
39                v.dyn_into::<web_sys::js_sys::Date>()
40                    .inspect_err(|e| web_sys::console::error_1(&format!("{e:#?}").into()))
41                    .ok()
42            })
43    }
44    #[must_use]
45    pub fn date_str(&self) -> Option<String> {
46        web_sys::js_sys::Reflect::get(self, &JsValue::from_str("dateStr"))
47            .ok()
48            .and_then(|v| v.as_string())
49    }
50    #[must_use]
51    pub fn all_day(&self) -> Option<bool> {
52        web_sys::js_sys::Reflect::get(self, &JsValue::from_str("allDay"))
53            .ok()
54            .and_then(|v| v.as_bool())
55    }
56    #[must_use]
57    pub fn day_el(&self) -> Option<web_sys::Element> {
58        web_sys::js_sys::Reflect::get(self, &JsValue::from_str("dayEl"))
59            .ok()
60            .and_then(|v| {
61                v.dyn_into::<web_sys::Element>()
62                    .inspect_err(|e| web_sys::console::error_1(&format!("{e:#?}").into()))
63                    .ok()
64            })
65    }
66    #[must_use]
67    pub fn js_event(&self) -> Option<web_sys::Event> {
68        web_sys::js_sys::Reflect::get(self, &JsValue::from_str("jsEvent"))
69            .ok()
70            .and_then(|v| {
71                v.dyn_into::<web_sys::Event>()
72                    .inspect_err(|e| web_sys::console::error_1(&format!("{e:#?}").into()))
73                    .ok()
74            })
75    }
76    #[must_use]
77    pub fn view(&self) -> Option<super::CalendarView> {
78        web_sys::js_sys::Reflect::get(self, &JsValue::from_str("view"))
79            .ok()
80            .map(web_sys::wasm_bindgen::JsCast::unchecked_into::<super::CalendarView>)
81    }
82    #[must_use]
83    pub fn resource(&self) -> Option<crate::ResourceObject> {
84        web_sys::js_sys::Reflect::get(self, &JsValue::from_str("resource"))
85            .ok()
86            .map(web_sys::wasm_bindgen::JsCast::unchecked_into::<crate::ResourceObject>)
87    }
88}
89
90#[wasm_bindgen]
91extern "C" {
92    #[derive(Debug, Clone, PartialEq)]
93    pub type ResourceObject;
94    #[wasm_bindgen(method, js_name = preventDefault)]
95    pub fn prevent_default(this: &ResourceObject);
96}
97
98impl ResourceObject {
99    #[must_use]
100    pub fn id(&self) -> Option<String> {
101        web_sys::js_sys::Reflect::get(self, &JsValue::from_str("id"))
102            .ok()
103            .and_then(|v| v.as_string())
104    }
105    #[must_use]
106    pub fn all_day(&self) -> Option<bool> {
107        web_sys::js_sys::Reflect::get(self, &JsValue::from_str("allDay"))
108            .ok()
109            .and_then(|v| v.as_bool())
110    }
111    #[must_use]
112    pub fn start(&self) -> Option<web_sys::js_sys::Date> {
113        web_sys::js_sys::Reflect::get(self, &JsValue::from_str("start"))
114            .ok()
115            .and_then(|v| {
116                v.dyn_into::<web_sys::js_sys::Date>()
117                    .inspect_err(|e| web_sys::console::error_1(&format!("{e:#?}").into()))
118                    .ok()
119            })
120    }
121    #[must_use]
122    pub fn end(&self) -> Option<web_sys::js_sys::Date> {
123        web_sys::js_sys::Reflect::get(self, &JsValue::from_str("end"))
124            .ok()
125            .and_then(|v| {
126                v.dyn_into::<web_sys::js_sys::Date>()
127                    .inspect_err(|e| web_sys::console::error_1(&format!("{e:#?}").into()))
128                    .ok()
129            })
130    }
131    #[must_use]
132    pub fn start_str(&self) -> Option<String> {
133        web_sys::js_sys::Reflect::get(self, &JsValue::from_str("startStr"))
134            .ok()
135            .and_then(|v| v.as_string())
136    }
137    #[must_use]
138    pub fn end_str(&self) -> Option<String> {
139        web_sys::js_sys::Reflect::get(self, &JsValue::from_str("endStr"))
140            .ok()
141            .and_then(|v| v.as_string())
142    }
143    #[must_use]
144    pub fn title(&self) -> Option<String> {
145        web_sys::js_sys::Reflect::get(self, &JsValue::from_str("title"))
146            .ok()
147            .and_then(|v| v.as_string())
148    }
149    #[must_use]
150    pub fn url(&self) -> Option<String> {
151        web_sys::js_sys::Reflect::get(self, &JsValue::from_str("url"))
152            .ok()
153            .and_then(|v| v.as_string())
154    }
155    #[must_use]
156    pub fn class_names(&self) -> Option<web_sys::js_sys::Array> {
157        web_sys::js_sys::Reflect::get(self, &JsValue::from_str("classNames"))
158            .ok()
159            .and_then(|v| {
160                v.dyn_into::<web_sys::js_sys::Array>()
161                    .inspect_err(|e| web_sys::console::error_1(&format!("{e:#?}").into()))
162                    .ok()
163            })
164    }
165    #[must_use]
166    pub fn editable(&self) -> Option<bool> {
167        web_sys::js_sys::Reflect::get(self, &JsValue::from_str("editable"))
168            .ok()
169            .and_then(|v| v.as_bool())
170    }
171    #[must_use]
172    pub fn start_editable(&self) -> Option<bool> {
173        web_sys::js_sys::Reflect::get(self, &JsValue::from_str("startEditable"))
174            .ok()
175            .and_then(|v| v.as_bool())
176    }
177    #[must_use]
178    pub fn duration_editable(&self) -> Option<bool> {
179        web_sys::js_sys::Reflect::get(self, &JsValue::from_str("durationEditable"))
180            .ok()
181            .and_then(|v| v.as_bool())
182    }
183    #[must_use]
184    pub fn resource_editable(&self) -> Option<bool> {
185        web_sys::js_sys::Reflect::get(self, &JsValue::from_str("resourceEditable"))
186            .ok()
187            .and_then(|v| v.as_bool())
188    }
189    #[must_use]
190    pub fn display(&self) -> Option<crate::EventDisplay> {
191        web_sys::js_sys::Reflect::get(self, &JsValue::from_str("display"))
192            .ok()
193            .and_then(|v| v.as_string())
194            .and_then(|s| s.as_str().parse().ok())
195    }
196    #[must_use]
197    pub fn overlap(&self) -> Option<bool> {
198        web_sys::js_sys::Reflect::get(self, &JsValue::from_str("overlap"))
199            .ok()
200            .and_then(|v| v.as_bool())
201    }
202    // TODO: Constraint
203    //#[must_use]
204    //pub fn constraint(&self) -> Option<crate::EventConstraint> {
205    //    web_sys::js_sys::Reflect::get(self, &JsValue::from_str("constraint"))
206    //        .ok()
207    //        .and_then(|v| v.as_string())
208    //        .and_then(|s| s.as_str().parse().ok())
209    //}
210    #[must_use]
211    pub fn background_color(&self) -> Option<String> {
212        web_sys::js_sys::Reflect::get(self, &JsValue::from_str("backgroundColor"))
213            .ok()
214            .and_then(|v| v.as_string())
215    }
216    #[must_use]
217    pub fn border_color(&self) -> Option<String> {
218        web_sys::js_sys::Reflect::get(self, &JsValue::from_str("borderColor"))
219            .ok()
220            .and_then(|v| v.as_string())
221    }
222    #[must_use]
223    pub fn text_color(&self) -> Option<String> {
224        web_sys::js_sys::Reflect::get(self, &JsValue::from_str("textColor"))
225            .ok()
226            .and_then(|v| v.as_string())
227    }
228    #[must_use]
229    pub fn extended_props(&self) -> Option<web_sys::js_sys::Object> {
230        web_sys::js_sys::Reflect::get(self, &JsValue::from_str("extendedProps"))
231            .ok()
232            .and_then(|v| {
233                v.dyn_into::<web_sys::js_sys::Object>()
234                    .inspect_err(|e| web_sys::console::error_1(&format!("{e:#?}").into()))
235                    .ok()
236            })
237    }
238}