2.2 KiB · text History 6280797
defmodule GitGudWeb.PrLive.History do
@moduledoc """
Everything recorded against one pull request, oldest first — pushes
to the head, renames, labels, state changes, moderation.
History only covers what happened after `events` started being
recorded; PRs opened before that show an empty timeline rather than
a reconstructed one.
"""
use GitGudWeb, :live_view
import GitGudWeb.EventComponents
alias GitGud.Events
alias GitGud.PullRequests
alias GitGud.Repositories
alias GitGud.Repositories.Storage
@impl true
def mount(%{"owner" => owner, "name" => name, "number" => number}, _session, socket) do
repo =
Repositories.get_repository_by_path!(owner, name)
|> GitGud.Repo.preload([:owner, :organization])
pr = PullRequests.get_pull_request!(repo, String.to_integer(number))
{:ok,
socket
|> assign(:repo, repo)
|> assign(:handle, Storage.repo_handle(repo))
|> GitGudWeb.RepoLive.Header.assign_chrome(repo)
|> assign(:pr, pr)
|> assign(:events, Events.list_for(pr))
|> assign(:page_title, "History · ##{pr.number} #{pr.title}")}
end
@impl true
def render(assigns) do
~H"""
<Layouts.app flash={@flash} current_scope={@current_scope}>
<div class="space-y-6">
<GitGudWeb.RepoLive.Header.header
repo={@repo}
handle={@handle}
current_scope={@current_scope}
has_packages?={@has_packages?}
can_admin?={@can_admin?}
latest_run={@latest_run}
open_pulls={@open_pulls}
/>
<header>
<p class="text-xs opacity-60">
<.link navigate={~p"/r/#{@handle}/#{@repo.name}/pulls"} class="link link-hover">
Back to pull requests
</.link>
</p>
<h1 class="text-2xl font-semibold">#{@pr.number}{@pr.title}</h1>
</header>
<GitGudWeb.PrNav.nav
handle={@handle}
repo={@repo}
pr={@pr}
active={:history}
comments_count={Enum.count(@pr.comments, &is_nil(&1.file_path))}
events_count={length(@events)}
/>
<.timeline events={@events} />
</div>
</Layouts.app>
"""
end
end