< div fxLayout = "column" class = "padding-gap-x" >
< div fxLayout = "column" fxLayout . gt-xs = "row" fxLayoutAlign . gt-xs = "start center" fxLayoutAlign = "start stretch" class = "page-sub-title-container" >
< div fxFlex = "70" > < / div >
< mat-form-field fxFlex = "30" >
< input matInput ( keyup ) = " applyFilter ( ) " [ ( ngModel ) ] = " selFilter " name = "filter" placeholder = "Filter" >
< / mat-form-field >
< / div >
< div [ perfectScrollbar ] fxLayout = "column" fxLayoutAlign = "start center" fxFlex = "100" class = "table-container" >
< mat-progress-bar * ngIf = "apiCallStatus?.status === apiCallStatusEnum.INITIATED" mode = "indeterminate" > < / mat-progress-bar >
< table mat-table # table fxFlex = "100" [ dataSource ] = " channels " matSort [ ngClass ] = " { ' overflow-auto error-border ' : errorMessage ! = = ' ' , ' overflow-auto ' : true } " >
< ng-container matColumnDef = "active" >
< th mat-header-cell * matHeaderCellDef mat-sort-header > < / th >
< td mat-cell * matCellDef = "let channel" >
< span * ngIf = "channel.active" class = "dot green" matTooltip = "Active" matTooltipPosition = "right" > < / span >
< span * ngIf = "!channel.active" class = "dot yellow" matTooltip = "Inactive" matTooltipPosition = "right" > < / span >
< / td >
< / ng-container >
< ng-container matColumnDef = "private" >
< th mat-header-cell * matHeaderCellDef mat-sort-header > < / th >
< td mat-cell * matCellDef = "let channel" >
< span * ngIf = "channel.private" class = "mr-1" matTooltip = "Private" matTooltipPosition = "right" > < fa-icon [ icon ] = " faEyeSlash " > < / fa-icon > < / span >
< span * ngIf = "!channel.private" class = "mr-1" matTooltip = "Public" matTooltipPosition = "right" > < fa-icon [ icon ] = " faEye " > < / fa-icon > < / span >
< / td >
< / ng-container >
< ng-container matColumnDef = "remote_alias" >
< th mat-header-cell * matHeaderCellDef mat-sort-header > Peer < / th >
< td mat-cell * matCellDef = "let channel" >
< div class = "ellipsis-parent" [ ngStyle ] = " { ' max-width ' : ( screenSize = == screenSizeEnum . XS ) ? ' 10rem ' : ( screenSize = == screenSizeEnum . MD ) ? ' 15rem ' : ' 22rem ' } " >
< span class = "ellipsis-child" > {{channel.remote_alias || channel.remote_pubkey}}< / span >
< / div >
< / td >
< / ng-container >
< ng-container matColumnDef = "uptime" >
< th mat-header-cell * matHeaderCellDef mat-sort-header arrowPosition = "before" > Uptime ({{timeUnit}})< / th >
< td mat-cell * matCellDef = "let channel" > < span fxLayoutAlign = "end center" > {{channel.uptime_str}} < / span > < / td >
< / ng-container >
< ng-container matColumnDef = "total_satoshis_sent" >
< th mat-header-cell * matHeaderCellDef mat-sort-header arrowPosition = "before" > Sats Sent < / th >
< td mat-cell * matCellDef = "let channel" > < span fxLayoutAlign = "end center" > {{channel.total_satoshis_sent | number}} < / span > < / td >
< / ng-container >
< ng-container matColumnDef = "total_satoshis_received" >
< th mat-header-cell * matHeaderCellDef mat-sort-header arrowPosition = "before" > Sats Received < / th >
< td mat-cell * matCellDef = "let channel" > < span fxLayoutAlign = "end center" > {{channel.total_satoshis_received | number}} < / span > < / td >
< / ng-container >
< ng-container matColumnDef = "local_balance" >
< th mat-header-cell * matHeaderCellDef mat-sort-header arrowPosition = "before" > Local Balance (Sats) < / th >
< td mat-cell * matCellDef = "let channel" > < span fxLayoutAlign = "end center" > {{channel.local_balance | number}} < / span > < / td >
< / ng-container >
< ng-container matColumnDef = "remote_balance" >
< th mat-header-cell * matHeaderCellDef mat-sort-header arrowPosition = "before" > Remote Balance (Sats) < / th >
< td mat-cell * matCellDef = "let channel" > < span fxLayoutAlign = "end center" > {{channel.remote_balance | number}} < / span > < / td >
< / ng-container >
< ng-container matColumnDef = "balancedness" >
< th mat-header-cell * matHeaderCellDef mat-sort-header class = "pl-2" > Balance Score < / th >
< td mat-cell * matCellDef = "let channel" class = "pl-2" >
< div fxLayout = "row" >
< mat-hint fxFlex = "100" fxLayoutAlign = "center center" class = "font-size-80" > {{channel.balancedness || 0 | number}}< / mat-hint >
< / div >
< mat-progress-bar mode = "determinate" value = "{{channel.local_balance && channel.local_balance > 0 ? ((+channel.local_balance/((+channel.local_balance)+(+channel.remote_balance)))*100) : 0}}" > < / mat-progress-bar >
< / td >
< / ng-container >
< ng-container matColumnDef = "actions" >
< th mat-header-cell * matHeaderCellDef class = "pl-1" >
< div class = "bordered-box table-actions-select" fxLayoutAlign = "center center" >
< mat-select placeholder = "Actions" tabindex = "1" class = "mr-0" >
< mat-select-trigger > < / mat-select-trigger >
< mat-option ( click ) = " onChannelUpdate ( ' all ' ) " > Update Fee Policy< / mat-option >
< mat-option ( click ) = " onDownloadCSV ( ) " > Download CSV< / mat-option >
< / mat-select >
< / div >
< / th >
< td mat-cell * matCellDef = "let channel" fxLayoutAlign = "end center" class = "pl-1" >
< div class = "bordered-box table-actions-select" fxLayoutAlign = "center center" >
< mat-select placeholder = "Actions" tabindex = "2" class = "mr-0" >
< mat-select-trigger > < / mat-select-trigger >
< mat-option ( click ) = " onChannelClick ( channel , $ event ) " > View Info< / mat-option >
< mat-option ( click ) = " onViewRemotePolicy ( channel ) " > View Remote Fee < / mat-option >
< mat-option ( click ) = " onChannelUpdate ( channel ) " > Update Fee Policy< / mat-option >
< mat-option ( click ) = " onCircularRebalance ( channel ) " * ngIf = "+versionsArr[0] > 0 || +versionsArr[1] >= 9" > Circular Rebalance< / mat-option >
< mat-option ( click ) = " onLoopOut ( channel ) " * ngIf = "selNode.swapServerUrl" > Loop Out< / mat-option >
< mat-option ( click ) = " onChannelClose ( channel ) " > Close Channel< / mat-option >
< / mat-select >
< / div >
< / td >
< / ng-container >
< ng-container matColumnDef = "no_channel" >
< td mat-footer-cell * matFooterCellDef colspan = "4" >
< p * ngIf = "numPeers<1 && (!channels?.data || channels?.data?.length<1) && apiCallStatus?.status === apiCallStatusEnum.COMPLETED" > No peers connected. Add a peer in order to open a channel.< / p >
< p * ngIf = "numPeers>0 && (!channels?.data || channels?.data?.length<1) && apiCallStatus?.status === apiCallStatusEnum.COMPLETED" > No channel available.< / p >
< p * ngIf = "(!channels?.data || channels?.data?.length<1) && apiCallStatus?.status === apiCallStatusEnum.INITIATED" > Getting channels...< / p >
< p * ngIf = "(!channels?.data || channels?.data?.length<1) && apiCallStatus?.status === apiCallStatusEnum.ERROR" > {{errorMessage}}< / p >
< / td >
< / ng-container >
< tr mat-footer-row * matFooterRowDef = "['no_channel']" [ ngClass ] = " { ' display-none ' : channels ? . data & & channels ? . data ? . length > 0}">< / tr >
< tr mat-header-row * matHeaderRowDef = "displayedColumns" > < / tr >
< tr mat-row * matRowDef = "let row; columns: displayedColumns;" > < / tr >
< / table >
< / div >
< mat-paginator [ pageSize ] = " pageSize " [ pageSizeOptions ] = " pageSizeOptions " [ showFirstLastButtons ] = " screenSize = == screenSizeEnum . XS ? false : true " class = "mb-1" > < / mat-paginator >
< / div >