LND Pending tables fixed

This commit is contained in:
ShahanaFarooqui 2022-10-27 16:04:16 -07:00
parent 6163f24268
commit 44dbc2691d
33 changed files with 231 additions and 172 deletions

View File

@ -72,11 +72,11 @@ export const getPendingChannels = (req, res, next) => {
if (body.pending_open_channels && body.pending_open_channels.length > 0) { if (body.pending_open_channels && body.pending_open_channels.length > 0) {
(_a = body.pending_open_channels) === null || _a === void 0 ? void 0 : _a.map((channel) => promises.push(getAliasForChannel(req.session.selectedNode, channel.channel))); (_a = body.pending_open_channels) === null || _a === void 0 ? void 0 : _a.map((channel) => promises.push(getAliasForChannel(req.session.selectedNode, channel.channel)));
} }
if (body.pending_closing_channels && body.pending_closing_channels.length > 0) {
(_b = body.pending_closing_channels) === null || _b === void 0 ? void 0 : _b.map((channel) => promises.push(getAliasForChannel(req.session.selectedNode, channel.channel)));
}
if (body.pending_force_closing_channels && body.pending_force_closing_channels.length > 0) { if (body.pending_force_closing_channels && body.pending_force_closing_channels.length > 0) {
(_c = body.pending_force_closing_channels) === null || _c === void 0 ? void 0 : _c.map((channel) => promises.push(getAliasForChannel(req.session.selectedNode, channel.channel))); (_b = body.pending_force_closing_channels) === null || _b === void 0 ? void 0 : _b.map((channel) => promises.push(getAliasForChannel(req.session.selectedNode, channel.channel)));
}
if (body.pending_closing_channels && body.pending_closing_channels.length > 0) {
(_c = body.pending_closing_channels) === null || _c === void 0 ? void 0 : _c.map((channel) => promises.push(getAliasForChannel(req.session.selectedNode, channel.channel)));
} }
if (body.waiting_close_channels && body.waiting_close_channels.length > 0) { if (body.waiting_close_channels && body.waiting_close_channels.length > 0) {
(_d = body.waiting_close_channels) === null || _d === void 0 ? void 0 : _d.map((channel) => promises.push(getAliasForChannel(req.session.selectedNode, channel.channel))); (_d = body.waiting_close_channels) === null || _d === void 0 ? void 0 : _d.map((channel) => promises.push(getAliasForChannel(req.session.selectedNode, channel.channel)));

View File

@ -71,12 +71,12 @@ export const getPendingChannels = (req, res, next) => {
if (body.pending_open_channels && body.pending_open_channels.length > 0) { if (body.pending_open_channels && body.pending_open_channels.length > 0) {
body.pending_open_channels?.map((channel) => promises.push(getAliasForChannel(req.session.selectedNode, channel.channel))); body.pending_open_channels?.map((channel) => promises.push(getAliasForChannel(req.session.selectedNode, channel.channel)));
} }
if (body.pending_closing_channels && body.pending_closing_channels.length > 0) {
body.pending_closing_channels?.map((channel) => promises.push(getAliasForChannel(req.session.selectedNode, channel.channel)));
}
if (body.pending_force_closing_channels && body.pending_force_closing_channels.length > 0) { if (body.pending_force_closing_channels && body.pending_force_closing_channels.length > 0) {
body.pending_force_closing_channels?.map((channel) => promises.push(getAliasForChannel(req.session.selectedNode, channel.channel))); body.pending_force_closing_channels?.map((channel) => promises.push(getAliasForChannel(req.session.selectedNode, channel.channel)));
} }
if (body.pending_closing_channels && body.pending_closing_channels.length > 0) {
body.pending_closing_channels?.map((channel) => promises.push(getAliasForChannel(req.session.selectedNode, channel.channel)));
}
if (body.waiting_close_channels && body.waiting_close_channels.length > 0) { if (body.waiting_close_channels && body.waiting_close_channels.length > 0) {
body.waiting_close_channels?.map((channel) => promises.push(getAliasForChannel(req.session.selectedNode, channel.channel))); body.waiting_close_channels?.map((channel) => promises.push(getAliasForChannel(req.session.selectedNode, channel.channel)));
} }

View File

@ -67,4 +67,4 @@ export const routes: Routes = [
]; ];
// Export const routing: ModuleWithProviders<RouterModule> = RouterModule.forRoot(routes, { enableTracing: true }); // Export const routing: ModuleWithProviders<RouterModule> = RouterModule.forRoot(routes, { enableTracing: true });
export const routing: ModuleWithProviders<RouterModule> = RouterModule.forRoot(routes); export const routing: ModuleWithProviders<RouterModule> = RouterModule.forRoot(routes, { scrollPositionRestoration: 'enabled' });

View File

@ -1,6 +1,7 @@
div.bordered-box.table-actions-select.btn-action { div.bordered-box.table-actions-select.btn-action {
min-width: 13rem; min-width: 13rem;
width: 13rem; width: 13rem;
min-height: 3.6rem;
} }
button.mat-stroked-button.btn-action-copy { button.mat-stroked-button.btn-action-copy {

View File

@ -52,13 +52,11 @@
</ng-container> </ng-container>
<ng-container matColumnDef="delay"> <ng-container matColumnDef="delay">
<th mat-header-cell *matHeaderCellDef mat-sort-header arrowPosition="before" class="pl-1"> Delay </th> <th mat-header-cell *matHeaderCellDef mat-sort-header arrowPosition="before" class="pl-1"> Delay </th>
<td mat-cell *matCellDef="let hop" class="pl-1"><span fxLayoutAlign="end center"> {{hop?.delay | number}} </span> <td mat-cell *matCellDef="let hop" class="pl-1"><span fxLayoutAlign="end center"> {{hop?.delay | number}} </span></td>
</td>
</ng-container> </ng-container>
<ng-container matColumnDef="msatoshi"> <ng-container matColumnDef="msatoshi">
<th mat-header-cell *matHeaderCellDef mat-sort-header arrowPosition="before" class="pl-1"> Amount (Sats) </th> <th mat-header-cell *matHeaderCellDef mat-sort-header arrowPosition="before" class="pl-1"> Amount (Sats) </th>
<td mat-cell *matCellDef="let hop" class="pl-1"><span fxLayoutAlign="end center"> {{hop?.msatoshi/1000 | number}} <td mat-cell *matCellDef="let hop" class="pl-1"><span fxLayoutAlign="end center"> {{hop?.msatoshi/1000 | number}}</span></td>
</span></td>
</ng-container> </ng-container>
<ng-container matColumnDef="actions"> <ng-container matColumnDef="actions">
<th mat-header-cell *matHeaderCellDef class="pl-2 pr-3"> <th mat-header-cell *matHeaderCellDef class="pl-2 pr-3">

View File

@ -100,9 +100,9 @@
</button> </button>
<mat-menu #menuTransactions="matMenu" class="dashboard-vert-menu" xPosition="before"> <mat-menu #menuTransactions="matMenu" class="dashboard-vert-menu" xPosition="before">
<button mat-menu-item *ngFor="let goToOption of card.goToOptions; index as i" (click)="onNavigateTo(card.links[i])">{{goToOption}}</button> <button mat-menu-item *ngFor="let goToOption of card.goToOptions; index as i" (click)="onNavigateTo(card.links[i])">{{goToOption}}</button>
</mat-menu> </mat-menu>
</ng-template> </ng-template>
</mat-tab> </mat-tab>
</mat-tab-group> </mat-tab-group>
</span> </span>
<h3 *ngSwitchDefault>Error! Unable to find information!</h3> <h3 *ngSwitchDefault>Error! Unable to find information!</h3>

View File

@ -11,7 +11,7 @@
<mat-vertical-stepper [linear]="true" #stepper (selectionChange)="stepSelectionChanged($event)"> <mat-vertical-stepper [linear]="true" #stepper (selectionChange)="stepSelectionChanged($event)">
<mat-step [stepControl]="peerFormGroup" [editable]="flgEditable"> <mat-step [stepControl]="peerFormGroup" [editable]="flgEditable">
<form [formGroup]="peerFormGroup" fxLayout="column" fxLayout.gt-sm="row wrap" fxLayoutAlign="start" fxLayoutAlign.gt-sm="space-between" class="my-1"> <form [formGroup]="peerFormGroup" fxLayout="column" fxLayout.gt-sm="row wrap" fxLayoutAlign="start" fxLayoutAlign.gt-sm="space-between" class="my-1">
<ng-template matStepLabel>{{peerFormLabel}}</ng-template> <ng-template matStepLabel>{{peerFormLabel}}</ng-template>
<mat-form-field fxFlex="100"> <mat-form-field fxFlex="100">
<input autoFocus matInput placeholder="Lightning Address (pubkey OR pubkey@ip:port)" formControlName="peerAddress" tabindex="1" required> <input autoFocus matInput placeholder="Lightning Address (pubkey OR pubkey@ip:port)" formControlName="peerAddress" tabindex="1" required>
<mat-error *ngIf="peerFormGroup.controls.peerAddress.errors?.required">Address is required.</mat-error> <mat-error *ngIf="peerFormGroup.controls.peerAddress.errors?.required">Address is required.</mat-error>

View File

@ -108,7 +108,7 @@
<mat-option (click)="onInvoiceClick(invoice)">View Info</mat-option> <mat-option (click)="onInvoiceClick(invoice)">View Info</mat-option>
<mat-option (click)="onRefreshInvoice(invoice)">Refresh</mat-option> <mat-option (click)="onRefreshInvoice(invoice)">Refresh</mat-option>
</mat-select> </mat-select>
</div> </div>
</td> </td>
</ng-container> </ng-container>
<ng-container matColumnDef="no_invoice"> <ng-container matColumnDef="no_invoice">

View File

@ -66,7 +66,7 @@
<mat-option (click)="onRePayOffer(offer)">Pay Again</mat-option> <mat-option (click)="onRePayOffer(offer)">Pay Again</mat-option>
<mat-option (click)="onDeleteBookmark(offer)">Delete Bookmark</mat-option> <mat-option (click)="onDeleteBookmark(offer)">Delete Bookmark</mat-option>
</mat-select> </mat-select>
</div> </div>
</td> </td>
</ng-container> </ng-container>
<ng-container matColumnDef="no_offer"> <ng-container matColumnDef="no_offer">

View File

@ -69,7 +69,7 @@
<mat-option *ngIf="offer.active" (click)="onDisableOffer(offer)">Disable Offer</mat-option> <mat-option *ngIf="offer.active" (click)="onDisableOffer(offer)">Disable Offer</mat-option>
<mat-option *ngIf="offer.active" (click)="onPrintOffer(offer)">Export QR code</mat-option> <mat-option *ngIf="offer.active" (click)="onPrintOffer(offer)">Export QR code</mat-option>
</mat-select> </mat-select>
</div> </div>
</td> </td>
</ng-container> </ng-container>
<ng-container matColumnDef="no_offer"> <ng-container matColumnDef="no_offer">

View File

@ -39,7 +39,7 @@
</ng-container> </ng-container>
<ng-container matColumnDef="actions"> <ng-container matColumnDef="actions">
<th mat-header-cell *matHeaderCellDef class="pl-1"> <th mat-header-cell *matHeaderCellDef class="pl-1">
<div class="bordered-box table-actions-select btn-action" fxLayoutAlign="center center">Actions</div> <div class="bordered-box table-actions-select btn-action" fxLayoutAlign="center center">Actions</div>
</th> </th>
<td mat-cell *matCellDef="let address" class="pl-1"> <td mat-cell *matCellDef="let address" class="pl-1">
<span fxLayoutAlign="end center"> <span fxLayoutAlign="end center">

View File

@ -1,10 +1,11 @@
div.bordered-box.table-actions-select.btn-action { div.bordered-box.table-actions-select.btn-action {
min-width: 13rem; min-width: 13rem;
width: 13rem; width: 13rem;
} min-height: 3.6rem;
}
button.mat-stroked-button.btn-action-copy { button.mat-stroked-button.btn-action-copy {
min-width: 13rem; min-width: 13rem;
width: 13rem; width: 13rem;
} }

View File

@ -11,7 +11,7 @@
<mat-vertical-stepper [linear]="true" #stepper (selectionChange)="stepSelectionChanged($event)"> <mat-vertical-stepper [linear]="true" #stepper (selectionChange)="stepSelectionChanged($event)">
<mat-step [stepControl]="peerFormGroup" [editable]="flgEditable"> <mat-step [stepControl]="peerFormGroup" [editable]="flgEditable">
<form [formGroup]="peerFormGroup" fxLayout="column" fxLayout.gt-sm="row wrap" fxLayoutAlign="start" fxLayoutAlign.gt-sm="space-between" class="my-1"> <form [formGroup]="peerFormGroup" fxLayout="column" fxLayout.gt-sm="row wrap" fxLayoutAlign="start" fxLayoutAlign.gt-sm="space-between" class="my-1">
<ng-template matStepLabel>{{peerFormLabel}}</ng-template> <ng-template matStepLabel>{{peerFormLabel}}</ng-template>
<mat-form-field fxFlex="100"> <mat-form-field fxFlex="100">
<input autoFocus matInput placeholder="Lightning Address (pubkey OR pubkey@ip:port)" formControlName="peerAddress" tabindex="1" required> <input autoFocus matInput placeholder="Lightning Address (pubkey OR pubkey@ip:port)" formControlName="peerAddress" tabindex="1" required>
<mat-error *ngIf="peerFormGroup.controls.peerAddress.errors?.required">Address is required.</mat-error> <mat-error *ngIf="peerFormGroup.controls.peerAddress.errors?.required">Address is required.</mat-error>

View File

@ -102,7 +102,7 @@
<mat-option (click)="onInvoiceClick(invoice)">View Info</mat-option> <mat-option (click)="onInvoiceClick(invoice)">View Info</mat-option>
<mat-option (click)="onRefreshInvoice(invoice)">Refresh</mat-option> <mat-option (click)="onRefreshInvoice(invoice)">Refresh</mat-option>
</mat-select> </mat-select>
</div> </div>
</td> </td>
</ng-container> </ng-container>
<ng-container matColumnDef="no_invoice"> <ng-container matColumnDef="no_invoice">

View File

@ -47,7 +47,7 @@
</ng-container> </ng-container>
<ng-container matColumnDef="actions"> <ng-container matColumnDef="actions">
<th mat-header-cell *matHeaderCellDef class="pl-1"> <th mat-header-cell *matHeaderCellDef class="pl-1">
<div class="bordered-box table-actions-select btn-action" fxLayoutAlign="center center">Actions</div> <div class="bordered-box table-actions-select btn-action" fxLayoutAlign="center center">Actions</div>
</th> </th>
<td mat-cell *matCellDef="let address" class="pl-1"> <td mat-cell *matCellDef="let address" class="pl-1">
<span fxLayoutAlign="end center"> <span fxLayoutAlign="end center">

View File

@ -1,6 +1,7 @@
div.bordered-box.table-actions-select.btn-action { div.bordered-box.table-actions-select.btn-action {
min-width: 13rem; min-width: 13rem;
width: 13rem; width: 13rem;
min-height: 3.6rem;
} }
button.mat-stroked-button.btn-action-copy { button.mat-stroked-button.btn-action-copy {

View File

@ -36,7 +36,7 @@
<td mat-cell *matCellDef="let utxo" class="pl-1"> <td mat-cell *matCellDef="let utxo" class="pl-1">
<span fxLayout="row" class="ellipsis-parent" [ngStyle]="{'max-width': (screenSize === screenSizeEnum.XS) ? '10rem' : '20rem'}"> <span fxLayout="row" class="ellipsis-parent" [ngStyle]="{'max-width': (screenSize === screenSizeEnum.XS) ? '10rem' : '20rem'}">
<span class="ellipsis-child">{{utxo.label}}</span> <span class="ellipsis-child">{{utxo.label}}</span>
</span> </span>
</td> </td>
</ng-container> </ng-container>
<ng-container matColumnDef="address_type"> <ng-container matColumnDef="address_type">
@ -52,7 +52,7 @@
<td mat-cell *matCellDef="let utxo" class="pl-1"> <td mat-cell *matCellDef="let utxo" class="pl-1">
<span fxLayout="row" class="ellipsis-parent" [ngStyle]="{'max-width': (screenSize === screenSizeEnum.XS) ? '10rem' : '20rem'}"> <span fxLayout="row" class="ellipsis-parent" [ngStyle]="{'max-width': (screenSize === screenSizeEnum.XS) ? '10rem' : '20rem'}">
<span class="ellipsis-child">{{utxo?.address}}</span> <span class="ellipsis-child">{{utxo?.address}}</span>
</span> </span>
</td> </td>
</ng-container> </ng-container>
<ng-container matColumnDef="amount_sat"> <ng-container matColumnDef="amount_sat">

View File

@ -25,7 +25,7 @@
<mat-step [stepControl]="inputFormGroup" [editable]="flgEditable"> <mat-step [stepControl]="inputFormGroup" [editable]="flgEditable">
<form [formGroup]="inputFormGroup" fxLayout="column" fxLayout.gt-sm="row wrap" fxLayoutAlign="start" fxLayoutAlign.gt-sm="space-between" class="my-1"> <form [formGroup]="inputFormGroup" fxLayout="column" fxLayout.gt-sm="row wrap" fxLayoutAlign="start" fxLayoutAlign.gt-sm="space-between" class="my-1">
<ng-template matStepLabel>{{inputFormLabel}}</ng-template> <ng-template matStepLabel>{{inputFormLabel}}</ng-template>
<div fxLayout="column" fxLayout.gt-sm="row wrap" fxFlex="100" fxLayoutAlign="space-between stretch"> <div fxLayout="column" fxLayout.gt-sm="row wrap" fxFlex="100" fxLayoutAlign="space-between stretch">
<mat-form-field fxFlex="48"> <mat-form-field fxFlex="48">
<input autoFocus matInput placeholder="Amount" type="number" [step]="100" tabindex="1" formControlName="rebalanceAmount" required> <input autoFocus matInput placeholder="Amount" type="number" [step]="100" tabindex="1" formControlName="rebalanceAmount" required>
<mat-hint>(Local Bal: {{selChannel?.local_balance}}, Remaining: {{selChannel?.local_balance - ((inputFormGroup.controls.rebalanceAmount.value) ? inputFormGroup.controls.rebalanceAmount.value : 0)}})</mat-hint> <mat-hint>(Local Bal: {{selChannel?.local_balance}}, Remaining: {{selChannel?.local_balance - ((inputFormGroup.controls.rebalanceAmount.value) ? inputFormGroup.controls.rebalanceAmount.value : 0)}})</mat-hint>
@ -65,7 +65,7 @@
<mat-error *ngIf="feeFormGroup.controls.feeLimit.errors?.required">{{feeFormGroup.controls.selFeeLimitType.value ? feeFormGroup.controls.selFeeLimitType.value.placeholder : feeLimitTypes[0].placeholder}} is required.</mat-error> <mat-error *ngIf="feeFormGroup.controls.feeLimit.errors?.required">{{feeFormGroup.controls.selFeeLimitType.value ? feeFormGroup.controls.selFeeLimitType.value.placeholder : feeLimitTypes[0].placeholder}} is required.</mat-error>
<mat-error *ngIf="feeFormGroup.controls.feeLimit.errors?.min">{{feeFormGroup.controls.selFeeLimitType.value ? feeFormGroup.controls.selFeeLimitType.value.placeholder : feeLimitTypes[0].placeholder}} must be a positive number.</mat-error> <mat-error *ngIf="feeFormGroup.controls.feeLimit.errors?.min">{{feeFormGroup.controls.selFeeLimitType.value ? feeFormGroup.controls.selFeeLimitType.value.placeholder : feeLimitTypes[0].placeholder}} must be a positive number.</mat-error>
</mat-form-field> </mat-form-field>
</div> </div>
</div> </div>
<div class="mt-2" fxLayout="row" fxLayoutAlign="start center" fxFlex="100"> <div class="mt-2" fxLayout="row" fxLayoutAlign="start center" fxFlex="100">
<button mat-button color="primary" tabindex="8" type="submit" (click)="onRebalance()">Rebalance</button> <button mat-button color="primary" tabindex="8" type="submit" (click)="onRebalance()">Rebalance</button>

View File

@ -10,58 +10,70 @@
<mat-progress-bar *ngIf="apiCallStatus.status === apiCallStatusEnum.INITIATED" mode="indeterminate"></mat-progress-bar> <mat-progress-bar *ngIf="apiCallStatus.status === apiCallStatusEnum.INITIATED" mode="indeterminate"></mat-progress-bar>
<table mat-table #table fxFlex="100" [dataSource]="pendingOpenChannels" matSort [ngClass]="{'error-border bordered-box': errorMessage !== '','bordered-box': true}"> <table mat-table #table fxFlex="100" [dataSource]="pendingOpenChannels" matSort [ngClass]="{'error-border bordered-box': errorMessage !== '','bordered-box': true}">
<ng-container matColumnDef="remote_alias"> <ng-container matColumnDef="remote_alias">
<mat-header-cell *matHeaderCellDef mat-sort-header> Peer </mat-header-cell> <th mat-header-cell *matHeaderCellDef mat-sort-header> Peer </th>
<mat-cell *matCellDef="let channel" [ngStyle]="{'max-width': (screenSize === screenSizeEnum.XS) ? '10rem' : '20rem'}">{{channel.channel.remote_alias}}</mat-cell> <td mat-cell *matCellDef="let channel">
<div class="ellipsis-parent" [ngStyle]="{'max-width': (screenSize === screenSizeEnum.XS) ? '10rem' : '20rem'}">
<span class="ellipsis-child">{{channel.channel.remote_alias}}</span>
</div>
</td>
</ng-container> </ng-container>
<ng-container matColumnDef="remote_node_pub"> <ng-container matColumnDef="remote_node_pub">
<mat-header-cell *matHeaderCellDef mat-sort-header> Pubkey </mat-header-cell> <th mat-header-cell *matHeaderCellDef mat-sort-header> Pubkey </th>
<mat-cell *matCellDef="let channel" [ngStyle]="{'max-width': (screenSize === screenSizeEnum.XS) ? '10rem' : '20rem'}">{{channel.channel.remote_node_pub}}</mat-cell> <td mat-cell *matCellDef="let channel">
<div class="ellipsis-parent" [ngStyle]="{'max-width': (screenSize === screenSizeEnum.XS) ? '10rem' : '20rem'}">
<span class="ellipsis-child">{{channel.channel.remote_node_pub}}</span>
</div>
</td>
</ng-container> </ng-container>
<ng-container matColumnDef="channel_point"> <ng-container matColumnDef="channel_point">
<mat-header-cell *matHeaderCellDef mat-sort-header> Channel </mat-header-cell> <th mat-header-cell *matHeaderCellDef mat-sort-header> Channel </th>
<mat-cell *matCellDef="let channel" [ngStyle]="{'max-width': (screenSize === screenSizeEnum.XS) ? '10rem' : '20rem'}">{{channel.channel.channel_point}}</mat-cell> <td mat-cell *matCellDef="let channel">
<div class="ellipsis-parent" [ngStyle]="{'max-width': (screenSize === screenSizeEnum.XS) ? '10rem' : '20rem'}">
<span class="ellipsis-child">{{channel.channel.channel_point}}</span>
</div>
</td>
</ng-container> </ng-container>
<ng-container matColumnDef="initiator"> <ng-container matColumnDef="initiator">
<mat-header-cell *matHeaderCellDef mat-sort-header> Initiator </mat-header-cell> <th mat-header-cell *matHeaderCellDef mat-sort-header> Initiator </th>
<mat-cell *matCellDef="let channel">{{channel.channel.initiator}}</mat-cell> <td mat-cell *matCellDef="let channel">{{channel.channel.initiator | camelcaseWithReplace:'initiator_'}}</td>
</ng-container> </ng-container>
<ng-container matColumnDef="commitment_type"> <ng-container matColumnDef="commitment_type">
<mat-header-cell *matHeaderCellDef mat-sort-header> Commitment Type </mat-header-cell> <th mat-header-cell *matHeaderCellDef mat-sort-header> Commitment Type </th>
<mat-cell *matCellDef="let channel" [ngStyle]="{'max-width': (screenSize === screenSizeEnum.XS) ? '10rem' : '20rem'}">{{channel.channel.commitment_type}}</mat-cell> <td mat-cell *matCellDef="let channel">{{channel.channel.commitment_type | camelcaseWithReplace:'commitment_type':'_'}}</td>
</ng-container> </ng-container>
<ng-container matColumnDef="confirmation_height"> <ng-container matColumnDef="confirmation_height">
<mat-header-cell fxLayoutAlign="end center" *matHeaderCellDef mat-sort-header arrowPosition="before">Confirmation Height</mat-header-cell> <th mat-header-cell *matHeaderCellDef mat-sort-header arrowPosition="before">Confirmation Height</th>
<mat-cell fxLayoutAlign="end center" *matCellDef="let channel">{{channel.confirmation_height | number}}</mat-cell> <td mat-cell *matCellDef="let channel" class="pl-1"><span fxLayoutAlign="end center"> {{channel.confirmation_height | number}}</span></td>
</ng-container> </ng-container>
<ng-container matColumnDef="commit_fee"> <ng-container matColumnDef="commit_fee">
<mat-header-cell fxLayoutAlign="end center" *matHeaderCellDef mat-sort-header arrowPosition="before">Commit Fee (Sats) </mat-header-cell> <th mat-header-cell *matHeaderCellDef mat-sort-header arrowPosition="before">Commit Fee (Sats) </th>
<mat-cell fxLayoutAlign="end center" *matCellDef="let channel">{{channel.commit_fee | number}}</mat-cell> <td mat-cell *matCellDef="let channel" class="pl-1"><span fxLayoutAlign="end center">{{channel.commit_fee | number}}</span></td>
</ng-container> </ng-container>
<ng-container matColumnDef="commit_weight"> <ng-container matColumnDef="commit_weight">
<mat-header-cell fxLayoutAlign="end center" *matHeaderCellDef mat-sort-header arrowPosition="before">Commit Weight </mat-header-cell> <th mat-header-cell *matHeaderCellDef mat-sort-header arrowPosition="before">Commit Weight </th>
<mat-cell fxLayoutAlign="end center" *matCellDef="let channel">{{channel.commit_weight | number}}</mat-cell> <td mat-cell *matCellDef="let channel" class="pl-1"><span fxLayoutAlign="end center">{{channel.commit_weight | number}}</span></td>
</ng-container> </ng-container>
<ng-container matColumnDef="fee_per_kw"> <ng-container matColumnDef="fee_per_kw">
<mat-header-cell fxLayoutAlign="end center" *matHeaderCellDef mat-sort-header arrowPosition="before">Fee/KW</mat-header-cell> <th mat-header-cell *matHeaderCellDef mat-sort-header arrowPosition="before">Fee/KW</th>
<mat-cell fxLayoutAlign="end center" *matCellDef="let channel">{{channel.channel.fee_per_kw | number}}</mat-cell> <td mat-cell *matCellDef="let channel" class="pl-1"><span fxLayoutAlign="end center">{{channel.fee_per_kw | number}}</span></td>
</ng-container> </ng-container>
<ng-container matColumnDef="capacity"> <ng-container matColumnDef="capacity">
<mat-header-cell fxLayoutAlign="end center" *matHeaderCellDef mat-sort-header arrowPosition="before">Capacity (Sats)</mat-header-cell> <th mat-header-cell *matHeaderCellDef mat-sort-header arrowPosition="before">Capacity (Sats)</th>
<mat-cell fxLayoutAlign="end center" *matCellDef="let channel">{{channel.channel.capacity | number}}</mat-cell> <td mat-cell *matCellDef="let channel" class="pl-1"><span fxLayoutAlign="end center">{{channel.channel.capacity | number}}</span></td>
</ng-container> </ng-container>
<ng-container matColumnDef="local_balance"> <ng-container matColumnDef="local_balance">
<mat-header-cell fxLayoutAlign="end center" *matHeaderCellDef mat-sort-header arrowPosition="before">Local Balance (Sats)</mat-header-cell> <th mat-header-cell *matHeaderCellDef mat-sort-header arrowPosition="before">Local Balance (Sats)</th>
<mat-cell fxLayoutAlign="end center" *matCellDef="let channel">{{channel.channel.local_balance | number}}</mat-cell> <td mat-cell *matCellDef="let channel" class="pl-1"><span fxLayoutAlign="end center">{{channel.channel.local_balance | number}}</span></td>
</ng-container> </ng-container>
<ng-container matColumnDef="remote_balance"> <ng-container matColumnDef="remote_balance">
<mat-header-cell fxLayoutAlign="end center" *matHeaderCellDef mat-sort-header arrowPosition="before">Remote Balance (Sats)</mat-header-cell> <th mat-header-cell *matHeaderCellDef mat-sort-header arrowPosition="before">Remote Balance (Sats)</th>
<mat-cell fxLayoutAlign="end center" *matCellDef="let channel">{{channel.channel.remote_balance | number}}</mat-cell> <td mat-cell *matCellDef="let channel" class="pl-1"><span fxLayoutAlign="end center">{{channel.channel.remote_balance | number}}</span></td>
</ng-container> </ng-container>
<ng-container matColumnDef="actions"> <ng-container matColumnDef="actions">
<mat-header-cell fxLayoutAlign="end center" class="pl-3 pr-4" *matHeaderCellDef> <th mat-header-cell *matHeaderCellDef class="pl-2">
<div class="bordered-box table-actions-select" fxLayoutAlign="center center">Actions</div> <div class="bordered-box table-actions-select" fxLayoutAlign="center center">Actions</div>
</mat-header-cell> </th>
<mat-cell fxLayoutAlign="end center" *matCellDef="let channel" class="px-3"> <td mat-cell fxLayoutAlign="end center" *matCellDef="let channel" class="pl-2">
<div class="bordered-box table-actions-select" fxLayoutAlign="center center"> <div class="bordered-box table-actions-select" fxLayoutAlign="center center">
<mat-select placeholder="Actions" tabindex="1" class="mr-0"> <mat-select placeholder="Actions" tabindex="1" class="mr-0">
<mat-select-trigger></mat-select-trigger> <mat-select-trigger></mat-select-trigger>
@ -69,7 +81,7 @@
<mat-option (click)="onBumpFee(channel)">Bump Fee</mat-option> <mat-option (click)="onBumpFee(channel)">Bump Fee</mat-option>
</mat-select> </mat-select>
</div> </div>
</mat-cell> </td>
</ng-container> </ng-container>
<ng-container matColumnDef="no_pending_open"> <ng-container matColumnDef="no_pending_open">
<td mat-footer-cell *matFooterCellDef colspan="4"> <td mat-footer-cell *matFooterCellDef colspan="4">
@ -79,10 +91,10 @@
</td> </td>
</ng-container> </ng-container>
<tr mat-footer-row fxLayoutAlign="start center" *matFooterRowDef="['no_pending_open']" [ngClass]="{'display-none': pendingOpenChannels && pendingOpenChannels?.data && pendingOpenChannels?.data?.length>0}"></tr> <tr mat-footer-row fxLayoutAlign="start center" *matFooterRowDef="['no_pending_open']" [ngClass]="{'display-none': pendingOpenChannels && pendingOpenChannels?.data && pendingOpenChannels?.data?.length>0}"></tr>
<mat-header-row *matHeaderRowDef="displayedOpenColumns"></mat-header-row> <tr mat-header-row *matHeaderRowDef="displayedOpenColumns"></tr>
<mat-row fxLayoutAlign="stretch stretch" *matRowDef="let row; columns: displayedOpenColumns;"></mat-row> <tr mat-row *matRowDef="let row; columns: displayedOpenColumns;"></tr>
</table> </table>
</div> </div>
</mat-expansion-panel> </mat-expansion-panel>
<mat-progress-bar *ngIf="apiCallStatus.status === apiCallStatusEnum.INITIATED" mode="indeterminate"></mat-progress-bar> <mat-progress-bar *ngIf="apiCallStatus.status === apiCallStatusEnum.INITIATED" mode="indeterminate"></mat-progress-bar>
<mat-expansion-panel fxLayout="column" class="flat-expansion-panel"> <mat-expansion-panel fxLayout="column" class="flat-expansion-panel">
@ -92,64 +104,80 @@
<div [perfectScrollbar] fxLayout="column" fxLayoutAlign="start center" fxFlex="100" class="table-container"> <div [perfectScrollbar] fxLayout="column" fxLayoutAlign="start center" fxFlex="100" class="table-container">
<table mat-table #table [dataSource]="pendingForceClosingChannels" matSort [ngClass]="{'error-border bordered-box': errorMessage !== '','bordered-box': true}"> <table mat-table #table [dataSource]="pendingForceClosingChannels" matSort [ngClass]="{'error-border bordered-box': errorMessage !== '','bordered-box': true}">
<ng-container matColumnDef="closing_txid"> <ng-container matColumnDef="closing_txid">
<mat-header-cell *matHeaderCellDef mat-sort-header> Closing Tx Id </mat-header-cell> <th mat-header-cell *matHeaderCellDef mat-sort-header> Closing Tx Id </th>
<mat-cell *matCellDef="let channel" [ngStyle]="{'max-width': (screenSize === screenSizeEnum.XS) ? '10rem' : '20rem'}">{{channel.closing_txid}}</mat-cell> <td mat-cell *matCellDef="let channel">
<div class="ellipsis-parent" [ngStyle]="{'max-width': (screenSize === screenSizeEnum.XS) ? '10rem' : '20rem'}">
<span class="ellipsis-child">{{channel.closing_txid}}</span>
</div>
</td>
</ng-container> </ng-container>
<ng-container matColumnDef="remote_alias"> <ng-container matColumnDef="remote_alias">
<mat-header-cell *matHeaderCellDef mat-sort-header> Peer </mat-header-cell> <th mat-header-cell *matHeaderCellDef mat-sort-header> Peer </th>
<mat-cell *matCellDef="let channel" [ngStyle]="{'max-width': (screenSize === screenSizeEnum.XS) ? '10rem' : '20rem'}">{{channel.channel.remote_alias}}</mat-cell> <td mat-cell *matCellDef="let channel">
<div class="ellipsis-parent" [ngStyle]="{'max-width': (screenSize === screenSizeEnum.XS) ? '10rem' : '20rem'}">
<span class="ellipsis-child">{{channel.channel.remote_alias}}</span>
</div>
</td>
</ng-container> </ng-container>
<ng-container matColumnDef="remote_node_pub"> <ng-container matColumnDef="remote_node_pub">
<mat-header-cell *matHeaderCellDef mat-sort-header> Pubkey </mat-header-cell> <th mat-header-cell *matHeaderCellDef mat-sort-header> Pubkey </th>
<mat-cell *matCellDef="let channel" [ngStyle]="{'max-width': (screenSize === screenSizeEnum.XS) ? '10rem' : '20rem'}">{{channel.channel.remote_node_pub}}</mat-cell> <td mat-cell *matCellDef="let channel">
<div class="ellipsis-parent" [ngStyle]="{'max-width': (screenSize === screenSizeEnum.XS) ? '10rem' : '20rem'}">
<span class="ellipsis-child">{{channel.channel.remote_node_pub}}</span>
</div>
</td>
</ng-container> </ng-container>
<ng-container matColumnDef="channel_point"> <ng-container matColumnDef="channel_point">
<mat-header-cell *matHeaderCellDef mat-sort-header> Channel </mat-header-cell> <th mat-header-cell *matHeaderCellDef mat-sort-header> Channel </th>
<mat-cell *matCellDef="let channel" [ngStyle]="{'max-width': (screenSize === screenSizeEnum.XS) ? '10rem' : '20rem'}">{{channel.channel.channel_point}}</mat-cell> <td mat-cell *matCellDef="let channel">
<div class="ellipsis-parent" [ngStyle]="{'max-width': (screenSize === screenSizeEnum.XS) ? '10rem' : '20rem'}">
<span class="ellipsis-child">{{channel.channel.channel_point}}</span>
</div>
</td>
</ng-container> </ng-container>
<ng-container matColumnDef="initiator"> <ng-container matColumnDef="initiator">
<mat-header-cell *matHeaderCellDef mat-sort-header> Initiator </mat-header-cell> <th mat-header-cell *matHeaderCellDef mat-sort-header> Initiator </th>
<mat-cell *matCellDef="let channel">{{channel.channel.initiator}}</mat-cell> <td mat-cell *matCellDef="let channel">{{channel.channel.initiator | camelcaseWithReplace:'initiator_'}}</td>
</ng-container> </ng-container>
<ng-container matColumnDef="commitment_type"> <ng-container matColumnDef="commitment_type">
<mat-header-cell *matHeaderCellDef mat-sort-header> Commitment Type </mat-header-cell> <th mat-header-cell *matHeaderCellDef mat-sort-header> Commitment Type </th>
<mat-cell *matCellDef="let channel" [ngStyle]="{'max-width': (screenSize === screenSizeEnum.XS) ? '10rem' : '20rem'}">{{channel.channel.commitment_type}}</mat-cell> <td mat-cell *matCellDef="let channel">{{channel.channel.commitment_type | camelcaseWithReplace:'commitment_type':'_'}}</td>
</ng-container> </ng-container>
<ng-container matColumnDef="limbo_balance"> <ng-container matColumnDef="limbo_balance">
<mat-header-cell fxLayoutAlign="end center" *matHeaderCellDef mat-sort-header arrowPosition="before">Limbo Balance (Sats) </mat-header-cell> <th mat-header-cell *matHeaderCellDef mat-sort-header arrowPosition="before">Limbo Balance (Sats) </th>
<mat-cell fxLayoutAlign="end center" *matCellDef="let channel">{{channel.limbo_balance | number}}</mat-cell> <td mat-cell *matCellDef="let channel" class="pl-1"><span fxLayoutAlign="end center">{{channel.limbo_balance | number}}</span></td>
</ng-container> </ng-container>
<ng-container matColumnDef="maturity_height"> <ng-container matColumnDef="maturity_height">
<mat-header-cell fxLayoutAlign="end center" *matHeaderCellDef mat-sort-header arrowPosition="before">Maturity Height</mat-header-cell> <th mat-header-cell *matHeaderCellDef mat-sort-header arrowPosition="before">Maturity Height</th>
<mat-cell fxLayoutAlign="end center" *matCellDef="let channel">{{channel.maturity_height | number}}</mat-cell> <td mat-cell *matCellDef="let channel" class="pl-1"><span fxLayoutAlign="end center">{{channel.maturity_height | number}}</span></td>
</ng-container> </ng-container>
<ng-container matColumnDef="blocks_til_maturity"> <ng-container matColumnDef="blocks_til_maturity">
<mat-header-cell fxLayoutAlign="end center" *matHeaderCellDef mat-sort-header arrowPosition="before">Blocks till Maturity</mat-header-cell> <th mat-header-cell *matHeaderCellDef mat-sort-header arrowPosition="before">Blocks till Maturity</th>
<mat-cell fxLayoutAlign="end center" *matCellDef="let channel">{{channel.blocks_til_maturity | number}}</mat-cell> <td mat-cell *matCellDef="let channel" class="pl-1"><span fxLayoutAlign="end center">{{channel.blocks_til_maturity | number}}</span></td>
</ng-container> </ng-container>
<ng-container matColumnDef="recovered_balance"> <ng-container matColumnDef="recovered_balance">
<mat-header-cell fxLayoutAlign="end center" *matHeaderCellDef mat-sort-header arrowPosition="before">Recovered Balance (Sats) </mat-header-cell> <th mat-header-cell *matHeaderCellDef mat-sort-header arrowPosition="before">Recovered Balance (Sats) </th>
<mat-cell fxLayoutAlign="end center" *matCellDef="let channel">{{channel.recovered_balance | number}}</mat-cell> <td mat-cell *matCellDef="let channel" class="pl-1"><span fxLayoutAlign="end center">{{channel.recovered_balance | number}}</span></td>
</ng-container> </ng-container>
<ng-container matColumnDef="capacity"> <ng-container matColumnDef="capacity">
<mat-header-cell fxLayoutAlign="end center" *matHeaderCellDef mat-sort-header arrowPosition="before">Capacity (Sats) </mat-header-cell> <th mat-header-cell *matHeaderCellDef mat-sort-header arrowPosition="before">Capacity (Sats) </th>
<mat-cell fxLayoutAlign="end center" *matCellDef="let channel">{{channel.channel.capacity | number}}</mat-cell> <td mat-cell *matCellDef="let channel" class="pl-1"><span fxLayoutAlign="end center">{{channel.channel.capacity | number}}</span></td>
</ng-container> </ng-container>
<ng-container matColumnDef="local_balance"> <ng-container matColumnDef="local_balance">
<mat-header-cell fxLayoutAlign="end center" *matHeaderCellDef mat-sort-header arrowPosition="before">Local Balance (Sats)</mat-header-cell> <th mat-header-cell *matHeaderCellDef mat-sort-header arrowPosition="before">Local Balance (Sats)</th>
<mat-cell fxLayoutAlign="end center" *matCellDef="let channel">{{channel.channel.local_balance | number}}</mat-cell> <td mat-cell *matCellDef="let channel" class="pl-1"><span fxLayoutAlign="end center">{{channel.channel.local_balance | number}}</span></td>
</ng-container> </ng-container>
<ng-container matColumnDef="remote_balance"> <ng-container matColumnDef="remote_balance">
<mat-header-cell fxLayoutAlign="end center" *matHeaderCellDef mat-sort-header arrowPosition="before">Remote Balance (Sats)</mat-header-cell> <th mat-header-cell *matHeaderCellDef mat-sort-header arrowPosition="before">Remote Balance (Sats)</th>
<mat-cell fxLayoutAlign="end center" *matCellDef="let channel">{{channel.channel.remote_balance | number}}</mat-cell> <td mat-cell *matCellDef="let channel" class="pl-1"><span fxLayoutAlign="end center">{{channel.channel.remote_balance | number}}</span></td>
</ng-container> </ng-container>
<ng-container matColumnDef="actions"> <ng-container matColumnDef="actions">
<mat-header-cell fxLayoutAlign="end center" class="pl-4 pr-3" *matHeaderCellDef> <th mat-header-cell *matHeaderCellDef class="pl-2">
<div class="bordered-box table-actions-select" fxLayoutAlign="center center">Actions</div> <div class="bordered-box table-actions-select" fxLayoutAlign="center center">Actions</div>
</mat-header-cell> </th>
<mat-cell fxLayoutAlign="end center" *matCellDef="let channel" class="pl-4"> <td mat-cell fxLayoutAlign="end center" *matCellDef="let channel" class="pl-2">
<button mat-stroked-button color="primary" type="button" tabindex="2" (click)="onForceClosingClick(channel)" class="table-actions-button">View Info</button> <button mat-stroked-button color="primary" type="button" tabindex="2" (click)="onForceClosingClick(channel)" class="table-actions-button">View Info</button>
</mat-cell> </td>
</ng-container> </ng-container>
<ng-container matColumnDef="no_pending_force_closing"> <ng-container matColumnDef="no_pending_force_closing">
<td mat-footer-cell *matFooterCellDef colspan="4"> <td mat-footer-cell *matFooterCellDef colspan="4">
@ -159,8 +187,8 @@
</td> </td>
</ng-container> </ng-container>
<tr mat-footer-row fxLayoutAlign="start center" *matFooterRowDef="['no_pending_force_closing']" [ngClass]="{'display-none': pendingForceClosingChannels && pendingForceClosingChannels?.data && pendingForceClosingChannels?.data?.length>0}"></tr> <tr mat-footer-row fxLayoutAlign="start center" *matFooterRowDef="['no_pending_force_closing']" [ngClass]="{'display-none': pendingForceClosingChannels && pendingForceClosingChannels?.data && pendingForceClosingChannels?.data?.length>0}"></tr>
<mat-header-row *matHeaderRowDef="displayedForceClosingColumns"></mat-header-row> <tr mat-header-row *matHeaderRowDef="displayedForceClosingColumns"></tr>
<mat-row fxLayoutAlign="stretch stretch" *matRowDef="let row; columns: displayedForceClosingColumns;"></mat-row> <tr mat-row *matRowDef="let row; columns: displayedForceClosingColumns;"></tr>
</table> </table>
</div> </div>
</mat-expansion-panel> </mat-expansion-panel>
@ -172,48 +200,64 @@
<div [perfectScrollbar] fxLayout="column" fxLayoutAlign="start center" fxFlex="100" class="table-container"> <div [perfectScrollbar] fxLayout="column" fxLayoutAlign="start center" fxFlex="100" class="table-container">
<table mat-table #table [dataSource]="pendingClosingChannels" matSort [ngClass]="{'error-border bordered-box': errorMessage !== '','bordered-box': true}"> <table mat-table #table [dataSource]="pendingClosingChannels" matSort [ngClass]="{'error-border bordered-box': errorMessage !== '','bordered-box': true}">
<ng-container matColumnDef="closing_txid"> <ng-container matColumnDef="closing_txid">
<mat-header-cell *matHeaderCellDef mat-sort-header> Closing Tx Id </mat-header-cell> <th mat-header-cell *matHeaderCellDef mat-sort-header> Closing Tx Id </th>
<mat-cell *matCellDef="let channel" [ngStyle]="{'max-width': (screenSize === screenSizeEnum.XS) ? '10rem' : '20rem'}">{{channel.closing_txid}}</mat-cell> <td mat-cell *matCellDef="let channel">
<div class="ellipsis-parent" [ngStyle]="{'max-width': (screenSize === screenSizeEnum.XS) ? '10rem' : '20rem'}">
<span class="ellipsis-child">{{channel.closing_txid}}</span>
</div>
</td>
</ng-container> </ng-container>
<ng-container matColumnDef="remote_alias"> <ng-container matColumnDef="remote_alias">
<mat-header-cell *matHeaderCellDef mat-sort-header> Peer </mat-header-cell> <th mat-header-cell *matHeaderCellDef mat-sort-header> Peer </th>
<mat-cell *matCellDef="let channel" [ngStyle]="{'max-width': (screenSize === screenSizeEnum.XS) ? '10rem' : '20rem'}">{{channel.channel.remote_alias}}</mat-cell> <td mat-cell *matCellDef="let channel">
<div class="ellipsis-parent" [ngStyle]="{'max-width': (screenSize === screenSizeEnum.XS) ? '10rem' : '20rem'}">
<span class="ellipsis-child">{{channel.channel.remote_alias}}</span>
</div>
</td>
</ng-container> </ng-container>
<ng-container matColumnDef="remote_node_pub"> <ng-container matColumnDef="remote_node_pub">
<mat-header-cell *matHeaderCellDef mat-sort-header> Pubkey </mat-header-cell> <th mat-header-cell *matHeaderCellDef mat-sort-header> Pubkey </th>
<mat-cell *matCellDef="let channel" [ngStyle]="{'max-width': (screenSize === screenSizeEnum.XS) ? '10rem' : '20rem'}">{{channel.channel.remote_node_pub}}</mat-cell> <td mat-cell *matCellDef="let channel">
<div class="ellipsis-parent" [ngStyle]="{'max-width': (screenSize === screenSizeEnum.XS) ? '10rem' : '20rem'}">
<span class="ellipsis-child">{{channel.channel.remote_node_pub}}</span>
</div>
</td>
</ng-container> </ng-container>
<ng-container matColumnDef="channel_point"> <ng-container matColumnDef="channel_point">
<mat-header-cell *matHeaderCellDef mat-sort-header> Channel </mat-header-cell> <th mat-header-cell *matHeaderCellDef mat-sort-header> Channel </th>
<mat-cell *matCellDef="let channel" [ngStyle]="{'max-width': (screenSize === screenSizeEnum.XS) ? '10rem' : '20rem'}">{{channel.channel.channel_point}}</mat-cell> <td mat-cell *matCellDef="let channel">
<div class="ellipsis-parent" [ngStyle]="{'max-width': (screenSize === screenSizeEnum.XS) ? '10rem' : '20rem'}">
<span class="ellipsis-child">{{channel.channel.channel_point}}</span>
</div>
</td>
</ng-container> </ng-container>
<ng-container matColumnDef="initiator"> <ng-container matColumnDef="initiator">
<mat-header-cell *matHeaderCellDef mat-sort-header> Initiator </mat-header-cell> <th mat-header-cell *matHeaderCellDef mat-sort-header> Initiator </th>
<mat-cell *matCellDef="let channel">{{channel.channel.initiator}}</mat-cell> <td mat-cell *matCellDef="let channel">{{channel.channel.initiator | camelcaseWithReplace:'initiator_'}}</td>
</ng-container> </ng-container>
<ng-container matColumnDef="commitment_type"> <ng-container matColumnDef="commitment_type">
<mat-header-cell *matHeaderCellDef mat-sort-header> Commitment Type </mat-header-cell> <th mat-header-cell *matHeaderCellDef mat-sort-header> Commitment Type </th>
<mat-cell *matCellDef="let channel" [ngStyle]="{'max-width': (screenSize === screenSizeEnum.XS) ? '10rem' : '20rem'}">{{channel.channel.commitment_type}}</mat-cell> <td mat-cell *matCellDef="let channel">{{channel.channel.commitment_type | camelcaseWithReplace:'commitment_type':'_'}}</td>
</ng-container> </ng-container>
<ng-container matColumnDef="capacity"> <ng-container matColumnDef="capacity">
<mat-header-cell fxLayoutAlign="end center" *matHeaderCellDef mat-sort-header arrowPosition="before">Capacity (Sats) </mat-header-cell> <th mat-header-cell *matHeaderCellDef mat-sort-header arrowPosition="before">Capacity (Sats) </th>
<mat-cell fxLayoutAlign="end center" *matCellDef="let channel">{{channel.channel.capacity | number}}</mat-cell> <td mat-cell *matCellDef="let channel" class="pl-1"><span fxLayoutAlign="end center">{{channel.channel.capacity | number}}</span></td>
</ng-container> </ng-container>
<ng-container matColumnDef="local_balance"> <ng-container matColumnDef="local_balance">
<mat-header-cell fxLayoutAlign="end center" *matHeaderCellDef mat-sort-header arrowPosition="before">Local Balance (Sats)</mat-header-cell> <th mat-header-cell *matHeaderCellDef mat-sort-header arrowPosition="before">Local Balance (Sats)</th>
<mat-cell fxLayoutAlign="end center" *matCellDef="let channel">{{channel.channel.local_balance | number}}</mat-cell> <td mat-cell *matCellDef="let channel" class="pl-1"><span fxLayoutAlign="end center">{{channel.channel.local_balance | number}}</span></td>
</ng-container> </ng-container>
<ng-container matColumnDef="remote_balance"> <ng-container matColumnDef="remote_balance">
<mat-header-cell fxLayoutAlign="end center" *matHeaderCellDef mat-sort-header arrowPosition="before">Remote Balance (Sats)</mat-header-cell> <th mat-header-cell *matHeaderCellDef mat-sort-header arrowPosition="before">Remote Balance (Sats)</th>
<mat-cell fxLayoutAlign="end center" *matCellDef="let channel">{{channel.channel.remote_balance | number}}</mat-cell> <td mat-cell *matCellDef="let channel" class="pl-1"><span fxLayoutAlign="end center">{{channel.channel.remote_balance | number}}</span></td>
</ng-container> </ng-container>
<ng-container matColumnDef="actions"> <ng-container matColumnDef="actions">
<mat-header-cell fxLayoutAlign="end center" class="pl-4 pr-3" *matHeaderCellDef> <th mat-header-cell *matHeaderCellDef class="pl-2">
<div class="bordered-box table-actions-select" fxLayoutAlign="center center">Actions</div> <div class="bordered-box table-actions-select" fxLayoutAlign="center center">Actions</div>
</mat-header-cell> </th>
<mat-cell fxLayoutAlign="end center" *matCellDef="let channel" class="pl-4"> <td mat-cell fxLayoutAlign="end center" *matCellDef="let channel" class="pl-2">
<button mat-stroked-button color="primary" type="button" tabindex="3" (click)="onClosingClick(channel)" class="table-actions-button">View Info</button> <button mat-stroked-button color="primary" type="button" tabindex="3" (click)="onClosingClick(channel)" class="table-actions-button">View Info</button>
</mat-cell> </td>
</ng-container> </ng-container>
<ng-container matColumnDef="no_pending_closing"> <ng-container matColumnDef="no_pending_closing">
<td mat-footer-cell *matFooterCellDef colspan="4"> <td mat-footer-cell *matFooterCellDef colspan="4">
@ -223,8 +267,8 @@
</td> </td>
</ng-container> </ng-container>
<tr mat-footer-row fxLayoutAlign="start center" *matFooterRowDef="['no_pending_closing']" [ngClass]="{'display-none': pendingClosingChannels && pendingClosingChannels?.data && pendingClosingChannels?.data?.length>0}"></tr> <tr mat-footer-row fxLayoutAlign="start center" *matFooterRowDef="['no_pending_closing']" [ngClass]="{'display-none': pendingClosingChannels && pendingClosingChannels?.data && pendingClosingChannels?.data?.length>0}"></tr>
<mat-header-row *matHeaderRowDef="displayedClosingColumns"></mat-header-row> <tr mat-header-row *matHeaderRowDef="displayedClosingColumns"></tr>
<mat-row fxLayoutAlign="stretch stretch" *matRowDef="let row; columns: displayedClosingColumns;"></mat-row> <tr mat-row *matRowDef="let row; columns: displayedClosingColumns;"></tr>
</table> </table>
</div> </div>
</mat-expansion-panel> </mat-expansion-panel>
@ -236,48 +280,60 @@
<div [perfectScrollbar] fxLayout="column" fxLayoutAlign="start center" fxFlex="100" class="table-container"> <div [perfectScrollbar] fxLayout="column" fxLayoutAlign="start center" fxFlex="100" class="table-container">
<table mat-table #table [dataSource]="pendingWaitClosingChannels" matSort [ngClass]="{'error-border bordered-box': errorMessage !== '','bordered-box': true}"> <table mat-table #table [dataSource]="pendingWaitClosingChannels" matSort [ngClass]="{'error-border bordered-box': errorMessage !== '','bordered-box': true}">
<ng-container matColumnDef="remote_alias"> <ng-container matColumnDef="remote_alias">
<mat-header-cell *matHeaderCellDef mat-sort-header> Peer </mat-header-cell> <th mat-header-cell *matHeaderCellDef mat-sort-header> Peer </th>
<mat-cell *matCellDef="let channel" [ngStyle]="{'max-width': (screenSize === screenSizeEnum.XS) ? '10rem' : '20rem'}">{{channel.channel.remote_alias}}</mat-cell> <td mat-cell *matCellDef="let channel">
<div class="ellipsis-parent" [ngStyle]="{'max-width': (screenSize === screenSizeEnum.XS) ? '10rem' : '20rem'}">
<span class="ellipsis-child">{{channel.channel.remote_alias}}</span>
</div>
</td>
</ng-container> </ng-container>
<ng-container matColumnDef="remote_node_pub"> <ng-container matColumnDef="remote_node_pub">
<mat-header-cell *matHeaderCellDef mat-sort-header> Pubkey </mat-header-cell> <th mat-header-cell *matHeaderCellDef mat-sort-header> Pubkey </th>
<mat-cell *matCellDef="let channel" [ngStyle]="{'max-width': (screenSize === screenSizeEnum.XS) ? '10rem' : '20rem'}">{{channel.channel.remote_node_pub}}</mat-cell> <td mat-cell *matCellDef="let channel">
<div class="ellipsis-parent" [ngStyle]="{'max-width': (screenSize === screenSizeEnum.XS) ? '10rem' : '20rem'}">
<span class="ellipsis-child">{{channel.channel.remote_node_pub}}</span>
</div>
</td>
</ng-container> </ng-container>
<ng-container matColumnDef="channel_point"> <ng-container matColumnDef="channel_point">
<mat-header-cell *matHeaderCellDef mat-sort-header> Channel </mat-header-cell> <th mat-header-cell *matHeaderCellDef mat-sort-header> Channel </th>
<mat-cell *matCellDef="let channel" [ngStyle]="{'max-width': (screenSize === screenSizeEnum.XS) ? '10rem' : '20rem'}">{{channel.channel.channel_point}}</mat-cell> <td mat-cell *matCellDef="let channel">
<div class="ellipsis-parent" [ngStyle]="{'max-width': (screenSize === screenSizeEnum.XS) ? '10rem' : '20rem'}">
<span class="ellipsis-child">{{channel.channel.channel_point}}</span>
</div>
</td>
</ng-container> </ng-container>
<ng-container matColumnDef="initiator"> <ng-container matColumnDef="initiator">
<mat-header-cell *matHeaderCellDef mat-sort-header> Initiator </mat-header-cell> <th mat-header-cell *matHeaderCellDef mat-sort-header> Initiator </th>
<mat-cell *matCellDef="let channel">{{channel.channel.initiator}}</mat-cell> <td mat-cell *matCellDef="let channel">{{channel.channel.initiator | camelcaseWithReplace:'initiator_'}}</td>
</ng-container> </ng-container>
<ng-container matColumnDef="commitment_type"> <ng-container matColumnDef="commitment_type">
<mat-header-cell *matHeaderCellDef mat-sort-header> Commitment Type </mat-header-cell> <th mat-header-cell *matHeaderCellDef mat-sort-header> Commitment Type </th>
<mat-cell *matCellDef="let channel" [ngStyle]="{'max-width': (screenSize === screenSizeEnum.XS) ? '10rem' : '20rem'}">{{channel.channel.commitment_type}}</mat-cell> <td mat-cell *matCellDef="let channel">{{channel.channel.commitment_type | camelcaseWithReplace:'commitment_type':'_'}}</td>
</ng-container> </ng-container>
<ng-container matColumnDef="limbo_balance"> <ng-container matColumnDef="limbo_balance">
<mat-header-cell fxLayoutAlign="end center" *matHeaderCellDef mat-sort-header arrowPosition="before">Limbo Balance (Sats) </mat-header-cell> <th mat-header-cell *matHeaderCellDef mat-sort-header arrowPosition="before">Limbo Balance (Sats) </th>
<mat-cell fxLayoutAlign="end center" *matCellDef="let channel">{{channel.limbo_balance | number}}</mat-cell> <td mat-cell *matCellDef="let channel" class="pl-1"><span fxLayoutAlign="end center">{{channel.limbo_balance | number}}</span></td>
</ng-container> </ng-container>
<ng-container matColumnDef="capacity"> <ng-container matColumnDef="capacity">
<mat-header-cell fxLayoutAlign="end center" *matHeaderCellDef mat-sort-header arrowPosition="before">Capacity (Sats) </mat-header-cell> <th mat-header-cell *matHeaderCellDef mat-sort-header arrowPosition="before">Capacity (Sats) </th>
<mat-cell fxLayoutAlign="end center" *matCellDef="let channel">{{channel.channel.capacity | number}}</mat-cell> <td mat-cell *matCellDef="let channel" class="pl-1"><span fxLayoutAlign="end center">{{channel.channel.capacity | number}}</span></td>
</ng-container> </ng-container>
<ng-container matColumnDef="local_balance"> <ng-container matColumnDef="local_balance">
<mat-header-cell fxLayoutAlign="end center" *matHeaderCellDef mat-sort-header arrowPosition="before">Local Balance (Sats)</mat-header-cell> <th mat-header-cell *matHeaderCellDef mat-sort-header arrowPosition="before">Local Balance (Sats)</th>
<mat-cell fxLayoutAlign="end center" *matCellDef="let channel">{{channel.channel.local_balance | number}}</mat-cell> <td mat-cell *matCellDef="let channel" class="pl-1"><span fxLayoutAlign="end center">{{channel.channel.local_balance | number}}</span></td>
</ng-container> </ng-container>
<ng-container matColumnDef="remote_balance"> <ng-container matColumnDef="remote_balance">
<mat-header-cell fxLayoutAlign="end center" *matHeaderCellDef mat-sort-header arrowPosition="before">Remote Balance (Sats)</mat-header-cell> <th mat-header-cell *matHeaderCellDef mat-sort-header arrowPosition="before">Remote Balance (Sats)</th>
<mat-cell fxLayoutAlign="end center" *matCellDef="let channel">{{channel.channel.remote_balance | number}}</mat-cell> <td mat-cell *matCellDef="let channel" class="pl-1"><span fxLayoutAlign="end center">{{channel.channel.remote_balance | number}}</span></td>
</ng-container> </ng-container>
<ng-container matColumnDef="actions"> <ng-container matColumnDef="actions">
<mat-header-cell fxLayoutAlign="end center" class="pl-4 pr-3" *matHeaderCellDef> <th mat-header-cell fxLayoutAlign="end center" class="pl-2" *matHeaderCellDef>
<div class="bordered-box table-actions-select" fxLayoutAlign="center center">Actions</div> <div class="bordered-box table-actions-select" fxLayoutAlign="center center">Actions</div>
</mat-header-cell> </th>
<mat-cell fxLayoutAlign="end center" *matCellDef="let channel" class="pl-4"> <td mat-cell fxLayoutAlign="end center" *matCellDef="let channel" class="pl-2">
<button mat-stroked-button color="primary" type="button" tabindex="4" (click)="onWaitClosingClick(channel)" class="table-actions-button">View Info</button> <button mat-stroked-button color="primary" type="button" tabindex="4" (click)="onWaitClosingClick(channel)" class="table-actions-button">View Info</button>
</mat-cell> </td>
</ng-container> </ng-container>
<ng-container matColumnDef="no_pending_wait_closing"> <ng-container matColumnDef="no_pending_wait_closing">
<td mat-footer-cell *matFooterCellDef colspan="4"> <td mat-footer-cell *matFooterCellDef colspan="4">
@ -287,8 +343,8 @@
</td> </td>
</ng-container> </ng-container>
<tr mat-footer-row fxLayoutAlign="start center" *matFooterRowDef="['no_pending_wait_closing']" [ngClass]="{'py-0': true, 'display-none': pendingWaitClosingChannels && pendingWaitClosingChannels?.data && pendingWaitClosingChannels?.data?.length>0}"></tr> <tr mat-footer-row fxLayoutAlign="start center" *matFooterRowDef="['no_pending_wait_closing']" [ngClass]="{'py-0': true, 'display-none': pendingWaitClosingChannels && pendingWaitClosingChannels?.data && pendingWaitClosingChannels?.data?.length>0}"></tr>
<mat-header-row *matHeaderRowDef="displayedWaitClosingColumns"></mat-header-row> <tr mat-header-row *matHeaderRowDef="displayedWaitClosingColumns"></tr>
<mat-row fxLayoutAlign="stretch stretch" *matRowDef="let row; columns: displayedWaitClosingColumns;"></mat-row> <tr mat-row *matRowDef="let row; columns: displayedWaitClosingColumns;"></tr>
</table> </table>
</div> </div>
</mat-expansion-panel> </mat-expansion-panel>

View File

@ -1,9 +1,9 @@
.mat-column-channel_point, .mat-column-remote_alias, .mat-column-remote_node_pub, .mat-column-channel_point, .mat-column-remote_alias, .mat-column-remote_node_pub, .mat-column-closing_txid {
.mat-column-commitment_type, .mat-column-closing_txid { flex: 0 0 15%;
flex: 1 1 10%; width: 15%;
white-space: nowrap; & .ellipsis-parent {
overflow: hidden; display: flex;
text-overflow: ellipsis; }
} }
tr.mat-footer-row td.mat-footer-cell { tr.mat-footer-row td.mat-footer-cell {

View File

@ -5,7 +5,7 @@ import { Store } from '@ngrx/store';
import { MatSort } from '@angular/material/sort'; import { MatSort } from '@angular/material/sort';
import { MatTableDataSource } from '@angular/material/table'; import { MatTableDataSource } from '@angular/material/table';
import { Channel, GetInfo, PendingChannels, PendingOpenChannel } from '../../../../../shared/models/lndModels'; import { Channel, GetInfo, PendingChannels, PendingClosingChannel, PendingForceClosingChannel, PendingOpenChannel, WaitingCloseChannel } from '../../../../../shared/models/lndModels';
import { AlertTypeEnum, APICallStatusEnum, DataTypeEnum, LND_DEFAULT_PAGE_SETTINGS, PAGE_SIZE, ScreenSizeEnum, SortOrderEnum } from '../../../../../shared/services/consts-enums-functions'; import { AlertTypeEnum, APICallStatusEnum, DataTypeEnum, LND_DEFAULT_PAGE_SETTINGS, PAGE_SIZE, ScreenSizeEnum, SortOrderEnum } from '../../../../../shared/services/consts-enums-functions';
import { ApiCallStatusPayload } from '../../../../../shared/models/apiCallsPayload'; import { ApiCallStatusPayload } from '../../../../../shared/models/apiCallsPayload';
import { SelNodeChild } from '../../../../../shared/models/RTLconfig'; import { SelNodeChild } from '../../../../../shared/models/RTLconfig';
@ -37,16 +37,16 @@ export class ChannelPendingTableComponent implements OnInit, AfterViewInit, OnDe
public pendingChannels: PendingChannels = {}; public pendingChannels: PendingChannels = {};
public displayedOpenColumns: any[] = []; public displayedOpenColumns: any[] = [];
public pendingOpenChannelsLength = 0; public pendingOpenChannelsLength = 0;
public pendingOpenChannels: any; public pendingOpenChannels: any = new MatTableDataSource<PendingOpenChannel>([]);
public displayedForceClosingColumns: any[] = []; public displayedForceClosingColumns: any[] = [];
public pendingForceClosingChannelsLength = 0; public pendingForceClosingChannelsLength = 0;
public pendingForceClosingChannels: any; public pendingForceClosingChannels: any = new MatTableDataSource<PendingForceClosingChannel>([]);
public displayedClosingColumns: any[] = []; public displayedClosingColumns: any[] = [];
public pendingClosingChannelsLength = 0; public pendingClosingChannelsLength = 0;
public pendingClosingChannels: any; public pendingClosingChannels: any = new MatTableDataSource<PendingClosingChannel>([]);
public displayedWaitClosingColumns: any[] = []; public displayedWaitClosingColumns: any[] = [];
public pendingWaitClosingChannelsLength = 0; public pendingWaitClosingChannelsLength = 0;
public pendingWaitClosingChannels: any; public pendingWaitClosingChannels: any = new MatTableDataSource<WaitingCloseChannel>([]);
public screenSize = ''; public screenSize = '';
public screenSizeEnum = ScreenSizeEnum; public screenSizeEnum = ScreenSizeEnum;
public errorMessage = ''; public errorMessage = '';

View File

@ -11,7 +11,7 @@
<mat-vertical-stepper [linear]="true" #stepper (selectionChange)="stepSelectionChanged($event)"> <mat-vertical-stepper [linear]="true" #stepper (selectionChange)="stepSelectionChanged($event)">
<mat-step [stepControl]="peerFormGroup" [editable]="flgEditable"> <mat-step [stepControl]="peerFormGroup" [editable]="flgEditable">
<form [formGroup]="peerFormGroup" fxLayout="column" fxLayout.gt-sm="row wrap" fxLayoutAlign="start" fxLayoutAlign.gt-sm="space-between" class="my-1"> <form [formGroup]="peerFormGroup" fxLayout="column" fxLayout.gt-sm="row wrap" fxLayoutAlign="start" fxLayoutAlign.gt-sm="space-between" class="my-1">
<ng-template matStepLabel>{{peerFormLabel}}</ng-template> <ng-template matStepLabel>{{peerFormLabel}}</ng-template>
<mat-form-field fxFlex="100"> <mat-form-field fxFlex="100">
<input autoFocus matInput placeholder="Lightning Address (pubkey OR pubkey@ip:port)" formControlName="peerAddress" tabindex="1" required> <input autoFocus matInput placeholder="Lightning Address (pubkey OR pubkey@ip:port)" formControlName="peerAddress" tabindex="1" required>
<mat-error *ngIf="peerFormGroup.controls.peerAddress.errors?.required">Address is required.</mat-error> <mat-error *ngIf="peerFormGroup.controls.peerAddress.errors?.required">Address is required.</mat-error>

View File

@ -30,7 +30,7 @@
</ng-container> </ng-container>
<ng-container matColumnDef="actions"> <ng-container matColumnDef="actions">
<th mat-header-cell *matHeaderCellDef class="pr-3"> <th mat-header-cell *matHeaderCellDef class="pr-3">
<div class="bordered-box table-actions-select" fxLayoutAlign="center center">Actions</div> <div class="bordered-box table-actions-select" fxLayoutAlign="center center">Actions</div>
</th> </th>
<td mat-cell *matCellDef="let rPeer" class="pl-2" fxLayoutAlign="end center"> <td mat-cell *matCellDef="let rPeer" class="pl-2" fxLayoutAlign="end center">
<button mat-stroked-button color="primary" type="button" tabindex="4" (click)="onRoutingPeerClick(rPeer, $event, 'in')" class="table-actions-button">View Info</button> <button mat-stroked-button color="primary" type="button" tabindex="4" (click)="onRoutingPeerClick(rPeer, $event, 'in')" class="table-actions-button">View Info</button>

View File

@ -68,7 +68,7 @@
<span fxFlex="100" class="foreground-secondary-text">&nbsp;</span> <span fxFlex="100" class="foreground-secondary-text">&nbsp;</span>
</ng-template> </ng-template>
<mat-divider class="w-100 my-1"></mat-divider> <mat-divider class="w-100 my-1"></mat-divider>
</div> </div>
</div> </div>
</div> </div>
</div> </div>

View File

@ -37,7 +37,7 @@
<span fxFlex="100" class="foreground-secondary-text">&nbsp;</span> <span fxFlex="100" class="foreground-secondary-text">&nbsp;</span>
</ng-template> </ng-template>
<mat-divider class="w-100 my-1"></mat-divider> <mat-divider class="w-100 my-1"></mat-divider>
</div> </div>
</div> </div>
</div> </div>
</div> </div>
@ -45,7 +45,7 @@
<p *ngIf="data.titleMessage" fxLayoutAlign="start center" class="pb-1">{{data.titleMessage}}</p> <p *ngIf="data.titleMessage" fxLayoutAlign="start center" class="pb-1">{{data.titleMessage}}</p>
<div fxLayout="row wrap" fxLayoutAlign="space-between center"> <div fxLayout="row wrap" fxLayoutAlign="space-between center">
<ng-container *ngFor="let getInput of getInputs; index as i"> <ng-container *ngFor="let getInput of getInputs; index as i">
<mat-form-field *ngIf="!getInput.advancedField || showAdvanced" [fxFlex]="getInput.width"> <mat-form-field *ngIf="!getInput.advancedField || showAdvanced" [fxFlex]="getInput.width">
<input matInput [autoFocus]="i === 0" [placeholder]="getInput.placeholder" name="input{{i}}" [min]="getInput.min" [step]="getInput.step" [type]="getInput.inputType | lowercase" [(ngModel)]="getInput.inputValue" [tabindex]="i+1" required> <input matInput [autoFocus]="i === 0" [placeholder]="getInput.placeholder" name="input{{i}}" [min]="getInput.min" [step]="getInput.step" [type]="getInput.inputType | lowercase" [(ngModel)]="getInput.inputValue" [tabindex]="i+1" required>
<mat-error *ngIf="!getInput.inputValue">{{getInput.placeholder}} is required.</mat-error> <mat-error *ngIf="!getInput.inputValue">{{getInput.placeholder}} is required.</mat-error>
<mat-hint>{{getInput.hintFunction ? getInput.hintFunction(getInput.inputValue) : getInput.hintText}}</mat-hint> <mat-hint>{{getInput.hintFunction ? getInput.hintFunction(getInput.inputValue) : getInput.hintText}}</mat-hint>

View File

@ -31,7 +31,7 @@
<fa-icon [icon]="faInfoCircle" class="mt-1 mr-1 alert-icon"></fa-icon> <fa-icon [icon]="faInfoCircle" class="mt-1 mr-1 alert-icon"></fa-icon>
<span>You can use a compatible authentication app to get an authentication code when you log in to RTL. e.g.: Google Authenticator.</span> <span>You can use a compatible authentication app to get an authentication code when you log in to RTL. e.g.: Google Authenticator.</span>
</div> </div>
<div fxLayout="row" fxFlex="100" fxLayoutAlign="space-between stretch"> <div fxLayout="row" fxFlex="100" fxLayoutAlign="space-between stretch">
<mat-form-field fxFlex="100"> <mat-form-field fxFlex="100">
<input autoFocus matInput placeholder="Secret Code" type="text" tabindex="4" formControlName="secret" required> <input autoFocus matInput placeholder="Secret Code" type="text" tabindex="4" formControlName="secret" required>
<fa-icon [icon]="faCopy" matSuffix rtlClipboard [payload]="secretFormGroup?.controls?.secret?.value" (copied)="onCopySecret($event)"></fa-icon> <fa-icon [icon]="faCopy" matSuffix rtlClipboard [payload]="secretFormGroup?.controls?.secret?.value" (copied)="onCopySecret($event)"></fa-icon>
@ -47,7 +47,7 @@
<form [formGroup]="tokenFormGroup" fxLayout="column" fxLayoutAlign="start" class="my-1 pr-1"> <form [formGroup]="tokenFormGroup" fxLayout="column" fxLayoutAlign="start" class="my-1 pr-1">
<ng-template matStepLabel>{{tokenFormLabel}}</ng-template> <ng-template matStepLabel>{{tokenFormLabel}}</ng-template>
<div fxLayout="column" *ngIf="!flgValidated || !isTokenValid"> <div fxLayout="column" *ngIf="!flgValidated || !isTokenValid">
<div fxLayout="row" fxFlex="100" fxLayoutAlign="space-between stretch"> <div fxLayout="row" fxFlex="100" fxLayoutAlign="space-between stretch">
<mat-form-field fxFlex="100"> <mat-form-field fxFlex="100">
<input autoFocus matInput placeholder="Token" type="text" tabindex="7" formControlName="token" required> <input autoFocus matInput placeholder="Token" type="text" tabindex="7" formControlName="token" required>
<mat-error *ngIf="tokenFormGroup?.controls?.token?.errors?.required">Token is required.</mat-error> <mat-error *ngIf="tokenFormGroup?.controls?.token?.errors?.required">Token is required.</mat-error>

View File

@ -16,7 +16,7 @@
<div fxLayout="column" fxFlex="100" fxLayoutAlign="space-between stretch"> <div fxLayout="column" fxFlex="100" fxLayoutAlign="space-between stretch">
<rtl-boltz-service-info [serviceInfo]="serviceInfo" [direction]="direction"></rtl-boltz-service-info> <rtl-boltz-service-info [serviceInfo]="serviceInfo" [direction]="direction"></rtl-boltz-service-info>
</div> </div>
<div fxLayout="row wrap" fxFlex="100" fxLayoutAlign="space-between center" class="mt-1"> <div fxLayout="row wrap" fxFlex="100" fxLayoutAlign="space-between center" class="mt-1">
<mat-form-field fxFlex="48"> <mat-form-field fxFlex="48">
<input autoFocus matInput placeholder="Amount" type="number" [step]="1000" tabindex="1" formControlName="amount" required> <input autoFocus matInput placeholder="Amount" type="number" [step]="1000" tabindex="1" formControlName="amount" required>
<mat-hint>Range: {{serviceInfo?.limits?.minimal | number}}-{{serviceInfo?.limits?.maximal | number}}</mat-hint> <mat-hint>Range: {{serviceInfo?.limits?.minimal | number}}-{{serviceInfo?.limits?.maximal | number}}</mat-hint>

View File

@ -22,7 +22,7 @@
<rtl-loop-quote [quote]="minQuote" [termCaption]="'min'" [panelExpanded]="false" [showPanel]="true"></rtl-loop-quote> <rtl-loop-quote [quote]="minQuote" [termCaption]="'min'" [panelExpanded]="false" [showPanel]="true"></rtl-loop-quote>
<rtl-loop-quote [quote]="maxQuote" [termCaption]="'max'" [panelExpanded]="false" [showPanel]="true"></rtl-loop-quote> <rtl-loop-quote [quote]="maxQuote" [termCaption]="'max'" [panelExpanded]="false" [showPanel]="true"></rtl-loop-quote>
</div> </div>
<div fxLayout="row wrap" fxFlex="100" fxLayoutAlign="space-between center" class="mt-1"> <div fxLayout="row wrap" fxFlex="100" fxLayoutAlign="space-between center" class="mt-1">
<mat-form-field [fxFlex]="direction === LoopTypeEnum.LOOP_OUT ? '35' : '48'"> <mat-form-field [fxFlex]="direction === LoopTypeEnum.LOOP_OUT ? '35' : '48'">
<input autoFocus matInput placeholder="Amount" type="number" [step]="1000" tabindex="1" formControlName="amount" required> <input autoFocus matInput placeholder="Amount" type="number" [step]="1000" tabindex="1" formControlName="amount" required>
<mat-hint>Range: {{minQuote.amount | number}}-{{maxQuote.amount | number}}</mat-hint> <mat-hint>Range: {{minQuote.amount | number}}-{{maxQuote.amount | number}}</mat-hint>
@ -42,7 +42,7 @@
<mat-error *ngIf="inputFormGroup.controls.routingFeePercent.errors?.min">Percentage must be a positive number.</mat-error> <mat-error *ngIf="inputFormGroup.controls.routingFeePercent.errors?.min">Percentage must be a positive number.</mat-error>
</mat-form-field> </mat-form-field>
</div> </div>
<div fxLayout="row wrap" fxFlex="100" *ngIf="direction === LoopTypeEnum.LOOP_OUT" fxLayoutAlign="start center" class="mt-1"> <div fxLayout="row wrap" fxFlex="100" *ngIf="direction === LoopTypeEnum.LOOP_OUT" fxLayoutAlign="start center" class="mt-1">
<mat-slide-toggle tabindex="4" color="primary" formControlName="fast" fxFlex="none">Fast</mat-slide-toggle> <mat-slide-toggle tabindex="4" color="primary" formControlName="fast" fxFlex="none">Fast</mat-slide-toggle>
<mat-icon matTooltip="Swap immediately (Might end up paying a higher on-chain fee)" matTooltipPosition="above" class="info-icon" fxFlex="none">info_outline</mat-icon> <mat-icon matTooltip="Swap immediately (Might end up paying a higher on-chain fee)" matTooltipPosition="above" class="info-icon" fxFlex="none">info_outline</mat-icon>
</div> </div>

View File

@ -1,11 +1,11 @@
<div [perfectScrollbar] fxLayout="column" fxFlex="100"> <div [perfectScrollbar] fxLayout="column" fxFlex="100" id="head">
<form fxLayout="column" fxLayoutAlign="start stretch" class="settings-container page-sub-title-container mt-1" #form="ngForm"> <form fxLayout="column" fxLayoutAlign="start stretch" class="settings-container page-sub-title-container mt-1" #form="ngForm">
<div fxLayout="row"> <div fxLayout="row">
<fa-icon [icon]="faPenRuler" class="page-title-img mr-1"></fa-icon> <fa-icon [icon]="faPenRuler" class="page-title-img mr-1"></fa-icon>
<span class="page-title">Grid Settings</span> <span class="page-title">Grid Settings</span>
</div> </div>
<ng-container *ngIf="errorMessage && errorMessage.page === 'unknown'" [ngTemplateOutlet]="errorObjectBlock" [ngTemplateOutletContext]="{error: errorMessage}"></ng-container> <ng-container *ngIf="errorMessage && errorMessage.page === 'unknown'" [ngTemplateOutlet]="errorObjectBlock" [ngTemplateOutletContext]="{error: errorMessage}"></ng-container>
<mat-expansion-panel fxLayout="column" class="flat-expansion-panel mt-1" [ngClass]="{'error-border': errorMessage?.page === page.pageId}" expanded="false" *ngFor="let page of pageSettings"> <mat-expansion-panel fxLayout="column" class="flat-expansion-panel mt-1" [ngClass]="{'error-border': errorMessage?.page === page.pageId}" expanded="true" *ngFor="let page of pageSettings">
<mat-expansion-panel-header> <mat-expansion-panel-header>
<mat-panel-title>{{page.pageId | camelcaseWithReplace:'_'}}</mat-panel-title> <mat-panel-title>{{page.pageId | camelcaseWithReplace:'_'}}</mat-panel-title>
</mat-expansion-panel-header> </mat-expansion-panel-header>

View File

@ -1,5 +1,5 @@
import { Component, OnInit, OnDestroy } from '@angular/core'; import { Component, OnInit, OnDestroy } from '@angular/core';
import { combineLatest, Subject } from 'rxjs'; import { Subject } from 'rxjs';
import { filter, takeUntil, withLatestFrom } from 'rxjs/operators'; import { filter, takeUntil, withLatestFrom } from 'rxjs/operators';
import { Store } from '@ngrx/store'; import { Store } from '@ngrx/store';
import { Actions } from '@ngrx/effects'; import { Actions } from '@ngrx/effects';

View File

@ -131,6 +131,7 @@ export interface WaitingCloseChannel {
channel?: PendingChannel; channel?: PendingChannel;
limbo_balance?: string; limbo_balance?: string;
commitments?: any; commitments?: any;
closing_txid?: string;
} }
export interface PendingChannels { export interface PendingChannels {

View File

@ -964,7 +964,7 @@ export const LND_TABLES_DEF = {
}, },
pending_waiting_close: { pending_waiting_close: {
maxColumns: 7, maxColumns: 7,
allowedColumns: ['remote_alias', 'remote_node_pub', 'channel_point', 'initiator', 'commitment_type', 'limbo_balance', 'capacity', 'local_balance', 'remote_balance'] allowedColumns: ['closing_txid', 'remote_alias', 'remote_node_pub', 'channel_point', 'initiator', 'commitment_type', 'limbo_balance', 'capacity', 'local_balance', 'remote_balance']
}, },
closed: { closed: {
maxColumns: 7, maxColumns: 7,

View File

@ -277,8 +277,9 @@
.table-actions-select { .table-actions-select {
padding: 0.5rem 1rem; padding: 0.5rem 1rem;
margin: 0.7rem 0; margin: 0.9rem 0;
min-width: 10rem; min-width: 10rem;
min-height: 3.6rem;
width: 10rem; width: 10rem;
float: right; float: right;
& .mat-select-placeholder { & .mat-select-placeholder {