{ "version": 3, "sources": ["libs/email-ui/email-builder/src/services/email-builder-data.service.ts", "libs/email-ui/email-builder/src/dependencies/tokens.ts"], "sourcesContent": ["import { Injectable } from '@angular/core';\nimport { AppNamespace, EmailBuilderTemplate, OwnerType, TemplatesService } from '@vendasta/email-builder';\nimport { TemplateReferenceInterface } from '@vendasta/email-builder/lib/_internal';\nimport { SnackbarService } from '@vendasta/galaxy/snackbar-service';\nimport { Observable, catchError, of } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { EmailContentData } from '../types/contentblocks';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class EmailBuilderDataService {\n constructor(private readonly svc: TemplatesService, private readonly snackbarService: SnackbarService) {}\n\n getTemplate$(\n ownerType: OwnerType,\n ownerId: string,\n appNamespace: AppNamespace,\n templateId: string,\n ): Observable {\n return this.svc.getTemplate(ownerType, ownerId, appNamespace, templateId);\n }\n\n loadTemplate$(\n ownerType: OwnerType,\n ownerId: string,\n appNamespace: AppNamespace,\n templateId: string,\n ): Observable {\n return this.svc.getTemplate(ownerType, ownerId, appNamespace, templateId).pipe(\n map((template) => {\n const parse: EmailContentData = JSON.parse(template.templateJson);\n parse.id = template.templateId;\n parse.name = template.templateDisplayName;\n return parse;\n }),\n );\n }\n\n createNewTemplate$(\n ownerType: OwnerType,\n ownerId: string,\n appNamespace: AppNamespace,\n templateId: string,\n templateData: EmailContentData,\n templateHTML: string,\n parent?: TemplateReferenceInterface,\n ): Observable {\n const validationResult = this.validateTemplate(templateData);\n if (!validationResult) {\n return of(false);\n }\n return this.svc\n .createNewTemplate(\n ownerType,\n ownerId,\n appNamespace,\n templateId,\n templateData.name,\n JSON.stringify(templateData),\n templateHTML,\n templateData.subjectLine,\n parent,\n )\n .pipe(\n catchError((err) => {\n this.snackbarService.openErrorSnack('EMAIL_BUILDER.SAVING.GENERIC_ERROR');\n throw new Error(err);\n }),\n map(() => true),\n );\n }\n\n validateTemplate(templateData: EmailContentData): boolean {\n if (!templateData || !templateData.emailContentBlocks) {\n return false;\n }\n // TODO: MAEL-782 go back to this once sms templates correctly.\n // if (!templateData) {\n // return false;\n // }\n const contentBlocksValid = templateData.emailContentBlocks.every(\n (block) => block.valid || block.valid === undefined,\n );\n const basicSetupValid =\n templateData.basicSetupValid || (templateData.name !== '' && templateData.subjectLine !== '');\n\n if (basicSetupValid && contentBlocksValid && templateData.emailSetup.isValid !== false) {\n return true;\n }\n this.snackbarService.openErrorSnack('EMAIL_BUILDER.SAVING.TEMPLATE_INVALID_ERROR');\n return false;\n }\n\n getPreviewImageUrl$(\n ownerType: OwnerType,\n ownerId: string,\n appNamespace: AppNamespace,\n templateId: string,\n ): Observable {\n return this.svc\n .getTemplate(ownerType, ownerId, appNamespace, templateId)\n .pipe(map((template) => template.previewUrl));\n }\n\n updateExistingTemplate$(\n ownerType: OwnerType,\n ownerId: string,\n appNamespace: AppNamespace,\n templateId: string,\n templateData: EmailContentData,\n templateHTML: string,\n ): Observable {\n const validationResult = this.validateTemplate(templateData);\n if (!validationResult) {\n return of(false);\n }\n return this.svc\n .updateExistingTemplate(\n ownerType,\n ownerId,\n appNamespace,\n templateId,\n templateData.name,\n JSON.stringify(templateData),\n templateHTML,\n templateData.subjectLine,\n )\n .pipe(\n catchError((err) => {\n this.snackbarService.openErrorSnack('EMAIL_BUILDER.SAVING.GENERIC_ERROR');\n throw new Error(err);\n }),\n map(() => true),\n );\n }\n}\n", "import { VariableMenuItem } from '../components/dynamic-component-selector';\nimport { InjectionToken } from '@angular/core';\nimport { Footer, TopLogo } from '../components/email-advanced-settings/email-advanced-settings.component';\nimport { Observable } from 'rxjs';\nimport { EmailPreviewHydrationData } from '../services/preview-rendering.service';\n\nexport const DYNAMIC_COMPONENT_DATA_TOKEN: InjectionToken = new InjectionToken(\n 'com.vendasta.email_builder.dynamic_component_data',\n);\nexport const TEMPLATE_HYDRATION_DATA_TOKEN: InjectionToken> = new InjectionToken<\n Observable\n>('com.vendasta.email_builder.hydration_data');\nexport const PLACEHOLDER_LOGO_URL_TOKEN: InjectionToken> = new InjectionToken>(\n 'com.vendasta.email_builder.placeholder_logo_url',\n);\nexport const EMAIL_FOOTER_TOKEN: InjectionToken