Packages

Multi-surface application runtime for Elixir. One TEA module renders to terminal, browser (LiveView), SSH, and MCP (agents). 30+ widgets, flexbox + CSS grid, AI agent runtime, distributed swarm with CRDTs, time-travel debugging, session recording, sandboxed REPL, and agentic commerce.

Current section

Files

Jump to
raxol examples components displays table_features_test.exs
Raw

examples/components/displays/table_features_test.exs

# This example demonstrates the Raxol.UI.Components.Data.Table component.
defmodule Raxol.Docs.Guides.Examples.Basic.TableFeaturesTest do
use Raxol.Core.Runtime.Application
import Raxol.View.Elements
defmodule State do
defstruct table_data: [],
selected_row: nil
end
@impl true
def init(_opts) do
initial_data = [
%{id: 1, name: "Alice", email: "alice@example.com", role: "Admin"},
%{id: 2, name: "Bob", email: "bob@example.com", role: "User"},
%{id: 3, name: "Charlie", email: "charlie@example.com", role: "User"},
%{id: 4, name: "Diana", email: "diana@example.com", role: "Moderator"}
]
%State{table_data: initial_data}
end
@impl true
def update(message, model) do
case message do
# Handle the :on_row_click event from the table
# Assumes the table sends {:row_clicked, row_data}
{:row_clicked, row_data} ->
%State{model | selected_row: row_data}
_ ->
model
end
end
@impl true
def view(model = %State{}) do
table_columns = [
# Optional width
%{id: :id, label: "ID", width: 50},
%{id: :name, label: "Name"},
%{id: :email, label: "Email"},
%{id: :role, label: "Role"}
]
view do
column(gap: 20, padding: 15) do
text(
content: "Table with Clickable Rows",
style: "font-size: 1.3em; font-weight: bold;"
)
table(
columns: table_columns,
data: model.table_data,
# Use the :id field as the unique key for rows
row_key: :id,
# Send {:row_clicked, row_data}
on_row_click: {:row_clicked},
# Example styling
style: "width: 500px; border-collapse: collapse;"
# Add other potential props like selectable: true, if supported
)
# Display selected row info
panel(
title: "Selected User Info",
style: "margin-top: 20px; width: 500px;"
) do
if model.selected_row do
column(gap: 5) do
text(content: "ID: #{model.selected_row.id}")
text(content: "Name: #{model.selected_row.name}")
text(content: "Email: #{model.selected_row.email}")
text(content: "Role: #{model.selected_row.role}")
end
else
text(content: "Click a row in the table to see details here.")
end
end
end
end
end
# Function to run the example directly
def main do
Raxol.start_link(__MODULE__, [])
# For CI/test/demo: sleep for 2 seconds, then exit. Adjust as needed.
Process.sleep(2000)
end
end
# To run this example: mix run -e "Raxol.Docs.Guides.Examples.Basic.TableFeaturesTest.main()"
# (Assuming Raxol is a dependency or mix project is set up)