canonrs-server 0.1.0

CanonRS server-side rendering support
use leptos::prelude::*;
use std::sync::Arc;
use super::{DataTableFull, DataTableColumn};

#[derive(Clone, PartialOrd, Ord, PartialEq, Eq)]
struct User {
    id: u32,
    name: String,
    email: String,
    role: String,
}

#[component]
pub fn BasicExample() -> impl IntoView {
    let users = vec![
        User { id: 1,  name: "Alice Johnson".into(),  email: "alice@example.com".into(),   role: "Admin".into() },
        User { id: 2,  name: "Bob Smith".into(),       email: "bob@example.com".into(),     role: "User".into() },
        User { id: 3,  name: "Carol Williams".into(),  email: "carol@example.com".into(),   role: "Editor".into() },
        User { id: 4,  name: "Dave Brown".into(),      email: "dave@example.com".into(),    role: "Admin".into() },
        User { id: 5,  name: "Eve Davis".into(),       email: "eve@example.com".into(),     role: "User".into() },
        User { id: 6,  name: "Frank Miller".into(),    email: "frank@example.com".into(),   role: "Viewer".into() },
        User { id: 7,  name: "Grace Lee".into(),       email: "grace@example.com".into(),   role: "Editor".into() },
        User { id: 8,  name: "Henry Wilson".into(),    email: "henry@example.com".into(),   role: "Admin".into() },
        User { id: 9,  name: "Iris Taylor".into(),     email: "iris@example.com".into(),    role: "User".into() },
        User { id: 10, name: "Jack Anderson".into(),   email: "jack@example.com".into(),    role: "Editor".into() },
        User { id: 11, name: "Karen Thomas".into(),    email: "karen@example.com".into(),   role: "Viewer".into() },
        User { id: 12, name: "Leo Jackson".into(),     email: "leo@example.com".into(),     role: "Admin".into() },
        User { id: 13, name: "Mia White".into(),       email: "mia@example.com".into(),     role: "User".into() },
        User { id: 14, name: "Noah Harris".into(),     email: "noah@example.com".into(),    role: "Editor".into() },
        User { id: 15, name: "Olivia Martin".into(),   email: "olivia@example.com".into(),  role: "Admin".into() },
    ];

    let columns = vec![
        DataTableColumn::new("id",    "ID",    |u: &User| u.id.to_string()),
        DataTableColumn::new("name",  "Name",  |u: &User| u.name.clone()),
        DataTableColumn::new("email", "Email", |u: &User| u.email.clone()),
        DataTableColumn::new("role",  "Role",  |u: &User| u.role.clone()),
    ];

    view! {
        <DataTableFull
            data=users
            columns=columns
            page_size=5
            selectable=true
            show_density=true
            expand_render=Arc::new(|u: &User| format!("ID: {} | Full info: {} - {} ({})", u.id, u.name, u.email, u.role))
        />
    }
}