2.2 KiB · text 5af55d9
defmodule GitGudWeb.WikiLive.Index do
use GitGudWeb, :live_view
alias GitGud.Repositories
alias GitGud.Repositories.Storage
alias GitGud.Wikis
@impl true
def mount(%{"owner" => owner, "name" => name}, _session, socket) do
repo =
Repositories.get_repository_by_path!(owner, name)
|> GitGud.Repo.preload([:owner, :organization])
pages = Wikis.list_pages(repo)
{:ok,
socket
|> assign(:repo, repo)
|> assign(:handle, Storage.repo_handle(repo))
|> GitGudWeb.RepoLive.Header.assign_chrome(repo)
|> assign(:pages, pages)
|> assign(:initialized?, Wikis.initialized?(repo))
|> assign(:page_title, "Wiki — #{owner}/#{name}")}
end
@impl true
def render(assigns) do
~H"""
<Layouts.app flash={@flash} current_scope={@current_scope}>
<div class="space-y-4">
<GitGudWeb.RepoLive.Header.header
repo={@repo}
handle={@handle}
current_scope={@current_scope}
has_packages?={@has_packages?}
can_admin?={@can_admin?}
latest_run={@latest_run}
/>
<header class="flex items-center justify-between">
<h1 class="text-xl font-semibold">Wiki</h1>
<.link
navigate={~p"/r/#{@handle}/#{@repo.name}/wiki/_new"}
class="btn btn-primary btn-sm"
>
New page
</.link>
</header>
<%= if @pages == [] do %>
<div class="card bg-base-200 p-6">
<p class="opacity-70">
No wiki pages yet.
<.link
navigate={~p"/r/#{@handle}/#{@repo.name}/wiki/_new"}
class="link"
>
Create the first one.
</.link>
</p>
</div>
<% else %>
<ul class="divide-y divide-base-300">
<li :for={p <- @pages} class="py-2">
<.link
navigate={~p"/r/#{@handle}/#{@repo.name}/wiki/#{p.slug}"}
class="link link-hover font-mono"
>
{p.title}
</.link>
</li>
</ul>
<% end %>
</div>
</Layouts.app>
"""
end
end