defmodule PostlandWeb.TimelineLive do
use PostlandWeb, :live_view
def render(assigns) do
~H"""
<.post_form post_content={@post} />
<.post_card post={post} />
"""
end
def mount(_params, _session, socket) do
{:ok, socket |> assign(:post, "") |> stream(:posts, Postland.Timeline.timeline())}
end
def handle_event("create_post", %{"post" => post}, socket) do
{:ok, results} = Postland.Activities.record_markdown_post(post)
new_posts =
results
|> Enum.filter(fn {_key, value} ->
is_struct(value, Postland.Object)
end)
socket =
socket
|> assign(:post, "")
|> then(fn socket ->
Enum.reduce(new_posts, socket, fn {_id, post}, socket ->
stream_insert(socket, :posts, post, at: 0)
end)
end)
{:noreply, socket}
end
def handle_event("change_post", %{"post" => post}, socket) do
{:noreply, socket |> assign(:post, post)}
end
end