add notification template editor validators
This commit is contained in:
parent
c26c472ea8
commit
101a0aace9
|
@ -112,7 +112,7 @@ export class LanguageHttpService {
|
|||
nameof<Language>(x => x.code)
|
||||
]
|
||||
};
|
||||
lookup.order = { items: [nameof<Language>(x => x.code)] };
|
||||
lookup.order = { items: [nameof<Language>(x => x.ordinal)] };
|
||||
if (like) { lookup.like = this.filterService.transformLike(like); }
|
||||
return lookup;
|
||||
}
|
||||
|
|
|
@ -33,21 +33,24 @@
|
|||
<div class="col-4">
|
||||
<mat-form-field class="w-100">
|
||||
<mat-label>{{'NOTIFICATION-SERVICE.NOTIFICATION-TEMPLATE-EDITOR.FIELDS.NOTIFICATION-TYPE' | translate}}</mat-label>
|
||||
<mat-select [value] = "notificationType" [formControl]="formGroup.get('notificationType')" name="notificationType" required>
|
||||
<mat-select [formControl]="formGroup.get('notificationType')" name="notificationType" required>
|
||||
<mat-option *ngFor="let type of notificationTypeEnum" [value]="type">
|
||||
{{enumUtils.toNotificationTypeString(type)}}
|
||||
</mat-option>
|
||||
</mat-select>
|
||||
<mat-error *ngIf="formGroup.get('notificationType').hasError('backendError')">{{formGroup.get('notificationType').getError('backendError').message}}</mat-error>
|
||||
<mat-error *ngIf="formGroup.get('notificationType').hasError('required')">{{'GENERAL.VALIDATION.REQUIRED' | translate}}</mat-error>
|
||||
</mat-form-field>
|
||||
</div>
|
||||
<div class="col-4">
|
||||
<mat-form-field class="w-100">
|
||||
<mat-label>{{'NOTIFICATION-SERVICE.NOTIFICATION-TEMPLATE-EDITOR.FIELDS.LANGUAGE' | translate}}</mat-label>
|
||||
<mat-select [(value)]="languageCode" (selectionChange)="selectedLangChanged($event.value)" name="language" required>
|
||||
<mat-option *ngFor="let languageCode of availableLanguageCodes" [value]="languageCode">
|
||||
{{languageCode}}
|
||||
<mat-select [formControl]="formGroup.get('languageId')" name="language" required>
|
||||
<mat-option *ngFor="let language of languages" [value]="language.id">
|
||||
{{language.code}}
|
||||
</mat-option>
|
||||
</mat-select>
|
||||
<mat-error *ngIf="formGroup.get('languageId').hasError('backendError')">{{formGroup.get('languageId').getError('backendError').message}}</mat-error>
|
||||
<mat-error *ngIf="formGroup.get('languageId').hasError('required')">{{'GENERAL.VALIDATION.REQUIRED' | translate}}</mat-error>
|
||||
</mat-form-field>
|
||||
</div>
|
||||
|
@ -59,6 +62,7 @@
|
|||
{{enumUtils.toNotificationTemplateKindString(kind)}}
|
||||
</mat-option>
|
||||
</mat-select>
|
||||
<mat-error *ngIf="formGroup.get('kind').hasError('backendError')">{{formGroup.get('kind').getError('backendError').message}}</mat-error>
|
||||
<mat-error *ngIf="formGroup.get('kind').hasError('required')">{{'GENERAL.VALIDATION.REQUIRED' | translate}}</mat-error>
|
||||
</mat-form-field>
|
||||
</div>
|
||||
|
@ -70,6 +74,7 @@
|
|||
{{enumUtils.toNotificationTemplateChannelString(channel)}}
|
||||
</mat-option>
|
||||
</mat-select>
|
||||
<mat-error *ngIf="formGroup.get('channel').hasError('backendError')">{{formGroup.get('channel').getError('backendError').message}}</mat-error>
|
||||
<mat-error *ngIf="formGroup.get('channel').hasError('required')">{{'GENERAL.VALIDATION.REQUIRED' | translate}}</mat-error>
|
||||
</mat-form-field>
|
||||
</div>
|
||||
|
@ -81,12 +86,14 @@
|
|||
<mat-form-field class="col-md-12">
|
||||
<mat-label>{{'NOTIFICATION-SERVICE.NOTIFICATION-TEMPLATE-EDITOR.FIELDS.SUBJECT-TEXT' | translate}}</mat-label>
|
||||
<input matInput [formControl]="formGroup.get('value').get('subjectText')">
|
||||
<mat-error *ngIf="formGroup.get('value').get('subjectText').hasError('backendError')">{{formGroup.get('value').get('subjectText').getError('backendError').message}}</mat-error>
|
||||
<mat-error *ngIf="formGroup.get('value').get('subjectText').hasError('required')">{{'GENERAL.VALIDATION.REQUIRED' | translate}}</mat-error>
|
||||
</mat-form-field>
|
||||
<div class="col-4">
|
||||
<mat-form-field class="col-md-12">
|
||||
<mat-label>{{'NOTIFICATION-SERVICE.NOTIFICATION-TEMPLATE-EDITOR.FIELDS.SUBJECT-KEY' | translate}}</mat-label>
|
||||
<input matInput [formControl]="formGroup.get('value').get('subjectKey')">
|
||||
<mat-error *ngIf="formGroup.get('value').get('subjectKey').hasError('backendError')">{{formGroup.get('value').get('subjectKey').getError('backendError').message}}</mat-error>
|
||||
<mat-error *ngIf="formGroup.get('value').get('subjectKey').hasError('required')">{{'GENERAL.VALIDATION.REQUIRED' | translate}}</mat-error>
|
||||
</mat-form-field>
|
||||
</div>
|
||||
|
@ -114,6 +121,7 @@
|
|||
[matChipInputAddOnBlur]="true"
|
||||
(matChipInputTokenEnd)="addChipListValues('subject', $event)"/>
|
||||
</mat-chip-grid>
|
||||
<mat-error *ngIf="formGroup.get('value').get('subjectFieldOptions').get('mandatory').hasError('backendError')">{{formGroup.get('value').get('subjectFieldOptions').get('mandatory').getError('backendError').message}}</mat-error>
|
||||
</mat-form-field>
|
||||
</div>
|
||||
<h4 class="col-md-12">{{'NOTIFICATION-SERVICE.NOTIFICATION-TEMPLATE-EDITOR.FIELDS.OPTIONAL-TITLE' | translate}}</h4>
|
||||
|
@ -123,6 +131,7 @@
|
|||
<mat-form-field class="col-auto">
|
||||
<mat-label>{{'NOTIFICATION-SERVICE.NOTIFICATION-TEMPLATE-EDITOR.FIELDS.KEY' | translate}}</mat-label>
|
||||
<input matInput [formControl]="subjectOptions.get('key')">
|
||||
<mat-error *ngIf="subjectOptions.get('key').hasError('backendError')">{{subjectOptions.get('key').getError('backendError').message}}</mat-error>
|
||||
<mat-error *ngIf="subjectOptions.get('key').hasError('required')">{{'GENERAL.VALIDATION.REQUIRED' | translate}}</mat-error>
|
||||
</mat-form-field>
|
||||
</div>
|
||||
|
@ -134,6 +143,7 @@
|
|||
{{enumUtils.toNotificationTemplateDataTypeString(type)}}
|
||||
</mat-option>
|
||||
</mat-select>
|
||||
<mat-error *ngIf="subjectOptions.get('type').hasError('backendError')">{{subjectOptions.get('type').getError('backendError').message}}</mat-error>
|
||||
<mat-error *ngIf="subjectOptions.get('type').hasError('required')">{{'GENERAL.VALIDATION.REQUIRED' | translate}}</mat-error>
|
||||
</mat-form-field>
|
||||
</div>
|
||||
|
@ -141,6 +151,7 @@
|
|||
<mat-form-field class="col">
|
||||
<mat-label>{{'NOTIFICATION-SERVICE.NOTIFICATION-TEMPLATE-EDITOR.FIELDS.VALUE' | translate}}</mat-label>
|
||||
<input matInput [formControl]="subjectOptions.get('value')">
|
||||
<mat-error *ngIf="subjectOptions.get('value').hasError('backendError')">{{subjectOptions.get('value').getError('backendError').message}}</mat-error>
|
||||
<mat-error *ngIf="subjectOptions.get('value').hasError('required')">{{'GENERAL.VALIDATION.REQUIRED' | translate}}</mat-error>
|
||||
</mat-form-field>
|
||||
<div class="col-auto">
|
||||
|
@ -152,7 +163,7 @@
|
|||
</div>
|
||||
<div class="row">
|
||||
<div class="col-auto">
|
||||
<button mat-icon-button (click)="addOptionalItem(formGroup.get('value').get('subjectFieldOptions'))" [disabled]="formGroup.disabled">
|
||||
<button mat-icon-button (click)="addSubjectOptionalItem()" [disabled]="formGroup.disabled">
|
||||
<mat-icon>add</mat-icon>
|
||||
</button>
|
||||
</div>
|
||||
|
@ -167,6 +178,7 @@
|
|||
<mat-form-field class="col-md-4">
|
||||
<mat-label>{{'NOTIFICATION-SERVICE.NOTIFICATION-TEMPLATE-EDITOR.FIELDS.VALUE' | translate}}</mat-label>
|
||||
<input matInput [value] ="subjectFormatting[item]" (change)="subjectFormattingValueChange($event, item)">
|
||||
<mat-error *ngIf="formGroup.get('value').get('subjectFieldOptions').get('formatting').hasError('backendError')">{{formGroup.get('value').get('subjectFieldOptions').get('formatting').getError('backendError').message}}</mat-error>
|
||||
</mat-form-field>
|
||||
</div>
|
||||
<div class="row" *ngFor="let item of formGroup.get('value').get('subjectFieldOptions').get('optional')['controls']; let i = index">
|
||||
|
@ -178,6 +190,7 @@
|
|||
<mat-form-field class="col-md-4">
|
||||
<mat-label>{{'NOTIFICATION-SERVICE.NOTIFICATION-TEMPLATE-EDITOR.FIELDS.VALUE' | translate}}</mat-label>
|
||||
<input matInput [value]="subjectFormatting[item]" (change)="subjectFormattingValueChange($event, item)">
|
||||
<mat-error *ngIf="formGroup.get('value').get('subjectFieldOptions').get('formatting').hasError('backendError')">{{formGroup.get('value').get('subjectFieldOptions').get('formatting').getError('backendError').message}}</mat-error>
|
||||
</mat-form-field>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -190,6 +203,7 @@
|
|||
<mat-form-field class="col-md-12">
|
||||
<mat-label>{{'NOTIFICATION-SERVICE.NOTIFICATION-TEMPLATE-EDITOR.FIELDS.BODY-KEY' | translate}}</mat-label>
|
||||
<input matInput [formControl]="formGroup.get('value').get('bodyKey')">
|
||||
<mat-error *ngIf="formGroup.get('value').get('bodyKey').hasError('backendError')">{{formGroup.get('value').get('bodyKey').getError('backendError').message}}</mat-error>
|
||||
<mat-error *ngIf="formGroup.get('value').get('bodyKey').hasError('required')">{{'GENERAL.VALIDATION.REQUIRED' | translate}}</mat-error>
|
||||
</mat-form-field>
|
||||
</div>
|
||||
|
@ -214,6 +228,7 @@
|
|||
alignleft aligncenter alignright alignjustify | \
|
||||
bullist numlist outdent indent | code | searchreplace | preview | removeformat | help | link | image'
|
||||
}" [formControl]="formGroup.get('value').get('bodyText')"></editor>
|
||||
<mat-error *ngIf="formGroup.get('value').get('bodyText').hasError('backendError')">{{formGroup.get('value').get('bodyText').getError('backendError').message}}</mat-error>
|
||||
<mat-error *ngIf="formGroup.get('value').get('bodyText').hasError('required')">{{'GENERAL.VALIDATION.REQUIRED' | translate}}</mat-error>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -240,6 +255,7 @@
|
|||
[matChipInputAddOnBlur]="true"
|
||||
(matChipInputTokenEnd)="addChipListValues('body',$event)"/>
|
||||
</mat-chip-grid>
|
||||
<mat-error *ngIf="formGroup.get('value').get('bodyFieldOptions').get('mandatory').hasError('backendError')">{{formGroup.get('value').get('bodyFieldOptions').get('mandatory').getError('backendError').message}}</mat-error>
|
||||
</mat-form-field>
|
||||
</div>
|
||||
<h4 class="col-md-12">{{'NOTIFICATION-SERVICE.NOTIFICATION-TEMPLATE-EDITOR.FIELDS.OPTIONAL-TITLE' | translate}}</h4>
|
||||
|
@ -249,6 +265,7 @@
|
|||
<mat-form-field class="col-auto">
|
||||
<mat-label>{{'NOTIFICATION-SERVICE.NOTIFICATION-TEMPLATE-EDITOR.FIELDS.KEY' | translate}}</mat-label>
|
||||
<input matInput [formControl]="bodyOptions.get('key')">
|
||||
<mat-error *ngIf="bodyOptions.get('key').hasError('backendError')">{{bodyOptions.get('key').getError('backendError').message}}</mat-error>
|
||||
<mat-error *ngIf="bodyOptions.get('key').hasError('required')">{{'GENERAL.VALIDATION.REQUIRED' | translate}}</mat-error>
|
||||
</mat-form-field>
|
||||
</div>
|
||||
|
@ -260,6 +277,7 @@
|
|||
{{enumUtils.toNotificationTemplateDataTypeString(type)}}
|
||||
</mat-option>
|
||||
</mat-select>
|
||||
<mat-error *ngIf="bodyOptions.get('type').hasError('backendError')">{{bodyOptions.get('type').getError('backendError').message}}</mat-error>
|
||||
<mat-error *ngIf="bodyOptions.get('type').hasError('required')">{{'GENERAL.VALIDATION.REQUIRED' | translate}}</mat-error>
|
||||
</mat-form-field>
|
||||
</div>
|
||||
|
@ -267,6 +285,7 @@
|
|||
<mat-form-field class="col">
|
||||
<mat-label>{{'NOTIFICATION-SERVICE.NOTIFICATION-TEMPLATE-EDITOR.FIELDS.VALUE' | translate}}</mat-label>
|
||||
<input matInput [formControl]="bodyOptions.get('value')">
|
||||
<mat-error *ngIf="bodyOptions.get('value').hasError('backendError')">{{bodyOptions.get('value').getError('backendError').message}}</mat-error>
|
||||
<mat-error *ngIf="bodyOptions.get('value').hasError('required')">{{'GENERAL.VALIDATION.REQUIRED' | translate}}</mat-error>
|
||||
</mat-form-field>
|
||||
<div class="col-auto">
|
||||
|
@ -278,7 +297,7 @@
|
|||
</div>
|
||||
<div class="row">
|
||||
<div class="col-auto">
|
||||
<button mat-icon-button (click)="addOptionalItem(formGroup.get('value').get('bodyFieldOptions'))" [disabled]="formGroup.disabled">
|
||||
<button mat-icon-button (click)="addBodyOptionalItem()" [disabled]="formGroup.disabled">
|
||||
<mat-icon>add</mat-icon>
|
||||
</button>
|
||||
</div>
|
||||
|
@ -292,6 +311,7 @@
|
|||
<mat-form-field class="col-md-4">
|
||||
<mat-label>{{'NOTIFICATION-SERVICE.NOTIFICATION-TEMPLATE-EDITOR.FIELDS.VALUE' | translate}}</mat-label>
|
||||
<input matInput [value] ="bodyFormatting[item]" (change)="bodyFormattingValueChange($event, item)">
|
||||
<mat-error *ngIf="formGroup.get('value').get('bodyFieldOptions').get('formatting').hasError('backendError')">{{formGroup.get('value').get('bodyFieldOptions').get('formatting').getError('backendError').message}}</mat-error>
|
||||
</mat-form-field>
|
||||
</div>
|
||||
<div class="row" *ngFor="let item of formGroup.get('value').get('bodyFieldOptions').get('optional')['controls']; let i = index">
|
||||
|
@ -303,6 +323,7 @@
|
|||
<mat-form-field class="col-md-4">
|
||||
<mat-label>{{'NOTIFICATION-SERVICE.NOTIFICATION-TEMPLATE-EDITOR.FIELDS.VALUE' | translate}}</mat-label>
|
||||
<input matInput [value]="bodyFormatting[item]" (change)="bodyFormattingValueChange($event, item)">
|
||||
<mat-error *ngIf="formGroup.get('value').get('bodyFieldOptions').get('formatting').hasError('backendError')">{{formGroup.get('value').get('bodyFieldOptions').get('formatting').getError('backendError').message}}</mat-error>
|
||||
</mat-form-field>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -314,12 +335,14 @@
|
|||
<div>
|
||||
<h4 class="col-md-12">{{'NOTIFICATION-SERVICE.NOTIFICATION-TEMPLATE-EDITOR.FIELDS.ALLOW-ATTACHMENTS' | translate}}
|
||||
<mat-checkbox [formControl]="formGroup.get('value').get('allowAttachments')"></mat-checkbox>
|
||||
<mat-error *ngIf="formGroup.get('value').get('allowAttachments').hasError('backendError')">{{formGroup.get('value').get('allowAttachments').getError('backendError').message}}</mat-error>
|
||||
</h4>
|
||||
</div>
|
||||
<div class="col-4">
|
||||
<mat-form-field class="col-md-12">
|
||||
<mat-label>{{'NOTIFICATION-SERVICE.NOTIFICATION-TEMPLATE-EDITOR.FIELDS.PRIORITY-KEY' | translate}}</mat-label>
|
||||
<input matInput [formControl]="formGroup.get('value').get('priorityKey')">
|
||||
<mat-error *ngIf="formGroup.get('value').get('priorityKey').hasError('backendError')">{{formGroup.get('value').get('priorityKey').getError('backendError').message}}</mat-error>
|
||||
<mat-error *ngIf="formGroup.get('value').get('priorityKey').hasError('required')">{{'GENERAL.VALIDATION.REQUIRED' | translate}}</mat-error>
|
||||
</mat-form-field>
|
||||
</div>
|
||||
|
@ -342,6 +365,7 @@
|
|||
[matChipInputAddOnBlur]="true"
|
||||
(matChipInputTokenEnd)="addChipListValues('cc',$event)"/>
|
||||
</mat-chip-grid>
|
||||
<mat-error *ngIf="formGroup.get('value').get('cc').hasError('backendError')">{{formGroup.get('value').get('cc').getError('backendError').message}}</mat-error>
|
||||
</mat-form-field>
|
||||
</div>
|
||||
<div class="col-4">
|
||||
|
@ -352,6 +376,7 @@
|
|||
{{enumUtils.toEmailOverrideModeString(emailOverrideMode)}}
|
||||
</mat-option>
|
||||
</mat-select>
|
||||
<mat-error *ngIf="formGroup.get('value').get('ccMode').hasError('backendError')">{{formGroup.get('value').get('ccMode').getError('backendError').message}}</mat-error>
|
||||
<mat-error *ngIf="formGroup.get('value').get('ccMode').hasError('required')">{{'GENERAL.VALIDATION.REQUIRED' | translate}}</mat-error>
|
||||
</mat-form-field>
|
||||
</div>
|
||||
|
@ -374,6 +399,7 @@
|
|||
[matChipInputAddOnBlur]="true"
|
||||
(matChipInputTokenEnd)="addChipListValues('bcc',$event)"/>
|
||||
</mat-chip-grid>
|
||||
<mat-error *ngIf="formGroup.get('value').get('bcc').hasError('backendError')">{{formGroup.get('value').get('bcc').getError('backendError').message}}</mat-error>
|
||||
</mat-form-field>
|
||||
</div>
|
||||
<div class="col-4">
|
||||
|
@ -384,6 +410,7 @@
|
|||
{{enumUtils.toEmailOverrideModeString(emailOverrideMode)}}
|
||||
</mat-option>
|
||||
</mat-select>
|
||||
<mat-error *ngIf="formGroup.get('value').get('bccMode').hasError('backendError')">{{formGroup.get('value').get('bccMode').getError('backendError').message}}</mat-error>
|
||||
<mat-error *ngIf="formGroup.get('value').get('bccMode').hasError('required')">{{'GENERAL.VALIDATION.REQUIRED' | translate}}</mat-error>
|
||||
</mat-form-field>
|
||||
</div>
|
||||
|
@ -406,6 +433,7 @@
|
|||
[matChipInputAddOnBlur]="true"
|
||||
(matChipInputTokenEnd)="addChipListValues('extraDataKeys',$event)"/>
|
||||
</mat-chip-grid>
|
||||
<mat-error *ngIf="formGroup.get('value').get('extraDataKeys').hasError('backendError')">{{formGroup.get('value').get('extraDataKeys').getError('backendError').message}}</mat-error>
|
||||
</mat-form-field>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
@ -46,7 +46,7 @@ export class NotificationTemplateEditorComponent extends BaseEditor<Notification
|
|||
isNew = true;
|
||||
isDeleted = false;
|
||||
formGroup: UntypedFormGroup = null;
|
||||
availableLanguageCodes: string[] = [];
|
||||
languages: Language[] = [];
|
||||
subjectMandatoryFields: string[] = [];
|
||||
bodyMandatoryFields: string[] = [];
|
||||
subjectFieldOptionsEnabled: Boolean = false;
|
||||
|
@ -54,7 +54,6 @@ export class NotificationTemplateEditorComponent extends BaseEditor<Notification
|
|||
ccValues: string[] = [];
|
||||
bccValues: string[] = [];
|
||||
extraDataKeys: string[] = [];
|
||||
languageCode: string;
|
||||
subjectFormatting: { [key: string]: string } = {};
|
||||
bodyFormatting: { [key: string]: string } = {};
|
||||
notificationType: string;
|
||||
|
@ -103,10 +102,10 @@ export class NotificationTemplateEditorComponent extends BaseEditor<Notification
|
|||
ngOnInit(): void {
|
||||
this.matomoService.trackPageView('Admin: Notification Tempplates');
|
||||
super.ngOnInit();
|
||||
this.languageHttpService.queryAvailableCodes(this.languageHttpService.buildAutocompleteLookup())
|
||||
this.languageHttpService.query(this.languageHttpService.buildAutocompleteLookup())
|
||||
.pipe(takeUntil(this._destroyed))
|
||||
.subscribe(
|
||||
data => this.availableLanguageCodes = data.items,
|
||||
data => this.languages = data.items,
|
||||
);
|
||||
}
|
||||
|
||||
|
@ -141,7 +140,6 @@ export class NotificationTemplateEditorComponent extends BaseEditor<Notification
|
|||
this.ccValues = this.editorModel.value.cc;
|
||||
this.bccValues = this.editorModel.value.bcc;
|
||||
this.extraDataKeys = this.editorModel.value.extraDataKeys;
|
||||
this.languageCode = data.language.code;
|
||||
}
|
||||
this.isDeleted = data ? data.isActive === IsActive.Inactive : false;
|
||||
this.buildForm();
|
||||
|
@ -154,6 +152,11 @@ export class NotificationTemplateEditorComponent extends BaseEditor<Notification
|
|||
buildForm() {
|
||||
this.formGroup = this.editorModel.buildForm(null, this.isDeleted || !this.authService.hasPermission(AppPermission.EditNotificationTemplate));
|
||||
this.notificationTemplateEditorService.setValidationErrorModel(this.editorModel.validationErrorModel);
|
||||
NotificationTemplateEditorModel.reApplyValueValidators({
|
||||
formGroup: this.formGroup,
|
||||
validationErrorModel: this.editorModel.validationErrorModel
|
||||
}
|
||||
)
|
||||
}
|
||||
|
||||
refreshData(): void {
|
||||
|
@ -188,9 +191,9 @@ export class NotificationTemplateEditorComponent extends BaseEditor<Notification
|
|||
formSubmit(): void {
|
||||
console.log(this.formGroup);
|
||||
this.formService.touchAllFormFields(this.formGroup);
|
||||
if (!this.isFormValid()) {
|
||||
return;
|
||||
}
|
||||
// if (!this.isFormValid()) {
|
||||
// return;
|
||||
// }
|
||||
|
||||
this.persistEntity();
|
||||
}
|
||||
|
@ -224,18 +227,6 @@ export class NotificationTemplateEditorComponent extends BaseEditor<Notification
|
|||
}
|
||||
|
||||
|
||||
selectedLangChanged(code: string){
|
||||
|
||||
this.languageHttpService.getSingleWithCode(code, [nameof<Language>(x => x.id),nameof<Language>(x => x.code)])
|
||||
.pipe(takeUntil(this._destroyed))
|
||||
.subscribe(
|
||||
data => {
|
||||
this.formGroup.get('languageId').patchValue(data.id);
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
subjectFieldOptionsSelectionChanged(matCheckBox: MatCheckboxChange){
|
||||
if(matCheckBox.checked == true){
|
||||
this.subjectFieldOptionsEnabled = true;
|
||||
|
@ -332,9 +323,12 @@ export class NotificationTemplateEditorComponent extends BaseEditor<Notification
|
|||
|
||||
//options fields
|
||||
|
||||
addOptionalItem(formGroup: UntypedFormGroup) {
|
||||
const fieldInfo: NotificationFieldInfoEditorModel = new NotificationFieldInfoEditorModel();
|
||||
(formGroup.get('optional') as FormArray).push(fieldInfo.buildForm());
|
||||
addSubjectOptionalItem() {
|
||||
(this.formGroup.get('value').get('subjectFieldOptions').get('optional') as FormArray).push(this.editorModel.createSubjectOptionalField((this.formGroup.get('value').get('subjectFieldOptions').get('optional') as FormArray).length));
|
||||
}
|
||||
|
||||
addBodyOptionalItem() {
|
||||
(this.formGroup.get('value').get('bodyFieldOptions').get('optional') as FormArray).push(this.editorModel.createBodyOptionalField((this.formGroup.get('value').get('bodyFieldOptions').get('optional') as FormArray).length));
|
||||
}
|
||||
|
||||
removeSubjectOptionalItem(optionalIndex: number): void {
|
||||
|
@ -342,12 +336,30 @@ export class NotificationTemplateEditorComponent extends BaseEditor<Notification
|
|||
this.deleteSubjectFormattingItem(key);
|
||||
|
||||
(this.formGroup.get('value').get('subjectFieldOptions').get('optional') as FormArray).removeAt(optionalIndex);
|
||||
|
||||
//Reapply validators
|
||||
NotificationTemplateEditorModel.reApplyValueValidators(
|
||||
{
|
||||
formGroup: this.formGroup,
|
||||
validationErrorModel: this.editorModel.validationErrorModel
|
||||
}
|
||||
);
|
||||
this.formGroup.get('value').get('subjectFieldOptions').get('optional').markAsDirty();
|
||||
}
|
||||
removeBodyOptionalItem(optionalIndex: number): void {
|
||||
const key = (this.formGroup.get('value').get('bodyFieldOptions').get('optional') as FormArray).at(optionalIndex).get("key").value;
|
||||
this.deleteBodyFormattingItem(key);
|
||||
|
||||
(this.formGroup.get('value').get('bodyFieldOptions').get('optional') as FormArray).removeAt(optionalIndex);
|
||||
|
||||
//Reapply validators
|
||||
NotificationTemplateEditorModel.reApplyValueValidators(
|
||||
{
|
||||
formGroup: this.formGroup,
|
||||
validationErrorModel: this.editorModel.validationErrorModel
|
||||
}
|
||||
);
|
||||
this.formGroup.get('value').get('bodyFieldOptions').get('optional').markAsDirty();
|
||||
}
|
||||
|
||||
// subject formatting
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
import { FormArray, FormControl, UntypedFormBuilder, UntypedFormGroup, Validators } from '@angular/forms';
|
||||
import { FormArray, FormControl, UntypedFormArray, UntypedFormBuilder, UntypedFormGroup, Validators } from '@angular/forms';
|
||||
import { NotificationFieldInfo, NotificationFieldInfoPersist, NotificationFieldOptions, NotificationFieldOptionsPersist, NotificationTemplate, NotificationTemplatePersist, NotificationTemplateValue, NotificationTemplateValuePersist } from '@app/core/model/notification-template/notification-template';
|
||||
import { BackendErrorValidator } from '@common/forms/validation/custom-validator';
|
||||
import { ValidationErrorModel } from '@common/forms/validation/error-model/validation-error-model';
|
||||
|
@ -31,7 +31,7 @@ export class NotificationTemplateEditorModel extends BaseEditorModel implements
|
|||
this.notificationType = item.notificationType;
|
||||
this.kind = item.kind;
|
||||
if(item.language && item.language.id) this.languageId = item.language.id;
|
||||
if (item.value) { this.value = new NotificationTemplateValueEditorModel().fromModel(item.value); }
|
||||
if (item.value) { this.value = new NotificationTemplateValueEditorModel(this.validationErrorModel).fromModel(item.value); }
|
||||
}
|
||||
|
||||
return this;
|
||||
|
@ -67,6 +67,30 @@ export class NotificationTemplateEditorModel extends BaseEditorModel implements
|
|||
baseContext.validation = baseValidationArray;
|
||||
return baseContext;
|
||||
}
|
||||
|
||||
createSubjectOptionalField(index: number): UntypedFormGroup {
|
||||
const source: NotificationFieldInfoEditorModel = new NotificationFieldInfoEditorModel(this.validationErrorModel);
|
||||
return source.buildForm({ rootPath: 'value.subjectFieldOptions.optional[' + index + '].' });
|
||||
}
|
||||
|
||||
createBodyOptionalField(index: number): UntypedFormGroup {
|
||||
const source: NotificationFieldInfoEditorModel = new NotificationFieldInfoEditorModel(this.validationErrorModel);
|
||||
return source.buildForm({ rootPath: 'value.bodyFieldOptions.optional[' + index + '].' });
|
||||
}
|
||||
|
||||
static reApplyValueValidators(params: {
|
||||
formGroup: UntypedFormGroup,
|
||||
validationErrorModel: ValidationErrorModel,
|
||||
}): void {
|
||||
|
||||
const { formGroup, validationErrorModel } = params;
|
||||
const control = formGroup?.get('value');
|
||||
NotificationTemplateValueEditorModel.reapplyValidators({
|
||||
formGroup: control as UntypedFormGroup,
|
||||
rootPath: `value.`,
|
||||
validationErrorModel: validationErrorModel
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
export class NotificationTemplateValueEditorModel implements NotificationTemplateValuePersist {
|
||||
|
@ -94,7 +118,7 @@ export class NotificationTemplateValueEditorModel implements NotificationTemplat
|
|||
if (item) {
|
||||
this.subjectText = item.subjectText;
|
||||
this.subjectKey = item.subjectKey;
|
||||
if (item.subjectFieldOptions) this.subjectFieldOptions = new NotificationFieldOptionsEditorModel().fromModel(item.subjectFieldOptions);
|
||||
if (item.subjectFieldOptions) this.subjectFieldOptions = new NotificationFieldOptionsEditorModel(this.validationErrorModel).fromModel(item.subjectFieldOptions);
|
||||
this.bodyText = item.bodyText;
|
||||
this.bodyKey = item.bodyKey;
|
||||
this.priorityKey = item.priorityKey;
|
||||
|
@ -104,7 +128,7 @@ export class NotificationTemplateValueEditorModel implements NotificationTemplat
|
|||
this.bcc = item.bcc;
|
||||
this.bccMode = item.bccMode;
|
||||
this.extraDataKeys = item.extraDataKeys;
|
||||
if (item.bodyFieldOptions) this.bodyFieldOptions = new NotificationFieldOptionsEditorModel().fromModel(item.bodyFieldOptions);
|
||||
if (item.bodyFieldOptions) this.bodyFieldOptions = new NotificationFieldOptionsEditorModel(this.validationErrorModel).fromModel(item.bodyFieldOptions);
|
||||
}
|
||||
return this;
|
||||
}
|
||||
|
@ -125,7 +149,7 @@ export class NotificationTemplateValueEditorModel implements NotificationTemplat
|
|||
subjectText: [{ value: this.subjectText, disabled: disabled }, context.getValidation('subjectText').validators],
|
||||
subjectKey: [{ value: this.subjectKey, disabled: disabled }, context.getValidation('subjectKey').validators],
|
||||
subjectFieldOptions: this.subjectFieldOptions.buildForm({
|
||||
rootPath: `subjectFieldOptions.`
|
||||
rootPath: `${rootPath}subjectFieldOptions.`
|
||||
}),
|
||||
bodyText: [{ value: this.bodyText, disabled: disabled }, context.getValidation('bodyText').validators],
|
||||
bodyKey: [{ value: this.bodyKey, disabled: disabled }, context.getValidation('bodyKey').validators],
|
||||
|
@ -137,7 +161,7 @@ export class NotificationTemplateValueEditorModel implements NotificationTemplat
|
|||
bccMode: [{ value: this.bccMode, disabled: disabled }, context.getValidation('bccMode').validators],
|
||||
extraDataKeys: [{ value: this.extraDataKeys, disabled: disabled }, context.getValidation('extraDataKeys').validators],
|
||||
bodyFieldOptions: this.bodyFieldOptions.buildForm({
|
||||
rootPath: `bodyFieldOptions.`
|
||||
rootPath: `${rootPath}bodyFieldOptions.`
|
||||
}),
|
||||
});
|
||||
}
|
||||
|
@ -165,6 +189,37 @@ export class NotificationTemplateValueEditorModel implements NotificationTemplat
|
|||
baseContext.validation = baseValidationArray;
|
||||
return baseContext;
|
||||
}
|
||||
|
||||
static reapplyValidators(params: {
|
||||
formGroup: UntypedFormGroup,
|
||||
validationErrorModel: ValidationErrorModel,
|
||||
rootPath: string
|
||||
}): void {
|
||||
|
||||
const { formGroup, rootPath, validationErrorModel } = params;
|
||||
const context = NotificationTemplateValueEditorModel.createValidationContext({
|
||||
rootPath,
|
||||
validationErrorModel
|
||||
});
|
||||
|
||||
['subjectText', 'subjectKey', 'bodyText', 'bodyKey', 'priorityKey', 'allowAttachments', 'cc', 'ccMode', 'bcc', 'bccMode','extraDataKeys'].forEach(keyField => {
|
||||
const control = formGroup?.get(keyField);
|
||||
control?.clearValidators();
|
||||
control?.addValidators(context.getValidation(keyField).validators);
|
||||
});
|
||||
|
||||
NotificationFieldOptionsEditorModel.reapplyValidators({
|
||||
formGroup: formGroup?.get('subjectFieldOptions') as UntypedFormGroup,
|
||||
rootPath: `${rootPath}subjectFieldOptions.`,
|
||||
validationErrorModel: validationErrorModel
|
||||
});
|
||||
|
||||
NotificationFieldOptionsEditorModel.reapplyValidators({
|
||||
formGroup: formGroup?.get('bodyFieldOptions') as UntypedFormGroup,
|
||||
rootPath: `${rootPath}bodyFieldOptions.`,
|
||||
validationErrorModel: validationErrorModel
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
export class NotificationFieldOptionsEditorModel implements NotificationFieldOptionsPersist {
|
||||
|
@ -181,7 +236,7 @@ export class NotificationFieldOptionsEditorModel implements NotificationFieldOpt
|
|||
public fromModel(item: NotificationFieldOptions): NotificationFieldOptionsEditorModel {
|
||||
if (item) {
|
||||
this.mandatory = item.mandatory;
|
||||
if(item.optional) { item.optional.map(x => this.optional.push(new NotificationFieldInfoEditorModel().fromModel(x))); }
|
||||
if(item.optional) { item.optional.map(x => this.optional.push(new NotificationFieldInfoEditorModel(this.validationErrorModel).fromModel(x))); }
|
||||
this.formatting = item.formatting;
|
||||
}
|
||||
return this;
|
||||
|
@ -208,7 +263,7 @@ export class NotificationFieldOptionsEditorModel implements NotificationFieldOpt
|
|||
(item, index) => new NotificationFieldInfoEditorModel(
|
||||
this.validationErrorModel
|
||||
).fromModel(item).buildForm({
|
||||
rootPath: `optional[${index}].`
|
||||
rootPath: `${rootPath}optional[${index}].`
|
||||
}), context.getValidation('optional')
|
||||
)
|
||||
),
|
||||
|
@ -231,6 +286,34 @@ export class NotificationFieldOptionsEditorModel implements NotificationFieldOpt
|
|||
return baseContext;
|
||||
}
|
||||
|
||||
static reapplyValidators(params: {
|
||||
formGroup: UntypedFormGroup,
|
||||
validationErrorModel: ValidationErrorModel,
|
||||
rootPath: string
|
||||
}): void {
|
||||
|
||||
const { formGroup, rootPath, validationErrorModel } = params;
|
||||
const context = NotificationFieldOptionsEditorModel.createValidationContext({
|
||||
rootPath,
|
||||
validationErrorModel
|
||||
});
|
||||
|
||||
['mandatory', 'formatting'].forEach(keyField => {
|
||||
const control = formGroup?.get(keyField);
|
||||
control?.clearValidators();
|
||||
control?.addValidators(context.getValidation(keyField).validators);
|
||||
});
|
||||
|
||||
(formGroup.get('optional') as FormArray).controls?.forEach(
|
||||
(control, index) => NotificationFieldInfoEditorModel.reapplyValidators({
|
||||
formGroup: control as UntypedFormGroup,
|
||||
rootPath: `${rootPath}optional[${index}].`,
|
||||
validationErrorModel: validationErrorModel
|
||||
}
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
export class NotificationFieldInfoEditorModel implements NotificationFieldInfoPersist {
|
||||
|
@ -287,4 +370,24 @@ export class NotificationFieldInfoEditorModel implements NotificationFieldInfoPe
|
|||
baseContext.validation = baseValidationArray;
|
||||
return baseContext;
|
||||
}
|
||||
|
||||
static reapplyValidators(params: {
|
||||
formGroup: UntypedFormGroup,
|
||||
validationErrorModel: ValidationErrorModel,
|
||||
rootPath: string
|
||||
}): void {
|
||||
|
||||
const { formGroup, rootPath, validationErrorModel } = params;
|
||||
const context = NotificationFieldInfoEditorModel.createValidationContext({
|
||||
rootPath,
|
||||
validationErrorModel
|
||||
});
|
||||
|
||||
['key', 'type', 'value'].forEach(keyField => {
|
||||
const control = formGroup?.get(keyField);
|
||||
control?.clearValidators();
|
||||
control?.addValidators(context.getValidation(keyField).validators);
|
||||
});
|
||||
}
|
||||
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue