defmodule AshHqWeb.Pages.Blog do @moduledoc "Blog page" use Surface.LiveComponent import AshHqWeb.Tails alias AshHqWeb.Components.Blog.Tag prop params, :map, default: %{} data post, :any, default: nil data posts, :any, default: [] data tag, :string data tags, :any, default: [] data slug, :string def render(assigns) do ~F"""
{#if @post}

{@post.title}

{#for tag <- @post.tag_names} {/for}
{@post.author}
{@post.published_at |> DateTime.to_date()}
{raw(@post.body_html)}
{#else} {#if @tag}

Showing posts with tag: {@tag}

{#else}

Showing all posts

{/if} {#for post <- @posts}

{post.title}

{post.author}
{post.published_at |> DateTime.to_date()}
{#for tag <- post.tag_names} {/for}
{post.tag_line}
Read
{/for} {/if}

All Tags:

{#for tag <- @tags} {/for}

Connect

""" end def update(assigns, socket) do {:ok, socket |> assign(assigns) |> assign_tags() |> assign_filters() |> assign_post() |> assign_posts()} end defp assign_post(socket) do if socket.assigns.params["slug"] do assign(socket, :post, AshHq.Blog.Post.by_slug!(socket.assigns.params["slug"])) else assign(socket, :post, nil) end end defp assign_posts(socket) do assign(socket, :posts, AshHq.Blog.Post.published!(%{tag: socket.assigns.tag})) end defp assign_filters(socket) do socket |> assign(:tag, socket.assigns.params["tag"]) |> assign(:slug, socket.assigns.params["slug"]) end defp assign_tags(socket) do socket |> assign(:tags, AshHq.Blog.Tag.read!()) end end