2.0 KiB · text History 6280797
defmodule GitGudWeb.IssueLive.History do
@moduledoc """
Everything recorded against one issue, oldest first.
History only covers what happened after `events` started being
recorded — issues opened before that show an empty timeline rather
than a reconstructed one.
"""
use GitGudWeb, :live_view
import GitGudWeb.EventComponents
alias GitGud.Events
alias GitGud.Issues
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])
issue = Issues.get_issue!(repo, String.to_integer(number))
{:ok,
socket
|> assign(:repo, repo)
|> assign(:handle, Storage.repo_handle(repo))
|> GitGudWeb.RepoLive.Header.assign_chrome(repo)
|> assign(:issue, issue)
|> assign(:events, Events.list_for(issue))
|> assign(:page_title, "History · ##{issue.number} #{issue.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}/issues/#{@issue.number}"}
class="link link-hover"
>
Back to #{@issue.number}
</.link>
</p>
<h1 class="text-2xl font-semibold">History</h1>
<p class="text-sm opacity-70 mt-1">#{@issue.number}{@issue.title}</p>
</header>
<.timeline events={@events} />
</div>
</Layouts.app>
"""
end
end