Commit 5833ac3521a0b01bfdbb9ce1fc9f850be056411f

Authored by Igor Kulikov
Committed by GitHub
2 parents a1f2ef40 ce649822

Merge pull request #3281 from vvlladd28/improvement/sort-meta-key

Add sort metadata key for rule chain
@@ -23,6 +23,7 @@ import { @@ -23,6 +23,7 @@ import {
23 NodeScriptTestDialogComponent, 23 NodeScriptTestDialogComponent,
24 NodeScriptTestDialogData 24 NodeScriptTestDialogData
25 } from '@shared/components/dialog/node-script-test-dialog.component'; 25 } from '@shared/components/dialog/node-script-test-dialog.component';
  26 +import { sortObjectKeys } from '@core/utils';
26 27
27 @Injectable({ 28 @Injectable({
28 providedIn: 'root' 29 providedIn: 'root'
@@ -71,10 +72,12 @@ export class NodeScriptTestService { @@ -71,10 +72,12 @@ export class NodeScriptTestService {
71 } 72 }
72 if (!metadata) { 73 if (!metadata) {
73 metadata = { 74 metadata = {
74 - deviceType: 'default',  
75 deviceName: 'Test Device', 75 deviceName: 'Test Device',
  76 + deviceType: 'default',
76 ts: new Date().getTime() + '' 77 ts: new Date().getTime() + ''
77 }; 78 };
  79 + } else {
  80 + metadata = sortObjectKeys(metadata);
78 } 81 }
79 if (!msgType) { 82 if (!msgType) {
80 msgType = 'POST_TELEMETRY_REQUEST'; 83 msgType = 'POST_TELEMETRY_REQUEST';
@@ -510,3 +510,10 @@ export function padValue(val: any, dec: number): string { @@ -510,3 +510,10 @@ export function padValue(val: any, dec: number): string {
510 strVal = (n ? '-' : '') + strVal; 510 strVal = (n ? '-' : '') + strVal;
511 return strVal; 511 return strVal;
512 } 512 }
  513 +
  514 +export function sortObjectKeys<T>(obj: T): T {
  515 + return Object.keys(obj).sort().reduce((acc, key) => {
  516 + acc[key] = obj[key];
  517 + return acc;
  518 + }, {} as T);
  519 +}
@@ -38,6 +38,7 @@ import { @@ -38,6 +38,7 @@ import {
38 EventContentDialogComponent, 38 EventContentDialogComponent,
39 EventContentDialogData 39 EventContentDialogData
40 } from '@home/components/event/event-content-dialog.component'; 40 } from '@home/components/event/event-content-dialog.component';
  41 +import { sortObjectKeys } from '@core/utils';
41 42
42 export class EventTableConfig extends EntityTableConfig<Event, TimePageLink> { 43 export class EventTableConfig extends EntityTableConfig<Event, TimePageLink> {
43 44
@@ -209,7 +210,7 @@ export class EventTableConfig extends EntityTableConfig<Event, TimePageLink> { @@ -209,7 +210,7 @@ export class EventTableConfig extends EntityTableConfig<Event, TimePageLink> {
209 icon: 'more_horiz', 210 icon: 'more_horiz',
210 isEnabled: (entity) => entity.body.metadata ? entity.body.metadata.length > 0 : false, 211 isEnabled: (entity) => entity.body.metadata ? entity.body.metadata.length > 0 : false,
211 onAction: ($event, entity) => this.showContent($event, entity.body.metadata, 212 onAction: ($event, entity) => this.showContent($event, entity.body.metadata,
212 - 'event.metadata', ContentType.JSON) 213 + 'event.metadata', ContentType.JSON, true)
213 }, 214 },
214 '40px'), 215 '40px'),
215 new EntityActionTableColumn<Event>('error', 'event.error', 216 new EntityActionTableColumn<Event>('error', 'event.error',
@@ -229,10 +230,15 @@ export class EventTableConfig extends EntityTableConfig<Event, TimePageLink> { @@ -229,10 +230,15 @@ export class EventTableConfig extends EntityTableConfig<Event, TimePageLink> {
229 } 230 }
230 } 231 }
231 232
232 - showContent($event: MouseEvent, content: string, title: string, contentType: ContentType = null): void { 233 + showContent($event: MouseEvent, content: string, title: string, contentType: ContentType = null, sortKeys = false): void {
233 if ($event) { 234 if ($event) {
234 $event.stopPropagation(); 235 $event.stopPropagation();
235 } 236 }
  237 + if (contentType === ContentType.JSON && sortKeys) {
  238 + try {
  239 + content = JSON.stringify(sortObjectKeys(JSON.parse(content)));
  240 + } catch (e) {}
  241 + }
236 this.dialog.open<EventContentDialogComponent, EventContentDialogData>(EventContentDialogComponent, { 242 this.dialog.open<EventContentDialogComponent, EventContentDialogData>(EventContentDialogComponent, {
237 disableClose: true, 243 disableClose: true,
238 panelClass: ['tb-dialog', 'tb-fullscreen-dialog'], 244 panelClass: ['tb-dialog', 'tb-fullscreen-dialog'],