@messaia/cdk-cms 0.0.2 → 0.0.3
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.
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { __decorate, __metadata } from "tslib";
|
|
2
|
-
import { AuditEntity, Column, Display, prop, required, Table } from "@messaia/cdk";
|
|
2
|
+
import { Api, AuditEntity, Column, Display, prop, required, Table } from "@messaia/cdk";
|
|
3
3
|
import { ContentType } from "../enums/content-type";
|
|
4
4
|
import { WrapTag } from "../enums/wrap-tag";
|
|
5
5
|
let Content = class Content extends AuditEntity {
|
|
@@ -80,10 +80,8 @@ __decorate([
|
|
|
80
80
|
__metadata("design:type", String)
|
|
81
81
|
], Content.prototype, "style", void 0);
|
|
82
82
|
Content = __decorate([
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
duplicable: true
|
|
86
|
-
})
|
|
83
|
+
Api('content'),
|
|
84
|
+
Table({ duplicable: true })
|
|
87
85
|
], Content);
|
|
88
86
|
export { Content };
|
|
89
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
87
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Nkay1jbXMvc3JjL2xpYi9tb2RlbHMvY29udGVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLEdBQUcsRUFBRSxXQUFXLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUN4RixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDcEQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBSTVDLElBQWEsT0FBTyxHQUFwQixNQUFhLE9BQVEsU0FBUSxXQUFXO0lBQXhDOztRQXdCSSxZQUFPLEdBQVksT0FBTyxDQUFDLE9BQU8sQ0FBQztRQU1uQyxjQUFTLEdBQVksSUFBSSxDQUFDO1FBYTFCLFlBQU8sR0FBWSxLQUFLLENBQUM7UUFJekIsWUFBTyxHQUFZLElBQUksQ0FBQztJQU81QixDQUFDO0NBQUEsQ0FBQTtBQXBERztJQURDLElBQUksRUFBRTs7cUNBQ1c7QUFHbEI7SUFEQyxJQUFJLEVBQUU7OzBDQUNXO0FBS2xCO0lBSEMsTUFBTSxFQUFFO0lBQ1IsT0FBTyxDQUFDLFNBQVMsQ0FBQSxnQkFBZ0IsQ0FBQztJQUNsQyxRQUFRLEVBQUU7O3NDQUNHO0FBS2Q7SUFIQyxNQUFNLENBQUMsRUFBRSxRQUFRLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQztJQUN6QyxPQUFPLENBQUMsU0FBUyxDQUFBLGNBQWMsQ0FBQztJQUNoQyxRQUFRLEVBQUU7O3FDQUNFO0FBR2I7SUFEQyxJQUFJLEVBQUU7O3dDQUNTO0FBR2hCO0lBREMsSUFBSSxFQUFFOztxQ0FDTTtBQUdiO0lBREMsSUFBSSxFQUFFOzt3Q0FDNEI7QUFHbkM7SUFEQyxJQUFJLEVBQUU7O3VDQUNRO0FBR2Y7SUFEQyxJQUFJLEVBQUU7OzBDQUNtQjtBQVUxQjtJQVJDLE1BQU0sQ0FBQztRQUNKLElBQUksRUFBRSxvQkFBb0I7UUFDMUIsUUFBUSxFQUFFLHdDQUF3QztRQUNsRCxRQUFRLEVBQUUsR0FBRztRQUNiLFFBQVEsRUFBRSxJQUFJO0tBQ2pCLENBQUM7SUFDRCxPQUFPLENBQUMsU0FBUyxDQUFBLGtCQUFrQixDQUFDO0lBQ3BDLElBQUksRUFBRTs7eUNBQ1U7QUFHakI7SUFEQyxJQUFJLEVBQUU7O3dDQUNrQjtBQUl6QjtJQUZDLE1BQU0sQ0FBQyxFQUFFLE1BQU0sRUFBRSxTQUFTLENBQUEsb0JBQW9CLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxDQUFDO0lBQ2xFLElBQUksRUFBRTs7d0NBQ2lCO0FBR3hCO0lBREMsSUFBSSxFQUFFOzt1Q0FDUTtBQUdmO0lBREMsSUFBSSxFQUFFOztzQ0FDTztBQXJETCxPQUFPO0lBRm5CLEdBQUcsQ0FBQyxTQUFTLENBQUM7SUFDZCxLQUFLLENBQUMsRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLENBQUM7R0FDZixPQUFPLENBc0RuQjtTQXREWSxPQUFPIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQXBpLCBBdWRpdEVudGl0eSwgQ29sdW1uLCBEaXNwbGF5LCBwcm9wLCByZXF1aXJlZCwgVGFibGUgfSBmcm9tIFwiQG1lc3NhaWEvY2RrXCI7XHJcbmltcG9ydCB7IENvbnRlbnRUeXBlIH0gZnJvbSBcIi4uL2VudW1zL2NvbnRlbnQtdHlwZVwiO1xyXG5pbXBvcnQgeyBXcmFwVGFnIH0gZnJvbSBcIi4uL2VudW1zL3dyYXAtdGFnXCI7XHJcblxyXG5AQXBpKCdjb250ZW50JylcclxuQFRhYmxlKHsgZHVwbGljYWJsZTogdHJ1ZSB9KVxyXG5leHBvcnQgY2xhc3MgQ29udGVudCBleHRlbmRzIEF1ZGl0RW50aXR5IHtcclxuICAgIEBwcm9wKClcclxuICAgIHR5cGU6IENvbnRlbnRUeXBlO1xyXG5cclxuICAgIEBwcm9wKClcclxuICAgIHNlY3Rpb25JZDogbnVtYmVyO1xyXG5cclxuICAgIEBDb2x1bW4oKVxyXG4gICAgQERpc3BsYXkoJGxvY2FsaXplYDpAQHRpdGxlOlRpdGxlYClcclxuICAgIEByZXF1aXJlZCgpXHJcbiAgICB0aXRsZTogc3RyaW5nO1xyXG5cclxuICAgIEBDb2x1bW4oeyBtYXhXaWR0aDogMTkwLCBzaG93R3RNZDogdHJ1ZSB9KVxyXG4gICAgQERpc3BsYXkoJGxvY2FsaXplYDpAQG5hbWU6TmFtZWApXHJcbiAgICBAcmVxdWlyZWQoKVxyXG4gICAgbmFtZTogc3RyaW5nO1xyXG5cclxuICAgIEBwcm9wKClcclxuICAgIGFsaWFzZXM6IHN0cmluZztcclxuXHJcbiAgICBAcHJvcCgpXHJcbiAgICBib2R5OiBzdHJpbmc7XHJcblxyXG4gICAgQHByb3AoKVxyXG4gICAgd3JhcFRhZzogV3JhcFRhZyA9IFdyYXBUYWcuU2VjdGlvbjtcclxuXHJcbiAgICBAcHJvcCgpXHJcbiAgICBsYXlvdXQ6IHN0cmluZztcclxuXHJcbiAgICBAcHJvcCgpXHJcbiAgICBzaG93VGl0bGU6IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuICAgIEBDb2x1bW4oe1xyXG4gICAgICAgIG5hbWU6ICdjbGllbnQuZGlzcGxheU5hbWUnLFxyXG4gICAgICAgIGVuZHBvaW50OiAnY2xpZW50P2VuYWJsZWQ9dHJ1ZSZwcm9qZWN0aW9uPWlkLG5hbWUnLFxyXG4gICAgICAgIG1heFdpZHRoOiAxOTAsXHJcbiAgICAgICAgc2hvd0d0TGc6IHRydWVcclxuICAgIH0pXHJcbiAgICBARGlzcGxheSgkbG9jYWxpemVgOkBAY2xpZW50OkNsaWVudGApXHJcbiAgICBAcHJvcCgpXHJcbiAgICBjbGllbnRJZDogbnVtYmVyO1xyXG5cclxuICAgIEBwcm9wKClcclxuICAgIGRlZmF1bHQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgICBAQ29sdW1uKHsgaGVhZGVyOiAkbG9jYWxpemVgOkBAZW5hYmxlZDpFbmFibGVkYCwgZXZlbnQ6ICd0b2dnbGUnIH0pXHJcbiAgICBAcHJvcCgpXHJcbiAgICBlbmFibGVkOiBib29sZWFuID0gdHJ1ZTtcclxuXHJcbiAgICBAcHJvcCgpXHJcbiAgICBzY3JpcHQ6IHN0cmluZztcclxuXHJcbiAgICBAcHJvcCgpXHJcbiAgICBzdHlsZTogc3RyaW5nO1xyXG59Il19
|
|
@@ -23,7 +23,7 @@ import { MatProgressBarModule } from '@angular/material/progress-bar';
|
|
|
23
23
|
import * as i11$1 from '@ctrl/ngx-codemirror';
|
|
24
24
|
import { CodemirrorModule } from '@ctrl/ngx-codemirror';
|
|
25
25
|
import * as i2 from '@messaia/cdk';
|
|
26
|
-
import { AuditEntity, prop, Column, Display, required, Table, GenericService, GenericReactiveFormComponent, AuthHelper, EnumService, SaveAction, BaseComponent, FormField, FormFieldType,
|
|
26
|
+
import { AuditEntity, prop, Column, Display, required, Api, Table, GenericService, GenericReactiveFormComponent, AuthHelper, EnumService, SaveAction, BaseComponent, FormField, FormFieldType, ServiceLocator, VdCommonModule, VdLayoutModule, VdMediaModule, VdFormsModule, VdSelectModule } from '@messaia/cdk';
|
|
27
27
|
import * as i14 from '@messaia/cdk-base';
|
|
28
28
|
import { DocumentBase, VdDynamicListComponent, VdDynamicFormComponent, DocumentType, VdCdkBaseModule } from '@messaia/cdk-base';
|
|
29
29
|
import * as i11 from '@tinymce/tinymce-angular';
|
|
@@ -158,10 +158,8 @@ __decorate([
|
|
|
158
158
|
__metadata("design:type", String)
|
|
159
159
|
], Content.prototype, "style", void 0);
|
|
160
160
|
Content = __decorate([
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
duplicable: true
|
|
164
|
-
})
|
|
161
|
+
Api('content'),
|
|
162
|
+
Table({ duplicable: true })
|
|
165
163
|
], Content);
|
|
166
164
|
|
|
167
165
|
class ContentService extends GenericService {
|
|
@@ -1 +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/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-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/services/template.service.ts","../../../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/models/slider.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/form-validation.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/services/slider.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}","import { Injectable } from \"@angular/core\";\r\n\r\n@Injectable()\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 } 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 * settings: CmsSettings\r\n\t */\r\n\tpublic settings: CmsSettings = new CmsSettings();\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 * 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 = this.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\t/* Get some props from route snapshot */\r\n\t\tthis.route.data.subscribe((data: any) => {\r\n\t\t\tthis.formValidation = data.formValidation;\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=\"@@content\" [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\">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\">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\">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\">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 i18n=\"@@aliases\">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\">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 i18n=\"@@layout\">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\">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 i18n=\"@@script\">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 i18n=\"@@style\">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=\"@@showTitle\">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\" i18n=\"@@default\">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\">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\">Save</button>\r\n\t\t\t\t\t\t<button type=\"button\" mat-button *ngIf=\"isEditMode\" (click)=\"apply()\" [disabled]=\"isSaving\" i18n=\"@@apply\">Apply</button>\r\n\t\t\t\t\t\t<button type=\"button\" mat-button (click)=\"back()\" i18n=\"@@cancel\">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\">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\">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 { Column, prop, required, Table } from \"@messaia/cdk\";\r\nimport { Attachment, DocumentBase } from \"@messaia/cdk-base\";\r\n\r\n@Table({\r\n endpoint: 'document',\r\n editable: false,\r\n downloadable: true\r\n})\r\nexport class Document extends DocumentBase {\r\n @prop()\r\n customerId: number;\r\n\r\n @Column({\r\n index: 5,\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 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 { CmsSettings } from '../../models/cms-settings';\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('ClientAdministrator') || AuthHelper.hasRole('ClientManager');\r\n\r\n\t/**\r\n\t * settings: CmsSettings\r\n\t */\r\n\tpublic settings: CmsSettings = new CmsSettings();\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\tthis.settings = this.getService(CmsSettings);\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=\"@@newDocument\">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\">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\">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\">Document</span></mat-option>\r\n\t\t\t\t\t<mat-option value=\"images\"><span i18n=\"@@image\">Image</span></mat-option>\r\n\t\t\t\t\t<mat-option value=\"videos\"><span i18n=\"@@video\">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=\"@@preserveOriginalName\">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=\"@@warningOldFilesWillBeBverridden\">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\">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\">Save</button>\r\n\t\t<button type=\"button\" mat-button (click)=\"cancel()\" i18n=\"@@cancel\">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 { 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=\"@@isRequired\"> 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\">Email</mat-label>\r\n <input matInput type=\"email\" name=\"email\" [(ngModel)]=\"data.email\" #email=\"ngModel\" required email placeholder=\"Email\" i18n-placeholder=\"@@email\">\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\">Email</span><span i18n=\"@@isRequired\"> is required</span></mat-error>\r\n <mat-error *ngIf=\"!email.errors?.required && email.errors?.email\"><span i18n=\"@@email\">Email</span><span i18n=\"@@isInvalid\"> is invalid</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\">Close</button>\r\n </div>\r\n</form>","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 { 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 { CmsSettings } from '../../models/cms-settings';\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 * settings: CmsSettings\r\n\t */\r\n\tpublic settings: CmsSettings = new CmsSettings();\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) {\r\n\t\tsuper(Template, service, route, changeDetectorRef)\r\n\t\tthis.settings = this.getService(CmsSettings);\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}","<vd-layout-nav color=\"primary\" [backNavigationRoute]=\"listRoute\" toolbarTitle=\"Template\" i18n-toolbarTitle=\"@@template\" [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\">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\">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=\"@@templateEmptyClientHint\">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\">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\">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\">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\">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\">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=\"@@attachments\" [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\">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=\"@@active\">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\">Save</button>\r\n\t\t\t\t\t\t<button type=\"button\" mat-button (click)=\"apply()\" *ngIf=\"isEditMode\" [disabled]=\"isSaving\" i18n=\"@@apply\">Apply</button>\r\n\t\t\t\t\t\t<button type=\"button\" mat-button (click)=\"back()\" i18n=\"@@cancel\">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\">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\">Save</button>\r\n\t\t\t\t\t\t<button type=\"button\" mat-button (click)=\"apply()\" *ngIf=\"isEditMode\" [disabled]=\"isSaving\" i18n=\"@@apply\">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\">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\">Save</button>\r\n\t\t\t\t\t\t<button type=\"button\" mat-button (click)=\"apply()\" *ngIf=\"isEditMode\" [disabled]=\"isSaving\" i18n=\"@@apply\">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\">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\">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\">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 { Api, AuditEntity, Column, Display, FormField, FormFieldType, prop, required, Table } from \"@messaia/cdk\";\r\n\r\n@Api('slider')\r\n@Table()\r\nexport class Slider extends AuditEntity {\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({ maxWidth: 150, showGtLg: true })\r\n @Display($localize`:@@group:Group`)\r\n group: string;\r\n\r\n @required()\r\n @FormField({ row: 4, type: FormFieldType.Editor })\r\n @Display($localize`:@@content:Content`)\r\n content: string;\r\n\r\n @FormField({ row: 1, endpoint: 'client?enabled=true&projection=id,name' })\r\n @Column({\r\n name: 'client.displayName',\r\n endpoint: 'client?enabled=true&projection=id,name',\r\n maxWidth: 250,\r\n showGtLg: true\r\n })\r\n @Display($localize`:@@project:Project`)\r\n @prop()\r\n clientId: number;\r\n\r\n @prop()\r\n @FormField({ row: 3 })\r\n @Display($localize`:@@ordering:Ordering`)\r\n ordering: number;\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 { 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 * Form validation resolve service\r\n */\r\n@Injectable()\r\nexport class FormValidationResolve implements Resolve<any> {\r\n\r\n /**\r\n * Resolves Form validation\r\n */\r\n resolve(): Observable<any> {\r\n return of(ServiceLocator.getService(CmsSettings)?.multitenantable ? { clientId: { required: true } } : {});\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 { ResolveData, RouterModule, Routes } from '@angular/router';\r\nimport { AuthHelper } from '@messaia/cdk';\r\nimport { DocumentType, 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 { 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 { Slider } from './models/slider';\r\nimport { Template } from './models/template';\r\nimport { ExcludedColumnsResolve } from './resolvers/excluded-columns.resolve';\r\nimport { ExcludedFieldsResolve } from './resolvers/excluded-fields.resolve';\r\nimport { FormValidationResolve } from './resolvers/form-validation.resolve';\r\nimport { IncludesResolve } from './resolvers/includes.resolve';\r\nimport { SettingsResolve } from './resolvers/settings.resolve';\r\n\r\nconst ListResolve: ResolveData = {\r\n settings: SettingsResolve,\r\n includes: IncludesResolve,\r\n excludedColumns: ExcludedColumnsResolve\r\n};\r\n\r\nconst FormResolve: ResolveData = {\r\n settings: SettingsResolve,\r\n excludedFields: ExcludedFieldsResolve,\r\n formValidation: FormValidationResolve\r\n};\r\n\r\nconst routes: Routes = [\r\n { path: '', redirectTo: '/cms/contents/page', pathMatch: 'full' },\r\n { path: 'faq', redirectTo: '/cms/faqs', pathMatch: 'full' },\r\n\r\n { path: 'contents/page', component: VdDynamicListComponent, data: { classType: Content, query: { type: ContentType.Page } }, resolve: ListResolve },\r\n { path: 'contents/block', component: VdDynamicListComponent, data: { classType: Content, query: { type: ContentType.Block } }, resolve: ListResolve },\r\n { path: 'contents/:type/add', component: ContentFormComponent, resolve: FormResolve },\r\n { path: 'contents/:type/edit/:id', component: ContentFormComponent, resolve: FormResolve },\r\n //\r\n { path: 'variables', component: VdDynamicListComponent, data: { classType: ContentVariable }, resolve: ListResolve },\r\n { path: 'variables/edit/:id', component: VdDynamicFormComponent, data: { classType: ContentVariable, subtitle: $localize`:@@variables:Variables` }, resolve: FormResolve },\r\n { path: 'variables/add', component: VdDynamicFormComponent, data: { classType: ContentVariable, subtitle: $localize`:@@variables:Variables` }, resolve: FormResolve },\r\n\r\n { path: 'templates', component: VdDynamicListComponent, data: { classType: Template, includes: 'Client' }, resolve: ListResolve },\r\n { path: 'templates/edit/:id', component: TemplateFormComponent, resolve: FormResolve },\r\n { path: 'templates/add', component: TemplateFormComponent, resolve: FormResolve },\r\n\r\n { path: 'faqs', component: VdDynamicListComponent, data: { classType: Faq }, resolve: ListResolve },\r\n { path: 'faqs/edit/:id', component: VdDynamicFormComponent, data: { classType: Faq, subtitle: $localize`:@@faq:FAQ` }, resolve: FormResolve },\r\n { path: 'faqs/add', component: VdDynamicFormComponent, data: { classType: Faq, query: { clientId: AuthHelper.user.clientId }, subtitle: $localize`:@@faq:FAQ` }, resolve: FormResolve },\r\n\r\n { path: 'sliders', component: VdDynamicListComponent, data: { classType: Slider }, resolve: ListResolve },\r\n { path: 'sliders/edit/:id', component: VdDynamicFormComponent, data: { classType: Slider, subtitle: $localize`:@@slider:Slider` }, resolve: FormResolve },\r\n { path: 'sliders/add', component: VdDynamicFormComponent, data: { classType: Slider, query: { clientId: AuthHelper.user.clientId }, subtitle: $localize`:@@slider:Slider` }, resolve: FormResolve },\r\n\r\n { path: 'documents', component: VdDynamicListComponent, data: { classType: Document, addDialogType: DocumentDialogComponent, query: { type: DocumentType.Document } }, resolve: ListResolve },\r\n];\r\n\r\n@NgModule({\r\n imports: [RouterModule.forChild(routes)],\r\n exports: [RouterModule],\r\n providers: [\r\n SettingsResolve,\r\n IncludesResolve,\r\n ExcludedColumnsResolve,\r\n ExcludedFieldsResolve,\r\n FormValidationResolve\r\n ]\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}","import { Injectable } from '@angular/core';\r\nimport { GenericService } from '@messaia/cdk';\r\nimport { Slider } from '../models/slider';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class SliderService extends GenericService<Slider> {\r\n\r\n /**\r\n * Constructor\r\n */\r\n constructor() {\r\n super('slider');\r\n }\r\n}","/*\n * Public API Surface of cdk-base\n */\nexport * from './cms.module';\nexport * from './enums/content-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/slider';\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/slider.service';\nexport * from './services/template-preview.service';\nexport * from './services/template.service';\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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"}
|
|
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/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-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/services/template.service.ts","../../../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/models/slider.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/form-validation.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/services/slider.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}","import { Injectable } from \"@angular/core\";\r\n\r\n@Injectable()\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 { Api, 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@Api('content')\r\n@Table({ duplicable: true })\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 } 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 * settings: CmsSettings\r\n\t */\r\n\tpublic settings: CmsSettings = new CmsSettings();\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 * 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 = this.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\t/* Get some props from route snapshot */\r\n\t\tthis.route.data.subscribe((data: any) => {\r\n\t\t\tthis.formValidation = data.formValidation;\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=\"@@content\" [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\">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\">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\">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\">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 i18n=\"@@aliases\">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\">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 i18n=\"@@layout\">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\">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 i18n=\"@@script\">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 i18n=\"@@style\">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=\"@@showTitle\">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\" i18n=\"@@default\">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\">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\">Save</button>\r\n\t\t\t\t\t\t<button type=\"button\" mat-button *ngIf=\"isEditMode\" (click)=\"apply()\" [disabled]=\"isSaving\" i18n=\"@@apply\">Apply</button>\r\n\t\t\t\t\t\t<button type=\"button\" mat-button (click)=\"back()\" i18n=\"@@cancel\">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\">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\">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 { Column, prop, required, Table } from \"@messaia/cdk\";\r\nimport { Attachment, DocumentBase } from \"@messaia/cdk-base\";\r\n\r\n@Table({\r\n endpoint: 'document',\r\n editable: false,\r\n downloadable: true\r\n})\r\nexport class Document extends DocumentBase {\r\n @prop()\r\n customerId: number;\r\n\r\n @Column({\r\n index: 5,\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 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 { CmsSettings } from '../../models/cms-settings';\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('ClientAdministrator') || AuthHelper.hasRole('ClientManager');\r\n\r\n\t/**\r\n\t * settings: CmsSettings\r\n\t */\r\n\tpublic settings: CmsSettings = new CmsSettings();\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\tthis.settings = this.getService(CmsSettings);\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=\"@@newDocument\">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\">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\">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\">Document</span></mat-option>\r\n\t\t\t\t\t<mat-option value=\"images\"><span i18n=\"@@image\">Image</span></mat-option>\r\n\t\t\t\t\t<mat-option value=\"videos\"><span i18n=\"@@video\">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=\"@@preserveOriginalName\">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=\"@@warningOldFilesWillBeBverridden\">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\">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\">Save</button>\r\n\t\t<button type=\"button\" mat-button (click)=\"cancel()\" i18n=\"@@cancel\">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 { 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=\"@@isRequired\"> 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\">Email</mat-label>\r\n <input matInput type=\"email\" name=\"email\" [(ngModel)]=\"data.email\" #email=\"ngModel\" required email placeholder=\"Email\" i18n-placeholder=\"@@email\">\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\">Email</span><span i18n=\"@@isRequired\"> is required</span></mat-error>\r\n <mat-error *ngIf=\"!email.errors?.required && email.errors?.email\"><span i18n=\"@@email\">Email</span><span i18n=\"@@isInvalid\"> is invalid</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\">Close</button>\r\n </div>\r\n</form>","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 { 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 { CmsSettings } from '../../models/cms-settings';\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 * settings: CmsSettings\r\n\t */\r\n\tpublic settings: CmsSettings = new CmsSettings();\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) {\r\n\t\tsuper(Template, service, route, changeDetectorRef)\r\n\t\tthis.settings = this.getService(CmsSettings);\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}","<vd-layout-nav color=\"primary\" [backNavigationRoute]=\"listRoute\" toolbarTitle=\"Template\" i18n-toolbarTitle=\"@@template\" [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\">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\">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=\"@@templateEmptyClientHint\">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\">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\">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\">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\">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\">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=\"@@attachments\" [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\">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=\"@@active\">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\">Save</button>\r\n\t\t\t\t\t\t<button type=\"button\" mat-button (click)=\"apply()\" *ngIf=\"isEditMode\" [disabled]=\"isSaving\" i18n=\"@@apply\">Apply</button>\r\n\t\t\t\t\t\t<button type=\"button\" mat-button (click)=\"back()\" i18n=\"@@cancel\">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\">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\">Save</button>\r\n\t\t\t\t\t\t<button type=\"button\" mat-button (click)=\"apply()\" *ngIf=\"isEditMode\" [disabled]=\"isSaving\" i18n=\"@@apply\">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\">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\">Save</button>\r\n\t\t\t\t\t\t<button type=\"button\" mat-button (click)=\"apply()\" *ngIf=\"isEditMode\" [disabled]=\"isSaving\" i18n=\"@@apply\">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\">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\">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\">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 { Api, AuditEntity, Column, Display, FormField, FormFieldType, prop, required, Table } from \"@messaia/cdk\";\r\n\r\n@Api('slider')\r\n@Table()\r\nexport class Slider extends AuditEntity {\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({ maxWidth: 150, showGtLg: true })\r\n @Display($localize`:@@group:Group`)\r\n group: string;\r\n\r\n @required()\r\n @FormField({ row: 4, type: FormFieldType.Editor })\r\n @Display($localize`:@@content:Content`)\r\n content: string;\r\n\r\n @FormField({ row: 1, endpoint: 'client?enabled=true&projection=id,name' })\r\n @Column({\r\n name: 'client.displayName',\r\n endpoint: 'client?enabled=true&projection=id,name',\r\n maxWidth: 250,\r\n showGtLg: true\r\n })\r\n @Display($localize`:@@project:Project`)\r\n @prop()\r\n clientId: number;\r\n\r\n @prop()\r\n @FormField({ row: 3 })\r\n @Display($localize`:@@ordering:Ordering`)\r\n ordering: number;\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 { 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 * Form validation resolve service\r\n */\r\n@Injectable()\r\nexport class FormValidationResolve implements Resolve<any> {\r\n\r\n /**\r\n * Resolves Form validation\r\n */\r\n resolve(): Observable<any> {\r\n return of(ServiceLocator.getService(CmsSettings)?.multitenantable ? { clientId: { required: true } } : {});\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 { ResolveData, RouterModule, Routes } from '@angular/router';\r\nimport { AuthHelper } from '@messaia/cdk';\r\nimport { DocumentType, 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 { 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 { Slider } from './models/slider';\r\nimport { Template } from './models/template';\r\nimport { ExcludedColumnsResolve } from './resolvers/excluded-columns.resolve';\r\nimport { ExcludedFieldsResolve } from './resolvers/excluded-fields.resolve';\r\nimport { FormValidationResolve } from './resolvers/form-validation.resolve';\r\nimport { IncludesResolve } from './resolvers/includes.resolve';\r\nimport { SettingsResolve } from './resolvers/settings.resolve';\r\n\r\nconst ListResolve: ResolveData = {\r\n settings: SettingsResolve,\r\n includes: IncludesResolve,\r\n excludedColumns: ExcludedColumnsResolve\r\n};\r\n\r\nconst FormResolve: ResolveData = {\r\n settings: SettingsResolve,\r\n excludedFields: ExcludedFieldsResolve,\r\n formValidation: FormValidationResolve\r\n};\r\n\r\nconst routes: Routes = [\r\n { path: '', redirectTo: '/cms/contents/page', pathMatch: 'full' },\r\n { path: 'faq', redirectTo: '/cms/faqs', pathMatch: 'full' },\r\n\r\n { path: 'contents/page', component: VdDynamicListComponent, data: { classType: Content, query: { type: ContentType.Page } }, resolve: ListResolve },\r\n { path: 'contents/block', component: VdDynamicListComponent, data: { classType: Content, query: { type: ContentType.Block } }, resolve: ListResolve },\r\n { path: 'contents/:type/add', component: ContentFormComponent, resolve: FormResolve },\r\n { path: 'contents/:type/edit/:id', component: ContentFormComponent, resolve: FormResolve },\r\n //\r\n { path: 'variables', component: VdDynamicListComponent, data: { classType: ContentVariable }, resolve: ListResolve },\r\n { path: 'variables/edit/:id', component: VdDynamicFormComponent, data: { classType: ContentVariable, subtitle: $localize`:@@variables:Variables` }, resolve: FormResolve },\r\n { path: 'variables/add', component: VdDynamicFormComponent, data: { classType: ContentVariable, subtitle: $localize`:@@variables:Variables` }, resolve: FormResolve },\r\n\r\n { path: 'templates', component: VdDynamicListComponent, data: { classType: Template, includes: 'Client' }, resolve: ListResolve },\r\n { path: 'templates/edit/:id', component: TemplateFormComponent, resolve: FormResolve },\r\n { path: 'templates/add', component: TemplateFormComponent, resolve: FormResolve },\r\n\r\n { path: 'faqs', component: VdDynamicListComponent, data: { classType: Faq }, resolve: ListResolve },\r\n { path: 'faqs/edit/:id', component: VdDynamicFormComponent, data: { classType: Faq, subtitle: $localize`:@@faq:FAQ` }, resolve: FormResolve },\r\n { path: 'faqs/add', component: VdDynamicFormComponent, data: { classType: Faq, query: { clientId: AuthHelper.user.clientId }, subtitle: $localize`:@@faq:FAQ` }, resolve: FormResolve },\r\n\r\n { path: 'sliders', component: VdDynamicListComponent, data: { classType: Slider }, resolve: ListResolve },\r\n { path: 'sliders/edit/:id', component: VdDynamicFormComponent, data: { classType: Slider, subtitle: $localize`:@@slider:Slider` }, resolve: FormResolve },\r\n { path: 'sliders/add', component: VdDynamicFormComponent, data: { classType: Slider, query: { clientId: AuthHelper.user.clientId }, subtitle: $localize`:@@slider:Slider` }, resolve: FormResolve },\r\n\r\n { path: 'documents', component: VdDynamicListComponent, data: { classType: Document, addDialogType: DocumentDialogComponent, query: { type: DocumentType.Document } }, resolve: ListResolve },\r\n];\r\n\r\n@NgModule({\r\n imports: [RouterModule.forChild(routes)],\r\n exports: [RouterModule],\r\n providers: [\r\n SettingsResolve,\r\n IncludesResolve,\r\n ExcludedColumnsResolve,\r\n ExcludedFieldsResolve,\r\n FormValidationResolve\r\n ]\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}","import { Injectable } from '@angular/core';\r\nimport { GenericService } from '@messaia/cdk';\r\nimport { Slider } from '../models/slider';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class SliderService extends GenericService<Slider> {\r\n\r\n /**\r\n * Constructor\r\n */\r\n constructor() {\r\n super('slider');\r\n }\r\n}","/*\n * Public API Surface of cdk-base\n */\nexport * from './cms.module';\nexport * from './enums/content-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/slider';\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/slider.service';\nexport * from './services/template-preview.service';\nexport * from './services/template.service';\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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"}
|
|
@@ -23,7 +23,7 @@ import { MatProgressBarModule } from '@angular/material/progress-bar';
|
|
|
23
23
|
import * as i11$1 from '@ctrl/ngx-codemirror';
|
|
24
24
|
import { CodemirrorModule } from '@ctrl/ngx-codemirror';
|
|
25
25
|
import * as i2 from '@messaia/cdk';
|
|
26
|
-
import { AuditEntity, prop, Column, Display, required, Table, GenericService, GenericReactiveFormComponent, AuthHelper, EnumService, SaveAction, BaseComponent, FormField, FormFieldType,
|
|
26
|
+
import { AuditEntity, prop, Column, Display, required, Api, Table, GenericService, GenericReactiveFormComponent, AuthHelper, EnumService, SaveAction, BaseComponent, FormField, FormFieldType, ServiceLocator, VdCommonModule, VdLayoutModule, VdMediaModule, VdFormsModule, VdSelectModule } from '@messaia/cdk';
|
|
27
27
|
import * as i14 from '@messaia/cdk-base';
|
|
28
28
|
import { DocumentBase, VdDynamicListComponent, VdDynamicFormComponent, DocumentType, VdCdkBaseModule } from '@messaia/cdk-base';
|
|
29
29
|
import * as i11 from '@tinymce/tinymce-angular';
|
|
@@ -158,10 +158,8 @@ __decorate([
|
|
|
158
158
|
__metadata("design:type", String)
|
|
159
159
|
], Content.prototype, "style", void 0);
|
|
160
160
|
Content = __decorate([
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
duplicable: true
|
|
164
|
-
})
|
|
161
|
+
Api('content'),
|
|
162
|
+
Table({ duplicable: true })
|
|
165
163
|
], Content);
|
|
166
164
|
|
|
167
165
|
class ContentService extends GenericService {
|
|
@@ -1 +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/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/models/slider.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/form-validation.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/services/slider.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}","import { Injectable } from \"@angular/core\";\r\n\r\n@Injectable()\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 } 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 * settings: CmsSettings\r\n\t */\r\n\tpublic settings: CmsSettings = new CmsSettings();\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 * 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 = this.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\t/* Get some props from route snapshot */\r\n\t\tthis.route.data.subscribe((data: any) => {\r\n\t\t\tthis.formValidation = data.formValidation;\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=\"@@content\" [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\">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\">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\">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\">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 i18n=\"@@aliases\">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\">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 i18n=\"@@layout\">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\">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 i18n=\"@@script\">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 i18n=\"@@style\">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=\"@@showTitle\">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\" i18n=\"@@default\">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\">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\">Save</button>\r\n\t\t\t\t\t\t<button type=\"button\" mat-button *ngIf=\"isEditMode\" (click)=\"apply()\" [disabled]=\"isSaving\" i18n=\"@@apply\">Apply</button>\r\n\t\t\t\t\t\t<button type=\"button\" mat-button (click)=\"back()\" i18n=\"@@cancel\">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\">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\">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 { Column, prop, required, Table } from \"@messaia/cdk\";\r\nimport { Attachment, DocumentBase } from \"@messaia/cdk-base\";\r\n\r\n@Table({\r\n endpoint: 'document',\r\n editable: false,\r\n downloadable: true\r\n})\r\nexport class Document extends DocumentBase {\r\n @prop()\r\n customerId: number;\r\n\r\n @Column({\r\n index: 5,\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 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 { CmsSettings } from '../../models/cms-settings';\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('ClientAdministrator') || AuthHelper.hasRole('ClientManager');\r\n\r\n\t/**\r\n\t * settings: CmsSettings\r\n\t */\r\n\tpublic settings: CmsSettings = new CmsSettings();\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\tthis.settings = this.getService(CmsSettings);\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=\"@@newDocument\">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\">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\">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\">Document</span></mat-option>\r\n\t\t\t\t\t<mat-option value=\"images\"><span i18n=\"@@image\">Image</span></mat-option>\r\n\t\t\t\t\t<mat-option value=\"videos\"><span i18n=\"@@video\">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=\"@@preserveOriginalName\">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=\"@@warningOldFilesWillBeBverridden\">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\">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\">Save</button>\r\n\t\t<button type=\"button\" mat-button (click)=\"cancel()\" i18n=\"@@cancel\">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=\"@@isRequired\"> 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\">Email</mat-label>\r\n <input matInput type=\"email\" name=\"email\" [(ngModel)]=\"data.email\" #email=\"ngModel\" required email placeholder=\"Email\" i18n-placeholder=\"@@email\">\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\">Email</span><span i18n=\"@@isRequired\"> is required</span></mat-error>\r\n <mat-error *ngIf=\"!email.errors?.required && email.errors?.email\"><span i18n=\"@@email\">Email</span><span i18n=\"@@isInvalid\"> is invalid</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\">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 { CmsSettings } from '../../models/cms-settings';\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 * settings: CmsSettings\r\n\t */\r\n\tpublic settings: CmsSettings = new CmsSettings();\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) {\r\n\t\tsuper(Template, service, route, changeDetectorRef)\r\n\t\tthis.settings = this.getService(CmsSettings);\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}","<vd-layout-nav color=\"primary\" [backNavigationRoute]=\"listRoute\" toolbarTitle=\"Template\" i18n-toolbarTitle=\"@@template\" [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\">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\">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=\"@@templateEmptyClientHint\">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\">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\">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\">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\">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\">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=\"@@attachments\" [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\">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=\"@@active\">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\">Save</button>\r\n\t\t\t\t\t\t<button type=\"button\" mat-button (click)=\"apply()\" *ngIf=\"isEditMode\" [disabled]=\"isSaving\" i18n=\"@@apply\">Apply</button>\r\n\t\t\t\t\t\t<button type=\"button\" mat-button (click)=\"back()\" i18n=\"@@cancel\">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\">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\">Save</button>\r\n\t\t\t\t\t\t<button type=\"button\" mat-button (click)=\"apply()\" *ngIf=\"isEditMode\" [disabled]=\"isSaving\" i18n=\"@@apply\">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\">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\">Save</button>\r\n\t\t\t\t\t\t<button type=\"button\" mat-button (click)=\"apply()\" *ngIf=\"isEditMode\" [disabled]=\"isSaving\" i18n=\"@@apply\">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\">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\">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\">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 { Api, AuditEntity, Column, Display, FormField, FormFieldType, prop, required, Table } from \"@messaia/cdk\";\r\n\r\n@Api('slider')\r\n@Table()\r\nexport class Slider extends AuditEntity {\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({ maxWidth: 150, showGtLg: true })\r\n @Display($localize`:@@group:Group`)\r\n group: string;\r\n\r\n @required()\r\n @FormField({ row: 4, type: FormFieldType.Editor })\r\n @Display($localize`:@@content:Content`)\r\n content: string;\r\n\r\n @FormField({ row: 1, endpoint: 'client?enabled=true&projection=id,name' })\r\n @Column({\r\n name: 'client.displayName',\r\n endpoint: 'client?enabled=true&projection=id,name',\r\n maxWidth: 250,\r\n showGtLg: true\r\n })\r\n @Display($localize`:@@project:Project`)\r\n @prop()\r\n clientId: number;\r\n\r\n @prop()\r\n @FormField({ row: 3 })\r\n @Display($localize`:@@ordering:Ordering`)\r\n ordering: number;\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 { 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 * Form validation resolve service\r\n */\r\n@Injectable()\r\nexport class FormValidationResolve implements Resolve<any> {\r\n\r\n /**\r\n * Resolves Form validation\r\n */\r\n resolve(): Observable<any> {\r\n return of(ServiceLocator.getService(CmsSettings)?.multitenantable ? { clientId: { required: true } } : {});\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 { ResolveData, RouterModule, Routes } from '@angular/router';\r\nimport { AuthHelper } from '@messaia/cdk';\r\nimport { DocumentType, 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 { 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 { Slider } from './models/slider';\r\nimport { Template } from './models/template';\r\nimport { ExcludedColumnsResolve } from './resolvers/excluded-columns.resolve';\r\nimport { ExcludedFieldsResolve } from './resolvers/excluded-fields.resolve';\r\nimport { FormValidationResolve } from './resolvers/form-validation.resolve';\r\nimport { IncludesResolve } from './resolvers/includes.resolve';\r\nimport { SettingsResolve } from './resolvers/settings.resolve';\r\n\r\nconst ListResolve: ResolveData = {\r\n settings: SettingsResolve,\r\n includes: IncludesResolve,\r\n excludedColumns: ExcludedColumnsResolve\r\n};\r\n\r\nconst FormResolve: ResolveData = {\r\n settings: SettingsResolve,\r\n excludedFields: ExcludedFieldsResolve,\r\n formValidation: FormValidationResolve\r\n};\r\n\r\nconst routes: Routes = [\r\n { path: '', redirectTo: '/cms/contents/page', pathMatch: 'full' },\r\n { path: 'faq', redirectTo: '/cms/faqs', pathMatch: 'full' },\r\n\r\n { path: 'contents/page', component: VdDynamicListComponent, data: { classType: Content, query: { type: ContentType.Page } }, resolve: ListResolve },\r\n { path: 'contents/block', component: VdDynamicListComponent, data: { classType: Content, query: { type: ContentType.Block } }, resolve: ListResolve },\r\n { path: 'contents/:type/add', component: ContentFormComponent, resolve: FormResolve },\r\n { path: 'contents/:type/edit/:id', component: ContentFormComponent, resolve: FormResolve },\r\n //\r\n { path: 'variables', component: VdDynamicListComponent, data: { classType: ContentVariable }, resolve: ListResolve },\r\n { path: 'variables/edit/:id', component: VdDynamicFormComponent, data: { classType: ContentVariable, subtitle: $localize`:@@variables:Variables` }, resolve: FormResolve },\r\n { path: 'variables/add', component: VdDynamicFormComponent, data: { classType: ContentVariable, subtitle: $localize`:@@variables:Variables` }, resolve: FormResolve },\r\n\r\n { path: 'templates', component: VdDynamicListComponent, data: { classType: Template, includes: 'Client' }, resolve: ListResolve },\r\n { path: 'templates/edit/:id', component: TemplateFormComponent, resolve: FormResolve },\r\n { path: 'templates/add', component: TemplateFormComponent, resolve: FormResolve },\r\n\r\n { path: 'faqs', component: VdDynamicListComponent, data: { classType: Faq }, resolve: ListResolve },\r\n { path: 'faqs/edit/:id', component: VdDynamicFormComponent, data: { classType: Faq, subtitle: $localize`:@@faq:FAQ` }, resolve: FormResolve },\r\n { path: 'faqs/add', component: VdDynamicFormComponent, data: { classType: Faq, query: { clientId: AuthHelper.user.clientId }, subtitle: $localize`:@@faq:FAQ` }, resolve: FormResolve },\r\n\r\n { path: 'sliders', component: VdDynamicListComponent, data: { classType: Slider }, resolve: ListResolve },\r\n { path: 'sliders/edit/:id', component: VdDynamicFormComponent, data: { classType: Slider, subtitle: $localize`:@@slider:Slider` }, resolve: FormResolve },\r\n { path: 'sliders/add', component: VdDynamicFormComponent, data: { classType: Slider, query: { clientId: AuthHelper.user.clientId }, subtitle: $localize`:@@slider:Slider` }, resolve: FormResolve },\r\n\r\n { path: 'documents', component: VdDynamicListComponent, data: { classType: Document, addDialogType: DocumentDialogComponent, query: { type: DocumentType.Document } }, resolve: ListResolve },\r\n];\r\n\r\n@NgModule({\r\n imports: [RouterModule.forChild(routes)],\r\n exports: [RouterModule],\r\n providers: [\r\n SettingsResolve,\r\n IncludesResolve,\r\n ExcludedColumnsResolve,\r\n ExcludedFieldsResolve,\r\n FormValidationResolve\r\n ]\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}","import { Injectable } from '@angular/core';\r\nimport { GenericService } from '@messaia/cdk';\r\nimport { Slider } from '../models/slider';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class SliderService extends GenericService<Slider> {\r\n\r\n /**\r\n * Constructor\r\n */\r\n constructor() {\r\n super('slider');\r\n }\r\n}","/*\n * Public API Surface of cdk-base\n */\nexport * from './cms.module';\nexport * from './enums/content-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/slider';\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/slider.service';\nexport * from './services/template-preview.service';\nexport * from './services/template.service';\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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"}
|
|
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/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/models/slider.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/form-validation.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/services/slider.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}","import { Injectable } from \"@angular/core\";\r\n\r\n@Injectable()\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 { Api, 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@Api('content')\r\n@Table({ duplicable: true })\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 } 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 * settings: CmsSettings\r\n\t */\r\n\tpublic settings: CmsSettings = new CmsSettings();\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 * 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 = this.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\t/* Get some props from route snapshot */\r\n\t\tthis.route.data.subscribe((data: any) => {\r\n\t\t\tthis.formValidation = data.formValidation;\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=\"@@content\" [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\">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\">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\">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\">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 i18n=\"@@aliases\">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\">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 i18n=\"@@layout\">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\">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 i18n=\"@@script\">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 i18n=\"@@style\">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=\"@@showTitle\">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\" i18n=\"@@default\">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\">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\">Save</button>\r\n\t\t\t\t\t\t<button type=\"button\" mat-button *ngIf=\"isEditMode\" (click)=\"apply()\" [disabled]=\"isSaving\" i18n=\"@@apply\">Apply</button>\r\n\t\t\t\t\t\t<button type=\"button\" mat-button (click)=\"back()\" i18n=\"@@cancel\">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\">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\">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 { Column, prop, required, Table } from \"@messaia/cdk\";\r\nimport { Attachment, DocumentBase } from \"@messaia/cdk-base\";\r\n\r\n@Table({\r\n endpoint: 'document',\r\n editable: false,\r\n downloadable: true\r\n})\r\nexport class Document extends DocumentBase {\r\n @prop()\r\n customerId: number;\r\n\r\n @Column({\r\n index: 5,\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 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 { CmsSettings } from '../../models/cms-settings';\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('ClientAdministrator') || AuthHelper.hasRole('ClientManager');\r\n\r\n\t/**\r\n\t * settings: CmsSettings\r\n\t */\r\n\tpublic settings: CmsSettings = new CmsSettings();\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\tthis.settings = this.getService(CmsSettings);\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=\"@@newDocument\">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\">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\">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\">Document</span></mat-option>\r\n\t\t\t\t\t<mat-option value=\"images\"><span i18n=\"@@image\">Image</span></mat-option>\r\n\t\t\t\t\t<mat-option value=\"videos\"><span i18n=\"@@video\">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=\"@@preserveOriginalName\">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=\"@@warningOldFilesWillBeBverridden\">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\">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\">Save</button>\r\n\t\t<button type=\"button\" mat-button (click)=\"cancel()\" i18n=\"@@cancel\">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=\"@@isRequired\"> 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\">Email</mat-label>\r\n <input matInput type=\"email\" name=\"email\" [(ngModel)]=\"data.email\" #email=\"ngModel\" required email placeholder=\"Email\" i18n-placeholder=\"@@email\">\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\">Email</span><span i18n=\"@@isRequired\"> is required</span></mat-error>\r\n <mat-error *ngIf=\"!email.errors?.required && email.errors?.email\"><span i18n=\"@@email\">Email</span><span i18n=\"@@isInvalid\"> is invalid</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\">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 { CmsSettings } from '../../models/cms-settings';\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 * settings: CmsSettings\r\n\t */\r\n\tpublic settings: CmsSettings = new CmsSettings();\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) {\r\n\t\tsuper(Template, service, route, changeDetectorRef)\r\n\t\tthis.settings = this.getService(CmsSettings);\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}","<vd-layout-nav color=\"primary\" [backNavigationRoute]=\"listRoute\" toolbarTitle=\"Template\" i18n-toolbarTitle=\"@@template\" [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\">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\">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=\"@@templateEmptyClientHint\">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\">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\">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\">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\">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\">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=\"@@attachments\" [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\">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=\"@@active\">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\">Save</button>\r\n\t\t\t\t\t\t<button type=\"button\" mat-button (click)=\"apply()\" *ngIf=\"isEditMode\" [disabled]=\"isSaving\" i18n=\"@@apply\">Apply</button>\r\n\t\t\t\t\t\t<button type=\"button\" mat-button (click)=\"back()\" i18n=\"@@cancel\">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\">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\">Save</button>\r\n\t\t\t\t\t\t<button type=\"button\" mat-button (click)=\"apply()\" *ngIf=\"isEditMode\" [disabled]=\"isSaving\" i18n=\"@@apply\">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\">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\">Save</button>\r\n\t\t\t\t\t\t<button type=\"button\" mat-button (click)=\"apply()\" *ngIf=\"isEditMode\" [disabled]=\"isSaving\" i18n=\"@@apply\">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\">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\">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\">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 { Api, AuditEntity, Column, Display, FormField, FormFieldType, prop, required, Table } from \"@messaia/cdk\";\r\n\r\n@Api('slider')\r\n@Table()\r\nexport class Slider extends AuditEntity {\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({ maxWidth: 150, showGtLg: true })\r\n @Display($localize`:@@group:Group`)\r\n group: string;\r\n\r\n @required()\r\n @FormField({ row: 4, type: FormFieldType.Editor })\r\n @Display($localize`:@@content:Content`)\r\n content: string;\r\n\r\n @FormField({ row: 1, endpoint: 'client?enabled=true&projection=id,name' })\r\n @Column({\r\n name: 'client.displayName',\r\n endpoint: 'client?enabled=true&projection=id,name',\r\n maxWidth: 250,\r\n showGtLg: true\r\n })\r\n @Display($localize`:@@project:Project`)\r\n @prop()\r\n clientId: number;\r\n\r\n @prop()\r\n @FormField({ row: 3 })\r\n @Display($localize`:@@ordering:Ordering`)\r\n ordering: number;\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 { 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 * Form validation resolve service\r\n */\r\n@Injectable()\r\nexport class FormValidationResolve implements Resolve<any> {\r\n\r\n /**\r\n * Resolves Form validation\r\n */\r\n resolve(): Observable<any> {\r\n return of(ServiceLocator.getService(CmsSettings)?.multitenantable ? { clientId: { required: true } } : {});\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 { ResolveData, RouterModule, Routes } from '@angular/router';\r\nimport { AuthHelper } from '@messaia/cdk';\r\nimport { DocumentType, 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 { 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 { Slider } from './models/slider';\r\nimport { Template } from './models/template';\r\nimport { ExcludedColumnsResolve } from './resolvers/excluded-columns.resolve';\r\nimport { ExcludedFieldsResolve } from './resolvers/excluded-fields.resolve';\r\nimport { FormValidationResolve } from './resolvers/form-validation.resolve';\r\nimport { IncludesResolve } from './resolvers/includes.resolve';\r\nimport { SettingsResolve } from './resolvers/settings.resolve';\r\n\r\nconst ListResolve: ResolveData = {\r\n settings: SettingsResolve,\r\n includes: IncludesResolve,\r\n excludedColumns: ExcludedColumnsResolve\r\n};\r\n\r\nconst FormResolve: ResolveData = {\r\n settings: SettingsResolve,\r\n excludedFields: ExcludedFieldsResolve,\r\n formValidation: FormValidationResolve\r\n};\r\n\r\nconst routes: Routes = [\r\n { path: '', redirectTo: '/cms/contents/page', pathMatch: 'full' },\r\n { path: 'faq', redirectTo: '/cms/faqs', pathMatch: 'full' },\r\n\r\n { path: 'contents/page', component: VdDynamicListComponent, data: { classType: Content, query: { type: ContentType.Page } }, resolve: ListResolve },\r\n { path: 'contents/block', component: VdDynamicListComponent, data: { classType: Content, query: { type: ContentType.Block } }, resolve: ListResolve },\r\n { path: 'contents/:type/add', component: ContentFormComponent, resolve: FormResolve },\r\n { path: 'contents/:type/edit/:id', component: ContentFormComponent, resolve: FormResolve },\r\n //\r\n { path: 'variables', component: VdDynamicListComponent, data: { classType: ContentVariable }, resolve: ListResolve },\r\n { path: 'variables/edit/:id', component: VdDynamicFormComponent, data: { classType: ContentVariable, subtitle: $localize`:@@variables:Variables` }, resolve: FormResolve },\r\n { path: 'variables/add', component: VdDynamicFormComponent, data: { classType: ContentVariable, subtitle: $localize`:@@variables:Variables` }, resolve: FormResolve },\r\n\r\n { path: 'templates', component: VdDynamicListComponent, data: { classType: Template, includes: 'Client' }, resolve: ListResolve },\r\n { path: 'templates/edit/:id', component: TemplateFormComponent, resolve: FormResolve },\r\n { path: 'templates/add', component: TemplateFormComponent, resolve: FormResolve },\r\n\r\n { path: 'faqs', component: VdDynamicListComponent, data: { classType: Faq }, resolve: ListResolve },\r\n { path: 'faqs/edit/:id', component: VdDynamicFormComponent, data: { classType: Faq, subtitle: $localize`:@@faq:FAQ` }, resolve: FormResolve },\r\n { path: 'faqs/add', component: VdDynamicFormComponent, data: { classType: Faq, query: { clientId: AuthHelper.user.clientId }, subtitle: $localize`:@@faq:FAQ` }, resolve: FormResolve },\r\n\r\n { path: 'sliders', component: VdDynamicListComponent, data: { classType: Slider }, resolve: ListResolve },\r\n { path: 'sliders/edit/:id', component: VdDynamicFormComponent, data: { classType: Slider, subtitle: $localize`:@@slider:Slider` }, resolve: FormResolve },\r\n { path: 'sliders/add', component: VdDynamicFormComponent, data: { classType: Slider, query: { clientId: AuthHelper.user.clientId }, subtitle: $localize`:@@slider:Slider` }, resolve: FormResolve },\r\n\r\n { path: 'documents', component: VdDynamicListComponent, data: { classType: Document, addDialogType: DocumentDialogComponent, query: { type: DocumentType.Document } }, resolve: ListResolve },\r\n];\r\n\r\n@NgModule({\r\n imports: [RouterModule.forChild(routes)],\r\n exports: [RouterModule],\r\n providers: [\r\n SettingsResolve,\r\n IncludesResolve,\r\n ExcludedColumnsResolve,\r\n ExcludedFieldsResolve,\r\n FormValidationResolve\r\n ]\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}","import { Injectable } from '@angular/core';\r\nimport { GenericService } from '@messaia/cdk';\r\nimport { Slider } from '../models/slider';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class SliderService extends GenericService<Slider> {\r\n\r\n /**\r\n * Constructor\r\n */\r\n constructor() {\r\n super('slider');\r\n }\r\n}","/*\n * Public API Surface of cdk-base\n */\nexport * from './cms.module';\nexport * from './enums/content-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/slider';\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/slider.service';\nexport * from './services/template-preview.service';\nexport * from './services/template.service';\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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"}
|
package/package.json
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@messaia/cdk-cms",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.3",
|
|
4
4
|
"peerDependencies": {
|
|
5
5
|
"@angular/common": "~13.3.0",
|
|
6
6
|
"@angular/core": "~13.3.0",
|
|
7
|
-
"@messaia/cdk": "^13.3.
|
|
7
|
+
"@messaia/cdk": "^13.3.5-rc25"
|
|
8
8
|
},
|
|
9
9
|
"dependencies": {
|
|
10
10
|
"tslib": "^2.3.0"
|