use ag_grid_derive::{FieldSetter, ToJsValue};
use wasm_bindgen::prelude::*;
pub use crate::shared::SortMethod;
use crate::{callbacks::IHeaderValueGetterParams, types::OneOrMany};
#[wasm_bindgen]
extern "C" {
pub type ColumnApi;
}
#[derive(FieldSetter, ToJsValue)]
#[js_value(skip_serializing_none)]
pub struct ColumnDef {
#[field_setter(skip)]
field: Option<String>,
col_id: Option<String>,
type_: Option<OneOrMany<String>>,
value_getter: Option<String>,
value_formatter: Option<String>,
show_disabled_checkboxes: Option<bool>,
hide: Option<bool>,
initial_hide: Option<bool>,
lock_visible: Option<bool>,
lock_position: Option<LockPosition>,
suppress_movable: Option<bool>,
editable: Option<bool>,
cell_editor_popup: Option<bool>,
cell_editor_popup_position: Option<PopupPosition>,
single_click_edit: Option<bool>,
filter: Option<Filter>,
floating_filter: Option<bool>,
header_name: Option<String>,
header_value_getter: Option<Closure<dyn FnMut(IHeaderValueGetterParams) -> String>>,
header_tooltip: Option<String>,
header_class: Option<OneOrMany<String>>,
wrap_header_text: Option<bool>,
auto_header_height: Option<bool>,
menu_tabs: Option<Vec<MenuTab>>,
suppress_menu: Option<bool>,
header_checkbox_selection: Option<bool>,
header_checkbox_selection_filtered_only: Option<bool>,
pinned: Option<PinnedPosition>,
initial_pinned: Option<PinnedPosition>,
lock_pinned: Option<bool>,
auto_height: Option<bool>,
wrap_text: Option<bool>,
enable_cell_change_flash: Option<bool>,
suppress_cell_flash: Option<bool>,
row_drag: Option<bool>,
dnd_source: Option<bool>,
sortable: Option<bool>,
sort: Option<SortMethod>,
initial_sort: Option<SortMethod>,
sort_index: Option<Option<u32>>,
sorting_order: Option<Vec<SortMethod>>,
#[js_value(rename = "unSortIcon")]
unsort_icon: Option<bool>,
col_span: Option<u32>,
row_span: Option<u32>,
tooltip_field: Option<String>,
width: Option<u32>,
initial_width: Option<u32>,
min_width: Option<u32>,
max_width: Option<u32>,
flex: Option<u32>,
initial_flex: Option<u32>,
resizable: Option<bool>,
suppress_size_to_fit: Option<bool>,
suppress_auto_size: Option<bool>,
}
impl ColumnDef {
pub fn new<S: AsRef<str>>(field: S) -> Self {
Self {
field: Some(field.as_ref().to_string()),
..Default::default()
}
}
}
#[derive(ToJsValue)]
pub enum Filter {
AgNumberColumnFilter,
AgTextColumnFilter,
AgDateColumnFilter,
AgSetColumnFilter,
#[js_value(serialize_as = "true")]
True,
#[js_value(serialize_as = "false")]
False,
}
#[derive(ToJsValue)]
pub enum LockPosition {
#[js_value(serialize_as = "true")]
True,
#[js_value(serialize_as = "false")]
False,
Left,
Right,
}
#[derive(ToJsValue)]
pub enum PinnedPosition {
#[js_value(serialize_as = "true")]
True,
#[js_value(serialize_as = "false")]
False,
Left,
Right,
}
#[derive(ToJsValue)]
pub enum PopupPosition {
Over,
Under,
}
#[allow(clippy::enum_variant_names)]
#[derive(ToJsValue)]
pub enum MenuTab {
FilterMenuTab,
GeneralMenuTab,
ColumnsMenuTab,
}