Available on crate feature
dio only.Expand description
§🧬 Table RS Dioxus Usage
Adding Table RS to your project is simple:
-
Make sure your project is set up with Dioxus. Refer to the Dioxus Getting Started Guide for setup instructions.
-
Add the table-rs library to your dependencies by including it in your
Cargo.tomlfile:cargo add table-rs --features=dio -
Import the
Tablecomponent into your Dioxus application.
§🛠️ Usage
Incorporating Table RS into your Dioxus app involves just a few steps:
-
Import the
Tablecomponent and types:use dioxus::prelude::*; use table_rs::dioxus::table::Table; use table_rs::dioxus::types::Column; use maplit::hashmap; -
Use the
Tablecomponent in your Dioxus app:use dioxus::prelude::*; use table_rs::dioxus::table::Table; use table_rs::dioxus::types::Column; use maplit::hashmap; fn App() -> Element { let data = vec![ hashmap! { "name" => "Ferris".to_string(), "email" => "ferris@opensass.org".to_string() }, hashmap! { "name" => "Ferros".to_string(), "email" => "ferros@opensass.org".to_string() }, hashmap! { "name" => "Crab".to_string(), "email" => "crab@opensass.org".to_string() }, ]; let columns = vec![ Column { id: "name", header: "Name", sortable: true, ..Default::default() }, Column { id: "email", header: "Email", sortable: false, ..Default::default() }, ]; rsx! { Table { data: data, columns: columns, } } }
§🔧 Props
§Table Component Props
| Prop | Type | Description | Default |
|---|---|---|---|
data | Vec<HashMap<&'static str, String>> | The row data to render. | [] |
columns | Vec<Column> | Column definitions. | [] |
page_size | usize | Number of rows per page. | 10 |
loading | bool | Show loading state if true. | false |
paginate | bool | Enable pagination. | false |
search | bool | Enable global search input. | false |
classes | TableClasses | CSS class overrides. | Default |
styles | HashMap<&'static str, &'static str> | Inline style overrides. | {} |
texts | TableTexts | Text customization for UI labels. | Default |
§Column Props
| Prop | Type | Description | Default |
|---|---|---|---|
id | &'static str | Column key (used to fetch from row data). | "" |
header | &'static str | Display name in the table header. | "" |
sortable | bool | Allow sorting on this column. | false |
style | Option<&'static str> | Inline CSS for the header. | Some(“padding: 8px; font-weight: 600; text-align: left;”) |
class | Option<&'static str> | Optional class name for this column. | Some(“table-header-cell”) |
§TableClasses
| Prop | Type | Description | Default |
|---|---|---|---|
container | &'static str | Outer container class. | "table-container" |
table | &'static str | Main table class. | "table" |
thead | &'static str | Table head (<thead>) class. | "thead" |
tbody | &'static str | Table body (<tbody>) class. | "tbody" |
row | &'static str | Row (<tr>) class. | "tr" |
header_cell | &'static str | Header cell (<th>) class. | "th" |
body_cell | &'static str | Body cell (<td>) class. | "td" |
loading_row | &'static str | Row shown when loading. | "loading-row" |
empty_row | &'static str | Row shown when no data is available. | "empty-row" |
search_input | &'static str | Search input field class. | "search-input" |
pagination | &'static str | Pagination controls wrapper. | "pagination-controls" |
pagination_button | &'static str | Pagination buttons. | "pagination-button" |
§TableTexts
| Prop | Type | Description | Default |
|---|---|---|---|
loading | &'static str | Text shown when loading. | "Loading..." |
empty | &'static str | Text when no data is present. | "No results found" |
search_placeholder | &'static str | Placeholder for search input. | "Search..." |
previous_button | &'static str | Label for previous page button. | "Previous" |
next_button | &'static str | Label for next page button. | "Next" |
page_indicator | &'static str | Format string for page indicator. | "Page {current} of {total}" |
§🧱 Style/Layout Structure
+-------------------------------------------------------------+
| [container] | <-- class: "table-container"
| |
| +-----------------------------------------------------+ |
| | [search_input] | | <-- class: "search-input"
| | (optional search <input> element) | |
| +-----------------------------------------------------+ |
| |
| +-----------------------------------------------------+ |
| | [table] | | <-- class: "table"
| | +--------------------[thead]--------------------+ | | <-- class: "thead"
| | | Column Headers (e.g., Name, Email) | | |
| | +-----------------------------------------------+ | |
| | +--------------------[tbody]--------------------+ | | <-- class: "tbody"
| | | Data rows (from `data` prop, each row = <tr>)| | |
| | +-----------------------------------------------+ | |
| +-----------------------------------------------------+ |
| |
| +-----------------------------------------------------+ |
| | [pagination] | | <-- class: "pagination-controls"
| | Page selector / next-prev buttons (if enabled) | |
| +-----------------------------------------------------+ |
+-------------------------------------------------------------+§💡 Notes
- The
datamust match theidvalues defined in eachColumn. - The
searchprop enables input-based filtering across all columns. - Pagination is controlled using the
page_sizeandpaginateprops. - Sorting is column-specific via
sortable = trueandon_sort_column. - All style classes can be customized via
TableClasses. - All texts are configurable via
TableTexts. - The component handles loading and empty states out-of-the-box.
- You can inject additional per-column styling via
Column.styleandColumn.class.