mirror of
https://github.com/Ride-The-Lightning/RTL.git
synced 2026-08-16 13:00:45 +02:00
Peer and Transaction fixes
Peer and Transaction fixes
This commit is contained in:
parent
71442c2573
commit
b6ea46cbc6
14 changed files with 47 additions and 45 deletions
File diff suppressed because one or more lines are too long
1
angular/7.e259f5b9069a29cff75d.js
Normal file
1
angular/7.e259f5b9069a29cff75d.js
Normal file
File diff suppressed because one or more lines are too long
|
|
@ -12,5 +12,5 @@
|
|||
<link rel="stylesheet" href="styles.77aafb08c5a2ab8c8821.css"></head>
|
||||
<body>
|
||||
<rtl-app></rtl-app>
|
||||
<script src="runtime.f8483477e70a87426a22.js" defer></script><script src="polyfills-es5.b8e32dec482ae69710a2.js" nomodule defer></script><script src="polyfills.ebf9033c33aa4a5af12a.js" defer></script><script src="main.e93f84cc3826441e698b.js" defer></script></body>
|
||||
<script src="runtime.208072f1493aa8009634.js" defer></script><script src="polyfills-es5.b8e32dec482ae69710a2.js" nomodule defer></script><script src="polyfills.ebf9033c33aa4a5af12a.js" defer></script><script src="main.e93f84cc3826441e698b.js" defer></script></body>
|
||||
</html>
|
||||
|
|
|
|||
|
|
@ -1 +1 @@
|
|||
!function(e){function r(r){for(var n,a,i=r[0],c=r[1],f=r[2],p=0,s=[];p<i.length;p++)a=i[p],Object.prototype.hasOwnProperty.call(o,a)&&o[a]&&s.push(o[a][0]),o[a]=0;for(n in c)Object.prototype.hasOwnProperty.call(c,n)&&(e[n]=c[n]);for(l&&l(r);s.length;)s.shift()();return u.push.apply(u,f||[]),t()}function t(){for(var e,r=0;r<u.length;r++){for(var t=u[r],n=!0,i=1;i<t.length;i++)0!==o[t[i]]&&(n=!1);n&&(u.splice(r--,1),e=a(a.s=t[0]))}return e}var n={},o={0:0},u=[];function a(r){if(n[r])return n[r].exports;var t=n[r]={i:r,l:!1,exports:{}};return e[r].call(t.exports,t,t.exports,a),t.l=!0,t.exports}a.e=function(e){var r=[],t=o[e];if(0!==t)if(t)r.push(t[2]);else{var n=new Promise((function(r,n){t=o[e]=[r,n]}));r.push(t[2]=n);var u,i=document.createElement("script");i.charset="utf-8",i.timeout=120,a.nc&&i.setAttribute("nonce",a.nc),i.src=function(e){return a.p+""+({}[e]||e)+"."+{1:"df8a42ae5fabe34ad893",6:"9052d99b0c58d3773f50",7:"6fbd1a1cd900b63944af"}[e]+".js"}(e);var c=new Error;u=function(r){i.onerror=i.onload=null,clearTimeout(f);var t=o[e];if(0!==t){if(t){var n=r&&("load"===r.type?"missing":r.type),u=r&&r.target&&r.target.src;c.message="Loading chunk "+e+" failed.\n("+n+": "+u+")",c.name="ChunkLoadError",c.type=n,c.request=u,t[1](c)}o[e]=void 0}};var f=setTimeout((function(){u({type:"timeout",target:i})}),12e4);i.onerror=i.onload=u,document.head.appendChild(i)}return Promise.all(r)},a.m=e,a.c=n,a.d=function(e,r,t){a.o(e,r)||Object.defineProperty(e,r,{enumerable:!0,get:t})},a.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},a.t=function(e,r){if(1&r&&(e=a(e)),8&r)return e;if(4&r&&"object"==typeof e&&e&&e.__esModule)return e;var t=Object.create(null);if(a.r(t),Object.defineProperty(t,"default",{enumerable:!0,value:e}),2&r&&"string"!=typeof e)for(var n in e)a.d(t,n,(function(r){return e[r]}).bind(null,n));return t},a.n=function(e){var r=e&&e.__esModule?function(){return e.default}:function(){return e};return a.d(r,"a",r),r},a.o=function(e,r){return Object.prototype.hasOwnProperty.call(e,r)},a.p="",a.oe=function(e){throw console.error(e),e};var i=window.webpackJsonp=window.webpackJsonp||[],c=i.push.bind(i);i.push=r,i=i.slice();for(var f=0;f<i.length;f++)r(i[f]);var l=c;t()}([]);
|
||||
!function(e){function r(r){for(var n,a,i=r[0],c=r[1],f=r[2],p=0,s=[];p<i.length;p++)a=i[p],Object.prototype.hasOwnProperty.call(o,a)&&o[a]&&s.push(o[a][0]),o[a]=0;for(n in c)Object.prototype.hasOwnProperty.call(c,n)&&(e[n]=c[n]);for(l&&l(r);s.length;)s.shift()();return u.push.apply(u,f||[]),t()}function t(){for(var e,r=0;r<u.length;r++){for(var t=u[r],n=!0,i=1;i<t.length;i++)0!==o[t[i]]&&(n=!1);n&&(u.splice(r--,1),e=a(a.s=t[0]))}return e}var n={},o={0:0},u=[];function a(r){if(n[r])return n[r].exports;var t=n[r]={i:r,l:!1,exports:{}};return e[r].call(t.exports,t,t.exports,a),t.l=!0,t.exports}a.e=function(e){var r=[],t=o[e];if(0!==t)if(t)r.push(t[2]);else{var n=new Promise((function(r,n){t=o[e]=[r,n]}));r.push(t[2]=n);var u,i=document.createElement("script");i.charset="utf-8",i.timeout=120,a.nc&&i.setAttribute("nonce",a.nc),i.src=function(e){return a.p+""+({}[e]||e)+"."+{1:"df8a42ae5fabe34ad893",6:"9052d99b0c58d3773f50",7:"e259f5b9069a29cff75d"}[e]+".js"}(e);var c=new Error;u=function(r){i.onerror=i.onload=null,clearTimeout(f);var t=o[e];if(0!==t){if(t){var n=r&&("load"===r.type?"missing":r.type),u=r&&r.target&&r.target.src;c.message="Loading chunk "+e+" failed.\n("+n+": "+u+")",c.name="ChunkLoadError",c.type=n,c.request=u,t[1](c)}o[e]=void 0}};var f=setTimeout((function(){u({type:"timeout",target:i})}),12e4);i.onerror=i.onload=u,document.head.appendChild(i)}return Promise.all(r)},a.m=e,a.c=n,a.d=function(e,r,t){a.o(e,r)||Object.defineProperty(e,r,{enumerable:!0,get:t})},a.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},a.t=function(e,r){if(1&r&&(e=a(e)),8&r)return e;if(4&r&&"object"==typeof e&&e&&e.__esModule)return e;var t=Object.create(null);if(a.r(t),Object.defineProperty(t,"default",{enumerable:!0,value:e}),2&r&&"string"!=typeof e)for(var n in e)a.d(t,n,(function(r){return e[r]}).bind(null,n));return t},a.n=function(e){var r=e&&e.__esModule?function(){return e.default}:function(){return e};return a.d(r,"a",r),r},a.o=function(e,r){return Object.prototype.hasOwnProperty.call(e,r)},a.p="",a.oe=function(e){throw console.error(e),e};var i=window.webpackJsonp=window.webpackJsonp||[],c=i.push.bind(i);i.push=r,i=i.slice();for(var f=0;f<i.length;f++)r(i[f]);var l=c;t()}([]);
|
||||
|
|
@ -29,7 +29,7 @@ exports.getAllChannels = (req, res, next) => {
|
|||
local = (channel.local_balance) ? +channel.local_balance : 0;
|
||||
remote = (channel.remote_balance) ? +channel.remote_balance : 0;
|
||||
total = local + remote;
|
||||
channel.balancedness = ((1 - Math.abs((local-remote)/total)) * 100).toFixed(2);
|
||||
channel.balancedness = (1 - Math.abs((local-remote)/total)).toFixed(3);
|
||||
return getAliasForChannel(channel);
|
||||
})
|
||||
)
|
||||
|
|
|
|||
|
|
@ -2,8 +2,12 @@
|
|||
<div fxLayout="column" fxFlex="9" fxLayoutAlign="end start">
|
||||
<span class="dashboard-capacity-header this-channel-capacity">Total Capacity</span>
|
||||
<div fxLayout="row" fxLayoutAlign="space-between start" class="w-100">
|
||||
<mat-hint fxFlex="50" fxLayoutAlign="start center" class="font-size-90"><strong class="font-weight-900 mr-5px">Local:</strong>{{channelBalances.localBalance || 0 | number}} Sats</mat-hint>
|
||||
<mat-hint fxFlex="50" fxLayoutAlign="end center" class="font-size-90"><strong class="font-weight-900 mr-5px">Remote:</strong>{{channelBalances.remoteBalance || 0 | number}} Sats</mat-hint>
|
||||
<mat-hint fxFlex="40" fxLayoutAlign="start center" class="font-size-90"><strong class="font-weight-900 mr-5px">Local:</strong>{{channelBalances.localBalance || 0 | number}} Sats</mat-hint>
|
||||
<mat-hint fxFlex="20" fxLayoutAlign="center center" class="font-size-90">
|
||||
<fa-icon [icon]="faBalanceScale" class="mr-3px" matTooltip="Balance Score"></fa-icon>
|
||||
({{channelBalances.balancedness || 0 | number}})
|
||||
</mat-hint>
|
||||
<mat-hint fxFlex="40" fxLayoutAlign="end center" class="font-size-90"><strong class="font-weight-900 mr-5px">Remote:</strong>{{channelBalances.remoteBalance || 0 | number}} Sats</mat-hint>
|
||||
</div>
|
||||
<mat-progress-bar class="dashboard-progress-bar this-channel-bar" mode="determinate" color="accent" value="{{channelBalances.localBalance && channelBalances.localBalance > 0 ? ((+channelBalances.localBalance/((+channelBalances.localBalance)+(+channelBalances.remoteBalance)))*100) : 0}}"></mat-progress-bar>
|
||||
</div>
|
||||
|
|
@ -17,8 +21,6 @@
|
|||
<mat-hint fxFlex="20" fxLayoutAlign="center center" class="font-size-90 color-primary">
|
||||
<fa-icon [icon]="faBalanceScale" class="color-primary mr-3px" matTooltip="Balance Score"></fa-icon>
|
||||
({{channel.balancedness || 0 | number}})
|
||||
<!-- <fa-icon [icon]="sortBy === 'Channel Balance' ? faBalanceScale : faDumbbell" class="color-primary mr-3px" matTooltip="Balance Score"></fa-icon>
|
||||
({{((sortBy === 'Channel Balance' ? channel.balancedness : channel.capacity) || 0) | number}}{{sortBy === 'Channel Balance' ? '' : ' Sats'}}) -->
|
||||
</mat-hint>
|
||||
<mat-hint fxFlex="40" fxLayoutAlign="end center" class="font-size-90 color-primary"><strong class="font-weight-900 mr-5px">Remote:</strong>{{channel.remote_balance || 0 | number}} Sats</mat-hint>
|
||||
</div>
|
||||
|
|
|
|||
|
|
@ -11,9 +11,9 @@ import { Channel } from '../../../shared/models/lndModels';
|
|||
export class ChannelCapacityInfoComponent implements OnChanges {
|
||||
public faBalanceScale = faBalanceScale;
|
||||
public faDumbbell = faDumbbell;
|
||||
@Input() channelBalances: {localBalance: number, remoteBalance: number};
|
||||
@Input() channelBalances: {localBalance: number, remoteBalance: number, balancedness: string};
|
||||
@Input() allChannels: Channel[];
|
||||
@Input() sortBy: string = 'Channel Balance';
|
||||
@Input() sortBy: string = 'Balance Score';
|
||||
|
||||
constructor() {}
|
||||
|
||||
|
|
|
|||
|
|
@ -15,7 +15,7 @@
|
|||
</button>
|
||||
<mat-menu #menuOperator="matMenu" class="dashboard-vert-menu" xPosition="before">
|
||||
<button mat-menu-item (click)="onNavigateTo(card.link)">Go To {{card.goTo}}</button>
|
||||
<button *ngIf="card.id === 'capacity'" (click)="onsortChannelsBy()" mat-menu-item>Sort By {{sortField === 'Channel Balance' ? 'Capacity' : 'Channel Balance'}}</button>
|
||||
<button *ngIf="card.id === 'capacity'" (click)="onsortChannelsBy()" mat-menu-item>Sort By {{sortField === 'Balance Score' ? 'Capacity' : 'Balance Score'}}</button>
|
||||
</mat-menu>
|
||||
</mat-card-title>
|
||||
</mat-card-header>
|
||||
|
|
|
|||
|
|
@ -33,7 +33,7 @@ export class HomeComponent implements OnInit, OnDestroy {
|
|||
public userPersonaEnum = UserPersonaEnum;
|
||||
public activeChannels = 0;
|
||||
public inactiveChannels = 0;
|
||||
public channelBalances = {localBalance: 0, remoteBalance: 0};
|
||||
public channelBalances = {localBalance: 0, remoteBalance: 0, balancedness: '0'};
|
||||
public selNode: SelNodeChild = {};
|
||||
public fees: Fees;
|
||||
public information: GetInfo = {};
|
||||
|
|
@ -50,7 +50,7 @@ export class HomeComponent implements OnInit, OnDestroy {
|
|||
public screenSize = '';
|
||||
public operatorCardHeight = '330px';
|
||||
public merchantCardHeight = '65px';
|
||||
public sortField = 'Channel Balance';
|
||||
public sortField = 'Balance Score';
|
||||
public flgLoading: Array<Boolean | 'error'> = [true, true, true, true, true, true, true, true]; // 0: Info, 1: Fee, 2: Wallet, 3: Channel, 4: Network
|
||||
private unSubs: Array<Subject<void>> = [new Subject(), new Subject(), new Subject()];
|
||||
|
||||
|
|
@ -142,8 +142,11 @@ export class HomeComponent implements OnInit, OnDestroy {
|
|||
if (this.flgLoading[2] !== 'error') {
|
||||
this.flgLoading[2] = false;
|
||||
}
|
||||
let local = (rtlStore.totalLocalBalance) ? +rtlStore.totalLocalBalance : 0;
|
||||
let remote = (rtlStore.totalRemoteBalance) ? +rtlStore.totalRemoteBalance : 0;
|
||||
let total = local + remote;
|
||||
this.channelBalances = { localBalance: local, remoteBalance: remote, balancedness: (1 - Math.abs((local-remote)/total)).toFixed(3) };
|
||||
|
||||
this.channelBalances = { localBalance: rtlStore.totalLocalBalance, remoteBalance: rtlStore.totalRemoteBalance };
|
||||
this.balances.lightning = rtlStore.totalLocalBalance;
|
||||
if (this.flgLoading[5] !== 'error') {
|
||||
this.flgLoading[5] = false;
|
||||
|
|
@ -199,7 +202,7 @@ export class HomeComponent implements OnInit, OnDestroy {
|
|||
}
|
||||
|
||||
onsortChannelsBy() {
|
||||
if (this.sortField === 'Channel Balance') {
|
||||
if (this.sortField === 'Balance Score') {
|
||||
this.sortField = 'Capacity';
|
||||
this.allChannelsCapacity = this.allChannels.sort(function (a, b) {
|
||||
const x = +a.local_balance + +a.remote_balance;
|
||||
|
|
@ -207,7 +210,7 @@ export class HomeComponent implements OnInit, OnDestroy {
|
|||
return ((x > y) ? -1 : ((x < y) ? 1 : 0));
|
||||
});
|
||||
} else {
|
||||
this.sortField = 'Channel Balance';
|
||||
this.sortField = 'Balance Score';
|
||||
this.allChannelsCapacity = JSON.parse(JSON.stringify(this.commonService.sortDescByKey(this.allChannels, 'balancedness')));
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -19,7 +19,10 @@
|
|||
</ng-container>
|
||||
<ng-container matColumnDef="amount">
|
||||
<th mat-header-cell *matHeaderCellDef mat-sort-header arrowPosition="before"> Amount (Sats) </th>
|
||||
<td mat-cell *matCellDef="let transaction"><span fxLayoutAlign="end center">{{transaction.amount | number}}</span></td>
|
||||
<td mat-cell *matCellDef="let transaction">
|
||||
<span fxLayoutAlign="end center" *ngIf="transaction.amount > 0 || transaction.amount === 0">{{transaction.amount | number}}</span>
|
||||
<span fxLayoutAlign="end center" class="red" *ngIf="transaction.amount < 0">({{transaction.amount * -1 | number}})</span>
|
||||
</td>
|
||||
</ng-container>
|
||||
<ng-container matColumnDef="total_fees">
|
||||
<th mat-header-cell *matHeaderCellDef mat-sort-header arrowPosition="before"> Fees (Sats) </th>
|
||||
|
|
|
|||
|
|
@ -45,9 +45,9 @@
|
|||
</td>
|
||||
</ng-container>
|
||||
<ng-container matColumnDef="actions">
|
||||
<th mat-header-cell *matHeaderCellDef fxLayoutAlign="end center" class="pl-1">
|
||||
<div fxFlex="100" class="bordered-box table-actions-select" fxLayoutAlign="center center">
|
||||
<mat-select placeholder="Table Actions" tabindex="1" class="mr-0">
|
||||
<th mat-header-cell *matHeaderCellDef class="pl-1">
|
||||
<div class="bordered-box table-actions-select">
|
||||
<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-select>
|
||||
|
|
|
|||
|
|
@ -82,12 +82,10 @@ export class ChannelOpenTableComponent implements OnInit, OnDestroy {
|
|||
|
||||
onChannelUpdate(channelToUpdate: any) {
|
||||
if (channelToUpdate === 'all') {
|
||||
const titleMsg = 'Updated fee policy for all the Channels';
|
||||
const confirmationMsg = [];
|
||||
this.store.dispatch(new RTLActions.OpenConfirmation({ data: {
|
||||
type: AlertTypeEnum.CONFIRM,
|
||||
alertTitle: 'Update All Channels Fee Policy',
|
||||
titleMessage: titleMsg,
|
||||
alertTitle: 'Update Fee Policy for all Channels',
|
||||
noBtnText: 'Cancel',
|
||||
yesBtnText: 'Update All Channels',
|
||||
message: confirmationMsg,
|
||||
|
|
@ -95,7 +93,7 @@ export class ChannelOpenTableComponent implements OnInit, OnDestroy {
|
|||
getInputs: [
|
||||
{placeholder: 'Base Fee (mSat)', inputType: DataTypeEnum.NUMBER.toLowerCase(), inputValue: 1000, width: 32},
|
||||
{placeholder: 'Fee Rate (mili mSat)', inputType: DataTypeEnum.NUMBER.toLowerCase(), inputValue: 1, min: 1, width: 32},
|
||||
{placeholder: 'Time Lock Delta', inputType: DataTypeEnum.NUMBER.toLowerCase(), inputValue: 144, width: 32}
|
||||
{placeholder: 'Time Lock Delta', inputType: DataTypeEnum.NUMBER.toLowerCase(), inputValue: 40, width: 32}
|
||||
]
|
||||
}}));
|
||||
this.rtlEffects.closeConfirm
|
||||
|
|
@ -126,11 +124,11 @@ export class ChannelOpenTableComponent implements OnInit, OnDestroy {
|
|||
}
|
||||
this.logger.info(this.myChanPolicy);
|
||||
this.store.dispatch(new RTLActions.CloseSpinner());
|
||||
const titleMsg = 'Update values for channel point: ' + channelToUpdate.channel_point;
|
||||
const titleMsg = 'Update fee policy for channel point: ' + channelToUpdate.channel_point;
|
||||
const confirmationMsg = [];
|
||||
this.store.dispatch(new RTLActions.OpenConfirmation({ data: {
|
||||
type: AlertTypeEnum.CONFIRM,
|
||||
alertTitle: 'Update Channel',
|
||||
alertTitle: 'Update Fee Policy',
|
||||
titleMessage: titleMsg,
|
||||
noBtnText: 'Cancel',
|
||||
yesBtnText: 'Update Channel',
|
||||
|
|
|
|||
|
|
@ -11,7 +11,7 @@
|
|||
</button>
|
||||
</div>
|
||||
</form>
|
||||
<div fxLayout="column" fxLayoutAlign="start stretch">
|
||||
<div fxLayout="column">
|
||||
<div fxLayout="column" fxLayout.gt-xs="row" fxLayoutAlign.gt-xs="start center" fxLayoutAlign="start stretch" class="padding-gap-x page-sub-title-container mt-2">
|
||||
<div fxFlex="70">
|
||||
<fa-icon [icon]="faUsers" class="page-title-img mr-1"></fa-icon>
|
||||
|
|
@ -23,27 +23,25 @@
|
|||
</div>
|
||||
</mat-form-field>
|
||||
</div>
|
||||
<div perfectScrollbar class="table-container">
|
||||
<div perfectScrollbar fxLayout="row" fxLayoutAlign="start center" fxFlex="100" class="table-container">
|
||||
<mat-progress-bar *ngIf="flgLoading[0]===true" mode="indeterminate"></mat-progress-bar>
|
||||
<table mat-table #table [dataSource]="peers" matSort [ngClass]="{'overflow-auto error-border': flgLoading[0]==='error','overflow-auto': true}">
|
||||
<ng-container matColumnDef="alias">
|
||||
<th mat-header-cell *matHeaderCellDef mat-sort-header> Alias </th>
|
||||
<td mat-cell *matCellDef="let peer"> {{peer?.alias}} </td>
|
||||
</ng-container>
|
||||
<ng-container matColumnDef="pub_key">
|
||||
<th mat-header-cell *matHeaderCellDef mat-sort-header> Pub Key </th>
|
||||
<td mat-cell *matCellDef="let peer">
|
||||
<div> {{peer?.pub_key}} </div>
|
||||
</td>
|
||||
<ng-container matColumnDef="alias">
|
||||
<th mat-header-cell *matHeaderCellDef mat-sort-header> Alias </th>
|
||||
<td mat-cell *matCellDef="let peer" [ngStyle]="{'max-width': (screenSize === screenSizeEnum.XS) ? '5rem' : '10rem'}"> {{peer?.alias}} </td>
|
||||
</ng-container>
|
||||
<ng-container matColumnDef="pub_key">
|
||||
<th mat-header-cell *matHeaderCellDef mat-sort-header> Public Key </th>
|
||||
<td mat-cell *matCellDef="let peer" [ngStyle]="{'max-width': (screenSize === screenSizeEnum.XS) ? '5rem' : '20rem'}"> {{peer?.pub_key}} </td>
|
||||
</ng-container>
|
||||
<ng-container matColumnDef="sat_sent">
|
||||
<th mat-header-cell *matHeaderCellDef mat-sort-header arrowPosition="before">
|
||||
{{information?.smaller_currency_unit}} Sent </th>
|
||||
Sats Sent </th>
|
||||
<td mat-cell *matCellDef="let peer"><span fxLayoutAlign="end center"> {{peer?.sat_sent | number}} </span></td>
|
||||
</ng-container>
|
||||
<ng-container matColumnDef="sat_recv">
|
||||
<th mat-header-cell *matHeaderCellDef mat-sort-header arrowPosition="before">
|
||||
{{information?.smaller_currency_unit}} Recv </th>
|
||||
Sats Received </th>
|
||||
<td mat-cell *matCellDef="let peer"><span fxLayoutAlign="end center"> {{peer?.sat_recv | number}} </span></td>
|
||||
</ng-container>
|
||||
<ng-container matColumnDef="ping_time">
|
||||
|
|
|
|||
|
|
@ -1,18 +1,16 @@
|
|||
.mat-column-alias {
|
||||
flex: 0 0 15%;
|
||||
width: 15%;
|
||||
flex: 1 1 10%;
|
||||
white-space: nowrap;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
}
|
||||
|
||||
.mat-column-pub_key {
|
||||
flex: 0 0 35%;
|
||||
width: 35%;
|
||||
flex: 1 1 20%;
|
||||
white-space: nowrap;
|
||||
overflow: hidden;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
padding: 0 2rem;
|
||||
padding-left: 2rem;
|
||||
}
|
||||
|
||||
.mat-column-ping_time {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue