ag_grid_rs/
callbacks.rs

1//! A collection of parameter types passed to callback functions.
2
3use std::collections::HashMap;
4
5use ag_grid_core::imports::ObjectExt;
6use ag_grid_derive::FromInterface;
7use js_sys::{Function, Object};
8use wasm_bindgen::{prelude::*, JsCast};
9
10use crate::{
11    filter::{CombinedFilterModel, FilterModel, FilterModelType},
12    sort::{ISortModelItem, SortModelItem},
13};
14
15#[wasm_bindgen]
16extern "C" {
17    pub(crate) type IHeaderValueGetterParams;
18
19    #[wasm_bindgen(method, getter, js_name = colId)]
20    pub(crate) fn location(this: &IHeaderValueGetterParams) -> Option<String>;
21}
22
23/// Parameters passed to the closure in
24/// [`ColumnDef::header_value_getter`][`crate::ColumnDef::header_value_getter`].
25#[derive(Debug, FromInterface)]
26pub struct HeaderValueGetterParams {
27    /// Where the column is going to appear.
28    pub location: Option<String>,
29}
30
31#[wasm_bindgen]
32extern "C" {
33    pub(crate) type IGetRowsParams;
34
35    #[wasm_bindgen(method, getter, js_name = startRow)]
36    fn start_row(this: &IGetRowsParams) -> u32;
37
38    #[wasm_bindgen(method, getter, js_name = endRow)]
39    fn end_row(this: &IGetRowsParams) -> u32;
40
41    #[wasm_bindgen(method, getter, js_name = sortModel)]
42    fn sort_model(this: &IGetRowsParams) -> Vec<ISortModelItem>;
43
44    #[wasm_bindgen(method, getter, js_name = filterModel)]
45    fn filter_model(this: &IGetRowsParams) -> Object;
46
47    #[wasm_bindgen(method, getter, js_name = successCallback)]
48    pub(crate) fn success_callback(this: &IGetRowsParams) -> Function;
49
50    #[wasm_bindgen(method, getter, js_name = failCallback)]
51    pub(crate) fn fail_callback(this: &IGetRowsParams) -> Function;
52}
53
54/// Parameters passed to the callback function in
55/// [`DataSourceBuilder::new`][`crate::gridoptions::DataSourceBuilder`].
56#[derive(Debug)]
57pub struct GetRowsParams {
58    /// The first row index to get.
59    pub start_row: u32,
60    /// The first row index to *not* get.
61    pub end_row: u32,
62    /// A vector of `[SortModelItem]` describing how the data is expected to be
63    /// sorted.
64    pub sort_model: Vec<SortModelItem>,
65    /// Details of how to filter the requested data.
66    pub filter_model: HashMap<String, FilterModelType>,
67}
68
69impl From<&IGetRowsParams> for GetRowsParams {
70    fn from(i: &IGetRowsParams) -> Self {
71        Self {
72            start_row: i.start_row(),
73            end_row: i.end_row(),
74            sort_model: i.sort_model().iter().map(SortModelItem::from).collect(),
75            filter_model: {
76                let filter_object = i.filter_model().unchecked_into::<ObjectExt>();
77                let mut filters = Vec::new();
78
79                for (col, filter) in filter_object.entries() {
80                    let filter = filter.unchecked_into::<ObjectExt>();
81
82                    let filter = if filter.has_own_property(&"operator".into()) {
83                        let filter = CombinedFilterModel::from_object(&filter);
84                        FilterModelType::Combined(filter)
85                    } else {
86                        let filter = FilterModel::from_object(&filter);
87                        FilterModelType::Single(filter)
88                    };
89
90                    let filter = (col, filter);
91                    filters.push(filter);
92                }
93
94                filters.into_iter().collect()
95            },
96        }
97    }
98}