File tree Expand file tree Collapse file tree 9 files changed +121
-3
lines changed
Expand file tree Collapse file tree 9 files changed +121
-3
lines changed Original file line number Diff line number Diff line change 1+ < mat-expansion-panel class ="my-2 mx-3 ">
2+ < mat-expansion-panel-header >
3+ < mat-panel-title >
4+ < p >
5+ < strong > {{ 'IOTDEVICE.LATEST-DATAPACKAGES' | translate }}</ strong >
6+ </ p >
7+ </ mat-panel-title >
8+ </ mat-expansion-panel-header >
9+ < div class ="timestamps-container ">
10+ < div >
11+ < p *ngFor ="
12+ let metadata of sortedMetadata;
13+ let i = index
14+ ">
15+ < strong > {{ i + 1 }}</ strong >
16+ </ p >
17+ </ div >
18+ < div >
19+ < p *ngFor ="
20+ let metadata of sortedMetadata;
21+ let i = index
22+ ">
23+ {{ metadata.sentTime | tableDatePipe }}
24+ </ p >
25+ </ div >
26+ </ div >
27+ </ mat-expansion-panel >
Original file line number Diff line number Diff line change 1+ .timestamps-container {
2+ display : flex ;
3+ }
4+
Original file line number Diff line number Diff line change 1+ import {
2+ Component ,
3+ Input ,
4+ OnChanges ,
5+ OnInit ,
6+ SimpleChanges ,
7+ } from '@angular/core' ;
8+ import { sortBy } from '@shared/helpers/array.helper' ;
9+ import { ReceivedMessageMetadata } from '@shared/models/received-message-metadata.model' ;
10+
11+ @Component ( {
12+ selector : 'app-data-packages-timestamp' ,
13+ templateUrl : './data-packages-timestamp.component.html' ,
14+ styleUrls : [ './data-packages-timestamp.component.scss' ] ,
15+ } )
16+ export class DataPackagesTimestampComponent implements OnInit , OnChanges {
17+ @Input ( ) receivedMessagesMetadata : ReceivedMessageMetadata [ ] = [ ] ;
18+ sortedMetadata : ReceivedMessageMetadata [ ] = [ ] ;
19+
20+ ngOnInit ( ) : void { }
21+
22+ ngOnChanges ( changes : SimpleChanges ) : void {
23+ const { receivedMessagesMetadata } = changes ;
24+ if (
25+ receivedMessagesMetadata . currentValue !==
26+ receivedMessagesMetadata . previousValue
27+ ) {
28+ this . sortedMetadata = sortBy (
29+ receivedMessagesMetadata . currentValue ,
30+ 'sentTime' ,
31+ 'desc'
32+ ) ;
33+ }
34+ }
35+ }
Original file line number Diff line number Diff line change 1212 <!-- Datapackage, Downlink, API Key -->
1313 < mat-tab-group animationDuration ="200ms ">
1414 < mat-tab label ="{{'IOTDEVICE.DETAIL-TAB' | translate}} ">
15+ < ng-container *ngIf ="device.latestReceivedMessage; else noSentTime ">
1516 < app-data-package [latestReceivedMessage] ="device.latestReceivedMessage ">
1617 </ app-data-package >
18+ < mat-divider > </ mat-divider >
19+ < app-data-packages-timestamp [receivedMessagesMetadata] ="device.receivedMessagesMetadata ">
20+ </ app-data-packages-timestamp >
21+ </ ng-container >
22+ < ng-template #noSentTime >
23+ < p class ="my-2 mx-3 ">
24+ {{ 'IOTDEVICE.NO-DATAPACKAGE' | translate }}
25+ </ p >
26+ </ ng-template >
1727 </ mat-tab >
1828 < mat-tab label ="{{'IOTDEVICE.DOWNLINK-TAB' | translate}} " *ngIf ="canStartDownlink ">
1929 < app-downlink [device] ="device " [errorMessages] ="errorMessages "> </ app-downlink >
3545 </ div >
3646 </ div >
3747 </ div >
38- </ div >
48+ </ div >
Original file line number Diff line number Diff line change @@ -19,6 +19,7 @@ import { PipesModule } from '@shared/pipes/pipes.module';
1919import { DeviceModelComponent } from './iot-device-detail/device-model/device-model.component' ;
2020import { MonacoEditorModule } from 'ngx-monaco-editor' ;
2121import { DataPackageComponent } from './iot-device-detail/data-package/data-package.component' ;
22+ import { DataPackagesTimestampComponent } from './iot-device-detail/data-packages-timestamp/data-packages-timestamp.component' ;
2223
2324@NgModule ( {
2425 declarations : [
@@ -32,7 +33,8 @@ import { DataPackageComponent } from './iot-device-detail/data-package/data-pack
3233 DownlinkComponent ,
3334 DownlinkDialogComponent ,
3435 DeviceModelComponent ,
35- DataPackageComponent
36+ DataPackageComponent ,
37+ DataPackagesTimestampComponent ,
3638 ] ,
3739 exports : [
3840 IotDevicesTableComponent ,
Original file line number Diff line number Diff line change @@ -9,3 +9,20 @@ export const splitList = <T extends unknown>(
99
1010 return dataBatches ;
1111} ;
12+
13+ export const sortBy = < T > (
14+ value : T [ ] ,
15+ column : keyof T ,
16+ order : 'asc' | 'desc' = 'asc'
17+ ) : T [ ] => {
18+ if ( ! value ?. length ) {
19+ return value ;
20+ }
21+
22+ const copy = value . slice ( ) ;
23+ copy . sort ( ( a , b ) =>
24+ a [ column ] === b [ column ] ? 0 : a [ column ] > b [ column ] ? 1 : - 1
25+ ) ;
26+
27+ return order === 'asc' ? copy : copy . reverse ( ) ;
28+ } ;
Original file line number Diff line number Diff line change @@ -6,6 +6,7 @@ import { isGlobalAdminPipe } from './is-global-admin.pipe';
66import { CreatedUpdatedByPipe } from './created-updated-by.pipe' ;
77import { CustomDatePipe , CustomTableDatePipe } from './custom-date.pipe' ;
88import { FilterDevicesPipe } from './filter-devices.pipe' ;
9+ import { SortByPipe } from './sort-by.pipe' ;
910
1011@NgModule ( {
1112 declarations : [
@@ -16,6 +17,7 @@ import { FilterDevicesPipe } from './filter-devices.pipe';
1617 CustomTableDatePipe ,
1718 CreatedUpdatedByPipe ,
1819 FilterDevicesPipe ,
20+ SortByPipe
1921 ] ,
2022 imports : [ CommonModule ] ,
2123 exports : [
@@ -26,6 +28,7 @@ import { FilterDevicesPipe } from './filter-devices.pipe';
2628 CustomTableDatePipe ,
2729 CreatedUpdatedByPipe ,
2830 FilterDevicesPipe ,
31+ SortByPipe
2932 ] ,
3033} )
3134export class PipesModule { }
Original file line number Diff line number Diff line change 1+ import { Pipe , PipeTransform } from '@angular/core' ;
2+ import { sortBy } from '@shared/helpers/array.helper' ;
3+
4+ @Pipe ( { name : 'sortBy' } )
5+ export class SortByPipe implements PipeTransform {
6+ /**
7+ * Example:
8+ * ```
9+ * *ngFor="let c of arrayOfObjects | sortBy:<propertyName>:'asc'"
10+ * ```
11+ */
12+ transform < T > (
13+ value : T [ ] ,
14+ column : keyof T ,
15+ order : 'asc' | 'desc' = 'asc'
16+ ) : T [ ] {
17+ return sortBy ( value , column , order ) ;
18+ }
19+ }
Original file line number Diff line number Diff line change 172172 "AUTHORIZATIONHEADER" : " Authorization header" ,
173173 "NO-AUTHORIZATIONHEADER" : " Ingen Authorization header angivet" ,
174174 "ADD-TO-OPENDATADK" : " Send data til OpenDataDK" ,
175- "OPENDATA-DK" : " OpenDataDK" ,
175+ "OPENDATA-DK" : " OpenDataDK" ,
176176 "NO-OPENDATA-DK" : " Der er ikke oprettet nogen datadeling med Open Data DK endnu" ,
177177 "HTTP_PUSH" : " HTTP Push" ,
178178 "FIWARE" : " FIWARE"
677677 },
678678 "LORAWANSETUP" : " LoRaWAN specifik opsætning" ,
679679 "LATEST-DATAPACKAGE" : " Seneste datapakke sendt fra enheden:" ,
680+ "LATEST-DATAPACKAGES" : " Seneste modtagelser af datapakker (nyeste først):" ,
680681 "NO-DATAPACKAGE" : " Der er ikke modtaget nogle datapakker" ,
681682 "DATAPACKAGE" : " Datapakke" ,
682683 "LORA" : {
You can’t perform that action at this time.
0 commit comments