All files / src/app/components/signals-values-table signals-values-table.component.html

68.58% Statements 107/156
71.42% Branches 10/14
38.46% Functions 5/13
79.56% Lines 74/93

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 1474x 1976x     3952x 6x   3952x 10x 4x 1980x 3952x     4x                   4x 4x 4x 1976x 1976x   4x       4x 4x 4x 1976x 1976x   4x   11400x     22820x 22800x 20x 22800x 2x 1368x 2x                   2x     4x 1976x 4x       4x     2x 1368x 2x       2x     2x 1368x 2x       2x     2x 1368x 2x               2x   20x 8x 3952x     20x 4x 4x   4x   11x 3411x 11x 11x 3411x 11x   3400x 21992x         1474x   57x 9573x   57x   3400x   11x   4x   3952x 4x 3952x 40x   4x  
<p-table showGridlines [value]="rows" [columns]="selectedColumns" [reorderableColumns]="true"
    [tableStyle]="{ 'min-width': '60rem' }" (onRowReorder)="onRowReorder($event)" [loading]="isLoading">
    <ng-template #caption>
        <div class="toolbar">
            <app-multi-select-signals [selectionLimit]="signalsSelectionLimit"
                (finishedLoadingSignals)="handleSignalsLoaded()" />
            <div class="toolbar-element">
                <app-refresh-rate-selector [isResponseSlowerThanRefresh]="isResponseSlowerThanRefresh"
                    (selectionChanged)="handleRefreshRateChange($event)">
                </app-refresh-rate-selector>
                <p-multiselect display="chip" [options]="columns" [(ngModel)]="selectedColumns" optionLabel="label"
                    selectedItemsLabel="{0} columns selected" [style]="{ 'min-width': '200px' }"
                    placeholder="Choose Columns" />
            </div>
        </div>
 
 
 
    </ng-template>
    <ng-template #header let-columns>
        <tr>
            <th pSortableColumn="device_name">
                <div class="table-header">
                    <div class="name-sort">
                        <div>Device</div>
                        <p-sortIcon field="device_name"></p-sortIcon>
                    </div>
                    <p-columnFilter field="device_name" display="menu" matchMode="contains" [showOperator]="false"
                        [showMatchModes]="false" [showAddButton]="false" />
                </div>
            </th>
            <th pSortableColumn="ticker">
                <div class="table-header">
                    <div class="name-sort">
                        <div>Ticker</div>
                        <p-sortIcon field="ticker"></p-sortIcon>
                    </div>
                    <p-columnFilter field="ticker" display="menu" matchMode="contains" [showOperator]="false"
                        [showMatchModes]="false" [showAddButton]="false" />
                </div>
            </th>
 
            <th *ngFor="let col of selectedColumns" pReorderableColumn [pSortableColumn]="col.field">
                <div class="table-header">
                    <div class="name-sort">
                        <div>{{col.label}}</div>
                        <p-sortIcon [field]="col.field" />
                    </div>
                    @if (col.field === "frequency") {
                    <p-columnFilter field="frequency" display="menu" matchMode="between" [showOperator]="false"
                        [showMatchModes]="false" [showAddButton]="false">
                        <ng-template #filter let-filter="filterCallback">
                            <p-slider [(ngModel)]="frequencyThresholds" [min]="getArrayMin(this.frequencies)"
                                [max]="getArrayMax(this.frequencies)" [range]="true" class="m-4"
                                (onSlideEnd)="filter($event.values)" />
                            <div class="flex items-center px-2">
                                <span *ngIf="!frequencyThresholds">0</span>
                                <span *ngIf="frequencyThresholds">{{ frequencyThresholds[0] }} - {{
                                    frequencyThresholds[1] }}</span>
                            </div>
                        </ng-template>
                    </p-columnFilter>
                    }
                    @else if (col.field === "unit") {
                    <p-columnFilter field="unit" display="menu" matchMode="equals" [showOperator]="false"
                        [showMatchModes]="false" [showAddButton]="false">
                        <ng-template #filter let-filter="filterCallback">
                            <p-select [options]="units" (onChange)="filter($event.value)" placeholder="Select unit"
                                class="w-full"></p-select>
                        </ng-template>
                    </p-columnFilter>
                    }
                    @else if (col.field === "type") {
                    <p-columnFilter field="type" display="menu" matchMode="equals" [showOperator]="false"
                        [showMatchModes]="false" [showAddButton]="false">
                        <ng-template #filter let-filter="filterCallback">
                            <p-select [options]="types" (onChange)="filter($event.value)" placeholder="Select type"
                                class="w-full"></p-select>
                        </ng-template>
                    </p-columnFilter>
                    }
                    @else if (col.field === "precision_digits") {
                    <p-columnFilter field="precision_digits" display="menu" matchMode="equals" [showOperator]="false"
                        [showMatchModes]="false" [showAddButton]="false">
                        <ng-template #filter let-filter="filterCallback">
                            <p-select [options]="precisionDigits" (onChange)="filter($event.value)"
                                placeholder="Select precision" class="w-full"></p-select>
                        </ng-template>
                    </p-columnFilter>
                    }
                    @else if (col.field === "status") {
                    <p-columnFilter field="status.status" display="menu" matchMode="equals" [showOperator]="false"
                        [showMatchModes]="false" [showAddButton]="false">
                        <ng-template #filter let-filter="filterCallback">
                            <p-select [options]="statuses" (onChange)="filter($event.value)" placeholder="Select status"
                                class="w-full">
                                <ng-template let-status #item>
                                    <p-badge [value]="status" [severity]="getSeverity(status)"></p-badge>
                                </ng-template>
                            </p-select>
                        </ng-template>
                    </p-columnFilter>
                    }
                    @else {
                    <p-columnFilter [field]="col.field" display="menu" matchMode="contains" [showOperator]="false"
                        [showMatchModes]="false" [showAddButton]="false" />
                    }
                </div>
            </th>
            <th></th>
        </tr>
    </ng-template>
    <ng-template #body let-row let-columns="columns">
        <tr>
            <td>
                {{ row.device_name }}
            </td>
            <td>
                {{ row.ticker }}
            </td>
 
            <td *ngFor="let column of columns">
                @if (row[column.field] !== null && row.data_type === 'epoch' && (column.field === 'value' ||
                column.field === 'forced_value')) {
                {{ row[column.field] * 1000 | date:'yyyy/MM/dd - HH:mm:ss' }}
                }
                @else if (column.field === 'status') {
                <p-badge [value]="row['status'].status" [severity]="getSeverity(row['status'].status)" />
                }
                @else {
                {{ row[column.field] }}
                }
            </td>
            <td>
                <i class="pi pi-eye open-icon" aria-hidden="true" (click)="showSignal(row)" [id]="row.signal_id"></i>
            </td>
        </tr>
    </ng-template>
</p-table>
 
<p-dialog class="signal-card-dialog" header="Signal details" [modal]="true" [(visible)]="signalDialogVisible"
    (onHide)="hideSignal()">
    <div class="card-container"><app-signal-card *ngIf="selectedSignal"
            [signalId]="selectedSignal.signal_id"></app-signal-card></div>
 
</p-dialog>