10 changed files with 275 additions and 8 deletions
@ -0,0 +1,46 @@ |
|||
<!-- |
|||
|
|||
Copyright © 2016-2020 The Thingsboard Authors |
|||
|
|||
Licensed under the Apache License, Version 2.0 (the "License"); |
|||
you may not use this file except in compliance with the License. |
|||
You may obtain a copy of the License at |
|||
|
|||
http://www.apache.org/licenses/LICENSE-2.0 |
|||
|
|||
Unless required by applicable law or agreed to in writing, software |
|||
distributed under the License is distributed on an "AS IS" BASIS, |
|||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
|||
See the License for the specific language governing permissions and |
|||
limitations under the License. |
|||
|
|||
--> |
|||
<div [formGroup]="provisionConfigurationFormGroup"> |
|||
<mat-form-field class="mat-block"> |
|||
<mat-label translate>device-profile.provision-strategy</mat-label> |
|||
<mat-select formControlName="type" required> |
|||
<mat-option *ngFor="let type of deviceProvisionTypes" [value]="type"> |
|||
{{deviceProvisionTypeTranslateMap.get(type) | translate}} |
|||
</mat-option> |
|||
</mat-select> |
|||
<mat-error *ngIf="provisionConfigurationFormGroup.get('type').hasError('required')"> |
|||
{{ 'device-profile.provision-strategy-required' | translate }} |
|||
</mat-error> |
|||
</mat-form-field> |
|||
<section *ngIf="provisionConfigurationFormGroup.get('type').value !== deviceProvisionType.DISABLED" fxLayoutGap.gt-xs="8px" fxLayout="row" fxLayout.xs="column"> |
|||
<mat-form-field fxFlex class="mat-block"> |
|||
<mat-label translate>device-profile.provision-device-secret</mat-label> |
|||
<input matInput formControlName="provisionDeviceSecret" required/> |
|||
<mat-error *ngIf="provisionConfigurationFormGroup.get('provisionDeviceSecret').hasError('required')"> |
|||
{{ 'device-profile.provision-device-secret-required' | translate }} |
|||
</mat-error> |
|||
</mat-form-field> |
|||
<mat-form-field fxFlex class="mat-block"> |
|||
<mat-label translate>device-profile.provision-device-key</mat-label> |
|||
<input matInput formControlName="provisionDeviceKey" required/> |
|||
<mat-error *ngIf="provisionConfigurationFormGroup.get('provisionDeviceKey').hasError('required')"> |
|||
{{ 'device-profile.provision-device-key-required' | translate }} |
|||
</mat-error> |
|||
</mat-form-field> |
|||
</section> |
|||
</div> |
|||
@ -0,0 +1,140 @@ |
|||
///
|
|||
/// Copyright © 2016-2020 The Thingsboard Authors
|
|||
///
|
|||
/// Licensed under the Apache License, Version 2.0 (the "License");
|
|||
/// you may not use this file except in compliance with the License.
|
|||
/// You may obtain a copy of the License at
|
|||
///
|
|||
/// http://www.apache.org/licenses/LICENSE-2.0
|
|||
///
|
|||
/// Unless required by applicable law or agreed to in writing, software
|
|||
/// distributed under the License is distributed on an "AS IS" BASIS,
|
|||
/// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|||
/// See the License for the specific language governing permissions and
|
|||
/// limitations under the License.
|
|||
///
|
|||
|
|||
import { Component, forwardRef, Input, OnInit } from "@angular/core"; |
|||
import { |
|||
ControlValueAccessor, |
|||
FormBuilder, |
|||
FormControl, |
|||
FormGroup, |
|||
NG_VALIDATORS, |
|||
NG_VALUE_ACCESSOR, |
|||
ValidationErrors, |
|||
Validator, |
|||
Validators |
|||
} from "@angular/forms"; |
|||
import { coerceBooleanProperty } from "@angular/cdk/coercion"; |
|||
import { |
|||
DeviceProvisionConfiguration, |
|||
DeviceProvisionType, |
|||
deviceProvisionTypeTranslationMap |
|||
} from "@shared/models/device.models"; |
|||
import { isDefinedAndNotNull } from "@core/utils"; |
|||
|
|||
@Component({ |
|||
selector: 'tb-device-profile-provision-configuration', |
|||
templateUrl: './device-profile-provision-configuration.component.html', |
|||
styleUrls: [], |
|||
providers: [ |
|||
{ |
|||
provide: NG_VALUE_ACCESSOR, |
|||
useExisting: forwardRef(() => DeviceProfileProvisionConfigurationComponent), |
|||
multi: true |
|||
}, |
|||
{ |
|||
provide: NG_VALIDATORS, |
|||
useExisting: forwardRef(() => DeviceProfileProvisionConfigurationComponent), |
|||
multi: true, |
|||
} |
|||
] |
|||
}) |
|||
export class DeviceProfileProvisionConfigurationComponent implements ControlValueAccessor, OnInit, Validator { |
|||
|
|||
provisionConfigurationFormGroup: FormGroup; |
|||
|
|||
deviceProvisionType = DeviceProvisionType; |
|||
deviceProvisionTypes = Object.keys(DeviceProvisionType); |
|||
deviceProvisionTypeTranslateMap = deviceProvisionTypeTranslationMap; |
|||
|
|||
private requiredValue: boolean; |
|||
get required(): boolean { |
|||
return this.requiredValue; |
|||
} |
|||
@Input() |
|||
set required(value: boolean) { |
|||
this.requiredValue = coerceBooleanProperty(value); |
|||
} |
|||
|
|||
@Input() |
|||
disabled: boolean; |
|||
|
|||
private propagateChange = (v: any) => { }; |
|||
|
|||
constructor(private fb: FormBuilder) { |
|||
} |
|||
|
|||
ngOnInit(): void { |
|||
this.provisionConfigurationFormGroup = this.fb.group({ |
|||
type: [DeviceProvisionType.DISABLED, Validators.required], |
|||
provisionDeviceSecret: [{value: null, disabled: true}, Validators.required], |
|||
provisionDeviceKey: [{value: null, disabled: true}, Validators.required] |
|||
}); |
|||
this.provisionConfigurationFormGroup.get('type').valueChanges.subscribe((type) => { |
|||
if(type === DeviceProvisionType.DISABLED) { |
|||
this.provisionConfigurationFormGroup.get('provisionDeviceSecret').disable({emitEvent: false}); |
|||
this.provisionConfigurationFormGroup.get('provisionDeviceSecret').patchValue(null,{emitEvent: false}); |
|||
this.provisionConfigurationFormGroup.get('provisionDeviceKey').disable({emitEvent: false}); |
|||
this.provisionConfigurationFormGroup.get('provisionDeviceKey').patchValue(null); |
|||
} else { |
|||
this.provisionConfigurationFormGroup.get('provisionDeviceSecret').enable({emitEvent: false}); |
|||
this.provisionConfigurationFormGroup.get('provisionDeviceKey').enable({emitEvent: false}); |
|||
} |
|||
}); |
|||
this.provisionConfigurationFormGroup.valueChanges.subscribe(() => { |
|||
this.updateModel(); |
|||
}); |
|||
} |
|||
|
|||
registerOnChange(fn: any): void { |
|||
this.propagateChange = fn; |
|||
} |
|||
|
|||
registerOnTouched(fn: any): void { |
|||
} |
|||
|
|||
writeValue(value: DeviceProvisionConfiguration | null): void { |
|||
if(isDefinedAndNotNull(value)){ |
|||
this.provisionConfigurationFormGroup.patchValue(value, {emitEvent: false}); |
|||
} else { |
|||
this.provisionConfigurationFormGroup.patchValue({type: DeviceProvisionType.DISABLED}); |
|||
} |
|||
} |
|||
|
|||
setDisabledState(isDisabled: boolean){ |
|||
this.disabled = isDisabled; |
|||
if(this.disabled){ |
|||
this.provisionConfigurationFormGroup.disable(); |
|||
} else { |
|||
this.provisionConfigurationFormGroup.enable({emitEvent: false}); |
|||
} |
|||
} |
|||
|
|||
validate(c: FormControl): ValidationErrors | null { |
|||
return (this.provisionConfigurationFormGroup.valid) ? null : { |
|||
provisionConfiguration: { |
|||
valid: false, |
|||
}, |
|||
}; |
|||
} |
|||
|
|||
private updateModel(): void { |
|||
let deviceProvisionConfiguration: DeviceProvisionConfiguration = null; |
|||
if (this.provisionConfigurationFormGroup.valid) { |
|||
deviceProvisionConfiguration = this.provisionConfigurationFormGroup.getRawValue(); |
|||
} |
|||
this.propagateChange(deviceProvisionConfiguration); |
|||
} |
|||
} |
|||
Loading…
Reference in new issue