Showing
25 changed files
with
356 additions
and
328 deletions
@@ -75,12 +75,12 @@ import { | @@ -75,12 +75,12 @@ import { | ||
75 | StringOperation | 75 | StringOperation |
76 | } from '@shared/models/query/query.models'; | 76 | } from '@shared/models/query/query.models'; |
77 | import { alarmFields } from '@shared/models/alarm.models'; | 77 | import { alarmFields } from '@shared/models/alarm.models'; |
78 | -import { FirmwareService } from '@core/http/firmware.service'; | ||
79 | -import { EdgeService } from "@core/http/edge.service"; | 78 | +import { OtaPackageService } from '@core/http/ota-package.service'; |
79 | +import { EdgeService } from '@core/http/edge.service'; | ||
80 | import { Edge, EdgeEventType } from '@shared/models/edge.models'; | 80 | import { Edge, EdgeEventType } from '@shared/models/edge.models'; |
81 | -import { RuleChainType } from "@shared/models/rule-chain.models"; | ||
82 | -import { WidgetService } from "@core/http/widget.service"; | ||
83 | -import { DeviceProfileService } from "@core/http/device-profile.service"; | 81 | +import { RuleChainType } from '@shared/models/rule-chain.models'; |
82 | +import { WidgetService } from '@core/http/widget.service'; | ||
83 | +import { DeviceProfileService } from '@core/http/device-profile.service'; | ||
84 | 84 | ||
85 | @Injectable({ | 85 | @Injectable({ |
86 | providedIn: 'root' | 86 | providedIn: 'root' |
@@ -101,7 +101,7 @@ export class EntityService { | @@ -101,7 +101,7 @@ export class EntityService { | ||
101 | private dashboardService: DashboardService, | 101 | private dashboardService: DashboardService, |
102 | private entityRelationService: EntityRelationService, | 102 | private entityRelationService: EntityRelationService, |
103 | private attributeService: AttributeService, | 103 | private attributeService: AttributeService, |
104 | - private firmwareService: FirmwareService, | 104 | + private otaPackageService: OtaPackageService, |
105 | private widgetService: WidgetService, | 105 | private widgetService: WidgetService, |
106 | private deviceProfileService: DeviceProfileService, | 106 | private deviceProfileService: DeviceProfileService, |
107 | private utils: UtilsService | 107 | private utils: UtilsService |
@@ -142,8 +142,8 @@ export class EntityService { | @@ -142,8 +142,8 @@ export class EntityService { | ||
142 | case EntityType.ALARM: | 142 | case EntityType.ALARM: |
143 | console.error('Get Alarm Entity is not implemented!'); | 143 | console.error('Get Alarm Entity is not implemented!'); |
144 | break; | 144 | break; |
145 | - case EntityType.FIRMWARE: | ||
146 | - observable = this.firmwareService.getFirmwareInfo(entityId, config); | 145 | + case EntityType.OTA_PACKAGE: |
146 | + observable = this.otaPackageService.getOtaPackageInfo(entityId, config); | ||
147 | break; | 147 | break; |
148 | } | 148 | } |
149 | return observable; | 149 | return observable; |
@@ -359,9 +359,9 @@ export class EntityService { | @@ -359,9 +359,9 @@ export class EntityService { | ||
359 | case EntityType.ALARM: | 359 | case EntityType.ALARM: |
360 | console.error('Get Alarm Entities is not implemented!'); | 360 | console.error('Get Alarm Entities is not implemented!'); |
361 | break; | 361 | break; |
362 | - case EntityType.FIRMWARE: | 362 | + case EntityType.OTA_PACKAGE: |
363 | pageLink.sortOrder.property = 'title'; | 363 | pageLink.sortOrder.property = 'title'; |
364 | - entitiesObservable = this.firmwareService.getFirmwares(pageLink, config); | 364 | + entitiesObservable = this.otaPackageService.getOtaPackages(pageLink, config); |
365 | break; | 365 | break; |
366 | } | 366 | } |
367 | return entitiesObservable; | 367 | return entitiesObservable; |
ui-ngx/src/app/core/http/ota-package.service.ts
renamed from
ui-ngx/src/app/core/http/firmware.service.ts
@@ -20,40 +20,40 @@ import { PageLink } from '@shared/models/page/page-link'; | @@ -20,40 +20,40 @@ import { PageLink } from '@shared/models/page/page-link'; | ||
20 | import { defaultHttpOptionsFromConfig, defaultHttpUploadOptions, RequestConfig } from '@core/http/http-utils'; | 20 | import { defaultHttpOptionsFromConfig, defaultHttpUploadOptions, RequestConfig } from '@core/http/http-utils'; |
21 | import { Observable } from 'rxjs'; | 21 | import { Observable } from 'rxjs'; |
22 | import { PageData } from '@shared/models/page/page-data'; | 22 | import { PageData } from '@shared/models/page/page-data'; |
23 | -import { ChecksumAlgorithm, Firmware, FirmwareInfo, FirmwareType } from '@shared/models/firmware.models'; | 23 | +import { ChecksumAlgorithm, OtaPackage, OtaPackageInfo, OtaUpdateType } from '@shared/models/ota-package.models'; |
24 | import { catchError, map, mergeMap } from 'rxjs/operators'; | 24 | import { catchError, map, mergeMap } from 'rxjs/operators'; |
25 | import { deepClone } from '@core/utils'; | 25 | import { deepClone } from '@core/utils'; |
26 | 26 | ||
27 | @Injectable({ | 27 | @Injectable({ |
28 | providedIn: 'root' | 28 | providedIn: 'root' |
29 | }) | 29 | }) |
30 | -export class FirmwareService { | 30 | +export class OtaPackageService { |
31 | constructor( | 31 | constructor( |
32 | private http: HttpClient | 32 | private http: HttpClient |
33 | ) { | 33 | ) { |
34 | 34 | ||
35 | } | 35 | } |
36 | 36 | ||
37 | - public getFirmwares(pageLink: PageLink, config?: RequestConfig): Observable<PageData<FirmwareInfo>> { | ||
38 | - return this.http.get<PageData<FirmwareInfo>>(`/api/firmwares${pageLink.toQuery()}`, defaultHttpOptionsFromConfig(config)); | 37 | + public getOtaPackages(pageLink: PageLink, config?: RequestConfig): Observable<PageData<OtaPackageInfo>> { |
38 | + return this.http.get<PageData<OtaPackageInfo>>(`/api/otaPackages${pageLink.toQuery()}`, defaultHttpOptionsFromConfig(config)); | ||
39 | } | 39 | } |
40 | 40 | ||
41 | - public getFirmwaresInfoByDeviceProfileId(pageLink: PageLink, deviceProfileId: string, type: FirmwareType, | ||
42 | - hasData = true, config?: RequestConfig): Observable<PageData<FirmwareInfo>> { | ||
43 | - const url = `/api/firmwares/${deviceProfileId}/${type}/${hasData}${pageLink.toQuery()}`; | ||
44 | - return this.http.get<PageData<FirmwareInfo>>(url, defaultHttpOptionsFromConfig(config)); | 41 | + public getOtaPackagesInfoByDeviceProfileId(pageLink: PageLink, deviceProfileId: string, type: OtaUpdateType, |
42 | + hasData = true, config?: RequestConfig): Observable<PageData<OtaPackageInfo>> { | ||
43 | + const url = `/api/otaPackages/${deviceProfileId}/${type}/${hasData}${pageLink.toQuery()}`; | ||
44 | + return this.http.get<PageData<OtaPackageInfo>>(url, defaultHttpOptionsFromConfig(config)); | ||
45 | } | 45 | } |
46 | 46 | ||
47 | - public getFirmware(firmwareId: string, config?: RequestConfig): Observable<Firmware> { | ||
48 | - return this.http.get<Firmware>(`/api/firmware/${firmwareId}`, defaultHttpOptionsFromConfig(config)); | 47 | + public getOtaPackage(otaPackageId: string, config?: RequestConfig): Observable<OtaPackage> { |
48 | + return this.http.get<OtaPackage>(`/api/otaPackages/${otaPackageId}`, defaultHttpOptionsFromConfig(config)); | ||
49 | } | 49 | } |
50 | 50 | ||
51 | - public getFirmwareInfo(firmwareId: string, config?: RequestConfig): Observable<FirmwareInfo> { | ||
52 | - return this.http.get<FirmwareInfo>(`/api/firmware/info/${firmwareId}`, defaultHttpOptionsFromConfig(config)); | 51 | + public getOtaPackageInfo(otaPackageId: string, config?: RequestConfig): Observable<OtaPackageInfo> { |
52 | + return this.http.get<OtaPackageInfo>(`/api/otaPackage/info/${otaPackageId}`, defaultHttpOptionsFromConfig(config)); | ||
53 | } | 53 | } |
54 | 54 | ||
55 | - public downloadFirmware(firmwareId: string): Observable<any> { | ||
56 | - return this.http.get(`/api/firmware/${firmwareId}/download`, { responseType: 'arraybuffer', observe: 'response' }).pipe( | 55 | + public downloadOtaPackage(otaPackageId: string): Observable<any> { |
56 | + return this.http.get(`/api/otaPackage/${otaPackageId}/download`, { responseType: 'arraybuffer', observe: 'response' }).pipe( | ||
57 | map((response) => { | 57 | map((response) => { |
58 | const headers = response.headers; | 58 | const headers = response.headers; |
59 | const filename = headers.get('x-filename'); | 59 | const filename = headers.get('x-filename'); |
@@ -80,35 +80,35 @@ export class FirmwareService { | @@ -80,35 +80,35 @@ export class FirmwareService { | ||
80 | ); | 80 | ); |
81 | } | 81 | } |
82 | 82 | ||
83 | - public saveFirmware(firmware: Firmware, config?: RequestConfig): Observable<Firmware> { | ||
84 | - if (!firmware.file) { | ||
85 | - return this.saveFirmwareInfo(firmware, config); | 83 | + public saveOtaPackage(otaPackage: OtaPackage, config?: RequestConfig): Observable<OtaPackage> { |
84 | + if (!otaPackage.file) { | ||
85 | + return this.saveOtaPackageInfo(otaPackage, config); | ||
86 | } | 86 | } |
87 | - const firmwareInfo = deepClone(firmware); | ||
88 | - delete firmwareInfo.file; | ||
89 | - delete firmwareInfo.checksum; | ||
90 | - delete firmwareInfo.checksumAlgorithm; | ||
91 | - return this.saveFirmwareInfo(firmwareInfo, config).pipe( | 87 | + const otaPackageInfo = deepClone(otaPackage); |
88 | + delete otaPackageInfo.file; | ||
89 | + delete otaPackageInfo.checksum; | ||
90 | + delete otaPackageInfo.checksumAlgorithm; | ||
91 | + return this.saveOtaPackageInfo(otaPackageInfo, config).pipe( | ||
92 | mergeMap(res => { | 92 | mergeMap(res => { |
93 | - return this.uploadFirmwareFile(res.id.id, firmware.file, firmware.checksumAlgorithm, firmware.checksum).pipe( | ||
94 | - catchError(() => this.deleteFirmware(res.id.id)) | 93 | + return this.uploadOtaPackageFile(res.id.id, otaPackage.file, otaPackage.checksumAlgorithm, otaPackage.checksum).pipe( |
94 | + catchError(() => this.deleteOtaPackage(res.id.id)) | ||
95 | ); | 95 | ); |
96 | }) | 96 | }) |
97 | ); | 97 | ); |
98 | } | 98 | } |
99 | 99 | ||
100 | - public saveFirmwareInfo(firmware: FirmwareInfo, config?: RequestConfig): Observable<Firmware> { | ||
101 | - return this.http.post<Firmware>('/api/firmware', firmware, defaultHttpOptionsFromConfig(config)); | 100 | + public saveOtaPackageInfo(otaPackageInfo: OtaPackageInfo, config?: RequestConfig): Observable<OtaPackage> { |
101 | + return this.http.post<OtaPackage>('/api/otaPackage', otaPackageInfo, defaultHttpOptionsFromConfig(config)); | ||
102 | } | 102 | } |
103 | 103 | ||
104 | - public uploadFirmwareFile(firmwareId: string, file: File, checksumAlgorithm: ChecksumAlgorithm, | ||
105 | - checksum?: string, config?: RequestConfig): Observable<any> { | 104 | + public uploadOtaPackageFile(otaPackageId: string, file: File, checksumAlgorithm: ChecksumAlgorithm, |
105 | + checksum?: string, config?: RequestConfig): Observable<any> { | ||
106 | if (!config) { | 106 | if (!config) { |
107 | config = {}; | 107 | config = {}; |
108 | } | 108 | } |
109 | const formData = new FormData(); | 109 | const formData = new FormData(); |
110 | formData.append('file', file); | 110 | formData.append('file', file); |
111 | - let url = `/api/firmware/${firmwareId}?checksumAlgorithm=${checksumAlgorithm}`; | 111 | + let url = `/api/otaPackage/${otaPackageId}?checksumAlgorithm=${checksumAlgorithm}`; |
112 | if (checksum) { | 112 | if (checksum) { |
113 | url += `&checksum=${checksum}`; | 113 | url += `&checksum=${checksum}`; |
114 | } | 114 | } |
@@ -116,8 +116,8 @@ export class FirmwareService { | @@ -116,8 +116,8 @@ export class FirmwareService { | ||
116 | defaultHttpUploadOptions(config.ignoreLoading, config.ignoreErrors, config.resendRequest)); | 116 | defaultHttpUploadOptions(config.ignoreLoading, config.ignoreErrors, config.resendRequest)); |
117 | } | 117 | } |
118 | 118 | ||
119 | - public deleteFirmware(firmwareId: string, config?: RequestConfig) { | ||
120 | - return this.http.delete(`/api/firmware/${firmwareId}`, defaultHttpOptionsFromConfig(config)); | 119 | + public deleteOtaPackage(otaPackageId: string, config?: RequestConfig) { |
120 | + return this.http.delete(`/api/otaPackage/${otaPackageId}`, defaultHttpOptionsFromConfig(config)); | ||
121 | } | 121 | } |
122 | 122 | ||
123 | } | 123 | } |
@@ -276,9 +276,9 @@ export class MenuService { | @@ -276,9 +276,9 @@ export class MenuService { | ||
276 | }, | 276 | }, |
277 | { | 277 | { |
278 | id: guid(), | 278 | id: guid(), |
279 | - name: 'firmware.firmware', | 279 | + name: 'ota-update.ota-updates', |
280 | type: 'link', | 280 | type: 'link', |
281 | - path: '/firmwares', | 281 | + path: '/otaUpdates', |
282 | icon: 'memory' | 282 | icon: 'memory' |
283 | }, | 283 | }, |
284 | { | 284 | { |
@@ -423,9 +423,9 @@ export class MenuService { | @@ -423,9 +423,9 @@ export class MenuService { | ||
423 | path: '/deviceProfiles' | 423 | path: '/deviceProfiles' |
424 | }, | 424 | }, |
425 | { | 425 | { |
426 | - name: 'firmware.firmware', | 426 | + name: 'ota-update.ota-updates', |
427 | icon: 'memory', | 427 | icon: 'memory', |
428 | - path: '/firmwares' | 428 | + path: '/otaUpdates' |
429 | } | 429 | } |
430 | ] | 430 | ] |
431 | }, | 431 | }, |
@@ -66,4 +66,5 @@ | @@ -66,4 +66,5 @@ | ||
66 | <mat-error *ngIf="selectDeviceProfileFormGroup.get('deviceProfile').hasError('required')"> | 66 | <mat-error *ngIf="selectDeviceProfileFormGroup.get('deviceProfile').hasError('required')"> |
67 | {{ 'device-profile.device-profile-required' | translate }} | 67 | {{ 'device-profile.device-profile-required' | translate }} |
68 | </mat-error> | 68 | </mat-error> |
69 | + <mat-hint *ngIf="!!hint">{{ hint | translate }}</mat-hint> | ||
69 | </mat-form-field> | 70 | </mat-form-field> |
@@ -91,6 +91,9 @@ export class DeviceProfileAutocompleteComponent implements ControlValueAccessor, | @@ -91,6 +91,9 @@ export class DeviceProfileAutocompleteComponent implements ControlValueAccessor, | ||
91 | @Input() | 91 | @Input() |
92 | disabled: boolean; | 92 | disabled: boolean; |
93 | 93 | ||
94 | + @Input() | ||
95 | + hint: string; | ||
96 | + | ||
94 | @Output() | 97 | @Output() |
95 | deviceProfileUpdated = new EventEmitter<DeviceProfileId>(); | 98 | deviceProfileUpdated = new EventEmitter<DeviceProfileId>(); |
96 | 99 |
@@ -67,18 +67,18 @@ | @@ -67,18 +67,18 @@ | ||
67 | [queueType]="serviceType" | 67 | [queueType]="serviceType" |
68 | formControlName="defaultQueueName"> | 68 | formControlName="defaultQueueName"> |
69 | </tb-queue-type-list> | 69 | </tb-queue-type-list> |
70 | - <tb-firmware-autocomplete | 70 | + <tb-ota-package-autocomplete |
71 | [useFullEntityId]="true" | 71 | [useFullEntityId]="true" |
72 | - [type]="firmwareTypes.FIRMWARE" | 72 | + [type]="otaUpdateType.FIRMWARE" |
73 | [deviceProfileId]="deviceProfileId?.id" | 73 | [deviceProfileId]="deviceProfileId?.id" |
74 | formControlName="firmwareId"> | 74 | formControlName="firmwareId"> |
75 | - </tb-firmware-autocomplete> | ||
76 | - <tb-firmware-autocomplete | 75 | + </tb-ota-package-autocomplete> |
76 | + <tb-ota-package-autocomplete | ||
77 | [useFullEntityId]="true" | 77 | [useFullEntityId]="true" |
78 | - [type]="firmwareTypes.SOFTWARE" | 78 | + [type]="otaUpdateType.SOFTWARE" |
79 | [deviceProfileId]="deviceProfileId?.id" | 79 | [deviceProfileId]="deviceProfileId?.id" |
80 | formControlName="softwareId"> | 80 | formControlName="softwareId"> |
81 | - </tb-firmware-autocomplete> | 81 | + </tb-ota-package-autocomplete> |
82 | <mat-form-field fxHide class="mat-block"> | 82 | <mat-form-field fxHide class="mat-block"> |
83 | <mat-label translate>device-profile.type</mat-label> | 83 | <mat-label translate>device-profile.type</mat-label> |
84 | <mat-select formControlName="type" required> | 84 | <mat-select formControlName="type" required> |
@@ -40,7 +40,7 @@ import { EntityType } from '@shared/models/entity-type.models'; | @@ -40,7 +40,7 @@ import { EntityType } from '@shared/models/entity-type.models'; | ||
40 | import { RuleChainId } from '@shared/models/id/rule-chain-id'; | 40 | import { RuleChainId } from '@shared/models/id/rule-chain-id'; |
41 | import { ServiceType } from '@shared/models/queue.models'; | 41 | import { ServiceType } from '@shared/models/queue.models'; |
42 | import { EntityId } from '@shared/models/id/entity-id'; | 42 | import { EntityId } from '@shared/models/id/entity-id'; |
43 | -import { FirmwareType } from '@shared/models/firmware.models'; | 43 | +import { OtaUpdateType } from '@shared/models/ota-package.models'; |
44 | import { DashboardId } from '@shared/models/id/dashboard-id'; | 44 | import { DashboardId } from '@shared/models/id/dashboard-id'; |
45 | 45 | ||
46 | @Component({ | 46 | @Component({ |
@@ -71,7 +71,7 @@ export class DeviceProfileComponent extends EntityComponent<DeviceProfile> { | @@ -71,7 +71,7 @@ export class DeviceProfileComponent extends EntityComponent<DeviceProfile> { | ||
71 | 71 | ||
72 | deviceProfileId: EntityId; | 72 | deviceProfileId: EntityId; |
73 | 73 | ||
74 | - firmwareTypes = FirmwareType; | 74 | + otaUpdateType = OtaUpdateType; |
75 | 75 | ||
76 | constructor(protected store: Store<AppState>, | 76 | constructor(protected store: Store<AppState>, |
77 | protected translate: TranslateService, | 77 | protected translate: TranslateService, |
@@ -35,7 +35,7 @@ import { Router } from '@angular/router'; | @@ -35,7 +35,7 @@ import { Router } from '@angular/router'; | ||
35 | import { BroadcastService } from '@core/services/broadcast.service'; | 35 | import { BroadcastService } from '@core/services/broadcast.service'; |
36 | import { ImportExportService } from '@home/components/import-export/import-export.service'; | 36 | import { ImportExportService } from '@home/components/import-export/import-export.service'; |
37 | import { DeviceProfileService } from '@core/http/device-profile.service'; | 37 | import { DeviceProfileService } from '@core/http/device-profile.service'; |
38 | -import { FirmwareService } from '@core/http/firmware.service'; | 38 | +import { OtaPackageService } from '@core/http/ota-package.service'; |
39 | 39 | ||
40 | export const ServicesMap = new Map<string, Type<any>>( | 40 | export const ServicesMap = new Map<string, Type<any>>( |
41 | [ | 41 | [ |
@@ -59,6 +59,6 @@ export const ServicesMap = new Map<string, Type<any>>( | @@ -59,6 +59,6 @@ export const ServicesMap = new Map<string, Type<any>>( | ||
59 | ['router', Router], | 59 | ['router', Router], |
60 | ['importExport', ImportExportService], | 60 | ['importExport', ImportExportService], |
61 | ['deviceProfileService', DeviceProfileService], | 61 | ['deviceProfileService', DeviceProfileService], |
62 | - ['firmwareService', FirmwareService] | 62 | + ['otaPackageService', OtaPackageService] |
63 | ] | 63 | ] |
64 | ); | 64 | ); |
@@ -101,18 +101,18 @@ | @@ -101,18 +101,18 @@ | ||
101 | <mat-label translate>device.label</mat-label> | 101 | <mat-label translate>device.label</mat-label> |
102 | <input matInput formControlName="label"> | 102 | <input matInput formControlName="label"> |
103 | </mat-form-field> | 103 | </mat-form-field> |
104 | - <tb-firmware-autocomplete | 104 | + <tb-ota-package-autocomplete |
105 | [useFullEntityId]="true" | 105 | [useFullEntityId]="true" |
106 | - [type]="firmwareTypes.FIRMWARE" | 106 | + [type]="otaUpdateType.FIRMWARE" |
107 | [deviceProfileId]="entityForm.get('deviceProfileId').value?.id" | 107 | [deviceProfileId]="entityForm.get('deviceProfileId').value?.id" |
108 | formControlName="firmwareId"> | 108 | formControlName="firmwareId"> |
109 | - </tb-firmware-autocomplete> | ||
110 | - <tb-firmware-autocomplete | 109 | + </tb-ota-package-autocomplete> |
110 | + <tb-ota-package-autocomplete | ||
111 | [useFullEntityId]="true" | 111 | [useFullEntityId]="true" |
112 | - [type]="firmwareTypes.SOFTWARE" | 112 | + [type]="otaUpdateType.SOFTWARE" |
113 | [deviceProfileId]="entityForm.get('deviceProfileId').value?.id" | 113 | [deviceProfileId]="entityForm.get('deviceProfileId').value?.id" |
114 | formControlName="softwareId"> | 114 | formControlName="softwareId"> |
115 | - </tb-firmware-autocomplete> | 115 | + </tb-ota-package-autocomplete> |
116 | <tb-device-data | 116 | <tb-device-data |
117 | formControlName="deviceData" | 117 | formControlName="deviceData" |
118 | required> | 118 | required> |
@@ -34,7 +34,7 @@ import { ActionNotificationShow } from '@core/notification/notification.actions' | @@ -34,7 +34,7 @@ import { ActionNotificationShow } from '@core/notification/notification.actions' | ||
34 | import { TranslateService } from '@ngx-translate/core'; | 34 | import { TranslateService } from '@ngx-translate/core'; |
35 | import { EntityTableConfig } from '@home/models/entity/entities-table-config.models'; | 35 | import { EntityTableConfig } from '@home/models/entity/entities-table-config.models'; |
36 | import { Subject } from 'rxjs'; | 36 | import { Subject } from 'rxjs'; |
37 | -import { FirmwareType } from '@shared/models/firmware.models'; | 37 | +import { OtaUpdateType } from '@shared/models/ota-package.models'; |
38 | 38 | ||
39 | @Component({ | 39 | @Component({ |
40 | selector: 'tb-device', | 40 | selector: 'tb-device', |
@@ -49,7 +49,7 @@ export class DeviceComponent extends EntityComponent<DeviceInfo> { | @@ -49,7 +49,7 @@ export class DeviceComponent extends EntityComponent<DeviceInfo> { | ||
49 | 49 | ||
50 | deviceScope: 'tenant' | 'customer' | 'customer_user' | 'edge'; | 50 | deviceScope: 'tenant' | 'customer' | 'customer_user' | 'edge'; |
51 | 51 | ||
52 | - firmwareTypes = FirmwareType; | 52 | + otaUpdateType = OtaUpdateType; |
53 | 53 | ||
54 | constructor(protected store: Store<AppState>, | 54 | constructor(protected store: Store<AppState>, |
55 | protected translate: TranslateService, | 55 | protected translate: TranslateService, |
@@ -35,7 +35,7 @@ import { modulesMap } from '../../common/modules-map'; | @@ -35,7 +35,7 @@ import { modulesMap } from '../../common/modules-map'; | ||
35 | import { DeviceProfileModule } from './device-profile/device-profile.module'; | 35 | import { DeviceProfileModule } from './device-profile/device-profile.module'; |
36 | import { ApiUsageModule } from '@home/pages/api-usage/api-usage.module'; | 36 | import { ApiUsageModule } from '@home/pages/api-usage/api-usage.module'; |
37 | import { EdgeModule } from '@home/pages/edge/edge.module'; | 37 | import { EdgeModule } from '@home/pages/edge/edge.module'; |
38 | -import { FirmwareModule } from '@home/pages/firmware/firmware.module'; | 38 | +import { OtaUpdateModule } from '@home/pages/ota-update/ota-update.module'; |
39 | 39 | ||
40 | @NgModule({ | 40 | @NgModule({ |
41 | exports: [ | 41 | exports: [ |
@@ -55,7 +55,7 @@ import { FirmwareModule } from '@home/pages/firmware/firmware.module'; | @@ -55,7 +55,7 @@ import { FirmwareModule } from '@home/pages/firmware/firmware.module'; | ||
55 | DashboardModule, | 55 | DashboardModule, |
56 | AuditLogModule, | 56 | AuditLogModule, |
57 | ApiUsageModule, | 57 | ApiUsageModule, |
58 | - FirmwareModule, | 58 | + OtaUpdateModule, |
59 | UserModule | 59 | UserModule |
60 | ], | 60 | ], |
61 | providers: [ | 61 | providers: [ |
ui-ngx/src/app/modules/home/pages/ota-update/ota-update-routing.module.ts
renamed from
ui-ngx/src/app/modules/home/pages/firmware/firmware-routing.module.ts
@@ -18,22 +18,22 @@ import { RouterModule, Routes } from '@angular/router'; | @@ -18,22 +18,22 @@ import { RouterModule, Routes } from '@angular/router'; | ||
18 | import { EntitiesTableComponent } from '@home/components/entity/entities-table.component'; | 18 | import { EntitiesTableComponent } from '@home/components/entity/entities-table.component'; |
19 | import { Authority } from '@shared/models/authority.enum'; | 19 | import { Authority } from '@shared/models/authority.enum'; |
20 | import { NgModule } from '@angular/core'; | 20 | import { NgModule } from '@angular/core'; |
21 | -import { FirmwareTableConfigResolve } from '@home/pages/firmware/firmware-table-config.resolve'; | 21 | +import { OtaUpdateTableConfigResolve } from '@home/pages/ota-update/ota-update-table-config.resolve'; |
22 | 22 | ||
23 | const routes: Routes = [ | 23 | const routes: Routes = [ |
24 | { | 24 | { |
25 | - path: 'firmwares', | 25 | + path: 'otaUpdates', |
26 | component: EntitiesTableComponent, | 26 | component: EntitiesTableComponent, |
27 | data: { | 27 | data: { |
28 | auth: [Authority.TENANT_ADMIN], | 28 | auth: [Authority.TENANT_ADMIN], |
29 | - title: 'firmware.firmware', | 29 | + title: 'ota-update.ota-updates', |
30 | breadcrumb: { | 30 | breadcrumb: { |
31 | - label: 'firmware.firmware', | 31 | + label: 'ota-update.ota-updates', |
32 | icon: 'memory' | 32 | icon: 'memory' |
33 | } | 33 | } |
34 | }, | 34 | }, |
35 | resolve: { | 35 | resolve: { |
36 | - entitiesTableConfig: FirmwareTableConfigResolve | 36 | + entitiesTableConfig: OtaUpdateTableConfigResolve |
37 | } | 37 | } |
38 | } | 38 | } |
39 | ]; | 39 | ]; |
@@ -42,7 +42,7 @@ const routes: Routes = [ | @@ -42,7 +42,7 @@ const routes: Routes = [ | ||
42 | imports: [RouterModule.forChild(routes)], | 42 | imports: [RouterModule.forChild(routes)], |
43 | exports: [RouterModule], | 43 | exports: [RouterModule], |
44 | providers: [ | 44 | providers: [ |
45 | - FirmwareTableConfigResolve | 45 | + OtaUpdateTableConfigResolve |
46 | ] | 46 | ] |
47 | }) | 47 | }) |
48 | -export class FirmwareRoutingModule{ } | 48 | +export class OtaUpdateRoutingModule { } |
ui-ngx/src/app/modules/home/pages/ota-update/ota-update-table-config.resolve.ts
renamed from
ui-ngx/src/app/modules/home/pages/firmware/firmware-table-config.resolve.ts
@@ -23,90 +23,91 @@ import { | @@ -23,90 +23,91 @@ import { | ||
23 | } from '@home/models/entity/entities-table-config.models'; | 23 | } from '@home/models/entity/entities-table-config.models'; |
24 | import { | 24 | import { |
25 | ChecksumAlgorithmTranslationMap, | 25 | ChecksumAlgorithmTranslationMap, |
26 | - Firmware, | ||
27 | - FirmwareInfo, | ||
28 | - FirmwareTypeTranslationMap | ||
29 | -} from '@shared/models/firmware.models'; | 26 | + OtaPackage, |
27 | + OtaPackageInfo, | ||
28 | + OtaUpdateTypeTranslationMap | ||
29 | +} from '@shared/models/ota-package.models'; | ||
30 | import { EntityType, entityTypeResources, entityTypeTranslations } from '@shared/models/entity-type.models'; | 30 | import { EntityType, entityTypeResources, entityTypeTranslations } from '@shared/models/entity-type.models'; |
31 | import { TranslateService } from '@ngx-translate/core'; | 31 | import { TranslateService } from '@ngx-translate/core'; |
32 | import { DatePipe } from '@angular/common'; | 32 | import { DatePipe } from '@angular/common'; |
33 | -import { FirmwareService } from '@core/http/firmware.service'; | 33 | +import { OtaPackageService } from '@core/http/ota-package.service'; |
34 | import { PageLink } from '@shared/models/page/page-link'; | 34 | import { PageLink } from '@shared/models/page/page-link'; |
35 | -import { FirmwaresComponent } from '@home/pages/firmware/firmwares.component'; | 35 | +import { OtaUpdateComponent } from '@home/pages/ota-update/ota-update.component'; |
36 | import { EntityAction } from '@home/models/entity/entity-component.models'; | 36 | import { EntityAction } from '@home/models/entity/entity-component.models'; |
37 | import { FileSizePipe } from '@shared/pipe/file-size.pipe'; | 37 | import { FileSizePipe } from '@shared/pipe/file-size.pipe'; |
38 | 38 | ||
39 | @Injectable() | 39 | @Injectable() |
40 | -export class FirmwareTableConfigResolve implements Resolve<EntityTableConfig<Firmware, PageLink, FirmwareInfo>> { | 40 | +export class OtaUpdateTableConfigResolve implements Resolve<EntityTableConfig<OtaPackage, PageLink, OtaPackageInfo>> { |
41 | 41 | ||
42 | - private readonly config: EntityTableConfig<Firmware, PageLink, FirmwareInfo> = new EntityTableConfig<Firmware, PageLink, FirmwareInfo>(); | 42 | + private readonly config: EntityTableConfig<OtaPackage, PageLink, OtaPackageInfo> = |
43 | + new EntityTableConfig<OtaPackage, PageLink, OtaPackageInfo>(); | ||
43 | 44 | ||
44 | constructor(private translate: TranslateService, | 45 | constructor(private translate: TranslateService, |
45 | private datePipe: DatePipe, | 46 | private datePipe: DatePipe, |
46 | - private firmwareService: FirmwareService, | 47 | + private otaPackageService: OtaPackageService, |
47 | private fileSize: FileSizePipe) { | 48 | private fileSize: FileSizePipe) { |
48 | - this.config.entityType = EntityType.FIRMWARE; | ||
49 | - this.config.entityComponent = FirmwaresComponent; | ||
50 | - this.config.entityTranslations = entityTypeTranslations.get(EntityType.FIRMWARE); | ||
51 | - this.config.entityResources = entityTypeResources.get(EntityType.FIRMWARE); | 49 | + this.config.entityType = EntityType.OTA_PACKAGE; |
50 | + this.config.entityComponent = OtaUpdateComponent; | ||
51 | + this.config.entityTranslations = entityTypeTranslations.get(EntityType.OTA_PACKAGE); | ||
52 | + this.config.entityResources = entityTypeResources.get(EntityType.OTA_PACKAGE); | ||
52 | 53 | ||
53 | - this.config.entityTitle = (firmware) => firmware ? firmware.title : ''; | 54 | + this.config.entityTitle = (otaPackage) => otaPackage ? otaPackage.title : ''; |
54 | 55 | ||
55 | this.config.columns.push( | 56 | this.config.columns.push( |
56 | - new DateEntityTableColumn<FirmwareInfo>('createdTime', 'common.created-time', this.datePipe, '150px'), | ||
57 | - new EntityTableColumn<FirmwareInfo>('title', 'firmware.title', '25%'), | ||
58 | - new EntityTableColumn<FirmwareInfo>('version', 'firmware.version', '25%'), | ||
59 | - new EntityTableColumn<FirmwareInfo>('type', 'firmware.type', '25%', entity => { | ||
60 | - return this.translate.instant(FirmwareTypeTranslationMap.get(entity.type)); | 57 | + new DateEntityTableColumn<OtaPackageInfo>('createdTime', 'common.created-time', this.datePipe, '150px'), |
58 | + new EntityTableColumn<OtaPackageInfo>('title', 'ota-update.title', '25%'), | ||
59 | + new EntityTableColumn<OtaPackageInfo>('version', 'ota-update.version', '25%'), | ||
60 | + new EntityTableColumn<OtaPackageInfo>('type', 'ota-update.package-type', '25%', entity => { | ||
61 | + return this.translate.instant(OtaUpdateTypeTranslationMap.get(entity.type)); | ||
61 | }), | 62 | }), |
62 | - new EntityTableColumn<FirmwareInfo>('fileName', 'firmware.file-name', '25%'), | ||
63 | - new EntityTableColumn<FirmwareInfo>('dataSize', 'firmware.file-size', '70px', entity => { | 63 | + new EntityTableColumn<OtaPackageInfo>('fileName', 'ota-update.file-name', '25%'), |
64 | + new EntityTableColumn<OtaPackageInfo>('dataSize', 'ota-update.file-size', '70px', entity => { | ||
64 | return this.fileSize.transform(entity.dataSize || 0); | 65 | return this.fileSize.transform(entity.dataSize || 0); |
65 | }), | 66 | }), |
66 | - new EntityTableColumn<FirmwareInfo>('checksum', 'firmware.checksum', '540px', entity => { | 67 | + new EntityTableColumn<OtaPackageInfo>('checksum', 'ota-update.checksum', '540px', entity => { |
67 | return `${ChecksumAlgorithmTranslationMap.get(entity.checksumAlgorithm)}: ${entity.checksum}`; | 68 | return `${ChecksumAlgorithmTranslationMap.get(entity.checksumAlgorithm)}: ${entity.checksum}`; |
68 | }, () => ({}), false) | 69 | }, () => ({}), false) |
69 | ); | 70 | ); |
70 | 71 | ||
71 | this.config.cellActionDescriptors.push( | 72 | this.config.cellActionDescriptors.push( |
72 | { | 73 | { |
73 | - name: this.translate.instant('firmware.download'), | 74 | + name: this.translate.instant('ota-update.download'), |
74 | icon: 'file_download', | 75 | icon: 'file_download', |
75 | - isEnabled: (firmware) => firmware.hasData, | ||
76 | - onAction: ($event, entity) => this.exportFirmware($event, entity) | 76 | + isEnabled: (otaPackage) => otaPackage.hasData, |
77 | + onAction: ($event, entity) => this.exportPackage($event, entity) | ||
77 | } | 78 | } |
78 | ); | 79 | ); |
79 | 80 | ||
80 | - this.config.deleteEntityTitle = firmware => this.translate.instant('firmware.delete-firmware-title', | ||
81 | - { firmwareTitle: firmware.title }); | ||
82 | - this.config.deleteEntityContent = () => this.translate.instant('firmware.delete-firmware-text'); | ||
83 | - this.config.deleteEntitiesTitle = count => this.translate.instant('firmware.delete-firmwares-title', {count}); | ||
84 | - this.config.deleteEntitiesContent = () => this.translate.instant('firmware.delete-firmwares-text'); | 81 | + this.config.deleteEntityTitle = otaPackage => this.translate.instant('ota-update.delete-ota-update-title', |
82 | + { title: otaPackage.title }); | ||
83 | + this.config.deleteEntityContent = () => this.translate.instant('ota-update.delete-ota-update-text'); | ||
84 | + this.config.deleteEntitiesTitle = count => this.translate.instant('ota-update.delete-ota-updates-title', {count}); | ||
85 | + this.config.deleteEntitiesContent = () => this.translate.instant('ota-update.delete-ota-updates-text'); | ||
85 | 86 | ||
86 | - this.config.entitiesFetchFunction = pageLink => this.firmwareService.getFirmwares(pageLink); | ||
87 | - this.config.loadEntity = id => this.firmwareService.getFirmwareInfo(id.id); | ||
88 | - this.config.saveEntity = firmware => this.firmwareService.saveFirmware(firmware); | ||
89 | - this.config.deleteEntity = id => this.firmwareService.deleteFirmware(id.id); | 87 | + this.config.entitiesFetchFunction = pageLink => this.otaPackageService.getOtaPackages(pageLink); |
88 | + this.config.loadEntity = id => this.otaPackageService.getOtaPackageInfo(id.id); | ||
89 | + this.config.saveEntity = otaPackage => this.otaPackageService.saveOtaPackage(otaPackage); | ||
90 | + this.config.deleteEntity = id => this.otaPackageService.deleteOtaPackage(id.id); | ||
90 | 91 | ||
91 | - this.config.onEntityAction = action => this.onFirmwareAction(action); | 92 | + this.config.onEntityAction = action => this.onPackageAction(action); |
92 | } | 93 | } |
93 | 94 | ||
94 | - resolve(): EntityTableConfig<Firmware, PageLink, FirmwareInfo> { | ||
95 | - this.config.tableTitle = this.translate.instant('firmware.firmware'); | 95 | + resolve(): EntityTableConfig<OtaPackage, PageLink, OtaPackageInfo> { |
96 | + this.config.tableTitle = this.translate.instant('ota-update.packages-repository'); | ||
96 | return this.config; | 97 | return this.config; |
97 | } | 98 | } |
98 | 99 | ||
99 | - exportFirmware($event: Event, firmware: FirmwareInfo) { | 100 | + exportPackage($event: Event, otaPackageInfo: OtaPackageInfo) { |
100 | if ($event) { | 101 | if ($event) { |
101 | $event.stopPropagation(); | 102 | $event.stopPropagation(); |
102 | } | 103 | } |
103 | - this.firmwareService.downloadFirmware(firmware.id.id).subscribe(); | 104 | + this.otaPackageService.downloadOtaPackage(otaPackageInfo.id.id).subscribe(); |
104 | } | 105 | } |
105 | 106 | ||
106 | - onFirmwareAction(action: EntityAction<FirmwareInfo>): boolean { | 107 | + onPackageAction(action: EntityAction<OtaPackageInfo>): boolean { |
107 | switch (action.action) { | 108 | switch (action.action) { |
108 | - case 'uploadFirmware': | ||
109 | - this.exportFirmware(action.event, action.entity); | 109 | + case 'uploadPackage': |
110 | + this.exportPackage(action.event, action.entity); | ||
110 | return true; | 111 | return true; |
111 | } | 112 | } |
112 | return false; | 113 | return false; |
ui-ngx/src/app/modules/home/pages/ota-update/ota-update.component.html
renamed from
ui-ngx/src/app/modules/home/pages/firmware/firmwares.component.html
@@ -18,114 +18,112 @@ | @@ -18,114 +18,112 @@ | ||
18 | <div class="tb-details-buttons" fxLayout.xs="column"> | 18 | <div class="tb-details-buttons" fxLayout.xs="column"> |
19 | <button mat-raised-button color="primary" fxFlex.xs | 19 | <button mat-raised-button color="primary" fxFlex.xs |
20 | [disabled]="(isLoading$ | async) || !entity?.hasData" | 20 | [disabled]="(isLoading$ | async) || !entity?.hasData" |
21 | - (click)="onEntityAction($event, 'uploadFirmware')" | 21 | + (click)="onEntityAction($event, 'uploadPackage')" |
22 | [fxShow]="!isEdit"> | 22 | [fxShow]="!isEdit"> |
23 | - {{ 'firmware.download' | translate }} | 23 | + {{ 'ota-update.download' | translate }} |
24 | </button> | 24 | </button> |
25 | <button mat-raised-button color="primary" fxFlex.xs | 25 | <button mat-raised-button color="primary" fxFlex.xs |
26 | [disabled]="(isLoading$ | async)" | 26 | [disabled]="(isLoading$ | async)" |
27 | (click)="onEntityAction($event, 'delete')" | 27 | (click)="onEntityAction($event, 'delete')" |
28 | [fxShow]="!hideDelete() && !isEdit"> | 28 | [fxShow]="!hideDelete() && !isEdit"> |
29 | - {{ 'firmware.delete' | translate }} | 29 | + {{ 'ota-update.delete' | translate }} |
30 | </button> | 30 | </button> |
31 | <div fxLayout="row" fxLayout.xs="column"> | 31 | <div fxLayout="row" fxLayout.xs="column"> |
32 | <button mat-raised-button | 32 | <button mat-raised-button |
33 | ngxClipboard | 33 | ngxClipboard |
34 | - (cbOnSuccess)="onFirmwareIdCopied()" | 34 | + (cbOnSuccess)="onPackageIdCopied()" |
35 | [cbContent]="entity?.id?.id" | 35 | [cbContent]="entity?.id?.id" |
36 | [fxShow]="!isEdit"> | 36 | [fxShow]="!isEdit"> |
37 | <mat-icon svgIcon="mdi:clipboard-arrow-left"></mat-icon> | 37 | <mat-icon svgIcon="mdi:clipboard-arrow-left"></mat-icon> |
38 | - <span translate>firmware.copyId</span> | 38 | + <span translate>ota-update.copyId</span> |
39 | </button> | 39 | </button> |
40 | <button mat-raised-button | 40 | <button mat-raised-button |
41 | ngxClipboard | 41 | ngxClipboard |
42 | - (cbOnSuccess)="onFirmwareChecksumCopied()" | 42 | + (cbOnSuccess)="onPackageChecksumCopied()" |
43 | [cbContent]="entity?.checksum" | 43 | [cbContent]="entity?.checksum" |
44 | [fxShow]="!isEdit"> | 44 | [fxShow]="!isEdit"> |
45 | <mat-icon svgIcon="mdi:clipboard-arrow-left"></mat-icon> | 45 | <mat-icon svgIcon="mdi:clipboard-arrow-left"></mat-icon> |
46 | - <span translate>firmware.copy-checksum</span> | 46 | + <span translate>ota-update.copy-checksum</span> |
47 | </button> | 47 | </button> |
48 | </div> | 48 | </div> |
49 | </div> | 49 | </div> |
50 | -<div class="mat-padding" fxLayout="column"> | 50 | +<div class="mat-padding" fxLayout="column" fxLayoutGap="8px"> |
51 | <form [formGroup]="entityForm"> | 51 | <form [formGroup]="entityForm"> |
52 | - <fieldset [disabled]="(isLoading$ | async) || !isEdit"> | ||
53 | - <mat-hint class="tb-hint" translate *ngIf="isAdd">firmware.warning-after-save-no-edit</mat-hint> | 52 | + <fieldset [disabled]="(isLoading$ | async) || !isEdit" fxLayout="column" fxLayoutGap="8px"> |
54 | <div fxLayout="row" fxLayoutGap.gt-xs="8px" fxLayout.xs="column"> | 53 | <div fxLayout="row" fxLayoutGap.gt-xs="8px" fxLayout.xs="column"> |
55 | <mat-form-field class="mat-block" fxFlex="45"> | 54 | <mat-form-field class="mat-block" fxFlex="45"> |
56 | - <mat-label translate>firmware.title</mat-label> | 55 | + <mat-label translate>ota-update.title</mat-label> |
57 | <input matInput formControlName="title" type="text" required [readonly]="!isAdd"> | 56 | <input matInput formControlName="title" type="text" required [readonly]="!isAdd"> |
58 | <mat-error *ngIf="entityForm.get('title').hasError('required')"> | 57 | <mat-error *ngIf="entityForm.get('title').hasError('required')"> |
59 | - {{ 'firmware.title-required' | translate }} | 58 | + {{ 'ota-update.title-required' | translate }} |
60 | </mat-error> | 59 | </mat-error> |
61 | </mat-form-field> | 60 | </mat-form-field> |
62 | <mat-form-field class="mat-block" fxFlex> | 61 | <mat-form-field class="mat-block" fxFlex> |
63 | - <mat-label translate>firmware.version</mat-label> | 62 | + <mat-label translate>ota-update.version</mat-label> |
64 | <input matInput formControlName="version" type="text" required [readonly]="!isAdd"> | 63 | <input matInput formControlName="version" type="text" required [readonly]="!isAdd"> |
65 | <mat-error *ngIf="entityForm.get('version').hasError('required')"> | 64 | <mat-error *ngIf="entityForm.get('version').hasError('required')"> |
66 | - {{ 'firmware.version-required' | translate }} | 65 | + {{ 'ota-update.version-required' | translate }} |
67 | </mat-error> | 66 | </mat-error> |
68 | </mat-form-field> | 67 | </mat-form-field> |
69 | </div> | 68 | </div> |
70 | - <div fxLayout="row" fxLayoutGap.gt-xs="8px" fxLayout.xs="column"> | ||
71 | - <mat-form-field fxFlex="45"> | ||
72 | - <mat-label translate>firmware.type</mat-label> | ||
73 | - <input *ngIf="!isAdd" matInput type="text" [readonly]="isEdit" [disabled]="!isEdit" | ||
74 | - value="{{ firmwareTypeTranslationMap.get(entityForm.get('type').value) | translate }}"> | ||
75 | - <mat-select formControlName="type" required *ngIf="isAdd"> | ||
76 | - <mat-option *ngFor="let firmwareType of firmwareTypes" [value]="firmwareType"> | ||
77 | - {{ firmwareTypeTranslationMap.get(firmwareType) | translate }} | ||
78 | - </mat-option> | ||
79 | - </mat-select> | ||
80 | - </mat-form-field> | ||
81 | - <tb-device-profile-autocomplete | ||
82 | - formControlName="deviceProfileId" fxFlex | ||
83 | - [editProfileEnabled]="false"> | ||
84 | - </tb-device-profile-autocomplete> | ||
85 | - </div> | 69 | + <tb-device-profile-autocomplete |
70 | + formControlName="deviceProfileId" | ||
71 | + required | ||
72 | + [hint]="'ota-update.chose-compatible-device-profile'" | ||
73 | + [editProfileEnabled]="false" | ||
74 | + [addNewProfile]="false" | ||
75 | + [selectDefaultProfile]="true"> | ||
76 | + </tb-device-profile-autocomplete> | ||
77 | + <mat-form-field class="mat-block"> | ||
78 | + <mat-label translate>ota-update.package-type</mat-label> | ||
79 | + <mat-select formControlName="type" required> | ||
80 | + <mat-option *ngFor="let packageType of packageTypes" [value]="packageType"> | ||
81 | + {{ otaUpdateTypeTranslationMap.get(packageType) | translate }} | ||
82 | + </mat-option> | ||
83 | + </mat-select> | ||
84 | + </mat-form-field> | ||
85 | + <div class="mat-caption" translate *ngIf="isAdd">ota-update.warning-after-save-no-edit</div> | ||
86 | <div fxLayout="row" fxLayoutGap.gt-xs="8px" fxLayoutGap.sm="8px" fxLayout.xs="column" fxLayout.md="column"> | 86 | <div fxLayout="row" fxLayoutGap.gt-xs="8px" fxLayoutGap.sm="8px" fxLayout.xs="column" fxLayout.md="column"> |
87 | <mat-form-field class="mat-block" fxFlex="33"> | 87 | <mat-form-field class="mat-block" fxFlex="33"> |
88 | - <mat-label translate>firmware.checksum-algorithm</mat-label> | ||
89 | - <input *ngIf="!isAdd" matInput type="text" [readonly]="isEdit" [disabled]="!isEdit" | ||
90 | - value="{{ checksumAlgorithmTranslationMap.get(entityForm.get('checksumAlgorithm').value) | translate }}"> | ||
91 | - <mat-select formControlName="checksumAlgorithm" *ngIf="isAdd"> | 88 | + <mat-label translate>ota-update.checksum-algorithm</mat-label> |
89 | + <mat-select formControlName="checksumAlgorithm"> | ||
92 | <mat-option *ngFor="let checksumAlgorithm of checksumAlgorithms" [value]="checksumAlgorithm"> | 90 | <mat-option *ngFor="let checksumAlgorithm of checksumAlgorithms" [value]="checksumAlgorithm"> |
93 | {{ checksumAlgorithmTranslationMap.get(checksumAlgorithm) }} | 91 | {{ checksumAlgorithmTranslationMap.get(checksumAlgorithm) }} |
94 | </mat-option> | 92 | </mat-option> |
95 | </mat-select> | 93 | </mat-select> |
96 | </mat-form-field> | 94 | </mat-form-field> |
97 | <mat-form-field class="mat-block" fxFlex> | 95 | <mat-form-field class="mat-block" fxFlex> |
98 | - <mat-label translate>firmware.checksum</mat-label> | 96 | + <mat-label translate>ota-update.checksum</mat-label> |
99 | <input matInput formControlName="checksum" type="text" [readonly]="!isAdd"> | 97 | <input matInput formControlName="checksum" type="text" [readonly]="!isAdd"> |
100 | </mat-form-field> | 98 | </mat-form-field> |
101 | </div> | 99 | </div> |
102 | - <section *ngIf="isAdd" style="padding-top: 8px"> | 100 | + <section *ngIf="isAdd"> |
103 | <tb-file-input | 101 | <tb-file-input |
104 | formControlName="file" | 102 | formControlName="file" |
105 | workFromFileObj="true" | 103 | workFromFileObj="true" |
106 | required | 104 | required |
107 | - dropLabel="{{'resource.drop-file' | translate}}"> | 105 | + dropLabel="{{'ota-update.drop-file' | translate}}"> |
108 | </tb-file-input> | 106 | </tb-file-input> |
109 | </section> | 107 | </section> |
110 | <section *ngIf="!isAdd"> | 108 | <section *ngIf="!isAdd"> |
111 | <div fxLayout="row" fxLayoutGap.gt-md="8px" fxLayoutGap.sm="8px" fxLayout.xs="column" fxLayout.md="column"> | 109 | <div fxLayout="row" fxLayoutGap.gt-md="8px" fxLayoutGap.sm="8px" fxLayout.xs="column" fxLayout.md="column"> |
112 | <mat-form-field class="mat-block" fxFlex="33"> | 110 | <mat-form-field class="mat-block" fxFlex="33"> |
113 | - <mat-label translate>firmware.file-name</mat-label> | 111 | + <mat-label translate>ota-update.file-name</mat-label> |
114 | <input matInput formControlName="fileName" type="text" readonly> | 112 | <input matInput formControlName="fileName" type="text" readonly> |
115 | </mat-form-field> | 113 | </mat-form-field> |
116 | <mat-form-field class="mat-block" fxFlex> | 114 | <mat-form-field class="mat-block" fxFlex> |
117 | - <mat-label translate>firmware.file-size-bytes</mat-label> | 115 | + <mat-label translate>ota-update.file-size-bytes</mat-label> |
118 | <input matInput formControlName="dataSize" type="text" readonly> | 116 | <input matInput formControlName="dataSize" type="text" readonly> |
119 | </mat-form-field> | 117 | </mat-form-field> |
120 | <mat-form-field class="mat-block" fxFlex> | 118 | <mat-form-field class="mat-block" fxFlex> |
121 | - <mat-label translate>firmware.content-type</mat-label> | 119 | + <mat-label translate>ota-update.content-type</mat-label> |
122 | <input matInput formControlName="contentType" type="text" readonly> | 120 | <input matInput formControlName="contentType" type="text" readonly> |
123 | </mat-form-field> | 121 | </mat-form-field> |
124 | </div> | 122 | </div> |
125 | </section> | 123 | </section> |
126 | <div formGroupName="additionalInfo"> | 124 | <div formGroupName="additionalInfo"> |
127 | <mat-form-field class="mat-block"> | 125 | <mat-form-field class="mat-block"> |
128 | - <mat-label translate>firmware.description</mat-label> | 126 | + <mat-label translate>ota-update.description</mat-label> |
129 | <textarea matInput formControlName="description" rows="2"></textarea> | 127 | <textarea matInput formControlName="description" rows="2"></textarea> |
130 | </mat-form-field> | 128 | </mat-form-field> |
131 | </div> | 129 | </div> |
ui-ngx/src/app/modules/home/pages/ota-update/ota-update.component.ts
renamed from
ui-ngx/src/app/modules/home/pages/firmware/firmwares.component.ts
@@ -25,29 +25,29 @@ import { EntityComponent } from '@home/components/entity/entity.component'; | @@ -25,29 +25,29 @@ import { EntityComponent } from '@home/components/entity/entity.component'; | ||
25 | import { | 25 | import { |
26 | ChecksumAlgorithm, | 26 | ChecksumAlgorithm, |
27 | ChecksumAlgorithmTranslationMap, | 27 | ChecksumAlgorithmTranslationMap, |
28 | - Firmware, | ||
29 | - FirmwareType, | ||
30 | - FirmwareTypeTranslationMap | ||
31 | -} from '@shared/models/firmware.models'; | 28 | + OtaPackage, |
29 | + OtaUpdateType, | ||
30 | + OtaUpdateTypeTranslationMap | ||
31 | +} from '@shared/models/ota-package.models'; | ||
32 | import { ActionNotificationShow } from '@core/notification/notification.actions'; | 32 | import { ActionNotificationShow } from '@core/notification/notification.actions'; |
33 | 33 | ||
34 | @Component({ | 34 | @Component({ |
35 | - selector: 'tb-firmware', | ||
36 | - templateUrl: './firmwares.component.html' | 35 | + selector: 'tb-ota-update', |
36 | + templateUrl: './ota-update.component.html' | ||
37 | }) | 37 | }) |
38 | -export class FirmwaresComponent extends EntityComponent<Firmware> implements OnInit, OnDestroy { | 38 | +export class OtaUpdateComponent extends EntityComponent<OtaPackage> implements OnInit, OnDestroy { |
39 | 39 | ||
40 | private destroy$ = new Subject(); | 40 | private destroy$ = new Subject(); |
41 | 41 | ||
42 | checksumAlgorithms = Object.values(ChecksumAlgorithm); | 42 | checksumAlgorithms = Object.values(ChecksumAlgorithm); |
43 | checksumAlgorithmTranslationMap = ChecksumAlgorithmTranslationMap; | 43 | checksumAlgorithmTranslationMap = ChecksumAlgorithmTranslationMap; |
44 | - firmwareTypes = Object.values(FirmwareType); | ||
45 | - firmwareTypeTranslationMap = FirmwareTypeTranslationMap; | 44 | + packageTypes = Object.values(OtaUpdateType); |
45 | + otaUpdateTypeTranslationMap = OtaUpdateTypeTranslationMap; | ||
46 | 46 | ||
47 | constructor(protected store: Store<AppState>, | 47 | constructor(protected store: Store<AppState>, |
48 | protected translate: TranslateService, | 48 | protected translate: TranslateService, |
49 | - @Inject('entity') protected entityValue: Firmware, | ||
50 | - @Inject('entitiesTableConfig') protected entitiesTableConfigValue: EntityTableConfig<Firmware>, | 49 | + @Inject('entity') protected entityValue: OtaPackage, |
50 | + @Inject('entitiesTableConfig') protected entitiesTableConfigValue: EntityTableConfig<OtaPackage>, | ||
51 | public fb: FormBuilder) { | 51 | public fb: FormBuilder) { |
52 | super(store, fb, entityValue, entitiesTableConfigValue); | 52 | super(store, fb, entityValue, entitiesTableConfigValue); |
53 | } | 53 | } |
@@ -66,12 +66,12 @@ export class FirmwaresComponent extends EntityComponent<Firmware> implements OnI | @@ -66,12 +66,12 @@ export class FirmwaresComponent extends EntityComponent<Firmware> implements OnI | ||
66 | } | 66 | } |
67 | } | 67 | } |
68 | 68 | ||
69 | - buildForm(entity: Firmware): FormGroup { | 69 | + buildForm(entity: OtaPackage): FormGroup { |
70 | const form = this.fb.group({ | 70 | const form = this.fb.group({ |
71 | title: [entity ? entity.title : '', [Validators.required, Validators.maxLength(255)]], | 71 | title: [entity ? entity.title : '', [Validators.required, Validators.maxLength(255)]], |
72 | version: [entity ? entity.version : '', [Validators.required, Validators.maxLength(255)]], | 72 | version: [entity ? entity.version : '', [Validators.required, Validators.maxLength(255)]], |
73 | - type: [entity?.type ? entity.type : FirmwareType.FIRMWARE, [Validators.required]], | ||
74 | - deviceProfileId: [entity ? entity.deviceProfileId : null], | 73 | + type: [entity?.type ? entity.type : OtaUpdateType.FIRMWARE, Validators.required], |
74 | + deviceProfileId: [entity ? entity.deviceProfileId : null, Validators.required], | ||
75 | checksumAlgorithm: [entity && entity.checksumAlgorithm ? entity.checksumAlgorithm : ChecksumAlgorithm.SHA256], | 75 | checksumAlgorithm: [entity && entity.checksumAlgorithm ? entity.checksumAlgorithm : ChecksumAlgorithm.SHA256], |
76 | checksum: [entity ? entity.checksum : '', Validators.maxLength(1020)], | 76 | checksum: [entity ? entity.checksum : '', Validators.maxLength(1020)], |
77 | additionalInfo: this.fb.group( | 77 | additionalInfo: this.fb.group( |
@@ -90,7 +90,7 @@ export class FirmwaresComponent extends EntityComponent<Firmware> implements OnI | @@ -90,7 +90,7 @@ export class FirmwaresComponent extends EntityComponent<Firmware> implements OnI | ||
90 | return form; | 90 | return form; |
91 | } | 91 | } |
92 | 92 | ||
93 | - updateForm(entity: Firmware) { | 93 | + updateForm(entity: OtaPackage) { |
94 | this.entityForm.patchValue({ | 94 | this.entityForm.patchValue({ |
95 | title: entity.title, | 95 | title: entity.title, |
96 | version: entity.version, | 96 | version: entity.version, |
@@ -105,12 +105,18 @@ export class FirmwaresComponent extends EntityComponent<Firmware> implements OnI | @@ -105,12 +105,18 @@ export class FirmwaresComponent extends EntityComponent<Firmware> implements OnI | ||
105 | description: entity.additionalInfo ? entity.additionalInfo.description : '' | 105 | description: entity.additionalInfo ? entity.additionalInfo.description : '' |
106 | } | 106 | } |
107 | }); | 107 | }); |
108 | + if (!this.isAdd && this.entityForm.enabled) { | ||
109 | + this.entityForm.disable({emitEvent: false}); | ||
110 | + this.entityForm.get('additionalInfo').enable({emitEvent: false}); | ||
111 | + // this.entityForm.get('dataSize').disable({emitEvent: false}); | ||
112 | + // this.entityForm.get('contentType').disable({emitEvent: false}); | ||
113 | + } | ||
108 | } | 114 | } |
109 | 115 | ||
110 | - onFirmwareIdCopied() { | 116 | + onPackageIdCopied() { |
111 | this.store.dispatch(new ActionNotificationShow( | 117 | this.store.dispatch(new ActionNotificationShow( |
112 | { | 118 | { |
113 | - message: this.translate.instant('firmware.idCopiedMessage'), | 119 | + message: this.translate.instant('ota-update.idCopiedMessage'), |
114 | type: 'success', | 120 | type: 'success', |
115 | duration: 750, | 121 | duration: 750, |
116 | verticalPosition: 'bottom', | 122 | verticalPosition: 'bottom', |
@@ -118,10 +124,10 @@ export class FirmwaresComponent extends EntityComponent<Firmware> implements OnI | @@ -118,10 +124,10 @@ export class FirmwaresComponent extends EntityComponent<Firmware> implements OnI | ||
118 | })); | 124 | })); |
119 | } | 125 | } |
120 | 126 | ||
121 | - onFirmwareChecksumCopied() { | 127 | + onPackageChecksumCopied() { |
122 | this.store.dispatch(new ActionNotificationShow( | 128 | this.store.dispatch(new ActionNotificationShow( |
123 | { | 129 | { |
124 | - message: this.translate.instant('firmware.checksum-copied-message'), | 130 | + message: this.translate.instant('ota-update.checksum-copied-message'), |
125 | type: 'success', | 131 | type: 'success', |
126 | duration: 750, | 132 | duration: 750, |
127 | verticalPosition: 'bottom', | 133 | verticalPosition: 'bottom', |
ui-ngx/src/app/modules/home/pages/ota-update/ota-update.module.ts
renamed from
ui-ngx/src/app/modules/home/pages/firmware/firmware.module.ts
@@ -18,18 +18,18 @@ import { NgModule } from '@angular/core'; | @@ -18,18 +18,18 @@ import { NgModule } from '@angular/core'; | ||
18 | import { CommonModule } from '@angular/common'; | 18 | import { CommonModule } from '@angular/common'; |
19 | import { SharedModule } from '@shared/shared.module'; | 19 | import { SharedModule } from '@shared/shared.module'; |
20 | import { HomeComponentsModule } from '@home/components/home-components.module'; | 20 | import { HomeComponentsModule } from '@home/components/home-components.module'; |
21 | -import { FirmwareRoutingModule } from '@home/pages/firmware/firmware-routing.module'; | ||
22 | -import { FirmwaresComponent } from '@home/pages/firmware/firmwares.component'; | 21 | +import { OtaUpdateRoutingModule } from '@home/pages/ota-update/ota-update-routing.module'; |
22 | +import { OtaUpdateComponent } from '@home/pages/ota-update/ota-update.component'; | ||
23 | 23 | ||
24 | @NgModule({ | 24 | @NgModule({ |
25 | declarations: [ | 25 | declarations: [ |
26 | - FirmwaresComponent | 26 | + OtaUpdateComponent |
27 | ], | 27 | ], |
28 | imports: [ | 28 | imports: [ |
29 | CommonModule, | 29 | CommonModule, |
30 | SharedModule, | 30 | SharedModule, |
31 | HomeComponentsModule, | 31 | HomeComponentsModule, |
32 | - FirmwareRoutingModule | 32 | + OtaUpdateRoutingModule |
33 | ] | 33 | ] |
34 | }) | 34 | }) |
35 | -export class FirmwareModule { } | 35 | +export class OtaUpdateModule { } |
ui-ngx/src/app/shared/components/ota-package/ota-package-autocomplete.component.html
renamed from
ui-ngx/src/app/shared/components/firmware/firmware-autocomplete.component.html
@@ -15,40 +15,41 @@ | @@ -15,40 +15,41 @@ | ||
15 | limitations under the License. | 15 | limitations under the License. |
16 | 16 | ||
17 | --> | 17 | --> |
18 | -<mat-form-field [formGroup]="firmwareFormGroup" class="mat-block"> | 18 | +<mat-form-field [formGroup]="otaPackageFormGroup" class="mat-block"> |
19 | <input matInput type="text" placeholder="{{ placeholderText | translate }}" | 19 | <input matInput type="text" placeholder="{{ placeholderText | translate }}" |
20 | - #firmwareInput | ||
21 | - formControlName="firmwareId" | 20 | + #packageInput |
21 | + formControlName="packageId" | ||
22 | (focusin)="onFocus()" | 22 | (focusin)="onFocus()" |
23 | [required]="required" | 23 | [required]="required" |
24 | - [matAutocomplete]="firmwareAutocomplete"> | ||
25 | - <button *ngIf="firmwareFormGroup.get('firmwareId').value && !disabled" | 24 | + [matAutocomplete]="packageAutocomplete"> |
25 | + <button *ngIf="otaPackageFormGroup.get('packageId').value && !disabled" | ||
26 | type="button" | 26 | type="button" |
27 | matSuffix mat-button mat-icon-button aria-label="Clear" | 27 | matSuffix mat-button mat-icon-button aria-label="Clear" |
28 | (click)="clear()"> | 28 | (click)="clear()"> |
29 | <mat-icon class="material-icons">close</mat-icon> | 29 | <mat-icon class="material-icons">close</mat-icon> |
30 | </button> | 30 | </button> |
31 | <mat-autocomplete class="tb-autocomplete" | 31 | <mat-autocomplete class="tb-autocomplete" |
32 | - #firmwareAutocomplete="matAutocomplete" | ||
33 | - [displayWith]="displayFirmwareFn"> | ||
34 | - <mat-option *ngFor="let firmware of filteredFirmwares | async" [value]="firmware"> | ||
35 | - <span [innerHTML]="this.firmwareTitleText(firmware) | highlight:searchText"></span> | 32 | + #packageAutocomplete="matAutocomplete" |
33 | + [displayWith]="displayPackageFn"> | ||
34 | + <mat-option *ngFor="let package of filteredPackages | async" [value]="package"> | ||
35 | + <span [innerHTML]="this.packageTitleText(package) | highlight:searchText"></span> | ||
36 | </mat-option> | 36 | </mat-option> |
37 | - <mat-option *ngIf="!(filteredFirmwares | async)?.length" [value]="null" class="tb-not-found"> | 37 | + <mat-option *ngIf="!(filteredPackages | async)?.length" [value]="null" class="tb-not-found"> |
38 | <div class="tb-not-found-content" (click)="$event.stopPropagation()"> | 38 | <div class="tb-not-found-content" (click)="$event.stopPropagation()"> |
39 | <div *ngIf="!textIsNotEmpty(searchText); else searchNotEmpty"> | 39 | <div *ngIf="!textIsNotEmpty(searchText); else searchNotEmpty"> |
40 | - <span>{{ notFoundFirmware | translate }}</span> | 40 | + <span>{{ notFoundPackage | translate }}</span> |
41 | </div> | 41 | </div> |
42 | <ng-template #searchNotEmpty> | 42 | <ng-template #searchNotEmpty> |
43 | <span> | 43 | <span> |
44 | - {{ translate.get(notMatchingFirmware, | 44 | + {{ translate.get(notMatchingPackage, |
45 | {entity: truncate.transform(searchText, true, 6, '...')}) | async }} | 45 | {entity: truncate.transform(searchText, true, 6, '...')}) | async }} |
46 | </span> | 46 | </span> |
47 | </ng-template> | 47 | </ng-template> |
48 | </div> | 48 | </div> |
49 | </mat-option> | 49 | </mat-option> |
50 | </mat-autocomplete> | 50 | </mat-autocomplete> |
51 | - <mat-error *ngIf="firmwareFormGroup.get('firmwareId').hasError('required')"> | 51 | + <mat-error *ngIf="otaPackageFormGroup.get('packageId').hasError('required')"> |
52 | {{ requiredErrorText | translate }} | 52 | {{ requiredErrorText | translate }} |
53 | </mat-error> | 53 | </mat-error> |
54 | + <mat-hint *ngIf="!disabled">{{ hintText | translate }}</mat-hint> | ||
54 | </mat-form-field> | 55 | </mat-form-field> |
ui-ngx/src/app/shared/components/ota-package/ota-package-autocomplete.component.ts
renamed from
ui-ngx/src/app/shared/components/firmware/firmware-autocomplete.component.ts
@@ -28,29 +28,29 @@ import { BaseData } from '@shared/models/base-data'; | @@ -28,29 +28,29 @@ import { BaseData } from '@shared/models/base-data'; | ||
28 | import { EntityService } from '@core/http/entity.service'; | 28 | import { EntityService } from '@core/http/entity.service'; |
29 | import { TruncatePipe } from '@shared/pipe/truncate.pipe'; | 29 | import { TruncatePipe } from '@shared/pipe/truncate.pipe'; |
30 | import { MatAutocompleteTrigger } from '@angular/material/autocomplete'; | 30 | import { MatAutocompleteTrigger } from '@angular/material/autocomplete'; |
31 | -import { FirmwareInfo, FirmwareType } from '@shared/models/firmware.models'; | ||
32 | -import { FirmwareService } from '@core/http/firmware.service'; | 31 | +import { OtaPackageInfo, OtaUpdateTranslation, OtaUpdateType } from '@shared/models/ota-package.models'; |
32 | +import { OtaPackageService } from '@core/http/ota-package.service'; | ||
33 | import { PageLink } from '@shared/models/page/page-link'; | 33 | import { PageLink } from '@shared/models/page/page-link'; |
34 | import { Direction } from '@shared/models/page/sort-order'; | 34 | import { Direction } from '@shared/models/page/sort-order'; |
35 | 35 | ||
36 | @Component({ | 36 | @Component({ |
37 | - selector: 'tb-firmware-autocomplete', | ||
38 | - templateUrl: './firmware-autocomplete.component.html', | 37 | + selector: 'tb-ota-package-autocomplete', |
38 | + templateUrl: './ota-package-autocomplete.component.html', | ||
39 | styleUrls: [], | 39 | styleUrls: [], |
40 | providers: [{ | 40 | providers: [{ |
41 | provide: NG_VALUE_ACCESSOR, | 41 | provide: NG_VALUE_ACCESSOR, |
42 | - useExisting: forwardRef(() => FirmwareAutocompleteComponent), | 42 | + useExisting: forwardRef(() => OtaPackageAutocompleteComponent), |
43 | multi: true | 43 | multi: true |
44 | }] | 44 | }] |
45 | }) | 45 | }) |
46 | -export class FirmwareAutocompleteComponent implements ControlValueAccessor, OnInit { | 46 | +export class OtaPackageAutocompleteComponent implements ControlValueAccessor, OnInit { |
47 | 47 | ||
48 | - firmwareFormGroup: FormGroup; | 48 | + otaPackageFormGroup: FormGroup; |
49 | 49 | ||
50 | modelValue: string | EntityId | null; | 50 | modelValue: string | EntityId | null; |
51 | 51 | ||
52 | @Input() | 52 | @Input() |
53 | - type = FirmwareType.FIRMWARE; | 53 | + type = OtaUpdateType.FIRMWARE; |
54 | 54 | ||
55 | @Input() | 55 | @Input() |
56 | deviceProfileId: string; | 56 | deviceProfileId: string; |
@@ -78,42 +78,24 @@ export class FirmwareAutocompleteComponent implements ControlValueAccessor, OnIn | @@ -78,42 +78,24 @@ export class FirmwareAutocompleteComponent implements ControlValueAccessor, OnIn | ||
78 | @Input() | 78 | @Input() |
79 | disabled: boolean; | 79 | disabled: boolean; |
80 | 80 | ||
81 | - @ViewChild('firmwareInput', {static: true}) firmwareInput: ElementRef; | ||
82 | - @ViewChild('firmwareInput', {read: MatAutocompleteTrigger}) firmwareAutocomplete: MatAutocompleteTrigger; | 81 | + @ViewChild('packageInput', {static: true}) packageInput: ElementRef; |
83 | 82 | ||
84 | - filteredFirmwares: Observable<Array<FirmwareInfo>>; | 83 | + filteredPackages: Observable<Array<OtaPackageInfo>>; |
85 | 84 | ||
86 | searchText = ''; | 85 | searchText = ''; |
87 | 86 | ||
88 | private dirty = false; | 87 | private dirty = false; |
89 | 88 | ||
90 | - private firmwareTypeTranslation = new Map<FirmwareType, any>( | ||
91 | - [ | ||
92 | - [FirmwareType.FIRMWARE, { | ||
93 | - label: 'firmware.firmware', | ||
94 | - required: 'firmware.firmware-required', | ||
95 | - noFound: 'firmware.no-firmware-text', | ||
96 | - noMatching: 'firmware.no-firmware-matching' | ||
97 | - }], | ||
98 | - [FirmwareType.SOFTWARE, { | ||
99 | - label: 'firmware.software', | ||
100 | - required: 'firmware.software-required', | ||
101 | - noFound: 'firmware.no-software-text', | ||
102 | - noMatching: 'firmware.no-software-matching' | ||
103 | - }] | ||
104 | - ] | ||
105 | - ); | ||
106 | - | ||
107 | private propagateChange = (v: any) => { }; | 89 | private propagateChange = (v: any) => { }; |
108 | 90 | ||
109 | constructor(private store: Store<AppState>, | 91 | constructor(private store: Store<AppState>, |
110 | public translate: TranslateService, | 92 | public translate: TranslateService, |
111 | public truncate: TruncatePipe, | 93 | public truncate: TruncatePipe, |
112 | private entityService: EntityService, | 94 | private entityService: EntityService, |
113 | - private firmwareService: FirmwareService, | 95 | + private otaPackageService: OtaPackageService, |
114 | private fb: FormBuilder) { | 96 | private fb: FormBuilder) { |
115 | - this.firmwareFormGroup = this.fb.group({ | ||
116 | - firmwareId: [null] | 97 | + this.otaPackageFormGroup = this.fb.group({ |
98 | + packageId: [null] | ||
117 | }); | 99 | }); |
118 | } | 100 | } |
119 | 101 | ||
@@ -125,7 +107,7 @@ export class FirmwareAutocompleteComponent implements ControlValueAccessor, OnIn | @@ -125,7 +107,7 @@ export class FirmwareAutocompleteComponent implements ControlValueAccessor, OnIn | ||
125 | } | 107 | } |
126 | 108 | ||
127 | ngOnInit() { | 109 | ngOnInit() { |
128 | - this.filteredFirmwares = this.firmwareFormGroup.get('firmwareId').valueChanges | 110 | + this.filteredPackages = this.otaPackageFormGroup.get('packageId').valueChanges |
129 | .pipe( | 111 | .pipe( |
130 | tap(value => { | 112 | tap(value => { |
131 | let modelValue; | 113 | let modelValue; |
@@ -140,7 +122,7 @@ export class FirmwareAutocompleteComponent implements ControlValueAccessor, OnIn | @@ -140,7 +122,7 @@ export class FirmwareAutocompleteComponent implements ControlValueAccessor, OnIn | ||
140 | } | 122 | } |
141 | }), | 123 | }), |
142 | map(value => value ? (typeof value === 'string' ? value : value.title) : ''), | 124 | map(value => value ? (typeof value === 'string' ? value : value.title) : ''), |
143 | - mergeMap(name => this.fetchFirmware(name)), | 125 | + mergeMap(name => this.fetchPackages(name)), |
144 | share() | 126 | share() |
145 | ); | 127 | ); |
146 | } | 128 | } |
@@ -149,7 +131,7 @@ export class FirmwareAutocompleteComponent implements ControlValueAccessor, OnIn | @@ -149,7 +131,7 @@ export class FirmwareAutocompleteComponent implements ControlValueAccessor, OnIn | ||
149 | } | 131 | } |
150 | 132 | ||
151 | getCurrentEntity(): BaseData<EntityId> | null { | 133 | getCurrentEntity(): BaseData<EntityId> | null { |
152 | - const currentRuleChain = this.firmwareFormGroup.get('firmwareId').value; | 134 | + const currentRuleChain = this.otaPackageFormGroup.get('packageId').value; |
153 | if (currentRuleChain && typeof currentRuleChain !== 'string') { | 135 | if (currentRuleChain && typeof currentRuleChain !== 'string') { |
154 | return currentRuleChain as BaseData<EntityId>; | 136 | return currentRuleChain as BaseData<EntityId>; |
155 | } else { | 137 | } else { |
@@ -160,9 +142,9 @@ export class FirmwareAutocompleteComponent implements ControlValueAccessor, OnIn | @@ -160,9 +142,9 @@ export class FirmwareAutocompleteComponent implements ControlValueAccessor, OnIn | ||
160 | setDisabledState(isDisabled: boolean): void { | 142 | setDisabledState(isDisabled: boolean): void { |
161 | this.disabled = isDisabled; | 143 | this.disabled = isDisabled; |
162 | if (this.disabled) { | 144 | if (this.disabled) { |
163 | - this.firmwareFormGroup.disable({emitEvent: false}); | 145 | + this.otaPackageFormGroup.disable({emitEvent: false}); |
164 | } else { | 146 | } else { |
165 | - this.firmwareFormGroup.enable({emitEvent: false}); | 147 | + this.otaPackageFormGroup.enable({emitEvent: false}); |
166 | } | 148 | } |
167 | } | 149 | } |
168 | 150 | ||
@@ -173,21 +155,21 @@ export class FirmwareAutocompleteComponent implements ControlValueAccessor, OnIn | @@ -173,21 +155,21 @@ export class FirmwareAutocompleteComponent implements ControlValueAccessor, OnIn | ||
173 | writeValue(value: string | EntityId | null): void { | 155 | writeValue(value: string | EntityId | null): void { |
174 | this.searchText = ''; | 156 | this.searchText = ''; |
175 | if (value != null && value !== '') { | 157 | if (value != null && value !== '') { |
176 | - let firmwareId = ''; | 158 | + let packageId = ''; |
177 | if (typeof value === 'string') { | 159 | if (typeof value === 'string') { |
178 | - firmwareId = value; | 160 | + packageId = value; |
179 | } else if (value.entityType && value.id) { | 161 | } else if (value.entityType && value.id) { |
180 | - firmwareId = value.id; | 162 | + packageId = value.id; |
181 | } | 163 | } |
182 | - if (firmwareId !== '') { | ||
183 | - this.entityService.getEntity(EntityType.FIRMWARE, firmwareId, {ignoreLoading: true, ignoreErrors: true}).subscribe( | 164 | + if (packageId !== '') { |
165 | + this.entityService.getEntity(EntityType.OTA_PACKAGE, packageId, {ignoreLoading: true, ignoreErrors: true}).subscribe( | ||
184 | (entity) => { | 166 | (entity) => { |
185 | this.modelValue = this.useFullEntityId ? entity.id : entity.id.id; | 167 | this.modelValue = this.useFullEntityId ? entity.id : entity.id.id; |
186 | - this.firmwareFormGroup.get('firmwareId').patchValue(entity, {emitEvent: false}); | 168 | + this.otaPackageFormGroup.get('packageId').patchValue(entity, {emitEvent: false}); |
187 | }, | 169 | }, |
188 | () => { | 170 | () => { |
189 | this.modelValue = null; | 171 | this.modelValue = null; |
190 | - this.firmwareFormGroup.get('firmwareId').patchValue('', {emitEvent: false}); | 172 | + this.otaPackageFormGroup.get('packageId').patchValue('', {emitEvent: false}); |
191 | if (value !== null) { | 173 | if (value !== null) { |
192 | this.propagateChange(this.modelValue); | 174 | this.propagateChange(this.modelValue); |
193 | } | 175 | } |
@@ -195,25 +177,25 @@ export class FirmwareAutocompleteComponent implements ControlValueAccessor, OnIn | @@ -195,25 +177,25 @@ export class FirmwareAutocompleteComponent implements ControlValueAccessor, OnIn | ||
195 | ); | 177 | ); |
196 | } else { | 178 | } else { |
197 | this.modelValue = null; | 179 | this.modelValue = null; |
198 | - this.firmwareFormGroup.get('firmwareId').patchValue('', {emitEvent: false}); | 180 | + this.otaPackageFormGroup.get('packageId').patchValue('', {emitEvent: false}); |
199 | this.propagateChange(null); | 181 | this.propagateChange(null); |
200 | } | 182 | } |
201 | } else { | 183 | } else { |
202 | this.modelValue = null; | 184 | this.modelValue = null; |
203 | - this.firmwareFormGroup.get('firmwareId').patchValue('', {emitEvent: false}); | 185 | + this.otaPackageFormGroup.get('packageId').patchValue('', {emitEvent: false}); |
204 | } | 186 | } |
205 | this.dirty = true; | 187 | this.dirty = true; |
206 | } | 188 | } |
207 | 189 | ||
208 | onFocus() { | 190 | onFocus() { |
209 | if (this.dirty) { | 191 | if (this.dirty) { |
210 | - this.firmwareFormGroup.get('firmwareId').updateValueAndValidity({onlySelf: true, emitEvent: true}); | 192 | + this.otaPackageFormGroup.get('packageId').updateValueAndValidity({onlySelf: true, emitEvent: true}); |
211 | this.dirty = false; | 193 | this.dirty = false; |
212 | } | 194 | } |
213 | } | 195 | } |
214 | 196 | ||
215 | reset() { | 197 | reset() { |
216 | - this.firmwareFormGroup.get('firmwareId').patchValue('', {emitEvent: false}); | 198 | + this.otaPackageFormGroup.get('packageId').patchValue('', {emitEvent: false}); |
217 | } | 199 | } |
218 | 200 | ||
219 | updateView(value: string | null) { | 201 | updateView(value: string | null) { |
@@ -223,47 +205,51 @@ export class FirmwareAutocompleteComponent implements ControlValueAccessor, OnIn | @@ -223,47 +205,51 @@ export class FirmwareAutocompleteComponent implements ControlValueAccessor, OnIn | ||
223 | } | 205 | } |
224 | } | 206 | } |
225 | 207 | ||
226 | - displayFirmwareFn(firmware?: FirmwareInfo): string | undefined { | ||
227 | - return firmware ? `${firmware.title} (${firmware.version})` : undefined; | 208 | + displayPackageFn(packageInfo?: OtaPackageInfo): string | undefined { |
209 | + return packageInfo ? `${packageInfo.title} (${packageInfo.version})` : undefined; | ||
228 | } | 210 | } |
229 | 211 | ||
230 | - fetchFirmware(searchText?: string): Observable<Array<FirmwareInfo>> { | 212 | + fetchPackages(searchText?: string): Observable<Array<OtaPackageInfo>> { |
231 | this.searchText = searchText; | 213 | this.searchText = searchText; |
232 | const pageLink = new PageLink(50, 0, searchText, { | 214 | const pageLink = new PageLink(50, 0, searchText, { |
233 | property: 'title', | 215 | property: 'title', |
234 | direction: Direction.ASC | 216 | direction: Direction.ASC |
235 | }); | 217 | }); |
236 | - return this.firmwareService.getFirmwaresInfoByDeviceProfileId(pageLink, this.deviceProfileId, this.type, | 218 | + return this.otaPackageService.getOtaPackagesInfoByDeviceProfileId(pageLink, this.deviceProfileId, this.type, |
237 | true, {ignoreLoading: true}).pipe( | 219 | true, {ignoreLoading: true}).pipe( |
238 | map((data) => data && data.data.length ? data.data : null) | 220 | map((data) => data && data.data.length ? data.data : null) |
239 | ); | 221 | ); |
240 | } | 222 | } |
241 | 223 | ||
242 | clear() { | 224 | clear() { |
243 | - this.firmwareFormGroup.get('firmwareId').patchValue('', {emitEvent: true}); | 225 | + this.otaPackageFormGroup.get('packageId').patchValue('', {emitEvent: true}); |
244 | setTimeout(() => { | 226 | setTimeout(() => { |
245 | - this.firmwareInput.nativeElement.blur(); | ||
246 | - this.firmwareInput.nativeElement.focus(); | 227 | + this.packageInput.nativeElement.blur(); |
228 | + this.packageInput.nativeElement.focus(); | ||
247 | }, 0); | 229 | }, 0); |
248 | } | 230 | } |
249 | 231 | ||
250 | get placeholderText(): string { | 232 | get placeholderText(): string { |
251 | - return this.labelText || this.firmwareTypeTranslation.get(this.type).label; | 233 | + return this.labelText || OtaUpdateTranslation.get(this.type).label; |
252 | } | 234 | } |
253 | 235 | ||
254 | get requiredErrorText(): string { | 236 | get requiredErrorText(): string { |
255 | - return this.requiredText || this.firmwareTypeTranslation.get(this.type).required; | 237 | + return this.requiredText || OtaUpdateTranslation.get(this.type).required; |
238 | + } | ||
239 | + | ||
240 | + get notFoundPackage(): string { | ||
241 | + return OtaUpdateTranslation.get(this.type).noFound; | ||
256 | } | 242 | } |
257 | 243 | ||
258 | - get notFoundFirmware(): string { | ||
259 | - return this.firmwareTypeTranslation.get(this.type).noFound; | 244 | + get notMatchingPackage(): string { |
245 | + return OtaUpdateTranslation.get(this.type).noMatching; | ||
260 | } | 246 | } |
261 | 247 | ||
262 | - get notMatchingFirmware(): string { | ||
263 | - return this.firmwareTypeTranslation.get(this.type).noMatching; | 248 | + get hintText(): string { |
249 | + return OtaUpdateTranslation.get(this.type).hint; | ||
264 | } | 250 | } |
265 | 251 | ||
266 | - firmwareTitleText(firmware: FirmwareInfo): string { | ||
267 | - return `${firmware.title} (${firmware.version})`; | 252 | + packageTitleText(firpackageInfomware: OtaPackageInfo): string { |
253 | + return `${firpackageInfomware.title} (${firpackageInfomware.version})`; | ||
268 | } | 254 | } |
269 | } | 255 | } |
@@ -121,6 +121,7 @@ export const HelpLinks = { | @@ -121,6 +121,7 @@ export const HelpLinks = { | ||
121 | entitiesImport: helpBaseUrl + '/docs/user-guide/bulk-provisioning', | 121 | entitiesImport: helpBaseUrl + '/docs/user-guide/bulk-provisioning', |
122 | rulechains: helpBaseUrl + '/docs/user-guide/ui/rule-chains', | 122 | rulechains: helpBaseUrl + '/docs/user-guide/ui/rule-chains', |
123 | dashboards: helpBaseUrl + '/docs/user-guide/ui/dashboards', | 123 | dashboards: helpBaseUrl + '/docs/user-guide/ui/dashboards', |
124 | + otaUpdates: helpBaseUrl + '/docs/user-guide/ui/ota-updates', | ||
124 | widgetsBundles: helpBaseUrl + '/docs/user-guide/ui/widget-library#bundles', | 125 | widgetsBundles: helpBaseUrl + '/docs/user-guide/ui/widget-library#bundles', |
125 | widgetsConfig: helpBaseUrl + '/docs/user-guide/ui/dashboards#widget-configuration', | 126 | widgetsConfig: helpBaseUrl + '/docs/user-guide/ui/dashboards#widget-configuration', |
126 | widgetsConfigTimeseries: helpBaseUrl + '/docs/user-guide/ui/dashboards#timeseries', | 127 | widgetsConfigTimeseries: helpBaseUrl + '/docs/user-guide/ui/dashboards#timeseries', |
@@ -27,7 +27,7 @@ import { KeyFilter } from '@shared/models/query/query.models'; | @@ -27,7 +27,7 @@ import { KeyFilter } from '@shared/models/query/query.models'; | ||
27 | import { TimeUnit } from '@shared/models/time/time.models'; | 27 | import { TimeUnit } from '@shared/models/time/time.models'; |
28 | import * as _moment from 'moment'; | 28 | import * as _moment from 'moment'; |
29 | import { AbstractControl, ValidationErrors } from '@angular/forms'; | 29 | import { AbstractControl, ValidationErrors } from '@angular/forms'; |
30 | -import { FirmwareId } from '@shared/models/id/firmware-id'; | 30 | +import { OtaPackageId } from '@shared/models/id/ota-package-id'; |
31 | import { DashboardId } from '@shared/models/id/dashboard-id'; | 31 | import { DashboardId } from '@shared/models/id/dashboard-id'; |
32 | 32 | ||
33 | export enum DeviceProfileType { | 33 | export enum DeviceProfileType { |
@@ -500,8 +500,8 @@ export interface DeviceProfile extends BaseData<DeviceProfileId> { | @@ -500,8 +500,8 @@ export interface DeviceProfile extends BaseData<DeviceProfileId> { | ||
500 | defaultRuleChainId?: RuleChainId; | 500 | defaultRuleChainId?: RuleChainId; |
501 | defaultDashboardId?: DashboardId; | 501 | defaultDashboardId?: DashboardId; |
502 | defaultQueueName?: string; | 502 | defaultQueueName?: string; |
503 | - firmwareId?: FirmwareId; | ||
504 | - softwareId?: FirmwareId; | 503 | + firmwareId?: OtaPackageId; |
504 | + softwareId?: OtaPackageId; | ||
505 | profileData: DeviceProfileData; | 505 | profileData: DeviceProfileData; |
506 | } | 506 | } |
507 | 507 | ||
@@ -563,8 +563,8 @@ export interface Device extends BaseData<DeviceId> { | @@ -563,8 +563,8 @@ export interface Device extends BaseData<DeviceId> { | ||
563 | name: string; | 563 | name: string; |
564 | type: string; | 564 | type: string; |
565 | label: string; | 565 | label: string; |
566 | - firmwareId?: FirmwareId; | ||
567 | - softwareId?: FirmwareId; | 566 | + firmwareId?: OtaPackageId; |
567 | + softwareId?: OtaPackageId; | ||
568 | deviceProfileId?: DeviceProfileId; | 568 | deviceProfileId?: DeviceProfileId; |
569 | deviceData?: DeviceData; | 569 | deviceData?: DeviceData; |
570 | additionalInfo?: any; | 570 | additionalInfo?: any; |
@@ -35,7 +35,7 @@ export enum EntityType { | @@ -35,7 +35,7 @@ export enum EntityType { | ||
35 | WIDGET_TYPE = 'WIDGET_TYPE', | 35 | WIDGET_TYPE = 'WIDGET_TYPE', |
36 | API_USAGE_STATE = 'API_USAGE_STATE', | 36 | API_USAGE_STATE = 'API_USAGE_STATE', |
37 | TB_RESOURCE = 'TB_RESOURCE', | 37 | TB_RESOURCE = 'TB_RESOURCE', |
38 | - FIRMWARE = 'FIRMWARE' | 38 | + OTA_PACKAGE = 'OTA_PACKAGE' |
39 | } | 39 | } |
40 | 40 | ||
41 | export enum AliasEntityType { | 41 | export enum AliasEntityType { |
@@ -296,14 +296,14 @@ export const entityTypeTranslations = new Map<EntityType | AliasEntityType, Enti | @@ -296,14 +296,14 @@ export const entityTypeTranslations = new Map<EntityType | AliasEntityType, Enti | ||
296 | } | 296 | } |
297 | ], | 297 | ], |
298 | [ | 298 | [ |
299 | - EntityType.FIRMWARE, | 299 | + EntityType.OTA_PACKAGE, |
300 | { | 300 | { |
301 | - type: 'entity.type-firmware', | ||
302 | - details: 'firmware.firmware-details', | ||
303 | - add: 'firmware.add', | ||
304 | - noEntities: 'firmware.no-firmware-text', | ||
305 | - search: 'firmware.search', | ||
306 | - selectedEntities: 'firmware.selected-firmware' | 301 | + type: 'entity.type-ota-package', |
302 | + details: 'ota-update.ota-update-details', | ||
303 | + add: 'ota-update.add', | ||
304 | + noEntities: 'ota-update.no-packages-text', | ||
305 | + search: 'ota-update.search', | ||
306 | + selectedEntities: 'ota-update.selected-package' | ||
307 | } | 307 | } |
308 | ] | 308 | ] |
309 | ] | 309 | ] |
@@ -390,9 +390,9 @@ export const entityTypeResources = new Map<EntityType, EntityTypeResource<BaseDa | @@ -390,9 +390,9 @@ export const entityTypeResources = new Map<EntityType, EntityTypeResource<BaseDa | ||
390 | } | 390 | } |
391 | ], | 391 | ], |
392 | [ | 392 | [ |
393 | - EntityType.FIRMWARE, | 393 | + EntityType.OTA_PACKAGE, |
394 | { | 394 | { |
395 | - helpLinkId: 'firmware' | 395 | + helpLinkId: 'otaUpdates' |
396 | } | 396 | } |
397 | ] | 397 | ] |
398 | ] | 398 | ] |
ui-ngx/src/app/shared/models/id/ota-package-id.ts
renamed from
ui-ngx/src/app/shared/models/id/firmware-id.ts
@@ -17,8 +17,8 @@ | @@ -17,8 +17,8 @@ | ||
17 | import { EntityId } from '@shared/models/id/entity-id'; | 17 | import { EntityId } from '@shared/models/id/entity-id'; |
18 | import { EntityType } from '@shared/models/entity-type.models'; | 18 | import { EntityType } from '@shared/models/entity-type.models'; |
19 | 19 | ||
20 | -export class FirmwareId implements EntityId { | ||
21 | - entityType = EntityType.FIRMWARE; | 20 | +export class OtaPackageId implements EntityId { |
21 | + entityType = EntityType.OTA_PACKAGE; | ||
22 | id: string; | 22 | id: string; |
23 | constructor(id: string) { | 23 | constructor(id: string) { |
24 | this.id = id; | 24 | this.id = id; |
ui-ngx/src/app/shared/models/ota-package.models.ts
renamed from
ui-ngx/src/app/shared/models/firmware.models.ts
@@ -16,7 +16,7 @@ | @@ -16,7 +16,7 @@ | ||
16 | 16 | ||
17 | import { BaseData } from '@shared/models/base-data'; | 17 | import { BaseData } from '@shared/models/base-data'; |
18 | import { TenantId } from '@shared/models/id/tenant-id'; | 18 | import { TenantId } from '@shared/models/id/tenant-id'; |
19 | -import { FirmwareId } from '@shared/models/id/firmware-id'; | 19 | +import { OtaPackageId } from '@shared/models/id/ota-package-id'; |
20 | import { DeviceProfileId } from '@shared/models/id/device-profile-id'; | 20 | import { DeviceProfileId } from '@shared/models/id/device-profile-id'; |
21 | 21 | ||
22 | export enum ChecksumAlgorithm { | 22 | export enum ChecksumAlgorithm { |
@@ -41,21 +41,48 @@ export const ChecksumAlgorithmTranslationMap = new Map<ChecksumAlgorithm, string | @@ -41,21 +41,48 @@ export const ChecksumAlgorithmTranslationMap = new Map<ChecksumAlgorithm, string | ||
41 | ] | 41 | ] |
42 | ); | 42 | ); |
43 | 43 | ||
44 | -export enum FirmwareType { | 44 | +export enum OtaUpdateType { |
45 | FIRMWARE = 'FIRMWARE', | 45 | FIRMWARE = 'FIRMWARE', |
46 | SOFTWARE = 'SOFTWARE' | 46 | SOFTWARE = 'SOFTWARE' |
47 | } | 47 | } |
48 | 48 | ||
49 | -export const FirmwareTypeTranslationMap = new Map<FirmwareType, string>( | 49 | +export const OtaUpdateTypeTranslationMap = new Map<OtaUpdateType, string>( |
50 | [ | 50 | [ |
51 | - [FirmwareType.FIRMWARE, 'firmware.types.firmware'], | ||
52 | - [FirmwareType.SOFTWARE, 'firmware.types.software'] | 51 | + [OtaUpdateType.FIRMWARE, 'ota-update.types.firmware'], |
52 | + [OtaUpdateType.SOFTWARE, 'ota-update.types.software'] | ||
53 | ] | 53 | ] |
54 | ); | 54 | ); |
55 | 55 | ||
56 | -export interface FirmwareInfo extends BaseData<FirmwareId> { | 56 | +export interface OtaUpdateTranslation { |
57 | + label: string; | ||
58 | + required: string; | ||
59 | + noFound: string; | ||
60 | + noMatching: string; | ||
61 | + hint: string; | ||
62 | +} | ||
63 | + | ||
64 | +export const OtaUpdateTranslation = new Map<OtaUpdateType, OtaUpdateTranslation>( | ||
65 | + [ | ||
66 | + [OtaUpdateType.FIRMWARE, { | ||
67 | + label: 'ota-update.assign-firmware', | ||
68 | + required: 'ota-update.assign-firmware-required', | ||
69 | + noFound: 'ota-update.no-firmware-text', | ||
70 | + noMatching: 'ota-update.no-firmware-matching', | ||
71 | + hint: 'ota-update.chose-firmware-distributed-device' | ||
72 | + }], | ||
73 | + [OtaUpdateType.SOFTWARE, { | ||
74 | + label: 'ota-update.assign-software', | ||
75 | + required: 'ota-update.assign-software-required', | ||
76 | + noFound: 'ota-update.no-software-text', | ||
77 | + noMatching: 'ota-update.no-software-matching', | ||
78 | + hint: 'ota-update.chose-software-distributed-device' | ||
79 | + }] | ||
80 | + ] | ||
81 | +); | ||
82 | + | ||
83 | +export interface OtaPackageInfo extends BaseData<OtaPackageId> { | ||
57 | tenantId?: TenantId; | 84 | tenantId?: TenantId; |
58 | - type: FirmwareType; | 85 | + type: OtaUpdateType; |
59 | deviceProfileId?: DeviceProfileId; | 86 | deviceProfileId?: DeviceProfileId; |
60 | title?: string; | 87 | title?: string; |
61 | version?: string; | 88 | version?: string; |
@@ -68,7 +95,7 @@ export interface FirmwareInfo extends BaseData<FirmwareId> { | @@ -68,7 +95,7 @@ export interface FirmwareInfo extends BaseData<FirmwareId> { | ||
68 | additionalInfo?: any; | 95 | additionalInfo?: any; |
69 | } | 96 | } |
70 | 97 | ||
71 | -export interface Firmware extends FirmwareInfo { | 98 | +export interface OtaPackage extends OtaPackageInfo { |
72 | file?: File; | 99 | file?: File; |
73 | data: string; | 100 | data: string; |
74 | } | 101 | } |
@@ -141,7 +141,7 @@ import { FileSizePipe } from '@shared/pipe/file-size.pipe'; | @@ -141,7 +141,7 @@ import { FileSizePipe } from '@shared/pipe/file-size.pipe'; | ||
141 | import { WidgetsBundleSearchComponent } from '@shared/components/widgets-bundle-search.component'; | 141 | import { WidgetsBundleSearchComponent } from '@shared/components/widgets-bundle-search.component'; |
142 | import { SelectableColumnsPipe } from '@shared/pipe/selectable-columns.pipe'; | 142 | import { SelectableColumnsPipe } from '@shared/pipe/selectable-columns.pipe'; |
143 | import { QuickTimeIntervalComponent } from '@shared/components/time/quick-time-interval.component'; | 143 | import { QuickTimeIntervalComponent } from '@shared/components/time/quick-time-interval.component'; |
144 | -import { FirmwareAutocompleteComponent } from '@shared/components/firmware/firmware-autocomplete.component'; | 144 | +import { OtaPackageAutocompleteComponent } from '@shared/components/ota-package/ota-package-autocomplete.component'; |
145 | import { MAT_DATE_LOCALE } from '@angular/material/core'; | 145 | import { MAT_DATE_LOCALE } from '@angular/material/core'; |
146 | 146 | ||
147 | @NgModule({ | 147 | @NgModule({ |
@@ -239,7 +239,7 @@ import { MAT_DATE_LOCALE } from '@angular/material/core'; | @@ -239,7 +239,7 @@ import { MAT_DATE_LOCALE } from '@angular/material/core'; | ||
239 | HistorySelectorComponent, | 239 | HistorySelectorComponent, |
240 | EntityGatewaySelectComponent, | 240 | EntityGatewaySelectComponent, |
241 | ContactComponent, | 241 | ContactComponent, |
242 | - FirmwareAutocompleteComponent, | 242 | + OtaPackageAutocompleteComponent, |
243 | WidgetsBundleSearchComponent | 243 | WidgetsBundleSearchComponent |
244 | ], | 244 | ], |
245 | imports: [ | 245 | imports: [ |
@@ -411,7 +411,7 @@ import { MAT_DATE_LOCALE } from '@angular/material/core'; | @@ -411,7 +411,7 @@ import { MAT_DATE_LOCALE } from '@angular/material/core'; | ||
411 | HistorySelectorComponent, | 411 | HistorySelectorComponent, |
412 | EntityGatewaySelectComponent, | 412 | EntityGatewaySelectComponent, |
413 | ContactComponent, | 413 | ContactComponent, |
414 | - FirmwareAutocompleteComponent, | 414 | + OtaPackageAutocompleteComponent, |
415 | WidgetsBundleSearchComponent | 415 | WidgetsBundleSearchComponent |
416 | ] | 416 | ] |
417 | }) | 417 | }) |
@@ -1516,7 +1516,7 @@ | @@ -1516,7 +1516,7 @@ | ||
1516 | "list-of-edges": "{ count, plural, 1 {One edge} other {List of # edges} }", | 1516 | "list-of-edges": "{ count, plural, 1 {One edge} other {List of # edges} }", |
1517 | "edge-name-starts-with": "Edges whose names start with '{{prefix}}'", | 1517 | "edge-name-starts-with": "Edges whose names start with '{{prefix}}'", |
1518 | "type-tb-resource": "Resource", | 1518 | "type-tb-resource": "Resource", |
1519 | - "type-firmware": "Firmware" | 1519 | + "type-ota-package": "OTA package" |
1520 | }, | 1520 | }, |
1521 | "entity-field": { | 1521 | "entity-field": { |
1522 | "created-time": "Created time", | 1522 | "created-time": "Created time", |
@@ -1927,51 +1927,6 @@ | @@ -1927,51 +1927,6 @@ | ||
1927 | "inherit-owner": "Inherit from owner", | 1927 | "inherit-owner": "Inherit from owner", |
1928 | "source-attribute-not-set": "If source attribute isn't set" | 1928 | "source-attribute-not-set": "If source attribute isn't set" |
1929 | }, | 1929 | }, |
1930 | - "firmware": { | ||
1931 | - "add": "Add firmware", | ||
1932 | - "checksum": "Checksum", | ||
1933 | - "checksum-copied-message": "Firmware checksum has been copied to clipboard", | ||
1934 | - "checksum-required": "Checksum is required.", | ||
1935 | - "checksum-algorithm": "Checksum algorithm", | ||
1936 | - "content-type": "Content type", | ||
1937 | - "copy-checksum": "Copy checksum", | ||
1938 | - "copyId": "Copy firmware Id", | ||
1939 | - "description": "Description", | ||
1940 | - "delete": "Delete firmware", | ||
1941 | - "delete-firmware-text": "Be careful, after the confirmation the firmware will become unrecoverable.", | ||
1942 | - "delete-firmware-title": "Are you sure you want to delete the firmware '{{firmwareTitle}}'?", | ||
1943 | - "delete-firmwares-action-title": "Delete { count, plural, 1 {1 firmware} other {# firmwares} }", | ||
1944 | - "delete-firmwares-text": "Be careful, after the confirmation all selected resources will be removed.", | ||
1945 | - "delete-firmwares-title": "Are you sure you want to delete { count, plural, 1 {1 firmware} other {# firmwares} }?", | ||
1946 | - "download": "Download firmware", | ||
1947 | - "drop-file": "Drop a firmware file or click to select a file to upload.", | ||
1948 | - "empty": "Firmware is empty", | ||
1949 | - "idCopiedMessage": "Firmware Id has been copied to clipboard", | ||
1950 | - "no-firmware-matching": "No firmware matching '{{entity}}' were found.", | ||
1951 | - "no-firmware-text": "No firmwares found", | ||
1952 | - "no-software-matching": "No sowtware matching '{{entity}}' were found.", | ||
1953 | - "no-software-text": "No software found", | ||
1954 | - "file-name": "File name", | ||
1955 | - "file-size": "File size", | ||
1956 | - "file-size-bytes": "File size in bytes", | ||
1957 | - "firmware": "Firmware", | ||
1958 | - "firmware-details": "Firmware details", | ||
1959 | - "firmware-required": "Firmware is required.", | ||
1960 | - "search": "Search firmwares", | ||
1961 | - "selected-firmware": "{ count, plural, 1 {1 firmware} other {# firmwares} } selected", | ||
1962 | - "software": "Software", | ||
1963 | - "software-required": "Software is required.", | ||
1964 | - "title": "Title", | ||
1965 | - "title-required": "Title is required.", | ||
1966 | - "type": "Firmware type", | ||
1967 | - "types": { | ||
1968 | - "firmware": "Firmware", | ||
1969 | - "software": "Software" | ||
1970 | - }, | ||
1971 | - "version": "Version", | ||
1972 | - "version-required": "Version is required.", | ||
1973 | - "warning-after-save-no-edit": "Once the firmware is saved, it will not be possible to change the title and version fields." | ||
1974 | - }, | ||
1975 | "fullscreen": { | 1930 | "fullscreen": { |
1976 | "expand": "Expand to fullscreen", | 1931 | "expand": "Expand to fullscreen", |
1977 | "exit": "Exit fullscreen", | 1932 | "exit": "Exit fullscreen", |
@@ -2191,6 +2146,55 @@ | @@ -2191,6 +2146,55 @@ | ||
2191 | "or": "or", | 2146 | "or": "or", |
2192 | "error": "Login error" | 2147 | "error": "Login error" |
2193 | }, | 2148 | }, |
2149 | + "ota-update": { | ||
2150 | + "add": "Add package", | ||
2151 | + "assign-firmware": "Assigned firmware", | ||
2152 | + "assign-firmware-required": "Assigned firmware is required", | ||
2153 | + "assign-software": "Assigned software", | ||
2154 | + "assign-software-required": "Assigned software is required", | ||
2155 | + "checksum": "Checksum", | ||
2156 | + "checksum-algorithm": "Checksum algorithm", | ||
2157 | + "checksum-copied-message": "Package checksum has been copied to clipboard", | ||
2158 | + "chose-compatible-device-profile": "Choose compatible device profile", | ||
2159 | + "chose-firmware-distributed-device": "Choose firmware that will be distributed to the devices", | ||
2160 | + "chose-software-distributed-device": "Choose software that will be distributed to the devices", | ||
2161 | + "content-type": "Content type", | ||
2162 | + "copy-checksum": "Copy checksum", | ||
2163 | + "copyId": "Copy package Id", | ||
2164 | + "idCopiedMessage": "Package Id has been copied to clipboard", | ||
2165 | + "description": "Description", | ||
2166 | + "delete": "Delete package", | ||
2167 | + "delete-ota-update-text": "Be careful, after the confirmation the OTA update will become unrecoverable.", | ||
2168 | + "delete-ota-update-title": "Are you sure you want to delete the OTA update '{{title}}'?", | ||
2169 | + "delete-ota-updates-text": "Be careful, after the confirmation all selected OTA updates will be removed.", | ||
2170 | + "delete-ota-updates-title": "Are you sure you want to delete { count, plural, 1 {1 OTA update} other {# OTA updates} }?", | ||
2171 | + "drop-file": "Drop a package file or click to select a file to upload.", | ||
2172 | + "download": "Download package", | ||
2173 | + "file-name": "File name", | ||
2174 | + "file-size": "File size", | ||
2175 | + "file-size-bytes": "File size in bytes", | ||
2176 | + "no-packages-text": "No packages found", | ||
2177 | + "no-firmware-text": "No compatible Firmware OTA Update packages provisioned.", | ||
2178 | + "no-firmware-matching": "No compatible Firmware OTA Update packages matching '{{entity}}' were found.", | ||
2179 | + "no-software-text": "No compatible Software OTA Update packages provisioned.", | ||
2180 | + "no-software-matching": "No compatible Software OTA Update packages matching '{{entity}}' were found.", | ||
2181 | + "search": "Search packages", | ||
2182 | + "selected-package": "{ count, plural, 1 {1 package} other {# packages} } selected", | ||
2183 | + "ota-update": "OTA update", | ||
2184 | + "ota-update-details": "OTA update details", | ||
2185 | + "ota-updates": "OTA updates", | ||
2186 | + "package-type": "Package type", | ||
2187 | + "packages-repository": "Packages repository", | ||
2188 | + "title": "Title", | ||
2189 | + "title-required": "Title is required.", | ||
2190 | + "types": { | ||
2191 | + "firmware": "Firmware", | ||
2192 | + "software": "Software" | ||
2193 | + }, | ||
2194 | + "version": "Version", | ||
2195 | + "version-required": "Version is required.", | ||
2196 | + "warning-after-save-no-edit": "Once the package is uploaded, you will not be able to modify title, version, device profile and package type." | ||
2197 | + }, | ||
2194 | "position": { | 2198 | "position": { |
2195 | "top": "Top", | 2199 | "top": "Top", |
2196 | "bottom": "Bottom", | 2200 | "bottom": "Bottom", |