defmodule GitGudWeb.RepoLive.Forks do
use GitGudWeb, :live_view
alias GitGud.Repositories
alias GitGud.Repositories.Storage
@impl true
def mount(%{"owner" => owner, "name" => name}, _session, socket) do
repo =
Repositories.get_repository_by_path!(owner, name)
|> GitGud.Repo.preload([:owner, :organization])
forks =
Repositories.list_forks(repo)
|> Enum.map(fn f -> Map.put(f, :handle, Storage.repo_handle(f)) end)
{:ok,
socket
|> assign(:repo, repo)
|> assign(:handle, Storage.repo_handle(repo))
|> GitGudWeb.RepoLive.Header.assign_chrome(repo)
|> assign(:forks, forks)
|> assign(:page_title, "Forks — #{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}
/>
<h1 class="text-xl font-semibold">Forks</h1>
<ul class="divide-y divide-base-300">
<li class="hidden only:block py-6 opacity-60 text-sm">No forks yet.</li>
<li :for={f <- @forks} class="py-3">
<.link navigate={~p"/r/#{f.handle}/#{f.name}"} class="font-mono link link-hover">
{f.handle}/{f.name}
</.link>
<p :if={f.description} class="text-xs opacity-70 mt-1">{f.description}</p>
</li>
</ul>
</div>
</Layouts.app>
"""
end
end
1.6 KiB · text
5af55d9