import { Injectable } from '@angular/core'; import { ActivatedRouteSnapshot, RouterStateSnapshot } from '@angular/router'; import { Language } from '@app/core/model/language/language'; import { NotificationFieldInfo, NotificationFieldOptions, NotificationTemplate, NotificationTemplateValue } from '@app/core/model/notification-template/notification-template'; import { NotificationTemplateService } from '@app/core/services/notification-template/notification-template.service'; import { BreadcrumbService } from '@app/ui/misc/breadcrumb/breadcrumb.service'; import { BaseEditorResolver } from '@common/base/base-editor.resolver'; import { Guid } from '@common/types/guid'; import { takeUntil, tap } from 'rxjs/operators'; import { nameof } from 'ts-simple-nameof'; @Injectable() export class NotificationTemplateEditorResolver extends BaseEditorResolver { constructor(private notificationTemplateService: NotificationTemplateService, private breadcrumbService: BreadcrumbService) { super(); } public static lookupFields(): string[] { return [ ...BaseEditorResolver.lookupFields(), nameof(x => x.id), nameof(x => x.channel), nameof(x => x.notificationType), nameof(x => x.kind), nameof(x => x.languageCode), [nameof(x => x.value),nameof(x => x.subjectText)].join('.'), [nameof(x => x.value),nameof(x => x.subjectKey)].join('.'), [nameof(x => x.value),nameof(x => x.subjectFieldOptions), nameof(x => x.mandatory)].join('.'), [nameof(x => x.value),nameof(x => x.subjectFieldOptions), nameof(x => x.optional)].join('.'), [nameof(x => x.value),nameof(x => x.subjectFieldOptions), nameof(x => x.optional), nameof(x => x.key)].join('.'), [nameof(x => x.value),nameof(x => x.subjectFieldOptions), nameof(x => x.optional), nameof(x => x.type)].join('.'), [nameof(x => x.value),nameof(x => x.subjectFieldOptions), nameof(x => x.optional), nameof(x => x.value)].join('.'), [nameof(x => x.value),nameof(x => x.subjectFieldOptions), nameof(x => x.formatting)].join('.'), [nameof(x => x.value),nameof(x => x.bodyText)].join('.'), [nameof(x => x.value),nameof(x => x.bodyKey)].join('.'), [nameof(x => x.value),nameof(x => x.bodyFieldOptions), nameof(x => x.mandatory)].join('.'), [nameof(x => x.value),nameof(x => x.bodyFieldOptions), nameof(x => x.optional)].join('.'), [nameof(x => x.value),nameof(x => x.bodyFieldOptions), nameof(x => x.optional), nameof(x => x.key)].join('.'), [nameof(x => x.value),nameof(x => x.bodyFieldOptions), nameof(x => x.optional), nameof(x => x.type)].join('.'), [nameof(x => x.value),nameof(x => x.bodyFieldOptions), nameof(x => x.optional), nameof(x => x.value)].join('.'), [nameof(x => x.value),nameof(x => x.bodyFieldOptions), nameof(x => x.formatting)].join('.'), [nameof(x => x.value),nameof(x => x.priorityKey)].join('.'), [nameof(x => x.value),nameof(x => x.allowAttachments)].join('.'), [nameof(x => x.value),nameof(x => x.cc)].join('.'), [nameof(x => x.value),nameof(x => x.ccMode)].join('.'), [nameof(x => x.value),nameof(x => x.bcc)].join('.'), [nameof(x => x.value),nameof(x => x.bccMode)].join('.'), [nameof(x => x.value),nameof(x => x.extraDataKeys)].join('.'), nameof(x => x.createdAt), nameof(x => x.updatedAt), nameof(x => x.hash), nameof(x => x.isActive) ] } resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot) { const fields = [ ...NotificationTemplateEditorResolver.lookupFields() ]; const id = route.paramMap.get('id'); if (id != null) { return this.notificationTemplateService.getSingle(Guid.parse(id), fields).pipe(tap(x => this.breadcrumbService.addIdResolvedValue(x.id?.toString(), x.notificationType.toString())), takeUntil(this._destroyed)); } } }