Skip to content

Latest commit

 

History

History
80 lines (64 loc) · 1.95 KB

README.md

File metadata and controls

80 lines (64 loc) · 1.95 KB

Yew Table

A simple table component for the Yew web framework.

Usage

Use the Table component by setting the columns, data and options properties:

impl Renderable<Model> for Model {
    fn view(&self) -> Html<Self> {
        // Define the columns. The first string is the field name, the second is the label.
        let columns = columns![
            ("id", "Id.")
            ("description", "Description")
            ("due_date", "Due date")
            ("status", "Status")
            ("is_favorite", "Favorite", "Fav.")
            ("is_archived", "Archived", "Arch.")
        ];

        let options = TableOptions {
            orderable: true,
        };

        html! {
            <>
                // Here, self.tasks is a vector of structs
                <Table<Task>: columns=columns, data=&self.tasks, options=Some(options),/>
            </>
        }
    }
}

Implement the TableData trait for the struct to be used:

#[derive(Default, Clone, PartialEq, Serialize)]
pub struct Task {
    pub id: String,
    // ...
}

impl TableData for Task {
    fn get_field_as_html(&self, field_name: &str) -> Html<Table<Self>> {
        match field_name {
            // Define how each field should be rendered. No restrictions.
            "id" => html! {
                { &self.id }
            },
            // ...
        }
    }

    fn get_field_as_value(&self, field_name: &str) -> TableResult<Value> {
        let value = match field_name {
            // Provide a processed version of your value. Keep the computation cheap! 
            "id" => serde_value::to_value(&self.id),
            // ...
        };
        Ok(value.unwrap())
    }
}

Example

An example Yew app showing a plain table can be found in the examples folder. Just run the contained run.sh script.

To-dos

  • Add sortability
  • Add searchability
  • Improve accessibility
  • Add pagination

License

MIT © 2019 Alexis Luengas