@messaia/cdk-cms 0.0.1-rc01

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (70) hide show
  1. package/README.md +24 -0
  2. package/esm2020/lib/cms-routing.module.mjs +52 -0
  3. package/esm2020/lib/cms.module.mjs +134 -0
  4. package/esm2020/lib/comnponents/content-form/content-form.component.mjs +237 -0
  5. package/esm2020/lib/comnponents/document-dialog/document-dialog.component.mjs +91 -0
  6. package/esm2020/lib/comnponents/template-form/template-form.component.mjs +177 -0
  7. package/esm2020/lib/comnponents/template-preview-dialog/template-preview-dialog.component.mjs +126 -0
  8. package/esm2020/lib/enums/content-type.mjs +6 -0
  9. package/esm2020/lib/enums/document-type.mjs +8 -0
  10. package/esm2020/lib/enums/faq-scope.mjs +6 -0
  11. package/esm2020/lib/enums/template-type.mjs +6 -0
  12. package/esm2020/lib/enums/wrap-tag.mjs +9 -0
  13. package/esm2020/lib/models/cms-settings.mjs +12 -0
  14. package/esm2020/lib/models/content-variable.mjs +48 -0
  15. package/esm2020/lib/models/content.mjs +89 -0
  16. package/esm2020/lib/models/document.mjs +102 -0
  17. package/esm2020/lib/models/faq.mjs +71 -0
  18. package/esm2020/lib/models/template-preview.mjs +10 -0
  19. package/esm2020/lib/models/template.mjs +80 -0
  20. package/esm2020/lib/public-api.mjs +25 -0
  21. package/esm2020/lib/resolvers/excluded-columns.resolve.mjs +22 -0
  22. package/esm2020/lib/resolvers/excluded-fields.resolve.mjs +22 -0
  23. package/esm2020/lib/resolvers/includes.resolve.mjs +22 -0
  24. package/esm2020/lib/resolvers/settings.resolve.mjs +26 -0
  25. package/esm2020/lib/services/content-variable.service.mjs +27 -0
  26. package/esm2020/lib/services/content.service.mjs +34 -0
  27. package/esm2020/lib/services/document.generic-service.mjs +11 -0
  28. package/esm2020/lib/services/document.service`.mjs +25 -0
  29. package/esm2020/lib/services/faq.service.mjs +18 -0
  30. package/esm2020/lib/services/template-preview.service.mjs +18 -0
  31. package/esm2020/lib/services/template.service.mjs +18 -0
  32. package/esm2020/messaia-cdk-cms.mjs +5 -0
  33. package/esm2020/public_api.mjs +5 -0
  34. package/fesm2015/messaia-cdk-cms.mjs +1380 -0
  35. package/fesm2015/messaia-cdk-cms.mjs.map +1 -0
  36. package/fesm2020/messaia-cdk-cms.mjs +1367 -0
  37. package/fesm2020/messaia-cdk-cms.mjs.map +1 -0
  38. package/lib/cms-routing.module.d.ts +7 -0
  39. package/lib/cms.module.d.ts +40 -0
  40. package/lib/comnponents/content-form/content-form.component.d.ts +109 -0
  41. package/lib/comnponents/document-dialog/document-dialog.component.d.ts +47 -0
  42. package/lib/comnponents/template-form/template-form.component.d.ts +74 -0
  43. package/lib/comnponents/template-preview-dialog/template-preview-dialog.component.d.ts +68 -0
  44. package/lib/enums/content-type.d.ts +4 -0
  45. package/lib/enums/document-type.d.ts +6 -0
  46. package/lib/enums/faq-scope.d.ts +4 -0
  47. package/lib/enums/template-type.d.ts +4 -0
  48. package/lib/enums/wrap-tag.d.ts +7 -0
  49. package/lib/models/cms-settings.d.ts +10 -0
  50. package/lib/models/content-variable.d.ts +9 -0
  51. package/lib/models/content.d.ts +19 -0
  52. package/lib/models/document.d.ts +26 -0
  53. package/lib/models/faq.d.ts +14 -0
  54. package/lib/models/template-preview.d.ts +17 -0
  55. package/lib/models/template.d.ts +16 -0
  56. package/lib/public-api.d.ts +21 -0
  57. package/lib/resolvers/excluded-columns.resolve.d.ts +14 -0
  58. package/lib/resolvers/excluded-fields.resolve.d.ts +14 -0
  59. package/lib/resolvers/includes.resolve.d.ts +14 -0
  60. package/lib/resolvers/settings.resolve.d.ts +15 -0
  61. package/lib/services/content-variable.service.d.ts +17 -0
  62. package/lib/services/content.service.d.ts +23 -0
  63. package/lib/services/document.generic-service.d.ts +9 -0
  64. package/lib/services/document.service`.d.ts +17 -0
  65. package/lib/services/faq.service.d.ts +11 -0
  66. package/lib/services/template-preview.service.d.ts +11 -0
  67. package/lib/services/template.service.d.ts +11 -0
  68. package/messaia-cdk-cms.d.ts +5 -0
  69. package/package.json +33 -0
  70. package/public_api.d.ts +1 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"messaia-cdk-cms.mjs","sources":["../../../projects/cdk-cms/src/lib/enums/content-type.ts","../../../projects/cdk-cms/src/lib/enums/wrap-tag.ts","../../../projects/cdk-cms/src/lib/models/cms-settings.ts","../../../projects/cdk-cms/src/lib/models/content.ts","../../../projects/cdk-cms/src/lib/services/content.service.ts","../../../projects/cdk-cms/src/lib/comnponents/content-form/content-form.component.ts","../../../projects/cdk-cms/src/lib/comnponents/content-form/content-form.component.html","../../../projects/cdk-cms/src/lib/enums/document-type.ts","../../../projects/cdk-cms/src/lib/models/document.ts","../../../projects/cdk-cms/src/lib/services/document.generic-service.ts","../../../projects/cdk-cms/src/lib/services/document.service`.ts","../../../projects/cdk-cms/src/lib/comnponents/document-dialog/document-dialog.component.ts","../../../projects/cdk-cms/src/lib/comnponents/document-dialog/document-dialog.component.html","../../../projects/cdk-cms/src/lib/enums/template-type.ts","../../../projects/cdk-cms/src/lib/models/template.ts","../../../projects/cdk-cms/src/lib/models/template-preview.ts","../../../projects/cdk-cms/src/lib/services/template.service.ts","../../../projects/cdk-cms/src/lib/services/template-preview.service.ts","../../../projects/cdk-cms/src/lib/comnponents/template-preview-dialog/template-preview-dialog.component.ts","../../../projects/cdk-cms/src/lib/comnponents/template-preview-dialog/template-preview-dialog.component.html","../../../projects/cdk-cms/src/lib/comnponents/template-form/template-form.component.ts","../../../projects/cdk-cms/src/lib/comnponents/template-form/template-form.component.html","../../../projects/cdk-cms/src/lib/models/content-variable.ts","../../../projects/cdk-cms/src/lib/models/faq.ts","../../../projects/cdk-cms/src/lib/resolvers/excluded-columns.resolve.ts","../../../projects/cdk-cms/src/lib/resolvers/excluded-fields.resolve.ts","../../../projects/cdk-cms/src/lib/resolvers/includes.resolve.ts","../../../projects/cdk-cms/src/lib/resolvers/settings.resolve.ts","../../../projects/cdk-cms/src/lib/cms-routing.module.ts","../../../projects/cdk-cms/src/lib/cms.module.ts","../../../projects/cdk-cms/src/lib/enums/faq-scope.ts","../../../projects/cdk-cms/src/lib/services/content-variable.service.ts","../../../projects/cdk-cms/src/lib/services/faq.service.ts","../../../projects/cdk-cms/src/lib/public-api.ts","../../../projects/cdk-cms/src/public_api.ts","../../../projects/cdk-cms/src/messaia-cdk-cms.ts"],"sourcesContent":["export enum ContentType {\r\n Page = 1,\r\n Block\r\n}","export enum WrapTag {\r\n None = '',\r\n Section = 'section',\r\n Div = 'div',\r\n Address = 'address',\r\n Article = 'article'\r\n}","\r\nexport class CmsSettings {\r\n multitenantable: boolean = false;\r\n styleUrlEndpoint: Function;\r\n editorHeight: string = '700px';\r\n\r\n /**\r\n * constructor\r\n * @param init \r\n */\r\n public constructor(init?: Partial<CmsSettings>) {\r\n Object.assign(this, init);\r\n }\r\n}","import { AuditEntity, Column, Display, prop, required, Table } from \"@messaia/cdk\";\r\nimport { ContentType } from \"../enums/content-type\";\r\nimport { WrapTag } from \"../enums/wrap-tag\";\r\n\r\n@Table({\r\n endpoint: 'content',\r\n duplicable: true\r\n})\r\nexport class Content extends AuditEntity {\r\n @prop()\r\n type: ContentType;\r\n\r\n @prop()\r\n sectionId: number;\r\n\r\n @Column()\r\n @Display($localize`:@@title:Title`)\r\n @required()\r\n title: string;\r\n\r\n @Column({ maxWidth: 190, showGtMd: true })\r\n @Display($localize`:@@name:Name`)\r\n @required()\r\n name: string;\r\n\r\n @prop()\r\n aliases: string;\r\n\r\n @prop()\r\n body: string;\r\n\r\n @prop()\r\n wrapTag: WrapTag = WrapTag.Section;\r\n\r\n @prop()\r\n layout: string;\r\n\r\n @prop()\r\n showTitle: boolean = true;\r\n\r\n @Column({\r\n name: 'client.displayName',\r\n endpoint: 'client?enabled=true&projection=id,name',\r\n maxWidth: 190,\r\n showGtLg: true\r\n })\r\n @Display($localize`:@@client:Client`)\r\n @prop()\r\n clientId: number;\r\n\r\n @prop()\r\n default: boolean = false;\r\n\r\n @Column({ header: $localize`:@@enabled:Enabled`, event: 'toggle' })\r\n @prop()\r\n enabled: boolean = true;\r\n\r\n @prop()\r\n script: string;\r\n\r\n @prop()\r\n style: string;\r\n}","import { Injectable } from '@angular/core';\r\nimport { GenericService } from '@messaia/cdk';\r\nimport { Observable } from 'rxjs';\r\nimport { map } from 'rxjs/operators';\r\nimport { Content } from '../models/content';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class ContentService extends GenericService<Content> {\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper('content');\r\n\t}\r\n\r\n\t/**\r\n\t * Checks if the specified alias is available.\r\n\t * @param id \r\n\t * @param alias \r\n\t */\r\n\tpublic isAliasAvailable(item: Content) {\r\n\t\treturn this.create(item, '/isAliasAvailable').pipe(map((x: any) => x.value));\r\n\t}\r\n\r\n\t/**\r\n\t * Duplicates a tariff\r\n\t * @param id \r\n\t */\r\n\tpublic duplicate(id: number): Observable<any> {\r\n\t\treturn this.create(null, `/duplicate/${id}`);\r\n\t}\r\n}","import { COMMA, ENTER } from '@angular/cdk/keycodes';\r\nimport { HttpClient, HttpEventType, HttpResponse } from '@angular/common/http';\r\nimport { ChangeDetectorRef, Component, ViewChild } from '@angular/core';\r\nimport { MatChipInputEvent } from '@angular/material/chips';\r\nimport { ActivatedRoute } from '@angular/router';\r\nimport { AuthHelper, EnumService, FileService, GenericReactiveFormComponent, ServiceLocator } from '@messaia/cdk';\r\nimport { EditorComponent } from '@tinymce/tinymce-angular';\r\nimport { Subscription } from 'rxjs';\r\nimport { ContentType } from '../../enums/content-type';\r\nimport { WrapTag } from '../../enums/wrap-tag';\r\nimport { CmsSettings } from '../../models/cms-settings';\r\nimport { Content } from '../../models/content';\r\nimport { ContentService } from '../../services/content.service';\r\n\r\n@Component({\r\n\tselector: 'app-content-form',\r\n\ttemplateUrl: './content-form.component.html'\r\n})\r\nexport class ContentFormComponent extends GenericReactiveFormComponent<Content, ContentService> {\r\n\r\n\t/**\r\n\t * Used to disable some properties for client manager\r\n\t */\r\n\tpublic isClientAdmin = AuthHelper.hasRole('ClientAdministrator') || AuthHelper.hasRole('ClientManager');\r\n\r\n\t/**\r\n\t * Router Subscription\r\n\t */\r\n\tpublic routeSubscription: Subscription;\r\n\r\n\t/**\r\n\t * The status of the issue\r\n\t */\r\n\tpublic type: ContentType;\r\n\r\n\t/**\r\n\t * Content status\r\n\t */\r\n\tpublic ContentType: typeof ContentType = ContentType;\r\n\r\n\t/**\r\n\t * Wrap tag enum\r\n\t */\r\n\tpublic wrapTags: any[] = EnumService.toArray(WrapTag);\r\n\r\n\t/**\r\n\t * Separator keys codes\r\n\t */\r\n\tpublic separatorKeysCodes: number[] = [ENTER, COMMA];\r\n\r\n\t/**\r\n\t * Gets the aliases control\r\n\t */\r\n\tget aliasesControl() { return this.form.controls.aliases; }\r\n\r\n\t/**\r\n\t * settings: CmsSettings\r\n\t */\r\n\tprotected settings: CmsSettings;\r\n\r\n\t/**\r\n\t * A ref to form html element\r\n\t */\r\n\t@ViewChild('form', { static: false }) formElement: HTMLFormElement;\r\n\r\n\t/**\r\n\t * A ref to tinymce editor\r\n\t */\r\n\t@ViewChild('editor', { static: false }) editorComponent: EditorComponent;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor(\r\n\t\tprotected service: ContentService,\r\n\t\tprotected fileService: FileService,\r\n\t\tprotected httpClient: HttpClient,\r\n\t\tprotected route: ActivatedRoute,\r\n\t\tprotected changeDetectorRef: ChangeDetectorRef\r\n\t) {\r\n\t\tsuper(Content, service, route, changeDetectorRef)\r\n\t\tthis.settings = ServiceLocator.getService(CmsSettings);\r\n\t}\r\n\r\n\t/**\r\n\t * Lifecycle hook that is called after data-bound properties \r\n\t * of a directive are initialized.\r\n\t */\r\n\tngOnInit(): void {\r\n\t\t/* Filter by status, if any */\r\n\t\tthis.routeSubscription = this.route.params.subscribe((params: { type: string }) => {\r\n\t\t\tthis.type = EnumService.parse(ContentType, params.type);\r\n\t\t});\r\n\r\n\t\tsuper.ngOnInit();\r\n\t}\r\n\r\n\t/**\r\n\t * Checks if the specified alias is available.\r\n\t */\r\n\tpublic isAliasAvailable() {\r\n\t\tthis.service.isAliasAvailable(this.item).subscribe((x: boolean) => {\r\n\t\t\tthis.formElement.form.controls['alias'].setErrors(x ? null : { 'inUse': true });\r\n\t\t});\r\n\t}\r\n\r\n\t/**\r\n\t * Set client\r\n\t */\r\n\tpublic setClient(): void {\r\n\t\tthis.isEditorInitialzed = false;\r\n\t\tthis.configEditor();\r\n\t\tthis.editorComponent?.editor?.setContent(this.item.body);\r\n\t}\r\n\r\n\t/**\r\n\t * Add a aliases to the current field\r\n\t * @param event \r\n\t */\r\n\tpublic addAliases(event: MatChipInputEvent): void {\r\n\t\t/* Add our aliass */\r\n\t\tif ((event.value || '').trim()) {\r\n\t\t\tthis.aliasesControl.setValue([...this.aliasesControl.value, event.value.trim()]);\r\n\t\t\tthis.aliasesControl.updateValueAndValidity();\r\n\t\t\tthis.aliasesControl.markAsDirty();\r\n\t\t}\r\n\r\n\t\t/* Reset the input value */\r\n\t\tif (event.input) {\r\n\t\t\tevent.input.value = '';\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Removes a aliases\r\n\t * @param aliass \r\n\t */\r\n\tpublic removeAliases(aliass: string): void {\r\n\t\tconst index = this.aliasesControl.value.indexOf(aliass);\r\n\t\tif (index >= 0) {\r\n\t\t\tthis.aliasesControl.value.splice(index, 1);\r\n\t\t\tthis.aliasesControl.updateValueAndValidity();\r\n\t\t\tthis.aliasesControl.markAsDirty();\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Creates a new instance of the Template\r\n\t */\r\n\tprotected newInstance(): Content {\r\n\t\tlet item = Object.assign(new Content(), <Content>{\r\n\t\t\ttype: this.type,\r\n\t\t\twrapTag: this.type == ContentType.Block ? '' : WrapTag.Section,\r\n\t\t\tshowTitle: this.type == ContentType.Block ? false : true\r\n\t\t});\r\n\r\n\t\t/* Get clientId */\r\n\t\tif (!this.isEditMode && this.isClientAdmin) {\r\n\t\t\titem.clientId = this.currentUser.clientId;\r\n\t\t}\r\n\r\n\t\t/* Init the tinymce editor */\r\n\t\tthis.isEditorInitialzed = false;\r\n\t\treturn item;\r\n\t}\r\n\r\n\t/**\r\n\t * Event emitted when the form has built.\r\n\t */\r\n\tprotected onAfterFormBuild(): void {\r\n\t\tsuper.onAfterFormBuild();\r\n\t\tthis.configEditor();\r\n\t}\r\n\r\n\t/**\r\n\t * Configures the tinymce editor\r\n\t */\r\n\tprivate configEditor(): void {\r\n\t\tif (this.settings?.multitenantable && this.formValue?.clientId && this.settings?.styleUrlEndpoint) {\r\n\t\t\tthis.httpClient.get(this.settings.styleUrlEndpoint(this.formValue.clientId)).subscribe((x: { value: string }) => {\r\n\t\t\t\tsuper.initEditor(Object.assign(this.getEditorConfig(), { content_css: x.value }));\r\n\t\t\t});\r\n\t\t} else {\r\n\t\t\tsuper.initEditor(this.getEditorConfig());\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Creates config for the editor\r\n\t * @returns \r\n\t */\r\n\tprivate getEditorConfig(): any {\r\n\t\treturn {\r\n\t\t\ttoolbar: `${this.editorToolbar} snippetsButton`,\r\n\t\t\tforce_p_newlines: false,\r\n\t\t\tforced_root_block: '',\r\n\t\t\theight: this.settings?.editorHeight || '700px',\r\n\t\t\tfile_picker_types: 'file image media',\r\n\t\t\timage_advtab: true,\r\n\t\t\timages_upload_base_path: `${this.appSetting.apiUrl}file/`,\r\n\t\t\timages_upload_url: 'backend/api/files',\r\n\t\t\tallow_html_in_named_anchor: true,\r\n\t\t\tvalid_children: '+a[div|span|img|h1|h2|h3|h4|h5|h6|br|hr|video],+span[i]',\r\n\t\t\tvalid_elements: '*[*]',\r\n\t\t\timages_upload_handler: (blobInfo: any, success: any, failure: any) => {\r\n\t\t\t\tthis.fileService.upload(blobInfo.blob(), `upload`, {\r\n\t\t\t\t\tclientId: this.form?.value?.clientId,\r\n\t\t\t\t\tpath: 'images',\r\n\t\t\t\t\tisPublic: true\r\n\t\t\t\t}).subscribe(event => {\r\n\t\t\t\t\tif (event.type === HttpEventType.UploadProgress) {\r\n\r\n\t\t\t\t\t\t/* Calculate the progress percentage */\r\n\t\t\t\t\t\tconst percentDone = Math.round(100 * event.loaded / event.total);\r\n\r\n\t\t\t\t\t\t/* Pass the percentage into the progress-stream */\r\n\t\t\t\t\t\tconsole.info(percentDone);\r\n\t\t\t\t\t} else if (event instanceof HttpResponse) {\r\n\t\t\t\t\t\tsuccess(event.body.publicLink);\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t},\r\n\t\t\tsetup: function (editor: any) {\r\n\t\t\t\t/* Add snippets button to the toolbar */\r\n\t\t\t\teditor.ui.registry.addMenuButton('snippetsButton', {\r\n\t\t\t\t\ttext: 'Snippets',\r\n\t\t\t\t\tfetch: function (callback: any) {\r\n\t\t\t\t\t\tcallback([\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\ttype: 'menuitem',\r\n\t\t\t\t\t\t\t\ttext: 'Variable',\r\n\t\t\t\t\t\t\t\tonAction: () => editor.insertContent('{{var name}}')\r\n\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\ttype: 'menuitem',\r\n\t\t\t\t\t\t\t\ttext: 'Block',\r\n\t\t\t\t\t\t\t\tonAction: () => editor.insertContent('{{block name=\"...\"}}')\r\n\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\ttype: 'menuitem',\r\n\t\t\t\t\t\t\t\ttext: 'View Component',\r\n\t\t\t\t\t\t\t\tonAction: () => editor.insertContent('{{vc name=\"...\"}}')\r\n\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t]);\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t};\r\n\t}\r\n\r\n\t/**\r\n\t * Cleanup subscriptions when this component is destroyed.\r\n\t */\r\n\tngOnDestroy(): void {\r\n\t\tif (this.routeSubscription) {\r\n\t\t\tthis.routeSubscription.unsubscribe();\r\n\t\t}\r\n\t}\r\n}","<vd-layout-nav color=\"primary\" [backNavigationRoute]=\"listRoute\" toolbarTitle=\"Content\" i18n-toolbarTitle [editMode]=\"isEditMode\" [menuItems]=\"toolbarMenuItems\" (reload)=\"reloadPage()\">\r\n\t<form *ngIf=\"form\" [formGroup]=\"form\" novalidate (ngSubmit)=\"save()\">\r\n\t\t<vd-layout-card-over class=\"accordion\" cardWidth=\"70\" color=\"primary\" flex>\r\n\t\t\t<mat-accordion [multi]=\"!isEditMode\">\r\n\t\t\t\t<!-- #region Details -->\r\n\t\t\t\t<mat-expansion-panel expanded=\"true\" id=\"details\">\r\n\t\t\t\t\t<mat-expansion-panel-header>\r\n\t\t\t\t\t\t<mat-panel-title i18n>Details</mat-panel-title>\r\n\t\t\t\t\t</mat-expansion-panel-header>\r\n\r\n\t\t\t\t\t<!-- #region Client-->\r\n\t\t\t\t\t<div layout-gt-sm=\"row\" layout=\"column\" *ngIf=\"settings?.multitenantable && !isClientAdmin\">\r\n\t\t\t\t\t\t<mat-form-field flex layout-margin appearance=\"outline\">\r\n\t\t\t\t\t\t\t<mat-label i18n>Client</mat-label>\r\n\t\t\t\t\t\t\t<vd-select formControlName=\"clientId\" endpoint=\"client?enabled=true\" layout=\"column\" (change)=\"setClient()\" [required]=\"!item.default\" flex></vd-select>\r\n\t\t\t\t\t\t\t<mat-error *ngFor=\"let errorMessage of form.controls.clientId['errorMessages']\">{{errorMessage}}</mat-error>\r\n\t\t\t\t\t\t</mat-form-field>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t\t<!-- #endregion -->\r\n\r\n\t\t\t\t\t<!-- #region Title -->\r\n\t\t\t\t\t<div layout=\"row\" flex>\r\n\t\t\t\t\t\t<mat-form-field flex layout-margin appearance=\"outline\">\r\n\t\t\t\t\t\t\t<mat-label i18n>Title</mat-label>\r\n\t\t\t\t\t\t\t<input matInput formControlName=\"title\">\r\n\t\t\t\t\t\t\t<mat-error *ngFor=\"let errorMessage of form.controls.title['errorMessages']\">{{errorMessage}}</mat-error>\r\n\t\t\t\t\t\t</mat-form-field>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t\t<!-- #endregion -->\r\n\r\n\t\t\t\t\t<!-- #region Name & Alias -->\r\n\t\t\t\t\t<div layout=\"row\" flex>\r\n\t\t\t\t\t\t<mat-form-field flex layout-margin appearance=\"outline\">\r\n\t\t\t\t\t\t\t<mat-label i18n>Name</mat-label>\r\n\t\t\t\t\t\t\t<input matInput formControlName=\"name\">\r\n\t\t\t\t\t\t\t<mat-error *ngFor=\"let errorMessage of form.controls.name['errorMessages']\">{{errorMessage}}</mat-error>\r\n\t\t\t\t\t\t</mat-form-field>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t\t<!-- #endregion -->\r\n\r\n\t\t\t\t\t<!-- #region Aliases -->\r\n\t\t\t\t\t<div layout=\"row\" flex>\r\n\t\t\t\t\t\t<mat-form-field flex layout-margin appearance=\"outline\">\r\n\t\t\t\t\t\t\t<mat-label>Aliases</mat-label>\r\n\t\t\t\t\t\t\t<mat-chip-list #chipList formControlName=\"aliases\">\r\n\t\t\t\t\t\t\t\t<mat-chip *ngFor=\"let alias of form.controls.aliases.value\" (removed)=\"removeAliases(alias)\">\r\n\t\t\t\t\t\t\t\t\t<span>{{alias}}</span>\r\n\t\t\t\t\t\t\t\t\t<mat-icon matChipRemove>cancel</mat-icon>\r\n\t\t\t\t\t\t\t\t</mat-chip>\r\n\t\t\t\t\t\t\t\t<input type=\"text\" [matChipInputFor]=\"chipList\" [matChipInputSeparatorKeyCodes]=\"separatorKeysCodes\" matChipInputAddOnBlur=\"true\" (matChipInputTokenEnd)=\"addAliases($event)\">\r\n\t\t\t\t\t\t\t</mat-chip-list>\r\n\t\t\t\t\t\t</mat-form-field>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t\t<!-- #endregion -->\r\n\r\n\t\t\t\t\t<!-- #region wrap tag and layout -->\r\n\t\t\t\t\t<div layout=\"row\" flex>\r\n\t\t\t\t\t\t<mat-form-field flex layout-margin appearance=\"outline\" *ngIf=\"type != ContentType.Block\">\r\n\t\t\t\t\t\t\t<mat-label i18n>Wrap</mat-label>\r\n\t\t\t\t\t\t\t<input matInput formControlName=\"wrapTag\">\r\n\t\t\t\t\t\t\t<mat-autocomplete #wrapTagsAutocomplete=\"matAutocomplete\">\r\n\t\t\t\t\t\t\t\t<mat-option *ngFor=\"let option of wrapTags\" [value]=\"option.name\">{{option.name}}</mat-option>\r\n\t\t\t\t\t\t\t</mat-autocomplete>\r\n\t\t\t\t\t\t\t<mat-error *ngFor=\"let errorMessage of form.controls.wrapTag['errorMessages']\">{{errorMessage}}</mat-error>\r\n\t\t\t\t\t\t</mat-form-field>\r\n\r\n\t\t\t\t\t\t<mat-form-field flex layout-margin appearance=\"outline\">\r\n\t\t\t\t\t\t\t<mat-label>Layout</mat-label>\r\n\t\t\t\t\t\t\t<input matInput formControlName=\"layout\">\r\n\t\t\t\t\t\t\t<mat-error *ngFor=\"let errorMessage of form.controls.layout['errorMessages']\">{{errorMessage}}</mat-error>\r\n\t\t\t\t\t\t</mat-form-field>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t\t<!-- #endregion -->\r\n\t\t\t\t\t<!-- *ngIf=\"item.clientId && isEditorInitialzed\" -->\r\n\t\t\t\t\t<!-- #region Body -->\r\n\t\t\t\t\t<div layout-gt-sm=\"row\" layout=\"column\" *ngIf=\"isEditorInitialzed\">\r\n\t\t\t\t\t\t<mat-form-field flex layout-margin>\r\n\t\t\t\t\t\t\t<mat-label i18n>Content</mat-label>\r\n\t\t\t\t\t\t\t<editor #editor formControlName=\"body\" tinyMatFormControl [(init)]=\"editorConfig\" required></editor>\r\n\t\t\t\t\t\t\t<mat-error *ngFor=\"let errorMessage of form.controls.body['errorMessages']\">{{errorMessage}}</mat-error>\r\n\t\t\t\t\t\t</mat-form-field>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t\t<!-- #endregion -->\r\n\r\n\t\t\t\t\t<!-- #region Script -->\r\n\t\t\t\t\t<div layout=\"row\" flex>\r\n\t\t\t\t\t\t<mat-form-field flex layout-margin appearance=\"outline\">\r\n\t\t\t\t\t\t\t<mat-label>Script</mat-label>\r\n\t\t\t\t\t\t\t<textarea matInput autocomplete=\"off\" formControlName=\"script\"></textarea>\r\n\t\t\t\t\t\t\t<mat-error *ngFor=\"let errorMessage of form.controls.script['errorMessages']\">{{errorMessage}}</mat-error>\r\n\t\t\t\t\t\t</mat-form-field>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t\t<!-- #endregion -->\r\n\r\n\t\t\t\t\t<!-- #region Style -->\r\n\t\t\t\t\t<div layout=\"row\" flex>\r\n\t\t\t\t\t\t<mat-form-field flex layout-margin appearance=\"outline\">\r\n\t\t\t\t\t\t\t<mat-label>Style</mat-label>\r\n\t\t\t\t\t\t\t<textarea matInput autocomplete=\"off\" formControlName=\"style\"></textarea>\r\n\t\t\t\t\t\t\t<mat-error *ngFor=\"let errorMessage of form.controls.style['errorMessages']\">{{errorMessage}}</mat-error>\r\n\t\t\t\t\t\t</mat-form-field>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t\t<!-- #endregion -->\r\n\r\n\t\t\t\t\t<!-- #region Show title -->\r\n\t\t\t\t\t<div layout-gt-sm=\"row\" layout=\"column\">\r\n\t\t\t\t\t\t<div layout-margin appearance=\"outline\" class=\"push-top\">\r\n\t\t\t\t\t\t\t<mat-checkbox formControlName=\"showTitle\" i18n>Show title</mat-checkbox>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t\t<!-- #endregion -->\r\n\r\n\t\t\t\t\t<!-- #region Default -->\r\n\t\t\t\t\t<div layout-gt-sm=\"row\" layout=\"column\" *ngIf=\"!isClientAdmin\">\r\n\t\t\t\t\t\t<div layout-margin appearance=\"outline\">\r\n\t\t\t\t\t\t\t<mat-checkbox name=\"default\" formControlName=\"default\" (change)=\"item.clientId = item.default ? null : item.clientId\">Default</mat-checkbox>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t\t<!-- #endregion -->\r\n\r\n\t\t\t\t\t<!-- #region Enabled -->\r\n\t\t\t\t\t<div layout-gt-sm=\"row\" layout=\"column\">\r\n\t\t\t\t\t\t<div layout-margin appearance=\"outline\" class=\"push-bottom\">\r\n\t\t\t\t\t\t\t<mat-checkbox name=\"enabled\" formControlName=\"enabled\" i18n>Active</mat-checkbox>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t\t<!-- #endregion -->\r\n\r\n\t\t\t\t\t<mat-action-row>\r\n\t\t\t\t\t\t<button type=\"submit\" mat-flat-button color=\"primary\" [disabled]=\"isSaving\" i18n>Save</button>\r\n\t\t\t\t\t\t<button type=\"button\" mat-button *ngIf=\"isEditMode\" (click)=\"apply()\" [disabled]=\"isSaving\" i18n>Apply</button>\r\n\t\t\t\t\t\t<button type=\"button\" mat-button (click)=\"back()\" i18n>Cancel</button>\r\n\t\t\t\t\t\t<span flex></span>\r\n\t\t\t\t\t</mat-action-row>\r\n\t\t\t\t</mat-expansion-panel>\r\n\t\t\t\t<!-- #endregion -->\r\n\r\n\t\t\t\t<!-- #region Audit -->\r\n\t\t\t\t<mat-expansion-panel id=\"audit\" *ngIf=\"isEditMode\">\r\n\t\t\t\t\t<mat-expansion-panel-header>\r\n\t\t\t\t\t\t<mat-panel-title>\r\n\t\t\t\t\t\t\t<span i18n>Audit</span>\r\n\t\t\t\t\t\t</mat-panel-title>\r\n\t\t\t\t\t</mat-expansion-panel-header>\r\n\t\t\t\t\t<vd-audit [item]=\"item\"> </vd-audit>\r\n\t\t\t\t\t<mat-action-row>\r\n\t\t\t\t\t\t<button type=\"button\" mat-flat-button color=\"accent\" (click)=\"back()\" i18n>Close</button>\r\n\t\t\t\t\t\t<span flex></span>\r\n\t\t\t\t\t</mat-action-row>\r\n\t\t\t\t</mat-expansion-panel>\r\n\t\t\t\t<!-- #endregion -->\r\n\t\t\t</mat-accordion>\r\n\t\t</vd-layout-card-over>\r\n\t</form>\r\n</vd-layout-nav>","export enum DocumentType {\r\n Document,\r\n Activity,\r\n Issue,\r\n Email\r\n}","import { AuditEntity, Column, Display, prop, required, Table } from \"@messaia/cdk\";\r\nimport { Attachment } from \"@messaia/cdk-base\";\r\nimport { DocumentType } from \"../enums/document-type\";\r\n\r\n@Table({\r\n endpoint: 'document',\r\n editable: false,\r\n downloadable: true\r\n})\r\nexport class Document extends AuditEntity {\r\n @prop()\r\n type: DocumentType;\r\n\r\n @Column({})\r\n @Display($localize`:@@name:Name`)\r\n @required()\r\n name: string;\r\n\r\n @required()\r\n path: string = 'docs';\r\n\r\n @prop()\r\n originalName: string;\r\n\r\n @prop()\r\n relativePath: string;\r\n\r\n @prop()\r\n fullPath: string;\r\n\r\n @prop()\r\n isPublic: boolean;\r\n\r\n @Column({ maxWidth: 100, showGtLg: true })\r\n @Display($localize`:@@type:Type`)\r\n @prop()\r\n extension: string;\r\n\r\n @Column({ maxWidth: 250, showGtLg: true })\r\n @Display($localize`:@@link:Link`)\r\n @prop()\r\n publicLink: string;\r\n\r\n @prop()\r\n size: number;\r\n\r\n @Column({\r\n name: 'client.displayName',\r\n header: $localize`:@@client:Client`,\r\n endpoint: 'client?enabled=true&projection=id,name',\r\n maxWidth: 250,\r\n showGtXl: true\r\n })\r\n @required()\r\n clientId: number;\r\n\r\n @prop()\r\n preserveOriginalName: boolean;\r\n\r\n @prop()\r\n customerId: number;\r\n\r\n @prop()\r\n subject: string;\r\n\r\n @prop()\r\n content: string;\r\n\r\n @prop()\r\n attachments: Attachment[] = [];\r\n\r\n /**\r\n * constructor\r\n * @param init \r\n */\r\n public constructor(init?: Partial<Document>) {\r\n super(init);\r\n Object.assign(this, init);\r\n }\r\n}","import { GenericService } from '@messaia/cdk';\r\nimport { Document } from '../models/document';\r\n\r\nexport abstract class DocumentGenericService<TDocument extends Document> extends GenericService<TDocument> {\r\n\r\n /**\r\n * Constructor\r\n * @param serviceName\r\n */\r\n constructor(serviceName?: string) {\r\n super(serviceName);\r\n }\r\n}","import { Injectable } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { Document } from '../models/document';\r\nimport { DocumentGenericService } from './document.generic-service';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class DocumentService extends DocumentGenericService<Document> {\r\n\r\n /**\r\n * Constructor\r\n */\r\n constructor() {\r\n super('document');\r\n }\r\n\r\n /**\r\n * Sends an email to the customer\r\n * @param id The ID of the document\r\n */\r\n public sendMail(id: number): Observable<any> {\r\n return this.update(`sendMail/${id}`, null);\r\n }\r\n}","import { HttpEventType, HttpResponse } from '@angular/common/http';\r\nimport { ChangeDetectorRef, Component, Inject } from '@angular/core';\r\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\r\nimport { ActivatedRoute } from '@angular/router';\r\nimport { AuthHelper, FileService, GenericReactiveFormComponent, SaveAction } from '@messaia/cdk';\r\nimport { Document } from '../../models/document';\r\nimport { DocumentService } from '../../services/document.service`';\r\n\r\n@Component({\r\n\tselector: 'document-dialog',\r\n\ttemplateUrl: 'document-dialog.component.html'\r\n})\r\nexport class DocumentDialogComponent extends GenericReactiveFormComponent<Document, DocumentService> {\r\n\t/**\r\n\t * Upload status\r\n\t */\r\n\tpublic isUploading: boolean;\r\n\r\n\t/**\r\n\t * Upload progress\r\n\t */\r\n\tpublic uploadProgress: number = 0;\r\n\r\n\t/**\r\n\t * Used to disable some properties for client manager\r\n\t */\r\n\tpublic isClientManager = AuthHelper.hasRole('ClientManager');\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor(\r\n\t\tprotected documentService: DocumentService,\r\n\t\tprotected fileService: FileService,\r\n\t\tprotected route: ActivatedRoute,\r\n\t\tprotected changeDetectorRef: ChangeDetectorRef,\r\n\t\tpublic dialogRef: MatDialogRef<DocumentDialogComponent>,\r\n\t\t@Inject(MAT_DIALOG_DATA) public item: Document = new Document()\r\n\t) {\r\n\t\tsuper(Document, documentService, route, changeDetectorRef)\r\n\t}\r\n\r\n\t/**\r\n\t * Uploads a new document\r\n\t */\r\n\tpublic upload(file: File): void {\r\n\t\tif (file != null && this.item && this.item.clientId) {\r\n\t\t\tthis.isUploading = true;\r\n\t\t\tthis.fileService.upload(file, `upload`, {\r\n\t\t\t\tclientId: this.form?.value?.clientId,\r\n\t\t\t\tpath: this.form?.value?.path,\r\n\t\t\t\tisPublic: true,\r\n\t\t\t\tpreserveOriginalName: this.form?.value?.preserveOriginalName\r\n\t\t\t}).subscribe(event => {\r\n\t\t\t\tif (event.type === HttpEventType.UploadProgress) {\r\n\r\n\t\t\t\t\t/* Calculate the progress percentage */\r\n\t\t\t\t\tconst percentDone = Math.round(100 * event.loaded / event.total);\r\n\r\n\t\t\t\t\t/* Pass the percentage into the progress-stream */\r\n\t\t\t\t\tthis.uploadProgress = percentDone;\r\n\t\t\t\t} else if (event instanceof HttpResponse) {\r\n\t\t\t\t\tthis.form.patchValue(<Document>event.body);\r\n\t\t\t\t\tthis.isUploading = false;\r\n\t\t\t\t}\r\n\t\t\t}, _ => this.isUploading = true);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Event emitted after data submition\r\n\t * @param action \r\n\t * @param response \r\n\t */\r\n\tprotected onAfterSubmit(action: SaveAction = SaveAction.SaveAndClose, response: any = null): void {\r\n\t\tthis.isSaving = false;\r\n\t\tthis.cancel();\r\n\t}\r\n\r\n\t/**\r\n\t * Closes the dialog\r\n\t */\r\n\tpublic cancel(): void {\r\n\t\tthis.dialogRef.close();\r\n\t}\r\n}","<div mat-dialog-title class=\"mat-title\" i18n>New document</div>\r\n<form *ngIf=\"form\" [formGroup]=\"form\" (ngSubmit)=\"save()\">\r\n\t<div>\r\n\t\t<!-- #region Client-->\r\n\t\t<div layout-gt-sm=\"row\" layout=\"column\" *ngIf=\"!isClientAdmin\">\r\n\t\t\t<mat-form-field flex layout-margin appearance=\"outline\">\r\n\t\t\t\t<mat-label i18n>Client</mat-label>\r\n\t\t\t\t<vd-select formControlName=\"clientId\" endpoint=\"client?enabled=true\" projection=\"id,displayName\" text=\"displayName\" layout=\"column\" flex></vd-select>\r\n\t\t\t\t<mat-error *ngFor=\"let errorMessage of form.controls.clientId['errorMessages']\">{{errorMessage}}</mat-error>\r\n\t\t\t</mat-form-field>\r\n\t\t</div>\r\n\t\t<!-- #endregion -->\r\n\r\n\t\t<!-- #region Path -->\r\n\t\t<div layout-gt-sm=\"row\" layout=\"column\">\r\n\t\t\t<mat-form-field flex layout-margin appearance=\"outline\">\r\n\t\t\t\t<mat-label i18n>Type</mat-label>\r\n\t\t\t\t<mat-select formControlName=\"path\">\r\n\t\t\t\t\t<mat-option value=\"docs\"><span i18n>Document</span></mat-option>\r\n\t\t\t\t\t<mat-option value=\"images\"><span i18n>Image</span></mat-option>\r\n\t\t\t\t\t<mat-option value=\"videos\"><span>Video</span></mat-option>\r\n\t\t\t\t</mat-select>\r\n\t\t\t\t<mat-error *ngFor=\"let errorMessage of form.controls.path['errorMessages']\">{{errorMessage}}</mat-error>\r\n\t\t\t</mat-form-field>\r\n\t\t</div>\r\n\t\t<!-- #endregion-->\r\n\r\n\t\t<!-- #region PreserveOriginalName -->\r\n\t\t<div layout-gt-sm=\"row\" layout=\"column\" *ngIf=\"!isClientAdmin\">\r\n\t\t\t<div layout-margin appearance=\"outline\">\r\n\t\t\t\t<mat-checkbox name=\"preserveOriginalName\" formControlName=\"preserveOriginalName\" (change)=\"item.name = ''\" i18n>Preserve original name</mat-checkbox>\r\n\t\t\t\t<br />\r\n\t\t\t\t<mat-hint *ngIf=\"form?.value?.preserveOriginalName\" class=\"tc-red-500\" i18n>Warning: old files will be overridden</mat-hint>\r\n\t\t\t</div>\r\n\t\t</div>\r\n\t\t<!-- #endregion -->\r\n\r\n\t\t<!-- #region File -->\r\n\t\t<div layout-gt-sm=\"row\" layout=\"column\">\r\n\t\t\t<mat-form-field flex layout-margin appearance=\"outline\">\r\n\t\t\t\t<mat-label i18n>File</mat-label>\r\n\t\t\t\t<div vd-file-input formControlName=\"name\" (select)=\"upload($event)\" required></div>\r\n\t\t\t</mat-form-field>\r\n\t\t</div>\r\n\t\t<!-- #endregion -->\r\n\t</div>\r\n\t<div mat-dialog-actions class=\"pad-top\">\r\n\t\t<button type=\"submit\" mat-flat-button [disabled]=\"form. isSaving\" color=\"primary\" i18n>Save</button>\r\n\t\t<button type=\"button\" mat-button (click)=\"cancel()\" i18n>Cancel</button>\r\n\t</div>\r\n</form>","export enum TemplateType {\r\n Email,\r\n Pdf\r\n}","import { AuditEntity, Column, Display, prop, required, Table } from \"@messaia/cdk\";\r\nimport { Attachment } from \"@messaia/cdk-base\";\r\nimport { TemplateType } from \"../enums/template-type\";\r\n\r\n@Table({\r\n\tendpoint: 'template',\r\n\tduplicable: true\r\n})\r\nexport class Template extends AuditEntity {\r\n\t@Display($localize`:@@type:Type`)\r\n\t@required()\r\n\ttype: TemplateType = TemplateType.Email;\r\n\r\n\t@Column()\r\n\t@Display($localize`:@@name:Name`)\r\n\t@required()\r\n\tname: string;\r\n\r\n\t@Column({ maxWidth: 250, showGtLg: true })\r\n\t@Display($localize`:@@subject:Subject`)\r\n\t@prop()\r\n\tsubject: string;\r\n\r\n\t@Column({ maxWidth: 150, showGtLg: true })\r\n\t@required()\r\n\t@Display('Key')\r\n\tkey: string;\r\n\r\n\t@Display($localize`:@@notice:Notice`)\r\n\t@prop()\r\n\tnotice: string;\r\n\r\n\t@Display($localize`:@@email:Email`)\r\n\t@prop()\r\n\temail: string;\r\n\r\n\t@required()\r\n\tcontent: string;\r\n\r\n\t@prop()\r\n\tdummyData: string;\r\n\r\n\t@Column({\r\n\t\tname: 'client.displayName',\r\n\t\tendpoint: 'client?enabled=true&projection=id,name',\r\n\t\tmaxWidth: 250,\r\n\t\tshowGtXl: true\r\n\t})\r\n\t@Display($localize`:@@client:Client`)\r\n\t@prop()\r\n\tclientId: number;\r\n\r\n\t@Column({ event: 'toggle' })\r\n\t@Display($localize`:@@enabled:Enabled`)\r\n\t@prop()\r\n\tenabled: true;\r\n\r\n\t@prop()\r\n\tattachments: Attachment[] = [];\r\n}","import { TemplateType } from \"../enums/template-type\";\r\n\r\nexport class TemplatePreview {\r\n type: TemplateType\r\n endpoint: string;\r\n displayName: string;\r\n entityName: string;\r\n entityId: number | null;\r\n templateId: number;\r\n email: string;\r\n subject: string;\r\n content: string;\r\n\r\n /**\r\n * constructor\r\n * @param init \r\n */\r\n public constructor(init?: Partial<TemplatePreview>) {\r\n Object.assign(this, init);\r\n }\r\n}","import { Injectable } from '@angular/core';\r\nimport { GenericService } from '@messaia/cdk';\r\nimport { Template } from '../models/template';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class TemplateService extends GenericService<Template> {\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper('template');\r\n\t}\r\n}","import { Injectable } from '@angular/core';\r\nimport { GenericService } from '@messaia/cdk';\r\nimport { TemplatePreview } from '../models/template-preview';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class TemplatePreviewService extends GenericService<TemplatePreview> {\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper('templatePreview');\r\n\t}\r\n}","import { ChangeDetectorRef, Component, Inject } from '@angular/core';\r\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\r\nimport { ActivatedRoute } from '@angular/router';\r\nimport { BaseComponent } from '@messaia/cdk';\r\nimport { saveAs } from 'file-saver';\r\nimport { TemplateType } from '../../enums/template-type';\r\nimport { TemplatePreview } from '../../models/template-preview';\r\nimport { TemplatePreviewService } from '../../services/template-preview.service';\r\n\r\n@Component({\r\n selector: 'app-template-preview',\r\n templateUrl: 'template-preview-dialog.component.html',\r\n styleUrls: ['template-preview-dialog.component.scss']\r\n})\r\nexport class TemplatePreviewDialogComponent extends BaseComponent {\r\n\r\n /**\r\n * TemplateType\r\n */\r\n public TemplateType: typeof TemplateType = TemplateType;\r\n\r\n /**\r\n * Pdf blob\r\n */\r\n public pdfBlob: Blob;\r\n\r\n /**\r\n * PDF source\r\n */\r\n public pdfSrc: string | ArrayBuffer;\r\n\r\n /**\r\n * Pdf zoom\r\n */\r\n public zoom = 0.98;\r\n\r\n /**\r\n * Pdf zoom scale\r\n */\r\n public zoomScale = 'page-width';\r\n\r\n /**\r\n * Constructor\r\n * @param dialogRef \r\n * @param data \r\n */\r\n constructor(\r\n protected service: TemplatePreviewService,\r\n public dialogRef: MatDialogRef<TemplatePreviewDialogComponent>,\r\n @Inject(MAT_DIALOG_DATA) public data: TemplatePreview,\r\n protected route: ActivatedRoute,\r\n protected changeDetectorRef: ChangeDetectorRef\r\n ) {\r\n super(route, changeDetectorRef)\r\n this.data.email = localStorage.getItem('templatePreviewEmail') ?? '';\r\n }\r\n\r\n /**\r\n * Lifecycle hook that is called after data-bound properties\r\n * of a directive are initialized.\r\n */\r\n ngOnInit(): void {\r\n this.isLoading = true;\r\n if (this.data.type == TemplateType.Pdf) {\r\n this.service.create(this.data, null, { responseType: 'arraybuffer' }).subscribe({\r\n next: (x) => {\r\n this.isLoading = false;\r\n this.pdfBlob = new Blob([<any>x], { type: 'application/pdf' });\r\n this.pdfSrc = URL.createObjectURL(this.pdfBlob);\r\n },\r\n error: () => this.isLoading = false\r\n });\r\n } else {\r\n this.service.create(this.data).subscribe({\r\n next: (x) => {\r\n this.isLoading = false;\r\n Object.assign(this.data, x);\r\n },\r\n error: () => this.isLoading = false\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Sends a mail\r\n */\r\n public sendMail() {\r\n this.service.create(this.data, '/sendMail').subscribe({\r\n next: (x) => {\r\n this.isLoading = false;\r\n localStorage.setItem('templatePreviewEmail', this.data.email);\r\n this.snackBarService.open($localize`:@@snackbar.send.success:Data sent successfully.`, null, {\r\n duration: 3000,\r\n panelClass: ['primary']\r\n });\r\n },\r\n error: () => this.isLoading = false\r\n });\r\n }\r\n\r\n /**\r\n * Downloads the pdf\r\n */\r\n public download(): void {\r\n saveAs(this.pdfBlob, \"Pdf.pdf\");\r\n }\r\n\r\n /**\r\n * Zooms in the pdf\r\n */\r\n public zoomIn(): void {\r\n this.zoom += 0.1;\r\n }\r\n\r\n /**\r\n * Zooms out the pdf\r\n */\r\n public zoomOut(): void {\r\n this.zoom += -0.1;\r\n }\r\n\r\n /**\r\n * Closes the dialog\r\n */\r\n public cancel(): void {\r\n this.dialogRef.close();\r\n }\r\n}","<div mat-dialog-title class=\"mat-title\">\r\n <div layout=\"row\" flex>\r\n <span i18n=\"@@templatePreview\">Template preview</span>\r\n <span flex></span>\r\n <div *ngIf=\"data.type == TemplateType.Pdf && pdfSrc\">\r\n <a mat-icon-button (click)=\"download()\">\r\n <mat-icon>download</mat-icon>\r\n </a>\r\n <a mat-icon-button (click)=\"zoomIn()\">\r\n <mat-icon>zoom_in</mat-icon>\r\n </a>\r\n <a mat-icon-button (click)=\"zoomOut()\">\r\n <mat-icon>zoom_out</mat-icon>\r\n </a>\r\n </div>\r\n </div>\r\n</div>\r\n<form #form=\"ngForm\" novalidate>\r\n <!-- #region Entity -->\r\n <div layout=\"row\" flex *ngIf=\"data.endpoint\">\r\n <mat-form-field flex layout-margin>\r\n <mat-label>{{data.entityName}}</mat-label>\r\n <vd-chips [(ngModel)]=\"data.entityId\" [endpoint]=\"data.endpoint\" [params]=\"{sortBy: 'id'}\" text=\"displayName\" name=\"entityId\" #entityId=\"ngModel\" (selected)=\"compile($event)\" (initSelect)=\"compile($event)\" [placeholder]=\"data.entityName\" required flex>\r\n <ng-template vd-chip let-entity=\"chip\">\r\n <span>{{entity[data.displayName]}}</span>\r\n </ng-template>\r\n <ng-template vd-autocomplete-option let-entity=\"option\">\r\n <span>{{entity[data.displayName]}}</span>\r\n </ng-template>\r\n </vd-chips>\r\n <mat-error *ngIf=\"entityId.errors?.required\"><span>{{data.entityName}}</span><span i18n> is required</span></mat-error>\r\n </mat-form-field>\r\n </div>\r\n <!-- #endregion -->\r\n\r\n <div layout=\"column\" layout-gt-sm=\"row\" class=\"push-bottom\" flex *ngIf=\"isLoading\">\r\n <div flex layout-margin>\r\n <div class=\"push-bottom-sm\" i18n=\"@@pleaseWait\">Please Wait...</div>\r\n <mat-progress-bar mode=\"indeterminate\"></mat-progress-bar>\r\n </div>\r\n </div>\r\n\r\n <!-- #region PDF Content -->\r\n <mat-card>\r\n <pdf-viewer [src]=\"pdfSrc\" *ngIf=\"data.type == TemplateType.Pdf && pdfSrc\" [render-text]=\"true\" [zoom]=\"zoom\" [zoom-scale]=\"zoomScale\" [show-borders]=\"true\" [original-size]=\"false\" [autoresize]=\"true\"></pdf-viewer>\r\n </mat-card>\r\n <!-- #region Content -->\r\n\r\n <div *ngIf=\"data.type != TemplateType.Pdf\">\r\n <!-- #region Content -->\r\n <div layout=\"row\" layout-margin flex class=\"content\">\r\n <div *ngIf=\"data.content\" [innerHtml]=\"data.content\"></div>\r\n </div>\r\n <!-- #endregion -->\r\n\r\n <!-- #region Email-->\r\n <div layout-gt-sm=\"row\" layout=\"column\" class=\"push-top pad-top\">\r\n <mat-form-field flex layout-margin>\r\n <mat-label i18n>Email</mat-label>\r\n <input matInput type=\"email\" name=\"email\" [(ngModel)]=\"data.email\" #email=\"ngModel\" required email placeholder=\"Email\" i18n-placeholder>\r\n <button mat-icon-button matSuffix (click)=\"sendMail()\" [disabled]=\"!email.valid\">\r\n <mat-icon>send</mat-icon>\r\n </button>\r\n <mat-error *ngIf=\"email.errors?.required\"><span i18n>Email</span><span i18n> is required</span></mat-error>\r\n <mat-error *ngIf=\"!email.errors?.required && email.errors?.email\"><span i18n>Email</span><span i18n> is invalid</span></mat-error>\r\n <mat-error *ngIf=\"email.errors?.notUnique\"><span i18n>Email</span><span i18n> already in use</span></mat-error>\r\n </mat-form-field>\r\n </div>\r\n <!-- #endregion -->\r\n </div>\r\n\r\n <div mat-dialog-actions class=\"pad-top\">\r\n <button type=\"button\" mat-flat-button color=\"primary\" (click)=\"cancel()\" i18n>Close</button>\r\n </div>\r\n</form>","import { HttpEventType, HttpResponse } from '@angular/common/http';\r\nimport { ChangeDetectorRef, Component, ViewEncapsulation } from '@angular/core';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport { ActivatedRoute } from '@angular/router';\r\nimport { AuthHelper, FileService, GenericReactiveFormComponent } from '@messaia/cdk';\r\nimport { Attachment } from '@messaia/cdk-base';\r\nimport 'codemirror/addon/edit/closetag';\r\nimport 'codemirror/addon/edit/matchbrackets';\r\nimport 'codemirror/addon/selection/active-line';\r\nimport 'codemirror/mode/htmlmixed/htmlmixed';\r\nimport 'codemirror/mode/javascript/javascript';\r\nimport { saveAs } from 'file-saver';\r\nimport { TemplateType } from '../../enums/template-type';\r\nimport { Template } from '../../models/template';\r\nimport { TemplatePreview } from '../../models/template-preview';\r\nimport { TemplateService } from '../../services/template.service';\r\nimport { TemplatePreviewDialogComponent } from '../template-preview-dialog/template-preview-dialog.component';\r\n\r\n@Component({\r\n\tselector: 'app-template-form',\r\n\ttemplateUrl: './template-form.component.html',\r\n\tstyleUrls: ['./template-form.component.scss'],\r\n\tencapsulation: ViewEncapsulation.None\r\n})\r\nexport class TemplateFormComponent extends GenericReactiveFormComponent<Template, TemplateService> {\r\n\r\n\t/**\r\n\t * Template type\r\n\t */\r\n\tpublic TemplateType: typeof TemplateType = TemplateType;\r\n\r\n\t/**\r\n\t * Used to disable some properties for client manager\r\n\t */\r\n\tpublic isClientAdmin = AuthHelper.hasRole('ClientAdministrator') || AuthHelper.hasRole('ClientManager');\r\n\r\n\t/**\r\n\t * Used to disable some properties for client manager\r\n\t */\r\n\tpublic isClientManager = AuthHelper.hasRole('ClientManager');\r\n\r\n\t/**\r\n\t * Gets the attachments control\r\n\t */\r\n\tget attachmentsControl() { return this.form.controls.attachments; }\r\n\r\n\t/**\r\n\t * Editor options\r\n\t */\r\n\tpublic editorOptions: any = {\r\n\t\tlineNumbers: true,\r\n\t\ttheme: 'material',\r\n\t\tautoCloseTags: true,\r\n\t\tstyleActiveLine: true,\r\n\t\tmode: 'text/html',\r\n\t\tprofile: 'xhtml'\r\n\t};\r\n\r\n\t/**\r\n\t * Editor options\r\n\t */\r\n\tpublic jsonEditorOptions: any = {\r\n\t\tlineNumbers: true,\r\n\t\ttheme: 'material',\r\n\t\tautoCloseTags: true,\r\n\t\tstyleActiveLine: true,\r\n\t\tmode: {\r\n\t\t\tname: \"javascript\",\r\n\t\t\tjson: true,\r\n\t\t\tstatementIndent: 2\r\n\t\t},\r\n\t\tprofile: 'xhtml',\r\n\t\tlineWrapping: true,\r\n\t\tindentWithTabs: false,\r\n\t\ttabSize: 2\r\n\t}\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor(\r\n\t\tprotected service: TemplateService,\r\n\t\tprotected fileService: FileService,\r\n\t\tprotected dialog: MatDialog,\r\n\t\tprotected route: ActivatedRoute,\r\n\t\tprotected changeDetectorRef: ChangeDetectorRef,\r\n\t\t// @Optional() protected settings: CmsSettings\r\n\t) {\r\n\t\tsuper(Template, service, route, changeDetectorRef)\r\n\t}\r\n\r\n\t/**\r\n\t * Removes a attachment\r\n\t * @param attachment \r\n\t */\r\n\tpublic removeAttachment(attachment: Attachment): void {\r\n\t\tif (Array.isArray(this.item.attachments)) {\r\n\t\t\tvar index = this.attachmentsControl.value.indexOf(attachment, 0);\r\n\t\t\tif (index > -1) {\r\n\t\t\t\tthis.dialogService.openConfirm({\r\n\t\t\t\t\tmessage: 'Möchten Sie diesen Anhang wirklich löschen?',\r\n\t\t\t\t\ttitle: 'Löschen bestätigen',\r\n\t\t\t\t\tcancelButton: $localize`:@@cancel:Cancel`,\r\n\t\t\t\t\tacceptButton: $localize`:@@yes:Yes`,\r\n\t\t\t\t}).afterClosed().subscribe((accept: boolean) => {\r\n\t\t\t\t\tif (accept) {\r\n\t\t\t\t\t\tthis.attachmentsControl.value.splice(index, 1);\r\n\t\t\t\t\t\tthis.attachmentsControl.updateValueAndValidity();\r\n\t\t\t\t\t\tthis.attachmentsControl.markAsDirty();\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Uploads a attachment file\r\n\t * @param file \r\n\t */\r\n\tpublic uploadAttachment(file: File): void {\r\n\t\tif (file != null) {\r\n\t\t\tthis.fileService.upload(file, `upload`, { clientId: this.item.clientId, path: `${this.item.clientId ? '' : 'common/'}docs` }).subscribe(event => {\r\n\t\t\t\tif (event.type === HttpEventType.UploadProgress) {\r\n\r\n\t\t\t\t\t/* Calculate the progress percentage */\r\n\t\t\t\t\tconst percentDone = Math.round(100 * event.loaded / event.total);\r\n\r\n\t\t\t\t\t/* Pass the percentage into the progress-stream */\r\n\t\t\t\t\tconsole.info(percentDone);\r\n\t\t\t\t} else if (event instanceof HttpResponse) {\r\n\t\t\t\t\t/* Add our attachments */\r\n\t\t\t\t\tthis.attachmentsControl.setValue([...this.attachmentsControl.value, <Attachment>event.body]);\r\n\t\t\t\t\tthis.attachmentsControl.updateValueAndValidity();\r\n\t\t\t\t\tthis.attachmentsControl.markAsDirty();\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Downloads a attachment\r\n\t * @param attachment \r\n\t */\r\n\tpublic downloadAttachment(attachment: Attachment): void {\r\n\t\tif (attachment.id) {\r\n\t\t\tthis.service.download(`downloadAttachment/${attachment.id}`).subscribe(x => {\r\n\t\t\t\tsaveAs(new Blob([x.data], { type: '' }), x.filename);\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Shows template preview\r\n\t */\r\n\tpublic showPreview(): void {\r\n\t\tthis.dialog.open(TemplatePreviewDialogComponent, {\r\n\t\t\twidth: this.item.type == TemplateType.Pdf ? '1020px' : '920px',\r\n\t\t\tdata: new TemplatePreview({\r\n\t\t\t\ttemplateId: this.item.id,\r\n\t\t\t\ttype: this.item.type\r\n\t\t\t}),\r\n\t\t\tpanelClass: ['dialog-full-screen']\r\n\t\t}).afterClosed().subscribe();\r\n\t}\r\n\r\n\t/**\r\n\t * Creates a new instance of the Template\r\n\t */\r\n\tprotected newInstance(): Template {\r\n\t\tlet item = new Template();\r\n\r\n\t\t/* Get clientId */\r\n\t\tif (!this.isEditMode && this.isClientManager) {\r\n\t\t\t// this.clientManagerService.getClientId().subscribe(x => item.clientId = x);\r\n\t\t}\r\n\r\n\t\treturn item;\r\n\t}\r\n}","<vd-layout-nav color=\"primary\" [backNavigationRoute]=\"listRoute\" toolbarTitle=\"Template\" i18n-toolbarTitle [editMode]=\"isEditMode\" [menuItems]=\"toolbarMenuItems\" (reload)=\"reloadPage()\">\r\n\t<form *ngIf=\"form\" [formGroup]=\"form\" novalidate (ngSubmit)=\"save()\">\r\n\t\t<vd-layout-card-over class=\"accordion\" cardWidth=\"70\" color=\"primary\" flex>\r\n\t\t\t<mat-accordion [multi]=\"!isEditMode\">\r\n\t\t\t\t<!-- #region Details -->\r\n\t\t\t\t<mat-expansion-panel expanded=\"true\" id=\"details\">\r\n\t\t\t\t\t<mat-expansion-panel-header>\r\n\t\t\t\t\t\t<mat-panel-title i18n>Details</mat-panel-title>\r\n\t\t\t\t\t</mat-expansion-panel-header>\r\n\r\n\t\t\t\t\t<!-- #region Client-->\r\n\t\t\t\t\t<div layout-gt-sm=\"row\" layout=\"column\" *ngIf=\"settings?.multitenantable && !isClientAdmin\">\r\n\t\t\t\t\t\t<mat-form-field flex layout-margin appearance=\"outline\">\r\n\t\t\t\t\t\t\t<mat-label i18n>Client</mat-label>\r\n\t\t\t\t\t\t\t<vd-select formControlName=\"clientId\" endpoint=\"client?enabled=true\" layout=\"column\" flex></vd-select>\r\n\t\t\t\t\t\t\t<mat-error *ngFor=\"let errorMessage of form.controls.clientId['errorMessages']\">{{errorMessage}}</mat-error>\r\n\t\t\t\t\t\t\t<mat-hint i18n>If empty this template will be used for all projects</mat-hint>\r\n\t\t\t\t\t\t</mat-form-field>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t\t<!-- #endregion -->\r\n\r\n\t\t\t\t\t<!-- #region Type-->\r\n\t\t\t\t\t<div layout-gt-sm=\"row\" layout=\"column\">\r\n\t\t\t\t\t\t<mat-form-field flex layout-margin appearance=\"outline\">\r\n\t\t\t\t\t\t\t<mat-label i18n>Type</mat-label>\r\n\t\t\t\t\t\t\t<vd-select formControlName=\"type\" [enum]=\"TemplateType\" layout=\"column\" flex></vd-select>\r\n\t\t\t\t\t\t\t<mat-error *ngFor=\"let errorMessage of form.controls.type['errorMessages']\">{{errorMessage}}</mat-error>\r\n\t\t\t\t\t\t</mat-form-field>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t\t<!-- #endregion -->\r\n\r\n\t\t\t\t\t<!-- #region Name & Subject -->\r\n\t\t\t\t\t<div layout=\"row\" flex>\r\n\t\t\t\t\t\t<!-- #region Name -->\r\n\t\t\t\t\t\t<mat-form-field flex layout-margin appearance=\"outline\">\r\n\t\t\t\t\t\t\t<mat-label i18n>Name</mat-label>\r\n\t\t\t\t\t\t\t<input matInput formControlName=\"name\">\r\n\t\t\t\t\t\t\t<mat-error *ngFor=\"let errorMessage of form.controls.name['errorMessages']\">{{errorMessage}}</mat-error>\r\n\t\t\t\t\t\t</mat-form-field>\r\n\t\t\t\t\t\t<!-- #endregion -->\r\n\r\n\t\t\t\t\t\t<!-- #region Key -->\r\n\t\t\t\t\t\t<mat-form-field flex layout-margin appearance=\"outline\">\r\n\t\t\t\t\t\t\t<mat-label i18n>Key</mat-label>\r\n\t\t\t\t\t\t\t<input matInput formControlName=\"key\">\r\n\t\t\t\t\t\t\t<mat-error *ngFor=\"let errorMessage of form.controls.key['errorMessages']\">{{errorMessage}}</mat-error>\r\n\t\t\t\t\t\t</mat-form-field>\r\n\t\t\t\t\t\t<!-- #endregion -->\r\n\t\t\t\t\t</div>\r\n\t\t\t\t\t<!-- #endregion -->\r\n\r\n\t\t\t\t\t<!-- #region Subject -->\r\n\t\t\t\t\t<div layout=\"row\" flex>\r\n\t\t\t\t\t\t<mat-form-field flex layout-margin appearance=\"outline\">\r\n\t\t\t\t\t\t\t<mat-label i18n>Subject</mat-label>\r\n\t\t\t\t\t\t\t<input matInput formControlName=\"subject\">\r\n\t\t\t\t\t\t\t<mat-error *ngFor=\"let errorMessage of form.controls.subject['errorMessages']\">{{errorMessage}}</mat-error>\r\n\t\t\t\t\t\t</mat-form-field>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t\t<!-- #endregion -->\r\n\r\n\t\t\t\t\t<!-- #region Attachments -->\r\n\t\t\t\t\t<div layout=\"row\" flex>\r\n\t\t\t\t\t\t<mat-form-field flex layout-margin>\r\n\t\t\t\t\t\t\t<mat-label i18n>Attachments</mat-label>\r\n\t\t\t\t\t\t\t<mat-chip-list #chipList formControlName=\"attachments\">\r\n\t\t\t\t\t\t\t\t<mat-chip *ngFor=\"let attachment of form.controls.attachments.value\" [selectable]=\"true\" color=\"primary\" removable=\"true\" (removed)=\"removeAttachment(attachment)\" (click)=\"downloadAttachment(attachment)\" selected>\r\n\t\t\t\t\t\t\t\t\t{{attachment.originalName}}\r\n\t\t\t\t\t\t\t\t\t<mat-icon matChipRemove>cancel</mat-icon>\r\n\t\t\t\t\t\t\t\t</mat-chip>\r\n\t\t\t\t\t\t\t\t<input placeholder=\"Attachments\" i18n-placeholder [matChipInputFor]=\"chipList\" [matChipInputAddOnBlur]=\"false\" (click)=\"fileInput.click()\" readonly>\r\n\t\t\t\t\t\t\t\t<mat-icon matSuffix (click)=\"fileInput.click()\">publish</mat-icon>\r\n\t\t\t\t\t\t\t\t<input hidden type=\"file\" accept=\"{{allowedExtensions}}\" #fileInput (change)=\"uploadAttachment($event.target.files[0])\" />\r\n\t\t\t\t\t\t\t</mat-chip-list>\r\n\t\t\t\t\t\t</mat-form-field>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t\t<!-- #endregion -->\r\n\r\n\t\t\t\t\t<!-- #region Notice -->\r\n\t\t\t\t\t<div layout=\"row\" flex>\r\n\t\t\t\t\t\t<mat-form-field flex layout-margin appearance=\"outline\">\r\n\t\t\t\t\t\t\t<mat-label i18n>Notice</mat-label>\r\n\t\t\t\t\t\t\t<textarea matInput autocomplete=\"off\" formControlName=\"notice\"></textarea>\r\n\t\t\t\t\t\t\t<mat-error *ngFor=\"let errorMessage of form.controls.notice['errorMessages']\">{{errorMessage}}</mat-error>\r\n\t\t\t\t\t\t</mat-form-field>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t\t<!-- #endregion -->\r\n\r\n\t\t\t\t\t<!-- #region Enabled-->\r\n\t\t\t\t\t<div layout-gt-sm=\"row\" layout=\"column\">\r\n\t\t\t\t\t\t<div layout-margin appearance=\"outline\" class=\"push-top push-bottom\">\r\n\t\t\t\t\t\t\t<mat-checkbox formControlName=\"enabled\" i18n>Activ</mat-checkbox>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t\t<!-- #endregion -->\r\n\r\n\t\t\t\t\t<mat-action-row>\r\n\t\t\t\t\t\t<button type=\"submit\" mat-flat-button color=\"primary\" [disabled]=\"isSaving\" i18n>Save</button>\r\n\t\t\t\t\t\t<button type=\"button\" mat-button (click)=\"apply()\" *ngIf=\"isEditMode\" [disabled]=\"isSaving\" i18n>Apply</button>\r\n\t\t\t\t\t\t<button type=\"button\" mat-button (click)=\"back()\" i18n>Cancel</button>\r\n\t\t\t\t\t\t<span flex></span>\r\n\t\t\t\t\t</mat-action-row>\r\n\t\t\t\t</mat-expansion-panel>\r\n\t\t\t\t<!-- #endregion -->\r\n\r\n\t\t\t\t<!-- #region Content -->\r\n\t\t\t\t<mat-expansion-panel id=\"content\">\r\n\t\t\t\t\t<mat-expansion-panel-header>\r\n\t\t\t\t\t\t<mat-panel-title>\r\n\t\t\t\t\t\t\t<span i18n>Content</span>\r\n\t\t\t\t\t\t</mat-panel-title>\r\n\t\t\t\t\t</mat-expansion-panel-header>\r\n\t\t\t\t\t<div layout-margin>\r\n\t\t\t\t\t\t<ngx-codemirror formControlName=\"content\" rows=\"160\" [options]=\"editorOptions\"></ngx-codemirror>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t\t<mat-action-row>\r\n\t\t\t\t\t\t<button type=\"submit\" mat-flat-button color=\"primary\" [disabled]=\"isSaving\" i18n>Save</button>\r\n\t\t\t\t\t\t<button type=\"button\" mat-button (click)=\"apply()\" *ngIf=\"isEditMode\" [disabled]=\"isSaving\" i18n>Apply</button>\r\n\t\t\t\t\t\t<button type=\"button\" mat-button (click)=\"showPreview()\" *ngIf=\"isEditMode\" [disabled]=\"isSaving || !form.pristine\" i18n=\"@@preview\">Preview</button>\r\n\t\t\t\t\t\t<button type=\"button\" mat-button (click)=\"back()\" i18n>Cancel</button>\r\n\t\t\t\t\t\t<span flex></span>\r\n\t\t\t\t\t</mat-action-row>\r\n\t\t\t\t</mat-expansion-panel>\r\n\t\t\t\t<!-- #endregion -->\r\n\r\n\t\t\t\t<!-- #region Content -->\r\n\t\t\t\t<mat-expansion-panel id=\"testData\">\r\n\t\t\t\t\t<mat-expansion-panel-header>\r\n\t\t\t\t\t\t<mat-panel-title>\r\n\t\t\t\t\t\t\t<span i18n=\"@@testData\">Test Data</span>\r\n\t\t\t\t\t\t</mat-panel-title>\r\n\t\t\t\t\t</mat-expansion-panel-header>\r\n\t\t\t\t\t<div layout-margin>\r\n\t\t\t\t\t\t<ngx-codemirror formControlName=\"dummyData\" rows=\"120\" [options]=\"jsonEditorOptions\"></ngx-codemirror>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t\t<mat-action-row>\r\n\t\t\t\t\t\t<button type=\"submit\" mat-flat-button color=\"primary\" [disabled]=\"isSaving\" i18n>Save</button>\r\n\t\t\t\t\t\t<button type=\"button\" mat-button (click)=\"apply()\" *ngIf=\"isEditMode\" [disabled]=\"isSaving\" i18n>Apply</button>\r\n\t\t\t\t\t\t<button type=\"button\" mat-button (click)=\"showPreview()\" *ngIf=\"isEditMode\" [disabled]=\"isSaving || !form.pristine\" i18n=\"@@preview\">Preview</button>\r\n\t\t\t\t\t\t<button type=\"button\" mat-button (click)=\"back()\" i18n>Cancel</button>\r\n\t\t\t\t\t\t<span flex></span>\r\n\t\t\t\t\t</mat-action-row>\r\n\t\t\t\t</mat-expansion-panel>\r\n\t\t\t\t<!-- #endregion -->\r\n\r\n\t\t\t\t<!-- #region Audit -->\r\n\t\t\t\t<mat-expansion-panel id=\"audit\" *ngIf=\"isEditMode\">\r\n\t\t\t\t\t<mat-expansion-panel-header>\r\n\t\t\t\t\t\t<mat-panel-title>\r\n\t\t\t\t\t\t\t<span i18n>Audit</span>\r\n\t\t\t\t\t\t</mat-panel-title>\r\n\t\t\t\t\t</mat-expansion-panel-header>\r\n\t\t\t\t\t<vd-audit [item]=\"item\"> </vd-audit>\r\n\t\t\t\t\t<mat-action-row>\r\n\t\t\t\t\t\t<button type=\"button\" mat-flat-button color=\"accent\" (click)=\"back()\" i18n>Close</button>\r\n\t\t\t\t\t\t<span flex></span>\r\n\t\t\t\t\t</mat-action-row>\r\n\t\t\t\t</mat-expansion-panel>\r\n\t\t\t\t<!-- #endregion -->\r\n\t\t\t</mat-accordion>\r\n\t\t</vd-layout-card-over>\r\n\t</form>\r\n</vd-layout-nav>","import { AuditEntity, Column, Display, FormField, prop, required, Table } from \"@messaia/cdk\";\r\n\r\n@Table({ endpoint: 'contentvariable' })\r\nexport class ContentVariable extends AuditEntity {\r\n @prop()\r\n title: string;\r\n\r\n @required()\r\n @FormField({ row: 2 })\r\n @Column({})\r\n @Display($localize`:@@name:Name`)\r\n name: string;\r\n\r\n @required()\r\n @FormField({ row: 3 })\r\n @Column({ showGtSm: true })\r\n @Display($localize`:@@value:Value`)\r\n value: string;\r\n\r\n @prop()\r\n @FormField({ row: 1, endpoint: 'client?enabled=true&projection=id,name' })\r\n @Column({ name: 'client.displayName', endpoint: 'client?enabled=true&projection=id,name', maxWidth: 190, showGtLg: true })\r\n @Display($localize`:@@client:Client`)\r\n clientId: number;\r\n\r\n @prop()\r\n @FormField({ row: 4 })\r\n @Column({})\r\n @Display($localize`:@@default:Default`)\r\n default: boolean;\r\n\r\n @prop()\r\n @FormField({ row: 5 })\r\n @Column({ event: 'toggle' })\r\n @Display($localize`:@@enabled:Enabled`)\r\n enabled: boolean;\r\n}","import { Api, AuditEntity, Column, Display, FormField, FormFieldType, prop, required, Table } from \"@messaia/cdk\";\r\n\r\n@Api('faq')\r\n@Table()\r\nexport class Faq extends AuditEntity {\r\n\t@required()\r\n\t@FormField({ row: 2 })\r\n\t@Column({ content: (x: Faq) => x?.question })\r\n\t@Display($localize`:@@question:Question`)\r\n\tquestion: string;\r\n\r\n\t@required()\r\n\t@FormField({\r\n\t\trow: 3, type: FormFieldType.Autocomplete, options: [\r\n\t\t\t{ id: 'Bills', name: 'Bills' },\r\n\t\t\t{ id: 'Contracts', name: 'Contracts' },\r\n\t\t\t{ id: 'Orders', name: 'Orders' },\r\n\t\t\t{ id: 'Profile', name: 'Profile' },\r\n\t\t]\r\n\t})\r\n\t@Column({ maxWidth: 190, showGtLg: true })\r\n\t@Display($localize`:@@group:Group`)\r\n\tgroup: string;\r\n\r\n\t@FormField({ row: 1, endpoint: 'client?enabled=true&projection=id,name' })\r\n\t@Column({\r\n\t\tname: 'client.displayName',\r\n\t\tendpoint: 'client?enabled=true&projection=id,name',\r\n\t\tmaxWidth: 250,\r\n\t\tshowGtXl: true\r\n\t})\r\n\t@Display($localize`:@@client:Client`)\r\n\t@prop()\r\n\tclientId: number;\r\n\r\n\t@prop()\r\n\t@FormField({ row: 3 })\r\n\t@Display($localize`:@@ordering:Ordering`)\r\n\tordering: number;\r\n\r\n\t@required()\r\n\t@FormField({ row: 4, type: FormFieldType.Editor })\r\n\t@Display($localize`:@@answer:Answer`)\r\n\tanswer: string;\r\n\r\n\t@prop()\r\n\t@FormField({ row: 5 })\r\n\t@Column({ event: 'toggle' })\r\n\t@Display($localize`:@@enabled:Enabled`)\r\n\tenabled: boolean;\r\n\r\n\t/**\r\n\t * constructor\r\n\t * @param init \r\n\t */\r\n\tpublic constructor(init?: Partial<Faq>) {\r\n\t\tsuper(init);\r\n\t\tObject.assign(this, init);\r\n\t}\r\n}","import { Injectable } from \"@angular/core\";\r\nimport { Resolve } from \"@angular/router\";\r\nimport { ServiceLocator } from \"@messaia/cdk\";\r\nimport { Observable, of } from \"rxjs\";\r\nimport { CmsSettings } from \"../models/cms-settings\";\r\n\r\n/**\r\n * Excluded columns resolve service\r\n */\r\n@Injectable()\r\nexport class ExcludedColumnsResolve implements Resolve<string[]> {\r\n\r\n /**\r\n * Resolves excluded columns\r\n */\r\n resolve(): Observable<string[]> {\r\n return of(ServiceLocator.getService(CmsSettings)?.multitenantable ? [] : ['client.displayName']);\r\n }\r\n}","import { Injectable } from \"@angular/core\";\r\nimport { Resolve } from \"@angular/router\";\r\nimport { ServiceLocator } from \"@messaia/cdk\";\r\nimport { Observable, of } from \"rxjs\";\r\nimport { CmsSettings } from \"../models/cms-settings\";\r\n\r\n/**\r\n * Excluded fields resolve service\r\n */\r\n@Injectable()\r\nexport class ExcludedFieldsResolve implements Resolve<string[]> {\r\n\r\n /**\r\n * Resolves excluded fields\r\n */\r\n resolve(): Observable<string[]> {\r\n return of(ServiceLocator.getService(CmsSettings)?.multitenantable ? [] : ['clientId']);\r\n }\r\n}","import { Injectable } from \"@angular/core\";\r\nimport { Resolve } from \"@angular/router\";\r\nimport { ServiceLocator } from \"@messaia/cdk\";\r\nimport { Observable, of } from \"rxjs\";\r\nimport { CmsSettings } from \"../models/cms-settings\";\r\n\r\n/**\r\n * Includes resolve service\r\n */\r\n@Injectable()\r\nexport class IncludesResolve implements Resolve<string[]> {\r\n\r\n /**\r\n * Resolves includes\r\n */\r\n resolve(): Observable<string[]> {\r\n return of(ServiceLocator.getService(CmsSettings)?.multitenantable ? ['Client'] : []);\r\n }\r\n}","import { Injectable } from \"@angular/core\";\r\nimport { ActivatedRouteSnapshot, Resolve } from \"@angular/router\";\r\nimport { ServiceLocator } from \"@messaia/cdk\";\r\nimport { Observable, of } from \"rxjs\";\r\nimport { CmsSettings } from \"../models/cms-settings\";\r\n\r\n/**\r\n * Settings resolve service\r\n */\r\n@Injectable()\r\nexport class SettingsResolve implements Resolve<CmsSettings> {\r\n\r\n /**\r\n * Resolves settings\r\n */\r\n resolve(route: ActivatedRouteSnapshot): Observable<CmsSettings> {\r\n ServiceLocator.create([{\r\n provide: CmsSettings,\r\n useValue: <CmsSettings>route.parent.data.settings\r\n }]);\r\n\r\n return of(null);\r\n }\r\n}","import { NgModule } from '@angular/core';\r\nimport { RouterModule, Routes } from '@angular/router';\r\nimport { AuthHelper } from '@messaia/cdk';\r\nimport { VdDynamicFormComponent, VdDynamicListComponent } from '@messaia/cdk-base';\r\nimport { ContentFormComponent } from './comnponents/content-form/content-form.component';\r\nimport { DocumentDialogComponent } from './comnponents/document-dialog/document-dialog.component';\r\nimport { TemplateFormComponent } from './comnponents/template-form/template-form.component';\r\nimport { ContentType } from './enums/content-type';\r\nimport { DocumentType } from \"./enums/document-type\";\r\nimport { Content } from './models/content';\r\nimport { ContentVariable } from './models/content-variable';\r\nimport { Document } from './models/document';\r\nimport { Faq } from './models/faq';\r\nimport { Template } from './models/template';\r\nimport { ExcludedColumnsResolve } from './resolvers/excluded-columns.resolve';\r\nimport { ExcludedFieldsResolve } from './resolvers/excluded-fields.resolve';\r\nimport { IncludesResolve } from './resolvers/includes.resolve';\r\nimport { SettingsResolve } from './resolvers/settings.resolve';\r\n\r\nconst routes: Routes = [\r\n { path: '', redirectTo: '/cms/contents/page', pathMatch: 'full' },\r\n\r\n { path: 'contents/page', component: VdDynamicListComponent, data: { classType: Content, query: { type: ContentType.Page } }, resolve: { settings: SettingsResolve, includes: IncludesResolve, excludedColumns: ExcludedColumnsResolve } },\r\n { path: 'contents/block', component: VdDynamicListComponent, data: { classType: Content, query: { type: ContentType.Block } }, resolve: { settings: SettingsResolve, includes: IncludesResolve, excludedColumns: ExcludedColumnsResolve } },\r\n { path: 'contents/:type/add', component: ContentFormComponent, resolve: { settings: SettingsResolve, excludedFields: ExcludedFieldsResolve } },\r\n { path: 'contents/:type/edit/:id', component: ContentFormComponent, resolve: { settings: SettingsResolve, excludedFields: ExcludedFieldsResolve } },\r\n //\r\n { path: 'variables', component: VdDynamicListComponent, data: { classType: ContentVariable }, resolve: { settings: SettingsResolve, includes: IncludesResolve, excludedColumns: ExcludedColumnsResolve } },\r\n { path: 'variables/edit/:id', component: VdDynamicFormComponent, data: { classType: ContentVariable, subtitle: $localize`:@@variables:Variables` }, resolve: { settings: SettingsResolve, excludedFields: ExcludedFieldsResolve } },\r\n { path: 'variables/add', component: VdDynamicFormComponent, data: { classType: ContentVariable, subtitle: $localize`:@@variables:Variables` }, resolve: { settings: SettingsResolve, excludedFields: ExcludedFieldsResolve } },\r\n\r\n { path: 'templates', component: VdDynamicListComponent, data: { classType: Template, includes: 'Client' }, resolve: { settings: SettingsResolve, includes: IncludesResolve, excludedColumns: ExcludedColumnsResolve } },\r\n { path: 'templates/edit/:id', component: TemplateFormComponent, resolve: { settings: SettingsResolve, excludedFields: ExcludedFieldsResolve } },\r\n { path: 'templates/add', component: TemplateFormComponent, resolve: { settings: SettingsResolve, excludedFields: ExcludedFieldsResolve } },\r\n\r\n { path: 'faqs', component: VdDynamicListComponent, data: { classType: Faq }, resolve: { settings: SettingsResolve, includes: IncludesResolve, excludedColumns: ExcludedColumnsResolve } },\r\n { path: 'faqs/edit/:id', component: VdDynamicFormComponent, data: { classType: Faq, subtitle: $localize`:@@faq:FAQ` }, resolve: { settings: SettingsResolve, excludedFields: ExcludedFieldsResolve } },\r\n { path: 'faqs/add', component: VdDynamicFormComponent, data: { classType: Faq, query: { clientId: AuthHelper.user.clientId }, subtitle: $localize`:@@faq:FAQ` }, resolve: { settings: SettingsResolve, excludedFields: ExcludedFieldsResolve } },\r\n\r\n { path: 'documents', component: VdDynamicListComponent, data: { classType: Document, addDialogType: DocumentDialogComponent, query: { type: DocumentType.Document } }, resolve: { settings: SettingsResolve, includes: IncludesResolve, excludedColumns: ExcludedColumnsResolve } },\r\n];\r\n\r\n@NgModule({\r\n imports: [RouterModule.forChild(routes)],\r\n exports: [RouterModule],\r\n providers: [SettingsResolve, IncludesResolve, ExcludedColumnsResolve, ExcludedFieldsResolve]\r\n})\r\nexport class VdCmsRoutingModule { }","import { CommonModule } from '@angular/common';\r\nimport { NgModule } from '@angular/core';\r\nimport { MatAutocompleteModule } from '@angular/material/autocomplete';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatCardModule } from '@angular/material/card';\r\nimport { MatCheckboxModule } from '@angular/material/checkbox';\r\nimport { MatChipsModule } from '@angular/material/chips';\r\nimport { MatExpansionModule } from '@angular/material/expansion';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatInputModule } from '@angular/material/input';\r\nimport { MatProgressBarModule } from '@angular/material/progress-bar';\r\nimport { CodemirrorModule } from '@ctrl/ngx-codemirror';\r\nimport { VdCommonModule, VdFormsModule, VdLayoutModule, VdMediaModule, VdSelectModule } from '@messaia/cdk';\r\nimport { VdCdkBaseModule } from '@messaia/cdk-base';\r\nimport { EditorModule } from '@tinymce/tinymce-angular';\r\nimport { VdCmsRoutingModule } from './cms-routing.module';\r\nimport { ContentFormComponent } from './comnponents/content-form/content-form.component';\r\nimport { DocumentDialogComponent } from './comnponents/document-dialog/document-dialog.component';\r\nimport { TemplateFormComponent } from './comnponents/template-form/template-form.component';\r\nimport { TemplatePreviewDialogComponent } from './comnponents/template-preview-dialog/template-preview-dialog.component';\r\n\r\nexport {\r\n ContentFormComponent,\r\n DocumentDialogComponent,\r\n TemplateFormComponent,\r\n TemplatePreviewDialogComponent\r\n};\r\n\r\n@NgModule({\r\n exports: [\r\n MatCardModule,\r\n MatExpansionModule,\r\n MatButtonModule,\r\n MatIconModule,\r\n MatChipsModule,\r\n MatAutocompleteModule,\r\n MatCheckboxModule,\r\n MatInputModule,\r\n MatProgressBarModule\r\n ]\r\n})\r\nexport class MaterialModule { }\r\n\r\n@NgModule({\r\n exports: [\r\n VdCommonModule,\r\n VdLayoutModule,\r\n VdMediaModule,\r\n VdFormsModule,\r\n VdSelectModule\r\n ]\r\n})\r\nexport class VdModule { }\r\n\r\nconst DECLARATION = [\r\n ContentFormComponent,\r\n TemplateFormComponent,\r\n TemplatePreviewDialogComponent,\r\n DocumentDialogComponent\r\n];\r\n\r\n@NgModule({\r\n imports: [\r\n CommonModule,\r\n CodemirrorModule,\r\n VdCdkBaseModule,\r\n VdModule,\r\n MaterialModule,\r\n VdCmsRoutingModule,\r\n EditorModule,\r\n ],\r\n declarations: [DECLARATION],\r\n exports: [\r\n VdModule,\r\n MaterialModule,\r\n EditorModule,\r\n DECLARATION\r\n ]\r\n})\r\nexport class VdCmsModule { }","export enum FaqScope {\r\n\tCustomerPortal,\r\n\tAdmin\r\n}","import { Injectable } from '@angular/core';\r\nimport { GenericService } from '@messaia/cdk';\r\nimport { map } from 'rxjs/operators';\r\nimport { ContentVariable } from '../models/content-variable';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class ContentVariableService extends GenericService<ContentVariable> {\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper('contentVariable');\r\n\t}\r\n\r\n\t/**\r\n\t * Checks if the specified alias is available.\r\n\t * @param id \r\n\t * @param alias \r\n\t */\r\n\tpublic isNameAvailable(item: ContentVariable) {\r\n\t\treturn this.create(item, '/isNameAvailable').pipe(map((x: any) => x.value));\r\n\t}\r\n}","import { Injectable } from '@angular/core';\r\nimport { GenericService } from '@messaia/cdk';\r\nimport { Faq } from '../models/faq';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class FaqService extends GenericService<Faq> {\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper('faq');\r\n\t}\r\n}","/*\n * Public API Surface of cdk-base\n */\nexport * from './cms.module';\nexport * from './enums/content-type';\nexport * from './enums/document-type';\nexport * from './enums/faq-scope';\nexport * from './enums/template-type';\nexport * from './enums/wrap-tag';\nexport * from './models/cms-settings';\nexport * from './models/content';\nexport * from './models/content-variable';\nexport * from './models/document';\nexport * from './models/faq';\nexport * from './models/template';\nexport * from './models/template-preview';\nexport * from './resolvers/includes.resolve';\nexport * from './services/content-variable.service';\nexport * from './services/content.service';\nexport * from './services/document.generic-service';\nexport * from './services/document.service`';\nexport * from './services/faq.service';\nexport * from './services/template-preview.service';\nexport * from './services/template.service';\n\n","/*\n * Public API Surface of cdk-cms\n */\n\nexport * from './lib/public-api';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import * as i0 from "@angular/core";
2
+ import * as i1 from "@angular/router";
3
+ export declare class VdCmsRoutingModule {
4
+ static ɵfac: i0.ɵɵFactoryDeclaration<VdCmsRoutingModule, never>;
5
+ static ɵmod: i0.ɵɵNgModuleDeclaration<VdCmsRoutingModule, never, [typeof i1.RouterModule], [typeof i1.RouterModule]>;
6
+ static ɵinj: i0.ɵɵInjectorDeclaration<VdCmsRoutingModule>;
7
+ }
@@ -0,0 +1,40 @@
1
+ import { ContentFormComponent } from './comnponents/content-form/content-form.component';
2
+ import { DocumentDialogComponent } from './comnponents/document-dialog/document-dialog.component';
3
+ import { TemplateFormComponent } from './comnponents/template-form/template-form.component';
4
+ import { TemplatePreviewDialogComponent } from './comnponents/template-preview-dialog/template-preview-dialog.component';
5
+ import * as i0 from "@angular/core";
6
+ import * as i1 from "@angular/material/card";
7
+ import * as i2 from "@angular/material/expansion";
8
+ import * as i3 from "@angular/material/button";
9
+ import * as i4 from "@angular/material/icon";
10
+ import * as i5 from "@angular/material/chips";
11
+ import * as i6 from "@angular/material/autocomplete";
12
+ import * as i7 from "@angular/material/checkbox";
13
+ import * as i8 from "@angular/material/input";
14
+ import * as i9 from "@angular/material/progress-bar";
15
+ import * as i10 from "@messaia/cdk";
16
+ import * as i11 from "./comnponents/content-form/content-form.component";
17
+ import * as i12 from "./comnponents/template-form/template-form.component";
18
+ import * as i13 from "./comnponents/template-preview-dialog/template-preview-dialog.component";
19
+ import * as i14 from "./comnponents/document-dialog/document-dialog.component";
20
+ import * as i15 from "@angular/common";
21
+ import * as i16 from "@ctrl/ngx-codemirror";
22
+ import * as i17 from "@messaia/cdk-base";
23
+ import * as i18 from "./cms-routing.module";
24
+ import * as i19 from "@tinymce/tinymce-angular";
25
+ export { ContentFormComponent, DocumentDialogComponent, TemplateFormComponent, TemplatePreviewDialogComponent };
26
+ export declare class MaterialModule {
27
+ static ɵfac: i0.ɵɵFactoryDeclaration<MaterialModule, never>;
28
+ static ɵmod: i0.ɵɵNgModuleDeclaration<MaterialModule, never, never, [typeof i1.MatCardModule, typeof i2.MatExpansionModule, typeof i3.MatButtonModule, typeof i4.MatIconModule, typeof i5.MatChipsModule, typeof i6.MatAutocompleteModule, typeof i7.MatCheckboxModule, typeof i8.MatInputModule, typeof i9.MatProgressBarModule]>;
29
+ static ɵinj: i0.ɵɵInjectorDeclaration<MaterialModule>;
30
+ }
31
+ export declare class VdModule {
32
+ static ɵfac: i0.ɵɵFactoryDeclaration<VdModule, never>;
33
+ static ɵmod: i0.ɵɵNgModuleDeclaration<VdModule, never, never, [typeof i10.VdCommonModule, typeof i10.VdLayoutModule, typeof i10.VdMediaModule, typeof i10.VdFormsModule, typeof i10.VdSelectModule]>;
34
+ static ɵinj: i0.ɵɵInjectorDeclaration<VdModule>;
35
+ }
36
+ export declare class VdCmsModule {
37
+ static ɵfac: i0.ɵɵFactoryDeclaration<VdCmsModule, never>;
38
+ static ɵmod: i0.ɵɵNgModuleDeclaration<VdCmsModule, [typeof i11.ContentFormComponent, typeof i12.TemplateFormComponent, typeof i13.TemplatePreviewDialogComponent, typeof i14.DocumentDialogComponent], [typeof i15.CommonModule, typeof i16.CodemirrorModule, typeof i17.VdCdkBaseModule, typeof VdModule, typeof MaterialModule, typeof i18.VdCmsRoutingModule, typeof i19.EditorModule], [typeof VdModule, typeof MaterialModule, typeof i19.EditorModule, typeof i11.ContentFormComponent, typeof i12.TemplateFormComponent, typeof i13.TemplatePreviewDialogComponent, typeof i14.DocumentDialogComponent]>;
39
+ static ɵinj: i0.ɵɵInjectorDeclaration<VdCmsModule>;
40
+ }
@@ -0,0 +1,109 @@
1
+ import { HttpClient } from '@angular/common/http';
2
+ import { ChangeDetectorRef } from '@angular/core';
3
+ import { MatChipInputEvent } from '@angular/material/chips';
4
+ import { ActivatedRoute } from '@angular/router';
5
+ import { FileService, GenericReactiveFormComponent } from '@messaia/cdk';
6
+ import { EditorComponent } from '@tinymce/tinymce-angular';
7
+ import { Subscription } from 'rxjs';
8
+ import { ContentType } from '../../enums/content-type';
9
+ import { CmsSettings } from '../../models/cms-settings';
10
+ import { Content } from '../../models/content';
11
+ import { ContentService } from '../../services/content.service';
12
+ import * as i0 from "@angular/core";
13
+ export declare class ContentFormComponent extends GenericReactiveFormComponent<Content, ContentService> {
14
+ protected service: ContentService;
15
+ protected fileService: FileService;
16
+ protected httpClient: HttpClient;
17
+ protected route: ActivatedRoute;
18
+ protected changeDetectorRef: ChangeDetectorRef;
19
+ /**
20
+ * Used to disable some properties for client manager
21
+ */
22
+ isClientAdmin: boolean;
23
+ /**
24
+ * Router Subscription
25
+ */
26
+ routeSubscription: Subscription;
27
+ /**
28
+ * The status of the issue
29
+ */
30
+ type: ContentType;
31
+ /**
32
+ * Content status
33
+ */
34
+ ContentType: typeof ContentType;
35
+ /**
36
+ * Wrap tag enum
37
+ */
38
+ wrapTags: any[];
39
+ /**
40
+ * Separator keys codes
41
+ */
42
+ separatorKeysCodes: number[];
43
+ /**
44
+ * Gets the aliases control
45
+ */
46
+ get aliasesControl(): import("@angular/forms").AbstractControl;
47
+ /**
48
+ * settings: CmsSettings
49
+ */
50
+ protected settings: CmsSettings;
51
+ /**
52
+ * A ref to form html element
53
+ */
54
+ formElement: HTMLFormElement;
55
+ /**
56
+ * A ref to tinymce editor
57
+ */
58
+ editorComponent: EditorComponent;
59
+ /**
60
+ * Constructor
61
+ */
62
+ constructor(service: ContentService, fileService: FileService, httpClient: HttpClient, route: ActivatedRoute, changeDetectorRef: ChangeDetectorRef);
63
+ /**
64
+ * Lifecycle hook that is called after data-bound properties
65
+ * of a directive are initialized.
66
+ */
67
+ ngOnInit(): void;
68
+ /**
69
+ * Checks if the specified alias is available.
70
+ */
71
+ isAliasAvailable(): void;
72
+ /**
73
+ * Set client
74
+ */
75
+ setClient(): void;
76
+ /**
77
+ * Add a aliases to the current field
78
+ * @param event
79
+ */
80
+ addAliases(event: MatChipInputEvent): void;
81
+ /**
82
+ * Removes a aliases
83
+ * @param aliass
84
+ */
85
+ removeAliases(aliass: string): void;
86
+ /**
87
+ * Creates a new instance of the Template
88
+ */
89
+ protected newInstance(): Content;
90
+ /**
91
+ * Event emitted when the form has built.
92
+ */
93
+ protected onAfterFormBuild(): void;
94
+ /**
95
+ * Configures the tinymce editor
96
+ */
97
+ private configEditor;
98
+ /**
99
+ * Creates config for the editor
100
+ * @returns
101
+ */
102
+ private getEditorConfig;
103
+ /**
104
+ * Cleanup subscriptions when this component is destroyed.
105
+ */
106
+ ngOnDestroy(): void;
107
+ static ɵfac: i0.ɵɵFactoryDeclaration<ContentFormComponent, never>;
108
+ static ɵcmp: i0.ɵɵComponentDeclaration<ContentFormComponent, "app-content-form", never, {}, {}, never, never>;
109
+ }
@@ -0,0 +1,47 @@
1
+ import { ChangeDetectorRef } from '@angular/core';
2
+ import { MatDialogRef } from '@angular/material/dialog';
3
+ import { ActivatedRoute } from '@angular/router';
4
+ import { FileService, GenericReactiveFormComponent, SaveAction } from '@messaia/cdk';
5
+ import { Document } from '../../models/document';
6
+ import { DocumentService } from '../../services/document.service`';
7
+ import * as i0 from "@angular/core";
8
+ export declare class DocumentDialogComponent extends GenericReactiveFormComponent<Document, DocumentService> {
9
+ protected documentService: DocumentService;
10
+ protected fileService: FileService;
11
+ protected route: ActivatedRoute;
12
+ protected changeDetectorRef: ChangeDetectorRef;
13
+ dialogRef: MatDialogRef<DocumentDialogComponent>;
14
+ item: Document;
15
+ /**
16
+ * Upload status
17
+ */
18
+ isUploading: boolean;
19
+ /**
20
+ * Upload progress
21
+ */
22
+ uploadProgress: number;
23
+ /**
24
+ * Used to disable some properties for client manager
25
+ */
26
+ isClientManager: boolean;
27
+ /**
28
+ * Constructor
29
+ */
30
+ constructor(documentService: DocumentService, fileService: FileService, route: ActivatedRoute, changeDetectorRef: ChangeDetectorRef, dialogRef: MatDialogRef<DocumentDialogComponent>, item?: Document);
31
+ /**
32
+ * Uploads a new document
33
+ */
34
+ upload(file: File): void;
35
+ /**
36
+ * Event emitted after data submition
37
+ * @param action
38
+ * @param response
39
+ */
40
+ protected onAfterSubmit(action?: SaveAction, response?: any): void;
41
+ /**
42
+ * Closes the dialog
43
+ */
44
+ cancel(): void;
45
+ static ɵfac: i0.ɵɵFactoryDeclaration<DocumentDialogComponent, never>;
46
+ static ɵcmp: i0.ɵɵComponentDeclaration<DocumentDialogComponent, "document-dialog", never, {}, {}, never, never>;
47
+ }
@@ -0,0 +1,74 @@
1
+ import { ChangeDetectorRef } from '@angular/core';
2
+ import { MatDialog } from '@angular/material/dialog';
3
+ import { ActivatedRoute } from '@angular/router';
4
+ import { FileService, GenericReactiveFormComponent } from '@messaia/cdk';
5
+ import { Attachment } from '@messaia/cdk-base';
6
+ import 'codemirror/addon/edit/closetag';
7
+ import 'codemirror/addon/edit/matchbrackets';
8
+ import 'codemirror/addon/selection/active-line';
9
+ import 'codemirror/mode/htmlmixed/htmlmixed';
10
+ import 'codemirror/mode/javascript/javascript';
11
+ import { TemplateType } from '../../enums/template-type';
12
+ import { Template } from '../../models/template';
13
+ import { TemplateService } from '../../services/template.service';
14
+ import * as i0 from "@angular/core";
15
+ export declare class TemplateFormComponent extends GenericReactiveFormComponent<Template, TemplateService> {
16
+ protected service: TemplateService;
17
+ protected fileService: FileService;
18
+ protected dialog: MatDialog;
19
+ protected route: ActivatedRoute;
20
+ protected changeDetectorRef: ChangeDetectorRef;
21
+ /**
22
+ * Template type
23
+ */
24
+ TemplateType: typeof TemplateType;
25
+ /**
26
+ * Used to disable some properties for client manager
27
+ */
28
+ isClientAdmin: boolean;
29
+ /**
30
+ * Used to disable some properties for client manager
31
+ */
32
+ isClientManager: boolean;
33
+ /**
34
+ * Gets the attachments control
35
+ */
36
+ get attachmentsControl(): import("@angular/forms").AbstractControl;
37
+ /**
38
+ * Editor options
39
+ */
40
+ editorOptions: any;
41
+ /**
42
+ * Editor options
43
+ */
44
+ jsonEditorOptions: any;
45
+ /**
46
+ * Constructor
47
+ */
48
+ constructor(service: TemplateService, fileService: FileService, dialog: MatDialog, route: ActivatedRoute, changeDetectorRef: ChangeDetectorRef);
49
+ /**
50
+ * Removes a attachment
51
+ * @param attachment
52
+ */
53
+ removeAttachment(attachment: Attachment): void;
54
+ /**
55
+ * Uploads a attachment file
56
+ * @param file
57
+ */
58
+ uploadAttachment(file: File): void;
59
+ /**
60
+ * Downloads a attachment
61
+ * @param attachment
62
+ */
63
+ downloadAttachment(attachment: Attachment): void;
64
+ /**
65
+ * Shows template preview
66
+ */
67
+ showPreview(): void;
68
+ /**
69
+ * Creates a new instance of the Template
70
+ */
71
+ protected newInstance(): Template;
72
+ static ɵfac: i0.ɵɵFactoryDeclaration<TemplateFormComponent, never>;
73
+ static ɵcmp: i0.ɵɵComponentDeclaration<TemplateFormComponent, "app-template-form", never, {}, {}, never, never>;
74
+ }
@@ -0,0 +1,68 @@
1
+ import { ChangeDetectorRef } from '@angular/core';
2
+ import { MatDialogRef } from '@angular/material/dialog';
3
+ import { ActivatedRoute } from '@angular/router';
4
+ import { BaseComponent } from '@messaia/cdk';
5
+ import { TemplateType } from '../../enums/template-type';
6
+ import { TemplatePreview } from '../../models/template-preview';
7
+ import { TemplatePreviewService } from '../../services/template-preview.service';
8
+ import * as i0 from "@angular/core";
9
+ export declare class TemplatePreviewDialogComponent extends BaseComponent {
10
+ protected service: TemplatePreviewService;
11
+ dialogRef: MatDialogRef<TemplatePreviewDialogComponent>;
12
+ data: TemplatePreview;
13
+ protected route: ActivatedRoute;
14
+ protected changeDetectorRef: ChangeDetectorRef;
15
+ /**
16
+ * TemplateType
17
+ */
18
+ TemplateType: typeof TemplateType;
19
+ /**
20
+ * Pdf blob
21
+ */
22
+ pdfBlob: Blob;
23
+ /**
24
+ * PDF source
25
+ */
26
+ pdfSrc: string | ArrayBuffer;
27
+ /**
28
+ * Pdf zoom
29
+ */
30
+ zoom: number;
31
+ /**
32
+ * Pdf zoom scale
33
+ */
34
+ zoomScale: string;
35
+ /**
36
+ * Constructor
37
+ * @param dialogRef
38
+ * @param data
39
+ */
40
+ constructor(service: TemplatePreviewService, dialogRef: MatDialogRef<TemplatePreviewDialogComponent>, data: TemplatePreview, route: ActivatedRoute, changeDetectorRef: ChangeDetectorRef);
41
+ /**
42
+ * Lifecycle hook that is called after data-bound properties
43
+ * of a directive are initialized.
44
+ */
45
+ ngOnInit(): void;
46
+ /**
47
+ * Sends a mail
48
+ */
49
+ sendMail(): void;
50
+ /**
51
+ * Downloads the pdf
52
+ */
53
+ download(): void;
54
+ /**
55
+ * Zooms in the pdf
56
+ */
57
+ zoomIn(): void;
58
+ /**
59
+ * Zooms out the pdf
60
+ */
61
+ zoomOut(): void;
62
+ /**
63
+ * Closes the dialog
64
+ */
65
+ cancel(): void;
66
+ static ɵfac: i0.ɵɵFactoryDeclaration<TemplatePreviewDialogComponent, never>;
67
+ static ɵcmp: i0.ɵɵComponentDeclaration<TemplatePreviewDialogComponent, "app-template-preview", never, {}, {}, never, never>;
68
+ }
@@ -0,0 +1,4 @@
1
+ export declare enum ContentType {
2
+ Page = 1,
3
+ Block = 2
4
+ }
@@ -0,0 +1,6 @@
1
+ export declare enum DocumentType {
2
+ Document = 0,
3
+ Activity = 1,
4
+ Issue = 2,
5
+ Email = 3
6
+ }
@@ -0,0 +1,4 @@
1
+ export declare enum FaqScope {
2
+ CustomerPortal = 0,
3
+ Admin = 1
4
+ }
@@ -0,0 +1,4 @@
1
+ export declare enum TemplateType {
2
+ Email = 0,
3
+ Pdf = 1
4
+ }