defmodule AshHqWeb.Pages.Blog do @moduledoc "Blog page" use Phoenix.LiveComponent import AshHqWeb.Tails alias AshHqWeb.Components.Blog.Tag attr(:params, :map, default: %{}) def render(assigns) do ~H"""
<%= if @post do %>

<%= @post.title %>

<%= for tag <- @post.tag_names || [] do %> <% end %>
<%= @post.author %>
<%= @post.published_at |> DateTime.to_date() %>
<%= Phoenix.HTML.raw(@post.body_html) %>
<% else %> <%= if @tag do %>

Showing posts with tag: <%= @tag %>

<% else %>

Showing all posts

<% end %> <%= for post <- @posts do %>

<%= post.title %>

<%= post.author %>
<%= post.published_at |> DateTime.to_date() %>
<%= for tag <- post.tag_names || [] do %> <% end %>
<%= post.tag_line %>
Read
<% end %> <% end %>

All Tags:

<%= for tag <- @tags do %> <% end %>

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