src/ClientApp/app/components/database/chain.page.html
<ng-container *ngIf="!error && !loading && !block && !tx">
<database-nav [dbid]="db.id" [dbname]="db.name" current="{{ 'db.chain.general.noInfo.NavTitle' | translate }}"></database-nav>
<div class="alert alert-warning">
{{ 'db.chain.general.noInfo.WarningText' | translate }}
<button class="btn btn-primary btn-sm" (click)="back()">{{ 'db.chain.general.noInfo.BackButtonText' | translate }}</button>
</div>
</ng-container>
<ng-container *ngIf="loading && !block && !tx">
<database-nav [dbid]="db.id" [dbname]="db.name" current="{{ 'db.chain.general.loading.NavTitle' | translate }}"></database-nav>
<div class="alert alert-info">
{{ 'db.chain.general.loading.InfoText' | translate }}
<button class="btn btn-primary btn-sm" (click)="back()">{{ 'db.chain.general.loading.BackButtonText' | translate }}</button>
</div>
</ng-container>
<ng-container *ngIf="error">
<database-nav [dbid]="db.id" [dbname]="db.name" current="{{ 'db.chain.general.error.NavTitle' | translate }}"></database-nav>
<div class="alert alert-danger">
{{ 'db.chain.general.error.WarningText' | translate }}
<button class="btn btn-success btn-sm" (click)="loadData()">{{ 'db.chain.general.error.LoadButtonText' | translate }}</button>
<button class="btn btn-primary btn-sm" (click)="back()">{{ 'db.chain.general.error.BackButtonText' | translate }}</button>
</div>
</ng-container>
<ng-container *ngIf="block">
<database-nav [dbid]="db.id" [dbname]="db.name" current="{{ 'db.nav.ChainBlock' | translate: {hash: (block.Hash | hashbeauty)} }}"></database-nav>
<div class="panel panel-info">
<div class="panel-heading">
<h3 class="panel-title">{{ 'db.chain.block.SummaryTitle' | translate }}</h3>
</div>
<table class="table">
<tbody>
<tr>
<td><strong>{{ 'db.chain.block.Hash' | translate }}</strong></td>
<td><a [routerLink]="['/database', db.id, 'chain', block.Hash]">{{block.Hash | hashbeauty}}</a></td>
</tr>
<tr>
<td><strong>{{ 'db.chain.block.PrevHash' | translate }}</strong></td>
<td>
<span class="text-muted" *ngIf="!block.PreviousBlockHash">{{ 'db.chain.block.GenesisBlockEmptyField' | translate }}</span>
<a *ngIf="block.PreviousBlockHash" [routerLink]="['/database', db.id, 'chain', block.PreviousBlockHash]">{{block.PreviousBlockHash | hashbeauty}}</a>
</td>
</tr>
<tr>
<td><strong>{{ 'db.chain.block.StateRoot' | translate }}</strong></td>
<td>{{block.StateRoot | hashbeauty}}</td>
</tr>
<tr>
<td><strong>{{ 'db.chain.block.TxRoot' | translate }}</strong></td>
<td>{{block.TxRoot | hashbeauty}}</td>
</tr>
<tr>
<td><strong>{{ 'db.chain.block.Time' | translate }}</strong></td>
<td>{{block.Time | date: "yyyy-MM-dd HH:mm:ss"}}</td>
</tr>
<tr>
<td><strong>{{ 'db.chain.block.BookKeeper' | translate }}</strong></td>
<td>{{block.BookKeeper | hashbeauty}}</td>
</tr>
<tr>
<td><strong>{{ 'db.chain.block.Height' | translate }}</strong></td>
<td>
<a class="btn btn-primary btn-xs" [routerLink]="['/database', db.id, 'chain', block.Height - 1]">{{ 'db.chain.block.Previous' | translate }}</a>
<a [routerLink]="['/database', db.id, 'chain', block.Height]">{{block.Height}}</a>
<a class="btn btn-primary btn-xs" [routerLink]="['/database', db.id, 'chain', block.Height + 1]">{{ 'db.chain.block.Next' | translate }}</a>
</td>
</tr>
</tbody>
</table>
<div class="panel-heading">
<h3 class="panel-title">{{ 'db.chain.block.TxsTitle' | translate }}</h3>
</div>
<table class="table">
<tbody>
<tr *ngFor="let tran of block.Txs">
<td><a [routerLink]="['/database', db.id, 'chain', tran.Hash]">{{tran.Hash | hashbeauty}}</a></td>
<td>
<ng-container [ngSwitch]="tran.Type">
<ng-template [ngSwitchCase]="'DataTx'">
{{ 'db.def.DataTxName' | translate }}
{{ 'db.chain.block.ActionTxSuffix' | translate: {length: tran.Actions?.length} }}
</ng-template>
<ng-template [ngSwitchCase]="'SchemaTx'">
{{ 'db.def.SchemaTxName' | translate }}
{{ 'db.chain.block.ActionTxSuffix' | translate: {length: tran.Actions?.length} }}
</ng-template>
<ng-template [ngSwitchCase]="'LockTx'">
{{ 'db.def.LockTxName' | translate }}
{{ 'db.chain.block.TargetTxSuffix' | translate: {length: tran.LockTargets?.length} }}
</ng-template>
</ng-container>
</td>
</tr>
</tbody>
</table>
<div class="panel-heading">
<h3 class="panel-title">{{ 'db.chain.block.DetailTitle' | translate }}</h3>
</div>
<div class="panel-body">
<database-action [dbid]="db.id" [txs]="block.Txs"></database-action>
</div>
</div>
</ng-container>
<ng-container *ngIf="tx">
<database-nav [dbid]="db.id" [dbname]="db.name" current="{{ 'db.nav.ChainTx' | translate: {hash: (tx.Hash | hashbeauty)} }}"></database-nav>
<div class="panel panel-info">
<div class="panel-heading">
<h3 class="panel-title">{{ 'db.chain.tx.SummaryTitle' | translate }}</h3>
</div>
<table class="table">
<tbody>
<tr>
<td><strong>{{ 'db.chain.tx.Hash' | translate }}</strong></td>
<td><a [routerLink]="['/database', db.id, 'chain', tx.Hash]">{{tx.Hash | hashbeauty}}</a></td>
</tr>
<!--<tr>
<td><strong>{{ 'db.chain.tx.Time' | translate }}</strong></td>
<td>(TBD)</td>
</tr>-->
<tr>
<td><strong>{{ 'db.chain.tx.Type' | translate }}</strong></td>
<td>
<ng-container [ngSwitch]="tx.Type">
<ng-template [ngSwitchCase]="'DataTx'">
{{ 'db.def.DataTxName' | translate }}
</ng-template>
<ng-template [ngSwitchCase]="'SchemaTx'">
{{ 'db.def.SchemaTxName' | translate }}
</ng-template>
<ng-template [ngSwitchCase]="'LockTx'">
{{ 'db.def.LockTxName' | translate }}
</ng-template>
</ng-container>
</td>
</tr>
<tr>
<td><strong>{{ 'db.chain.tx.Block' | translate }}</strong></td>
<td>
<a *ngIf="tx.Block"
[routerLink]="['/database', db.id, 'chain', tx.Block]">
{{tx.Block | hashbeauty}}
</a>
</td>
</tr>
<tr>
<td><strong>{{ 'db.chain.tx.WitnessBlock' | translate }}</strong></td>
<td>
<a *ngIf="tx.WitnessBlock"
[routerLink]="['/database', db.id, 'chain', tx.WitnessBlock]">
{{tx.WitnessBlock | hashbeauty}}
</a>
</td>
</tr>
<tr>
<td><strong>{{ 'db.chain.tx.Initiator' | translate }}</strong></td>
<td><span title="{{tx.Initiator}}">{{tx.Initiator | hashbeauty}}</span></td>
</tr>
</tbody>
</table>
<div class="panel-heading">
<h3 class="panel-title">{{ 'db.chain.tx.ActionsTitle' | translate }}</h3>
</div>
<div class="panel-body">
<database-action [dbid]="db.id" [txs]="[tx]"></database-action>
</div>
</div>
</ng-container>