65 lines
1.4 KiB
Elixir
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
|