pub struct DataGridState<T: TableRow> { /* private fields */ }Expand description
State for a DataGrid component.
Contains the table data, column cursor, and inline editor state.
Implementations§
Source§impl<T: TableRow> DataGridState<T>
impl<T: TableRow> DataGridState<T>
Sourcepub fn new(rows: Vec<T>, columns: Vec<Column>) -> Self
pub fn new(rows: Vec<T>, columns: Vec<Column>) -> Self
Creates a new data grid with the given rows and columns.
The first row is selected by default.
§Example
use envision::component::{DataGridState, TableRow, Column};
use ratatui::layout::Constraint;
#[derive(Clone)]
struct Item { name: String }
impl TableRow for Item {
fn cells(&self) -> Vec<String> { vec![self.name.clone()] }
}
let state = DataGridState::new(
vec![Item { name: "A".into() }],
vec![Column::new("Name", Constraint::Min(10))],
);
assert_eq!(state.selected_index(), Some(0));
assert_eq!(state.selected_column(), 0);Sourcepub fn rows(&self) -> &[T]
pub fn rows(&self) -> &[T]
Returns the rows.
§Example
use envision::component::{DataGridState, TableRow, Column};
use ratatui::layout::Constraint;
#[derive(Clone)]
struct Item { name: String }
impl TableRow for Item {
fn cells(&self) -> Vec<String> { vec![self.name.clone()] }
}
let state = DataGridState::new(
vec![Item { name: "A".into() }],
vec![Column::new("Name", Constraint::Min(10))],
);
assert_eq!(state.rows().len(), 1);Sourcepub fn columns(&self) -> &[Column]
pub fn columns(&self) -> &[Column]
Returns the columns.
§Example
use envision::component::{DataGridState, TableRow, Column};
use ratatui::layout::Constraint;
#[derive(Clone)]
struct Item { name: String }
impl TableRow for Item {
fn cells(&self) -> Vec<String> { vec![self.name.clone()] }
}
let state = DataGridState::new(
vec![Item { name: "A".into() }],
vec![Column::new("Name", Constraint::Min(10))],
);
assert_eq!(state.columns().len(), 1);
assert_eq!(state.columns()[0].header(), "Name");Sourcepub fn selected_index(&self) -> Option<usize>
pub fn selected_index(&self) -> Option<usize>
Returns the currently selected row index.
Sourcepub fn selected(&self) -> Option<usize>
pub fn selected(&self) -> Option<usize>
Alias for selected_index().
§Example
use envision::component::{DataGridState, TableRow, Column};
use ratatui::layout::Constraint;
#[derive(Clone)]
struct Item { name: String }
impl TableRow for Item {
fn cells(&self) -> Vec<String> { vec![self.name.clone()] }
}
let state = DataGridState::new(
vec![Item { name: "A".into() }],
vec![Column::new("Name", Constraint::Min(10))],
);
assert_eq!(state.selected(), Some(0));Sourcepub fn selected_row(&self) -> Option<&T>
pub fn selected_row(&self) -> Option<&T>
Returns a reference to the currently selected row.
§Example
use envision::component::{DataGridState, TableRow, Column};
use ratatui::layout::Constraint;
#[derive(Clone)]
struct Item { name: String }
impl TableRow for Item {
fn cells(&self) -> Vec<String> { vec![self.name.clone()] }
}
let state = DataGridState::new(
vec![Item { name: "Alice".into() }],
vec![Column::new("Name", Constraint::Min(10))],
);
assert_eq!(state.selected_row().unwrap().name, "Alice");Sourcepub fn selected_item(&self) -> Option<&T>
pub fn selected_item(&self) -> Option<&T>
Returns a reference to the currently selected item.
§Example
use envision::component::{DataGridState, TableRow, Column};
use ratatui::layout::Constraint;
#[derive(Clone)]
struct Item { name: String }
impl TableRow for Item {
fn cells(&self) -> Vec<String> { vec![self.name.clone()] }
}
let state = DataGridState::new(
vec![Item { name: "Bob".into() }],
vec![Column::new("Name", Constraint::Min(10))],
);
assert_eq!(state.selected_item().unwrap().name, "Bob");Sourcepub fn set_selected(&mut self, index: Option<usize>)
pub fn set_selected(&mut self, index: Option<usize>)
Sets the selected row index.
The index is clamped to the valid range. Has no effect on empty grids. Cancels any active edit.
§Example
use envision::component::{DataGridState, TableRow, Column};
use ratatui::layout::Constraint;
#[derive(Clone)]
struct Item { name: String }
impl TableRow for Item {
fn cells(&self) -> Vec<String> { vec![self.name.clone()] }
}
let mut state = DataGridState::new(
vec![Item { name: "A".into() }, Item { name: "B".into() }],
vec![Column::new("Name", Constraint::Min(10))],
);
state.set_selected(Some(1));
assert_eq!(state.selected_index(), Some(1));Sourcepub fn selected_column(&self) -> usize
pub fn selected_column(&self) -> usize
Returns the currently selected column index.
Sourcepub fn is_editing(&self) -> bool
pub fn is_editing(&self) -> bool
Returns true if a cell is currently being edited.
§Example
use envision::component::{DataGridState, TableRow, Column};
use ratatui::layout::Constraint;
#[derive(Clone)]
struct Item { name: String }
impl TableRow for Item {
fn cells(&self) -> Vec<String> { vec![self.name.clone()] }
}
let state = DataGridState::new(
vec![Item { name: "A".into() }],
vec![Column::new("Name", Constraint::Min(10))],
);
assert!(!state.is_editing());Sourcepub fn editor_value(&self) -> &str
pub fn editor_value(&self) -> &str
Returns the current editor value (while editing).
§Example
use envision::component::{DataGridState, TableRow, Column};
use ratatui::layout::Constraint;
#[derive(Clone)]
struct Item { name: String }
impl TableRow for Item {
fn cells(&self) -> Vec<String> { vec![self.name.clone()] }
}
let state = DataGridState::new(
vec![Item { name: "A".into() }],
vec![Column::new("Name", Constraint::Min(10))],
);
assert_eq!(state.editor_value(), "");Sourcepub fn current_cell_value(&self) -> Option<String>
pub fn current_cell_value(&self) -> Option<String>
Returns the value of the currently selected cell.
§Example
use envision::component::{DataGridState, TableRow, Column};
use ratatui::layout::Constraint;
#[derive(Clone)]
struct Item { name: String }
impl TableRow for Item {
fn cells(&self) -> Vec<String> { vec![self.name.clone()] }
}
let state = DataGridState::new(
vec![Item { name: "Alice".into() }],
vec![Column::new("Name", Constraint::Min(10))],
);
assert_eq!(state.current_cell_value(), Some("Alice".to_string()));Sourcepub fn row_count(&self) -> usize
pub fn row_count(&self) -> usize
Returns the number of rows.
§Example
use envision::component::{DataGridState, TableRow, Column};
use ratatui::layout::Constraint;
#[derive(Clone)]
struct Item { name: String }
impl TableRow for Item {
fn cells(&self) -> Vec<String> { vec![self.name.clone()] }
}
let state = DataGridState::new(
vec![Item { name: "A".into() }, Item { name: "B".into() }],
vec![Column::new("Name", Constraint::Min(10))],
);
assert_eq!(state.row_count(), 2);Sourcepub fn column_count(&self) -> usize
pub fn column_count(&self) -> usize
Returns the number of columns.
§Example
use envision::component::{DataGridState, TableRow, Column};
use ratatui::layout::Constraint;
#[derive(Clone)]
struct Item { name: String }
impl TableRow for Item {
fn cells(&self) -> Vec<String> { vec![self.name.clone()] }
}
let state = DataGridState::new(
vec![Item { name: "A".into() }],
vec![
Column::new("Name", Constraint::Min(10)),
Column::new("Value", Constraint::Min(5)),
],
);
assert_eq!(state.column_count(), 2);Sourcepub fn is_empty(&self) -> bool
pub fn is_empty(&self) -> bool
Returns true if the grid has no rows.
§Example
use envision::component::{DataGridState, TableRow, Column};
#[derive(Clone)]
struct Item { name: String }
impl TableRow for Item {
fn cells(&self) -> Vec<String> { vec![self.name.clone()] }
}
let state: DataGridState<Item> = DataGridState::default();
assert!(state.is_empty());Sourcepub fn set_rows(&mut self, rows: Vec<T>)
pub fn set_rows(&mut self, rows: Vec<T>)
Sets the rows, resetting selection and cancelling any edit.
§Example
use envision::component::{DataGridState, TableRow, Column};
use ratatui::layout::Constraint;
#[derive(Clone)]
struct Item { name: String }
impl TableRow for Item {
fn cells(&self) -> Vec<String> { vec![self.name.clone()] }
}
let mut state = DataGridState::new(
vec![Item { name: "A".into() }],
vec![Column::new("Name", Constraint::Min(10))],
);
state.set_rows(vec![Item { name: "X".into() }, Item { name: "Y".into() }]);
assert_eq!(state.row_count(), 2);Source§impl<T: TableRow + 'static> DataGridState<T>
impl<T: TableRow + 'static> DataGridState<T>
Sourcepub fn update(&mut self, msg: DataGridMessage) -> Option<DataGridOutput<T>>
pub fn update(&mut self, msg: DataGridMessage) -> Option<DataGridOutput<T>>
Updates the state with a message, returning any output.
Trait Implementations§
Source§impl<T: Clone + TableRow> Clone for DataGridState<T>
impl<T: Clone + TableRow> Clone for DataGridState<T>
Source§fn clone(&self) -> DataGridState<T>
fn clone(&self) -> DataGridState<T>
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl<T: TableRow> Default for DataGridState<T>
impl<T: TableRow> Default for DataGridState<T>
Source§impl<'de, T> Deserialize<'de> for DataGridState<T>where
T: Deserialize<'de> + TableRow,
impl<'de, T> Deserialize<'de> for DataGridState<T>where
T: Deserialize<'de> + TableRow,
Source§fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
Auto Trait Implementations§
impl<T> Freeze for DataGridState<T>
impl<T> !RefUnwindSafe for DataGridState<T>
impl<T> Send for DataGridState<T>where
T: Send,
impl<T> Sync for DataGridState<T>where
T: Sync,
impl<T> Unpin for DataGridState<T>where
T: Unpin,
impl<T> UnsafeUnpin for DataGridState<T>
impl<T> !UnwindSafe for DataGridState<T>
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more