1use 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#[derive(Debug, FromInterface)]
26pub struct HeaderValueGetterParams {
27 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#[derive(Debug)]
57pub struct GetRowsParams {
58 pub start_row: u32,
60 pub end_row: u32,
62 pub sort_model: Vec<SortModelItem>,
65 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}