sloanelybutsurely.com/lib/web/live/admin_dashboard_live.ex

65 lines
1.4 KiB
Elixir

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