defmodule Moon.Components.Table do @moduledoc false use Moon.StatelessComponent alias Moon.Components.Table.Paging alias Moon.Icon # import Moon.Helpers.MergeClass @doc "Params from LiveView mount(params, session, socket) that must be passed on" prop(limit, :integer, default: 10) prop(offset, :integer, default: 0) prop(selected, :string) prop(sort_key, :any) prop(sort_dir, :any, default: "ASC") @doc "The list of items to be rendered" prop(items, :generator, required: true) prop(row_click, :event) prop(paging_click, :event) prop(sorting_click, :event) prop(paging_info, :any) prop(class, :css_class) prop(row_class, :css_class) prop(id, :string) prop(even_row_class, :css_class, default: "bg-goku") prop(has_no_cell_borders, :boolean, default: false) @doc "The list of columns defining the Grid" slot(cols, generator_prop: :items) def render(assigns) do ~F"""
|
{col.label}
{#if col.sortable && "#{@sort_key}" == "#{col.name}"}
|
{/for}
|---|
| <#slot {col} generator_value={item} /> | {/for}