defmodule MoonWeb.Examples.Design.TableExample.Stream do
@moduledoc false
use Moon.LiveView
use MoonWeb, :example
alias Moon.Design.Table
alias Moon.Design.Table.Column
alias Moon.Components.Renderers.Datetime
def mount(_params, _session, socket) do
{:ok, stream(socket, :models, models())}
end
defp models() do
Enum.map(1..5, fn x ->
%{
id: x,
name: "Name #{x}",
created_at: DateTime.add(DateTime.utc_now(), -3600 + x)
}
end)
end
def render(assigns) do
~F"""
"stream"}}
row_click="row_click"
>
{model.id}
{model.name}
"""
end
def handle_event("row_click", params, socket) do
data =
models()
|> Enum.map(&(("#{&1.id}" == params["selected"] && Map.put(&1, :is_selected, true)) || &1))
{:noreply, stream(socket, :models, data, reset: true)}
end
def code() do
"""
use Phoenix.LiveView
alias Moon.Design.Table
alias Moon.Design.Table.Column
alias Moon.Components.Renderers.Datetime
def mount(_params, _session, socket) do
{:ok, stream(socket, :models, models())}
end
defp models() do
Enum.map(1..5, fn x ->
%{
id: x,
name: "Name \#{x}",
created_at: DateTime.add(DateTime.utc_now(), -3600 + x)
}
end)
end
def render(assigns) do
~F\"""
"stream"}}>
{model.id}
{model.name}
\"""
end
def handle_event("row_click", params, socket) do
data = models()
|> Enum.map(&("\#{&1.id}" == params["selected"] && Map.put(&1, :is_selected, true) || &1))
{:noreply, stream(socket, :models, data, reset: true )}
end
"""
end
end