use ag_grid_derive::FieldSetter;
use web_sys::HtmlElement;
use crate::{
column::ColumnDef,
convert::ToJsValue,
grid::AgGrid,
types::{DataSource, RowModelType},
Grid, ToJsValue as ToJsValueMacro,
};
#[derive(FieldSetter, ToJsValueMacro)]
#[js_value(skip_serializing_none)]
pub struct GridOptions<T>
where
T: ToJsValue,
{
column_defs: Option<Vec<ColumnDef>>,
default_col_def: Option<ColumnDef>,
pagination: Option<bool>,
row_model_type: Option<RowModelType>,
row_data: Option<Vec<T>>,
datasource: Option<DataSource>,
cache_overflow_size: Option<u32>,
max_concurrent_datasource_requests: Option<i32>,
cache_block_size: Option<u32>,
max_blocks_in_cache: Option<u32>,
infinite_initial_row_count: Option<u32>,
}
impl<T> GridOptions<T>
where
T: ToJsValue,
{
pub fn new() -> Self {
Default::default()
}
pub fn build(self, div: HtmlElement) -> Grid {
let grid_options = self.to_js_value();
let js_grid = AgGrid::new(div, grid_options);
Grid {
api: js_grid.gridOptions().api(),
column_api: js_grid.gridOptions().columnApi(),
}
}
}