commit
0e82037fb9
@ -0,0 +1,46 @@ |
|||||||
|
defmodule BlockScoutWeb.AddressLogsController do |
||||||
|
@moduledoc """ |
||||||
|
Manages events logs tab. |
||||||
|
""" |
||||||
|
|
||||||
|
import BlockScoutWeb.AddressController, only: [transaction_count: 1, validation_count: 1] |
||||||
|
import BlockScoutWeb.Chain, only: [paging_options: 1, next_page_params: 3, split_list_by_page: 1] |
||||||
|
|
||||||
|
alias Explorer.{Chain, Market} |
||||||
|
alias Explorer.ExchangeRates.Token |
||||||
|
alias Indexer.Fetcher.CoinBalanceOnDemand |
||||||
|
|
||||||
|
use BlockScoutWeb, :controller |
||||||
|
|
||||||
|
def index(conn, %{"address_id" => address_hash_string} = params) do |
||||||
|
with {:ok, address_hash} <- Chain.string_to_address_hash(address_hash_string), |
||||||
|
{:ok, address} <- Chain.hash_to_address(address_hash) do |
||||||
|
logs_plus_one = Chain.address_to_logs(address, paging_options(params)) |
||||||
|
{results, next_page} = split_list_by_page(logs_plus_one) |
||||||
|
|
||||||
|
next_page_url = |
||||||
|
case next_page_params(next_page, results, params) do |
||||||
|
nil -> |
||||||
|
nil |
||||||
|
|
||||||
|
next_page_params -> |
||||||
|
address_logs_path(conn, :index, address, next_page_params) |
||||||
|
end |
||||||
|
|
||||||
|
render( |
||||||
|
conn, |
||||||
|
"index.html", |
||||||
|
address: address, |
||||||
|
logs: results, |
||||||
|
coin_balance_status: CoinBalanceOnDemand.trigger_fetch(address), |
||||||
|
exchange_rate: Market.get_exchange_rate(Explorer.coin()) || Token.null(), |
||||||
|
transaction_count: transaction_count(address), |
||||||
|
validation_count: validation_count(address), |
||||||
|
next_page_url: next_page_url |
||||||
|
) |
||||||
|
else |
||||||
|
_ -> |
||||||
|
not_found(conn) |
||||||
|
end |
||||||
|
end |
||||||
|
end |
@ -0,0 +1,82 @@ |
|||||||
|
<section class="container"> |
||||||
|
<%= render BlockScoutWeb.AddressView, "overview.html", assigns %> |
||||||
|
<div class="card"> |
||||||
|
<%= render BlockScoutWeb.AddressView, "_tabs.html", assigns %> |
||||||
|
|
||||||
|
<div class="card-body"> |
||||||
|
|
||||||
|
<h2 class="card-title"><%= gettext "Logs" %></h2> |
||||||
|
|
||||||
|
<%= if @next_page_url do %> |
||||||
|
<%= render BlockScoutWeb.CommonComponentsView, "_pagination_container.html", position: "top", cur_page_number: "1", show_pagination_limit: true, next_page_path: @next_page_url %> |
||||||
|
<% end %> |
||||||
|
|
||||||
|
<%= if !@next_page_url do %> |
||||||
|
<%= render BlockScoutWeb.CommonComponentsView, "_pagination_container.html", position: "top", cur_page_number: "1", show_pagination_limit: true %> |
||||||
|
<% end %> |
||||||
|
|
||||||
|
<%= if Enum.count(@logs) > 0 do %> |
||||||
|
<%= for log <- @logs do %> |
||||||
|
<div data-test="transaction_log" class="tile tile-muted"> |
||||||
|
<dl class="row"> |
||||||
|
<dt class="col-md-2"> <%= gettext "Transaction" %> </dt> |
||||||
|
<dd class="col-md-10"> |
||||||
|
<h3 class=""> |
||||||
|
<%= link( |
||||||
|
log.transaction, |
||||||
|
to: transaction_path(@conn, :show, log.transaction), |
||||||
|
"data-test": "log_address_link", |
||||||
|
"data-address-hash": log.transaction |
||||||
|
) %> |
||||||
|
</h3> |
||||||
|
</dd> |
||||||
|
<dt class="col-md-2"><%= gettext "Topics" %></dt> |
||||||
|
<dd class="col-md-10"> |
||||||
|
<div class="raw-transaction-log-topics"> |
||||||
|
<%= unless is_nil(log.first_topic) do %> |
||||||
|
<div class="text-dark"> |
||||||
|
<span class="text-dark">[0]</span> |
||||||
|
<%= log.first_topic %> |
||||||
|
</div> |
||||||
|
<% end %> |
||||||
|
<%= unless is_nil(log.second_topic) do %> |
||||||
|
<div class="text-dark"> |
||||||
|
<span class="">[1] </span> |
||||||
|
<%= log.second_topic %> |
||||||
|
</div> |
||||||
|
<% end %> |
||||||
|
<%= unless is_nil(log.third_topic) do %> |
||||||
|
<div class="text-dark"> |
||||||
|
<span>[2]</span> |
||||||
|
<%= log.third_topic %> |
||||||
|
</div> |
||||||
|
<% end %> |
||||||
|
<%= unless is_nil(log.fourth_topic) do %> |
||||||
|
<div class="text-dark"> |
||||||
|
<span>[3]</span> |
||||||
|
<%= log.fourth_topic %> |
||||||
|
</div> |
||||||
|
<% end %> |
||||||
|
</div> |
||||||
|
</dd> |
||||||
|
<dt class="col-md-2"> |
||||||
|
<%= gettext "Data" %> |
||||||
|
</dt> |
||||||
|
<dd class="col-md-10"> |
||||||
|
<%= unless is_nil(log.data) do %> |
||||||
|
<div class="text-dark raw-transaction-log-data"> |
||||||
|
<%= log.data %> |
||||||
|
</div> |
||||||
|
<% end %> |
||||||
|
</dd> |
||||||
|
</dl> |
||||||
|
</div> |
||||||
|
<% end %> |
||||||
|
<% else %> |
||||||
|
<div class="tile tile-muted text-center"> |
||||||
|
<span><%= gettext "There are no logs for this address." %></span> |
||||||
|
</div> |
||||||
|
<% end %> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
</section> |
@ -0,0 +1,3 @@ |
|||||||
|
defmodule BlockScoutWeb.AddressLogsView do |
||||||
|
use BlockScoutWeb, :view |
||||||
|
end |
Loading…
Reference in new issue