package web
import (
"strconv"
"gl/application/explorer"
"gl/domain/ledger"
)
templ Page(title string, active string, locale Locale, englishURL string, persianURL string, content templ.Component) {
{ tr(locale, "general_ledger_explorer") }
{ tr(locale, "hero_line_one") }
{ tr(locale, "hero_line_two") }
{ tr(locale, "hero_description") }
@TransactionSearch("", locale)
{ tr(locale, "committed_journals") }{ count(data.Stats.JournalCount) }
{ tr(locale, "ledger_entries") }{ count(data.Stats.EntryCount) }
{ tr(locale, "tracked_accounts") }{ count(data.Stats.AccountCount) }
{ tr(locale, "last_recorded") }
{ tr(locale, "latest_activity") }
{ tr(locale, "newest_first") }
@JournalTable(data.Journals, locale)
}
templ AssetsContent(data explorer.Assets, locale Locale) {
{ tr(locale, "assets_explorer") }
{ tr(locale, "track_asset_ownership") }
{ tr(locale, "assets_description") }
{ tr(locale, "top_asset_holders") }
{ tr(locale, "holder_balance_scope") }
@HolderTable(data.TopHolders, locale)
}
templ HolderTable(holders []explorer.Holder, locale Locale) {
{ tr(locale, "holder_account") }
{ tr(locale, "inspect_holder") }
{ tr(locale, "holder_description") }
if data.Error != "" {
{ tr(locale, "account_unavailable") }{ data.Error }
} else if data.Account != nil {
{ tr(locale, "holder") }{ data.Account.Reference.OwnerID }
{ data.Account.Reference.OwnerType } · { tr(locale, "asset") } { strconv.FormatInt(data.Account.Reference.AssetID, 10) }
{ tr(locale, "combined_balance") }{ data.Account.Balance.String() }
{ tr(locale, "account_activity") }
{ tr(locale, "available_and_frozen") }
@JournalTable(data.Account.Journals, locale)
}
}
templ JournalTable(journals []ledger.Journal, locale Locale) {
{ tr(locale, "transaction_explorer") }
{ tr(locale, "trace_settlement") }
{ tr(locale, "transaction_description") }
@TransactionSearch(data.Query, locale)
if data.Error != "" {
{ tr(locale, "transaction_not_found") }{ data.Error }
}
if data.Query != "" && data.Error == "" {
for _, journal := range data.Journals {
@JournalCard(journal, locale)
}
}
if data.Listing != nil {
{ tr(locale, "latest_transactions") }
{ tr(locale, "page") } { strconv.Itoa(data.Listing.Filter.Page) }
@JournalTable(data.Listing.Journals, locale)
@Pagination(*data.Listing, locale)
}
}
templ Pagination(listing explorer.TransactionListing, locale Locale) {
}
templ JournalCard(journal ledger.Journal, locale Locale) {
{ tr(locale, "account_explorer") }
{ tr(locale, "rebuild_account") }
{ tr(locale, "account_description") }
if data.Error != "" {
{ tr(locale, "account_unavailable") }{ data.Error }
} else if data.Account != nil {
{ tr(locale, "ledger_identity") }{ accountName(data.Account.Reference, locale) }
{ data.Account.Reference.OwnerType } · { tr(locale, "asset") } { strconv.FormatInt(data.Account.Reference.AssetID, 10) }
{ tr(locale, "current_balance") }{ data.Account.Balance.String() }
{ tr(locale, "account_activity") }
{ strconv.Itoa(len(data.Account.Journals)) } { tr(locale, "journals") }
@JournalTable(data.Account.Journals, locale)
} else {
{ tr(locale, "choose_account") }
}
}
templ FailureContent(title string, message string, locale Locale) {
{ tr(locale, "explorer_error") }
{ title }
{ message }
}