defmodule Web.AdminDashboardLive do use Web, :live_view def mount(_params, _session, socket) do {:ok, socket} end def handle_params(params, _uri, socket) do kind = socket.assigns.live_action {:ok, {posts, meta}} = Core.Posts.list_posts(kind, params) socket = socket |> assign( kind: kind, meta: meta ) |> stream(:posts, posts, reset: true) {:noreply, socket} end attr :post, Schema.Post, required: true defp post_status(%{post: %{published_at: nil, deleted_at: nil}} = assigns) do ~H""" draft """ end defp post_status(%{post: %{published_at: _, deleted_at: nil}} = assigns) do ~H""" published """ end defp post_status(assigns) do ~H""" deleted """ end attr :post, Schema.Post, required: true defp post_actions(assigns) do ~H""" <div class="flex flex-row gap-x-1"> <.link navigate={~p"/admin/posts/#{@post}"}>edit</.link> <.link :if={@post.published_at && is_nil(@post.deleted_at)} navigate={Web.Paths.public_post_path(@post)} > view </.link> </div> """ end defp build_path(:blog, meta), do: Flop.Phoenix.build_path(~p"/admin/writing", meta, for: Schema.Post) defp build_path(:status, meta), do: Flop.Phoenix.build_path(~p"/admin/microblog", meta, for: Schema.Post) end