Sms provider configuration component improvements

This commit is contained in:
Igor Kulikov 2020-11-20 18:19:53 +02:00
parent 449cb5941d
commit d5cf27cdbf
5 changed files with 50 additions and 4 deletions

View File

@ -92,6 +92,10 @@ export function isEmptyStr(value: any): boolean {
return value === '';
}
export function isNotEmptyStr(value: any): boolean {
return value !== null && typeof value === 'string' && value.trim().length > 0;
}
export function isFunction(value: any): boolean {
return typeof value === 'function';
}

View File

@ -20,7 +20,11 @@ import { Store } from '@ngrx/store';
import { AppState } from '@app/core/core.state';
import { coerceBooleanProperty } from '@angular/cdk/coercion';
import { isDefinedAndNotNull } from '@core/utils';
import { AwsSnsSmsProviderConfiguration } from '@shared/models/settings.models';
import {
AwsSnsSmsProviderConfiguration,
SmsProviderConfiguration,
SmsProviderType
} from '@shared/models/settings.models';
@Component({
selector: 'tb-aws-sns-provider-configuration',
@ -93,6 +97,7 @@ export class AwsSnsProviderConfigurationComponent implements ControlValueAccesso
let configuration: AwsSnsSmsProviderConfiguration = null;
if (this.awsSnsProviderConfigurationFormGroup.valid) {
configuration = this.awsSnsProviderConfigurationFormGroup.value;
(configuration as SmsProviderConfiguration).type = SmsProviderType.AWS_SNS;
}
this.propagateChange(configuration);
}

View File

@ -27,7 +27,7 @@ import {
import { deepClone } from '@core/utils';
import {
createSmsProviderConfiguration,
SmsProviderConfiguration,
SmsProviderConfiguration, smsProviderConfigurationValidator,
SmsProviderType,
smsProviderTypeTranslationMap
} from '@shared/models/settings.models';
@ -78,7 +78,7 @@ export class SmsProviderConfigurationComponent implements ControlValueAccessor,
ngOnInit() {
this.smsProviderConfigurationFormGroup = this.fb.group({
type: [null, Validators.required],
configuration: [null, Validators.required]
configuration: [null, smsProviderConfigurationValidator(true)]
});
this.smsProviderConfigurationFormGroup.valueChanges.subscribe(() => {
this.updateModel();

View File

@ -20,7 +20,11 @@ import { Store } from '@ngrx/store';
import { AppState } from '@app/core/core.state';
import { coerceBooleanProperty } from '@angular/cdk/coercion';
import { isDefinedAndNotNull } from '@core/utils';
import { phoneNumberPattern, TwilioSmsProviderConfiguration } from '@shared/models/settings.models';
import {
phoneNumberPattern,
SmsProviderConfiguration, SmsProviderType,
TwilioSmsProviderConfiguration
} from '@shared/models/settings.models';
@Component({
selector: 'tb-twilio-sms-provider-configuration',
@ -95,6 +99,7 @@ export class TwilioSmsProviderConfigurationComponent implements ControlValueAcce
let configuration: TwilioSmsProviderConfiguration = null;
if (this.twilioSmsProviderConfigurationFormGroup.valid) {
configuration = this.twilioSmsProviderConfigurationFormGroup.value;
(configuration as SmsProviderConfiguration).type = SmsProviderType.TWILIO;
}
this.propagateChange(configuration);
}

View File

@ -15,6 +15,8 @@
///
import { DeviceTransportType } from '@shared/models/device.models';
import { ValidatorFn } from '@angular/forms';
import { isNotEmptyStr } from '@core/utils';
export const smtpPortPattern: RegExp = /^([0-9]{1,4}|[1-5][0-9]{4}|6[0-4][0-9]{3}|65[0-4][0-9]{2}|655[0-2][0-9]|6553[0-5])$/;
@ -95,6 +97,36 @@ export interface SmsProviderConfiguration extends SmsProviderConfigurations {
type: SmsProviderType;
}
export function smsProviderConfigurationValidator(required: boolean): ValidatorFn {
return control => {
const configuration: SmsProviderConfiguration = control.value;
let errors = null;
if (required) {
let valid = false;
if (configuration && configuration.type) {
switch (configuration.type) {
case SmsProviderType.AWS_SNS:
const awsSnsConfiguration: AwsSnsSmsProviderConfiguration = configuration;
valid = isNotEmptyStr(awsSnsConfiguration.accessKeyId) && isNotEmptyStr(awsSnsConfiguration.secretAccessKey)
&& isNotEmptyStr(awsSnsConfiguration.region);
break;
case SmsProviderType.TWILIO:
const twilioConfiguration: TwilioSmsProviderConfiguration = configuration;
valid = isNotEmptyStr(twilioConfiguration.numberFrom) && isNotEmptyStr(twilioConfiguration.accountSid)
&& isNotEmptyStr(twilioConfiguration.accountToken);
break;
}
}
if (!valid) {
errors = {
invalid: true
};
}
}
return errors;
};
}
export interface TestSmsRequest {
providerConfiguration: SmsProviderConfiguration;
numberTo: string;