Skip to main content

yew_datatable_core/state/
data_table_state.rs

1//! Combined state for all table features.
2//!
3//! Aggregates all feature states into a single structure
4//! for easier management and passing around.
5
6use crate::features::aggregation::aggregation_state::AggregationState;
7use crate::features::column_ordering::column_ordering_state::ColumnOrderingState;
8use crate::features::column_pinning::column_pinning_state::ColumnPinningState;
9use crate::features::column_sizing::column_sizing_state::ColumnSizingState;
10use crate::features::column_visibility::column_visibility_state::ColumnVisibilityState;
11use crate::features::expanding::expanding_state::ExpandingState;
12use crate::features::filtering::filter_state::FilterState;
13use crate::features::grouping::grouping_state::GroupingState;
14use crate::features::pagination::pagination_state::PaginationState;
15use crate::features::row_selection::row_selection_state::RowSelectionState;
16use crate::features::sorting::sorting_state::SortingState;
17
18/// Combined state for all table features.
19///
20/// `DataTableState` aggregates all feature states into a single structure
21/// for easier management and passing around.
22#[derive(Debug, Clone, Default)]
23pub struct DataTableState {
24    /// Sorting state.
25    pub sorting: SortingState,
26
27    /// Filtering state.
28    pub filtering: FilterState,
29
30    /// Pagination state.
31    pub pagination: PaginationState,
32
33    /// Row selection state.
34    pub row_selection: RowSelectionState,
35
36    /// Row expansion state.
37    pub expanding: ExpandingState,
38
39    /// Column visibility state.
40    pub column_visibility: ColumnVisibilityState,
41
42    /// Column ordering state.
43    pub column_ordering: ColumnOrderingState,
44
45    /// Column pinning state.
46    pub column_pinning: ColumnPinningState,
47
48    /// Column sizing state.
49    pub column_sizing: ColumnSizingState,
50
51    /// Row grouping state.
52    pub grouping: GroupingState,
53
54    /// Aggregation state.
55    pub aggregation: AggregationState,
56}
57
58impl DataTableState {
59    /// Creates a new default table state.
60    ///
61    /// # Returns
62    ///
63    /// - `DataTableState`: A new state with all defaults applied.
64    pub fn new() -> Self {
65        Self::default()
66    }
67
68    /// Creates a table state builder.
69    ///
70    /// # Returns
71    ///
72    /// - `DataTableStateBuilder`: A new state builder instance.
73    pub fn builder() -> super::data_table_state_builder::DataTableStateBuilder {
74        super::data_table_state_builder::DataTableStateBuilder::new()
75    }
76
77    /// Resets all state to defaults.
78    pub fn reset_all(&mut self) {
79        // Reset each feature state individually.
80        self.sorting.reset();
81        self.filtering.reset();
82        self.pagination.reset();
83        self.row_selection.reset();
84        self.expanding.reset();
85        self.column_visibility.reset();
86        self.column_ordering.reset();
87        self.column_pinning.reset();
88        self.column_sizing.reset();
89        self.grouping.reset();
90        self.aggregation.reset();
91    }
92
93    /// Checks if any state has been modified from defaults.
94    ///
95    /// # Returns
96    ///
97    /// - `bool`: Whether any feature state differs from its default.
98    pub fn has_modifications(&self) -> bool {
99        // Check each feature state for modifications.
100        self.sorting.is_sorted()
101            || self.filtering.is_filtered()
102            || self.row_selection.has_selection()
103            || self.expanding.has_expanded()
104            || self.grouping.is_grouped()
105    }
106}