diff --git a/src/main/angular/src/app/api/device/Device.ts b/src/main/angular/src/app/api/device/Device.ts index 2899ae1..1dc7f21 100644 --- a/src/main/angular/src/app/api/device/Device.ts +++ b/src/main/angular/src/app/api/device/Device.ts @@ -62,6 +62,10 @@ export abstract class Device { return a.position - b.position; } + public static compareTitle(a: Device, b: Device): number { + return a.title.localeCompare(b.title); + } + abstract updateProperty(property: Property): void; static filterByAreaIdAndRoomId(areaId: number | null, roomId: number | null): (_: Device) => boolean { diff --git a/src/main/angular/src/app/api/device/device.service.ts b/src/main/angular/src/app/api/device/device.service.ts index 46ae1ad..42aaf17 100644 --- a/src/main/angular/src/app/api/device/device.service.ts +++ b/src/main/angular/src/app/api/device/device.service.ts @@ -24,7 +24,7 @@ export class DeviceService { this.api.getList("device/findAll", Device.fromJson, compare, next); } - set(device: Device, key: string, value: any, next: (item: Device) => void): void { + set(device: Device, key: string, value: any, next?: (item: Device) => void): void { this.api.postReturnItem("device/set/" + device.id + "/" + key, value, Device.fromJson, next); } diff --git a/src/main/angular/src/app/app.component.html b/src/main/angular/src/app/app.component.html index 661d0e8..e532e72 100644 --- a/src/main/angular/src/app/app.component.html +++ b/src/main/angular/src/app/app.component.html @@ -3,9 +3,16 @@
Zeitpläne
-
+ +
Geräte
+
+ Rollläden +
+
+ Gruppen +
Massenausführungen diff --git a/src/main/angular/src/app/app.component.ts b/src/main/angular/src/app/app.component.ts index 37784e6..aa26a09 100644 --- a/src/main/angular/src/app/app.component.ts +++ b/src/main/angular/src/app/app.component.ts @@ -1,4 +1,5 @@ import {Component} from '@angular/core'; +import {Params, Router, UrlSegment} from "@angular/router"; @Component({ selector: 'app-root', @@ -8,10 +9,27 @@ import {Component} from '@angular/core'; export class AppComponent { title = 'angular'; + private url: UrlSegment[]; + + private params: Params; + constructor( - // nothing + readonly router: Router, ) { // nothing } + isRouteActive(base: string, type: string): boolean { + const parts = this.router.url.split(';'); + if (parts[0] === base) { + for (let i = 1; i < parts.length; i++) { + const param = parts[i].split('='); + if (param[0] === 'type' && param[1] === type) { + return true; + } + } + } + return false; + } + } diff --git a/src/main/angular/src/app/pages/device/editor/device-editor.component.ts b/src/main/angular/src/app/pages/device/editor/device-editor.component.ts index f0b9ef6..26e94c5 100644 --- a/src/main/angular/src/app/pages/device/editor/device-editor.component.ts +++ b/src/main/angular/src/app/pages/device/editor/device-editor.component.ts @@ -53,7 +53,7 @@ export class DeviceEditorComponent implements OnInit { delete(): void { if (confirm(this.getDeviceTypeTitle() + " \"" + this.device.title + "\" wirklich löschen?")) { - this.deviceService.delete(this.device, () => this.router.navigate(["/DeviceList"])); + this.deviceService.delete(this.device, () => this.router.navigate(["/DeviceList", {type: this.device.type}])); } } diff --git a/src/main/angular/src/app/pages/device/list/device-list.component.html b/src/main/angular/src/app/pages/device/list/device-list.component.html index 03991e0..2038c98 100644 --- a/src/main/angular/src/app/pages/device/list/device-list.component.html +++ b/src/main/angular/src/app/pages/device/list/device-list.component.html @@ -1,17 +1,13 @@
-
- +
- {{device.title}} +
@@ -24,7 +20,7 @@
- {{device.title}} +
@@ -38,7 +34,7 @@
- {{device.title}} +
diff --git a/src/main/angular/src/app/pages/device/list/device-list.component.ts b/src/main/angular/src/app/pages/device/list/device-list.component.ts index e098dd8..ab3e7fe 100644 --- a/src/main/angular/src/app/pages/device/list/device-list.component.ts +++ b/src/main/angular/src/app/pages/device/list/device-list.component.ts @@ -5,6 +5,7 @@ import {Device, DeviceShutter, DeviceStateScene, DeviceSwitch} from "../../../ap import {faEdit} from '@fortawesome/free-regular-svg-icons'; import {Scene} from "../../../api/scene/Scene"; import {SceneService} from "../../../api/scene/scene.service"; +import {ActivatedRoute} from "@angular/router"; @Component({ selector: 'app-device-list', @@ -19,30 +20,34 @@ export class DeviceListComponent implements OnInit { devices: Device[] = []; - scenes: Scene[] = []; + typeFilter: string; - createType: string = "DeviceSwitch"; + scenes: Scene[] = []; constructor( readonly deviceService: DeviceService, readonly sceneService: SceneService, readonly propertyService: PropertyService, + readonly activatedRoute: ActivatedRoute, ) { // nothing } ngOnInit(): void { - this.propertyService.subscribe(update => this.devices.forEach(d => d.updateProperty(update.payload))); + this.activatedRoute.params.subscribe(params => { + this.typeFilter = params['type']; + this.propertyService.subscribe(update => this.devices.forEach(d => d.updateProperty(update.payload))); - this.deviceService.subscribe(update => this.updateDevice(update.payload, update.existing)); - this.deviceService.findAll(devices => this.devices = devices); + this.deviceService.subscribe(update => this.updateDevice(update.payload, update.existing)); + this.deviceService.findAll(devices => this.devices = devices.filter(d => !this.typeFilter || this.typeFilter == d.type).sort(Device.compareTitle)); - this.sceneService.subscribe(update => this.updateScene(update.payload, update.existing)); - this.sceneService.findAll(scenes => this.scenes = scenes); + this.sceneService.subscribe(update => this.updateScene(update.payload, update.existing)); + this.sceneService.findAll(scenes => this.scenes = scenes); + }); } create(): void { - this.deviceService.create(this.createType, device => this.updateDevice(device, true)); + this.deviceService.create(this.typeFilter, device => this.updateDevice(device, true)); } private updateDevice(device: Device, existing: boolean): void { @@ -101,4 +106,8 @@ export class DeviceListComponent implements OnInit { return device.sceneNumbers.map(sceneNumber => this.scenes.find(scene => scene.number === sceneNumber)).filter(scene => scene !== undefined).map(s => s as Scene); } + set(device: Device, key: string, value: any): void { + this.deviceService.set(device, key, value); + } + } diff --git a/src/main/angular/src/environments/environment.ts b/src/main/angular/src/environments/environment.ts index eb18ddd..5e41d22 100644 --- a/src/main/angular/src/environments/environment.ts +++ b/src/main/angular/src/environments/environment.ts @@ -4,7 +4,7 @@ import {getBaseUrl} from "./UrlHelper"; -const PROD: boolean = false; +const PROD: boolean = true; export const environment = { production: false,