diff --git a/client/admin/src/app/app.config.ts b/client/admin/src/app/app.config.ts
index dd9ab72..280f53e 100644
--- a/client/admin/src/app/app.config.ts
+++ b/client/admin/src/app/app.config.ts
@@ -1,5 +1,5 @@
import { ApplicationConfig, provideZoneChangeDetection } from '@angular/core';
-import { provideRouter, withDebugTracing } from '@angular/router';
+import { provideRouter, } from '@angular/router';
import { environment } from './../environments/environment';
import {
HttpRequest,
@@ -43,7 +43,7 @@ export function authIntercept(
export const appConfig: ApplicationConfig = {
providers: [
provideZoneChangeDetection({ eventCoalescing: true }),
- provideRouter(routes, withDebugTracing()),
+ provideRouter(routes),
provideHttpClient(withInterceptors([apiBaseInterceptor, authIntercept])),
],
};
diff --git a/client/admin/src/app/talkgroup.ts b/client/admin/src/app/talkgroup.ts
index feaa479..5ed74fe 100644
--- a/client/admin/src/app/talkgroup.ts
+++ b/client/admin/src/app/talkgroup.ts
@@ -1,10 +1,3 @@
-import {
- matFireTruckOutline,
- matLocalPoliceOutline,
- matEmergencyOutline,
- matDirectionsBusOutline,
-} from '@ng-icons/material-icons/outline';
-
export interface TGID {
sys: number;
tg: number;
@@ -41,6 +34,18 @@ export interface Metadata {
icon: string | null;
}
+ export interface IconMap {
+ [name: string]: string;
+ }
+
+export const iconMapping: IconMap = {
+ 'police': 'matLocalPoliceOutline',
+ 'fire': 'matFireTruckOutline',
+ 'ems': 'matEmergencyOutline',
+ 'bus': 'matDirectionsBusOutline',
+ '': 'matGroupWorkOutline',
+};
+
export class Talkgroup {
id!: number;
system_id!: number;
@@ -79,12 +84,7 @@ export class Talkgroup {
}
iconMap(icon: string): string {
- return {
- police: matLocalPoliceOutline,
- fire: matFireTruckOutline,
- ems: matEmergencyOutline,
- bus: matDirectionsBusOutline,
- }[icon]!;
+ return iconMapping[icon]!;
}
}
diff --git a/client/admin/src/app/talkgroups/talkgroup-record/talkgroup-record.component.html b/client/admin/src/app/talkgroups/talkgroup-record/talkgroup-record.component.html
index f04692c..8dff380 100644
--- a/client/admin/src/app/talkgroups/talkgroup-record/talkgroup-record.component.html
+++ b/client/admin/src/app/talkgroups/talkgroup-record/talkgroup-record.component.html
@@ -1,5 +1,5 @@
Rules:
@@ -71,13 +65,10 @@
name="icon"
id="icon"
formControlName="icon"
- [(ngModel)]="tg.icon"
>
-
-
-
-
-
+ @for(opt of iconMapping | keyvalue; track opt) {
+
+ }
diff --git a/client/admin/src/app/talkgroups/talkgroup-record/talkgroup-record.component.ts b/client/admin/src/app/talkgroups/talkgroup-record/talkgroup-record.component.ts
index fc725cd..b8384a9 100644
--- a/client/admin/src/app/talkgroups/talkgroup-record/talkgroup-record.component.ts
+++ b/client/admin/src/app/talkgroups/talkgroup-record/talkgroup-record.component.ts
@@ -1,5 +1,5 @@
import { Component, inject } from '@angular/core';
-import { Talkgroup, TalkgroupUpdate } from '../../talkgroup';
+import { Talkgroup, TalkgroupUpdate, IconMap, iconMapping } from '../../talkgroup';
import { TalkgroupService } from '../talkgroups.service';
import { AlertRuleBuilderComponent } from './alert-rule-builder/alert-rule-builder.component';
import { CommonModule } from '@angular/common';
@@ -22,6 +22,7 @@ import { Observable } from 'rxjs';
})
export class TalkgroupRecordComponent {
tg!: Talkgroup;
+ iconMapping: IconMap = iconMapping;
tgService: TalkgroupService = inject(TalkgroupService);
form!: FormGroup;
@@ -39,17 +40,19 @@ export class TalkgroupRecordComponent {
.getTalkgroup(Number(sysId), Number(tgId))
.subscribe((data: Talkgroup) => {
this.tg = data;
+ this.form = new FormGroup({
+ name: new FormControl(this.tg.name),
+ alpha_tag: new FormControl(this.tg.alpha_tag),
+ tg_group: new FormControl(this.tg.tg_group),
+ frequency: new FormControl(this.tg.frequency),
+ alert: new FormControl(this.tg.alert),
+ weight: new FormControl(this.tg.weight),
+ icon: new FormControl(this.tg.icon),
+ });
+ console.log(this.tg.icon);
});
- this.form = new FormGroup({
- name: new FormControl(''),
- alpha_tag: new FormControl(''),
- tg_group: new FormControl(''),
- frequency: new FormControl(0),
- alert: new FormControl(true),
- weight: new FormControl(1.0),
- icon: new FormControl(''),
- });
+
}
submit() {
@@ -59,22 +62,22 @@ export class TalkgroupRecordComponent {
id: this.tg.id,
};
if (this.form.controls['name'].dirty) {
- tgu.name = this.tg.name;
+ tgu.name = this.form.controls['name'].value;
}
if (this.form.controls['alpha_tag'].dirty) {
- tgu.alpha_tag = this.tg.alpha_tag;
+ tgu.alpha_tag = this.form.controls['alpha_tag'].value;
}
if (this.form.controls['tg_group'].dirty) {
- tgu.tg_group = this.tg.tg_group;
+ tgu.tg_group = this.form.controls['tg_group'].value;
}
if (this.form.controls['frequency'].dirty) {
- tgu.frequency = this.tg.frequency;
+ tgu.frequency = this.form.controls['frequency'].value;
}
if (this.form.controls['alert'].dirty) {
- tgu.alert = this.tg.alert;
+ tgu.alert = this.form.controls['alert'].value;
}
if (this.form.controls['weight'].dirty) {
- tgu.weight = Number(this.tg.weight);
+ tgu.weight = Number(this.form.controls['weight'].value);
}
if (this.form.controls['icon'].dirty) {
if (tgu.metadata == null) {
@@ -83,7 +86,7 @@ export class TalkgroupRecordComponent {
if (this.tg.icon == null || this.tg.icon == '') {
tgu.metadata = Object.assign(tgu.metadata, {icon: undefined});
} else {
- tgu.metadata = Object.assign(tgu.metadata!, { icon: this.tg.icon });
+ tgu.metadata = Object.assign(tgu.metadata!, { icon: this.form.controls['icon'] });
}
}
this.tgService
diff --git a/client/admin/src/app/talkgroups/talkgroups.component.css b/client/admin/src/app/talkgroups/talkgroups.component.css
index e69de29..c4d0414 100644
--- a/client/admin/src/app/talkgroups/talkgroups.component.css
+++ b/client/admin/src/app/talkgroups/talkgroups.component.css
@@ -0,0 +1,2 @@
+.tgIcon {
+}
\ No newline at end of file
diff --git a/client/admin/src/app/talkgroups/talkgroups.component.html b/client/admin/src/app/talkgroups/talkgroups.component.html
index 36d4295..c41bd40 100644
--- a/client/admin/src/app/talkgroups/talkgroups.component.html
+++ b/client/admin/src/app/talkgroups/talkgroups.component.html
@@ -6,19 +6,24 @@
|
Sys |
Sys ID |
+ Group |
Name |
+ Alpha |
TG ID |
Learned |
|
- @for (tg of talkgroups$ | async; track tg.id) {
+ @for (tg of talkgroups$ | async ; track tg.id) {
- {{ tg.icon }} |
+
+ |
{{ tg.system?.name }} |
{{ tg.system?.id }} |
+ {{ tg.tg_group }} |
{{ tg.name }} |
+ {{ tg.alpha_tag }} |
{{ tg.tgid }} |
{{ tg?.learned ? "Y" : "" }} |
diff --git a/client/admin/src/app/talkgroups/talkgroups.component.ts b/client/admin/src/app/talkgroups/talkgroups.component.ts
index 27915df..eeb5705 100644
--- a/client/admin/src/app/talkgroups/talkgroups.component.ts
+++ b/client/admin/src/app/talkgroups/talkgroups.component.ts
@@ -1,13 +1,52 @@
-import { Component, inject } from '@angular/core';
+import { Component, inject, Pipe, PipeTransform } from '@angular/core';
import { TalkgroupService } from './talkgroups.service';
import { NgIconComponent, provideIcons } from '@ng-icons/core';
import { ionCreateOutline } from '@ng-icons/ionicons';
-import { Talkgroup } from '../talkgroup';
+import {
+ matFireTruckOutline,
+ matLocalPoliceOutline,
+ matEmergencyOutline,
+ matDirectionsBusOutline,
+ matGroupWorkOutline,
+} from '@ng-icons/material-icons/outline';
+import { Talkgroup, iconMapping } from '../talkgroup';
import { ActivatedRoute } from '@angular/router';
import { Observable } from 'rxjs';
import { switchMap } from 'rxjs/operators';
import { RouterModule, RouterOutlet, RouterLink } from '@angular/router';
import { CommonModule } from '@angular/common';
+import { DomSanitizer, SafeHtml } from '@angular/platform-browser';
+
+
+@Pipe({
+ standalone: true,
+ name: 'iconify',
+})
+export class IconifyPipe implements PipeTransform {
+ transform(value: Talkgroup): Talkgroup {
+ if (value?.metadata?.icon != null) {
+ value.iconSvg = iconMapping[value?.metadata?.icon];
+ } else if (value?.metadata?.icon == undefined) {
+ value.iconSvg = iconMapping[''];
+ }
+ return value;
+ }
+}
+
+@Pipe({
+ standalone: true,
+ name: 'sanitizeHtml'
+})
+export class SanitizeHtmlPipe implements PipeTransform {
+
+ constructor(private _sanitizer:DomSanitizer) {
+ }
+
+ transform(v:string):SafeHtml {
+ return this._sanitizer.bypassSecurityTrustHtml(v);
+ }
+}
+
@Component({
selector: 'talkgroups',
@@ -18,10 +57,18 @@ import { CommonModule } from '@angular/common';
RouterModule,
RouterLink,
CommonModule,
+ IconifyPipe,
+ SanitizeHtmlPipe,
],
templateUrl: './talkgroups.component.html',
styleUrl: './talkgroups.component.css',
- providers: [provideIcons({ ionCreateOutline })],
+ providers: [provideIcons({ ionCreateOutline,
+ matFireTruckOutline,
+ matLocalPoliceOutline,
+ matEmergencyOutline,
+ matDirectionsBusOutline,
+ matGroupWorkOutline,
+})],
})
export class TalkgroupsComponent {
selectedSys: number = 0;
|