@pobuca/email-builder 1.0.1 → 1.1.0
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.
- package/README.md +1 -1
- package/bundles/pobuca-email-builder.umd.js +4464 -4414
- package/bundles/pobuca-email-builder.umd.js.map +1 -1
- package/bundles/pobuca-email-builder.umd.min.js +1 -1
- package/bundles/pobuca-email-builder.umd.min.js.map +1 -1
- package/esm2015/lib/classes/DefaultEmail.js +54 -53
- package/esm2015/lib/classes/Elements.js +229 -229
- package/esm2015/lib/classes/Structure.js +89 -89
- package/esm2015/lib/components/block/block.component.js +89 -89
- package/esm2015/lib/components/block-settings/block-settings.component.js +53 -53
- package/esm2015/lib/components/builder-container/builder-container.component.js +114 -114
- package/esm2015/lib/components/dialog.component.js +30 -30
- package/esm2015/lib/components/general-settings/general-settings.component.js +25 -25
- package/esm2015/lib/components/import-dialog/import-dialog.component.js +62 -62
- package/esm2015/lib/components/preview.component.js +89 -89
- package/esm2015/lib/components/structure/structure.component.js +163 -163
- package/esm2015/lib/components/structure-settings/structure-settings.component.js +31 -31
- package/esm2015/lib/components/template-list-dialog/template-list-dialog.component.js +45 -45
- package/esm2015/lib/directives/dynamic-component.directive.js +46 -46
- package/esm2015/lib/elements/abstract-block.js +23 -23
- package/esm2015/lib/elements/button/button.component.js +29 -29
- package/esm2015/lib/elements/divider/divider.component.js +30 -30
- package/esm2015/lib/elements/image/image.component.js +54 -54
- package/esm2015/lib/elements/social/social.component.js +42 -42
- package/esm2015/lib/elements/spacer/spacer.component.js +30 -30
- package/esm2015/lib/elements/text-element/text-element.component.js +80 -80
- package/esm2015/lib/groups/align.js +79 -79
- package/esm2015/lib/groups/back-repeat.js +55 -55
- package/esm2015/lib/groups/border.js +102 -102
- package/esm2015/lib/groups/color.js +139 -139
- package/esm2015/lib/groups/direction.js +63 -63
- package/esm2015/lib/groups/font-styles.js +127 -112
- package/esm2015/lib/groups/gaps.js +45 -45
- package/esm2015/lib/groups/line-height.js +68 -68
- package/esm2015/lib/groups/link.js +67 -67
- package/esm2015/lib/groups/margin.js +45 -45
- package/esm2015/lib/groups/padding.js +53 -53
- package/esm2015/lib/groups/upload-image.js +112 -112
- package/esm2015/lib/groups/width-height.js +94 -94
- package/esm2015/lib/interceptors/pb-interceptor.interceptor.js +51 -51
- package/esm2015/lib/interfaces/interfaces.js +13 -13
- package/esm2015/lib/pb-email-builder.component.js +258 -246
- package/esm2015/lib/pb-email-builder.module.js +291 -291
- package/esm2015/lib/pb-email-builder.service.js +134 -134
- package/esm2015/lib/pipes/slugify.pipe.js +39 -39
- package/esm2015/lib/services/internals/pb-email-object-store/pb-email-object-store.service.js +175 -165
- package/esm2015/lib/services/internals/user-interfaces/user-interface.service.js +122 -122
- package/esm2015/lib/services/pb-storage/FreeUsersStorage.class.js +11 -11
- package/esm2015/lib/services/pb-storage/index.js +7 -7
- package/esm2015/lib/services/pb-storage/pb-storage.service.js +79 -79
- package/esm2015/lib/services/user-image-uploader-service/free-users-image-uploader.service.js +26 -26
- package/esm2015/lib/services/user-image-uploader-service/index.js +8 -8
- package/esm2015/lib/services/user-image-uploader-service/paid-users-image-uploader.service.js +30 -30
- package/esm2015/lib/services/user-image-uploader-service/upload-bottom-sheet-dialog/upload-bottom-sheet-dialog.component.js +112 -112
- package/esm2015/lib/services/user-image-uploader-service/upload-image-gallery/upload-image-gallery.component.js +91 -91
- package/esm2015/lib/services/user-image-uploader-service/user-image-uploader.service.js +26 -26
- package/esm2015/lib/services/user-middleware-service/FreeUsersMiddleware.js +31 -31
- package/esm2015/lib/services/user-middleware-service/PaidUsersMiddleware.js +12 -12
- package/esm2015/lib/services/user-middleware-service/index.js +8 -8
- package/esm2015/lib/services/user-middleware-service/pb-middlewares.service.js +195 -195
- package/esm2015/lib/services/user-rest-api-service/free-users-rest-api.service.js +16 -16
- package/esm2015/lib/services/user-rest-api-service/index.js +7 -7
- package/esm2015/lib/services/user-rest-api-service/user-rest-api.service.js +116 -116
- package/esm2015/lib/tokens/private-tokens.js +17 -17
- package/esm2015/lib/tokens/tokens.js +159 -159
- package/esm2015/lib/utils.js +147 -147
- package/esm2015/pobuca-email-builder.js +42 -42
- package/esm2015/public_api.js +26 -26
- package/fesm2015/pobuca-email-builder.js +4206 -4168
- package/fesm2015/pobuca-email-builder.js.map +1 -1
- package/lib/classes/DefaultEmail.d.ts +10 -9
- package/lib/classes/Elements.d.ts +62 -62
- package/lib/classes/Structure.d.ts +11 -11
- package/lib/components/block/block.component.d.ts +25 -25
- package/lib/components/block-settings/block-settings.component.d.ts +18 -18
- package/lib/components/builder-container/builder-container.component.d.ts +36 -36
- package/lib/components/dialog.component.d.ts +10 -10
- package/lib/components/general-settings/general-settings.component.d.ts +6 -6
- package/lib/components/import-dialog/import-dialog.component.d.ts +16 -16
- package/lib/components/preview.component.d.ts +18 -18
- package/lib/components/structure/structure.component.d.ts +43 -43
- package/lib/components/structure-settings/structure-settings.component.d.ts +9 -9
- package/lib/components/template-list-dialog/template-list-dialog.component.d.ts +15 -15
- package/lib/directives/dynamic-component.directive.d.ts +13 -13
- package/lib/elements/abstract-block.d.ts +8 -8
- package/lib/elements/button/button.component.d.ts +18 -18
- package/lib/elements/divider/divider.component.d.ts +10 -10
- package/lib/elements/image/image.component.d.ts +19 -19
- package/lib/elements/social/social.component.d.ts +21 -21
- package/lib/elements/spacer/spacer.component.d.ts +5 -5
- package/lib/elements/text-element/text-element.component.d.ts +52 -52
- package/lib/groups/align.d.ts +17 -17
- package/lib/groups/back-repeat.d.ts +8 -8
- package/lib/groups/border.d.ts +13 -13
- package/lib/groups/color.d.ts +26 -26
- package/lib/groups/direction.d.ts +13 -13
- package/lib/groups/font-styles.d.ts +21 -17
- package/lib/groups/gaps.d.ts +7 -7
- package/lib/groups/line-height.d.ts +12 -12
- package/lib/groups/link.d.ts +11 -11
- package/lib/groups/margin.d.ts +8 -8
- package/lib/groups/padding.d.ts +8 -8
- package/lib/groups/upload-image.d.ts +19 -19
- package/lib/groups/width-height.d.ts +19 -19
- package/lib/interceptors/pb-interceptor.interceptor.d.ts +10 -10
- package/lib/interfaces/interfaces.d.ts +430 -422
- package/lib/pb-email-builder.component.d.ts +67 -67
- package/lib/pb-email-builder.module.d.ts +51 -51
- package/lib/pb-email-builder.service.d.ts +83 -83
- package/lib/pipes/slugify.pipe.d.ts +9 -9
- package/lib/services/internals/pb-email-object-store/pb-email-object-store.service.d.ts +50 -50
- package/lib/services/internals/user-interfaces/user-interface.service.d.ts +46 -46
- package/lib/services/pb-storage/FreeUsersStorage.class.d.ts +6 -6
- package/lib/services/pb-storage/index.d.ts +2 -2
- package/lib/services/pb-storage/pb-storage.service.d.ts +54 -54
- package/lib/services/user-image-uploader-service/free-users-image-uploader.service.d.ts +12 -12
- package/lib/services/user-image-uploader-service/index.d.ts +3 -3
- package/lib/services/user-image-uploader-service/paid-users-image-uploader.service.d.ts +14 -14
- package/lib/services/user-image-uploader-service/upload-bottom-sheet-dialog/upload-bottom-sheet-dialog.component.d.ts +28 -28
- package/lib/services/user-image-uploader-service/upload-image-gallery/upload-image-gallery.component.d.ts +27 -27
- package/lib/services/user-image-uploader-service/user-image-uploader.service.d.ts +26 -26
- package/lib/services/user-middleware-service/FreeUsersMiddleware.d.ts +15 -15
- package/lib/services/user-middleware-service/PaidUsersMiddleware.d.ts +7 -7
- package/lib/services/user-middleware-service/index.d.ts +3 -3
- package/lib/services/user-middleware-service/pb-middlewares.service.d.ts +190 -190
- package/lib/services/user-rest-api-service/free-users-rest-api.service.d.ts +10 -10
- package/lib/services/user-rest-api-service/index.d.ts +2 -2
- package/lib/services/user-rest-api-service/user-rest-api.service.d.ts +82 -82
- package/lib/tokens/private-tokens.d.ts +5 -5
- package/lib/tokens/tokens.d.ts +70 -70
- package/lib/utils.d.ts +88 -88
- package/package.json +8 -3
- package/pobuca-email-builder.d.ts +42 -42
- package/pobuca-email-builder.metadata.json +1 -1
- package/public_api.d.ts +16 -16
|
@@ -1,114 +1,114 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* Copyright (c) 2024 Pobuca.
|
|
3
|
-
* All rights reserved.
|
|
4
|
-
*/
|
|
5
|
-
import { ChangeDetectionStrategy, Component, HostListener, Inject } from '@angular/core';
|
|
6
|
-
import { DomSanitizer } from '@angular/platform-browser';
|
|
7
|
-
import { catchError, exhaustMap, finalize, map, switchMap, take, tap } from 'rxjs/operators';
|
|
8
|
-
import { EMPTY, iif, throwError } from 'rxjs';
|
|
9
|
-
import { createBorder, createMargin, createPadding, createWidthHeight, deferOf } from '../../utils';
|
|
10
|
-
import { PBEmail } from '../../classes/DefaultEmail';
|
|
11
|
-
import { PbUserMiddlewaresService } from '../../services/user-middleware-service/pb-middlewares.service';
|
|
12
|
-
import { PbUserInterfaceService } from '../../services/internals/user-interfaces/user-interface.service';
|
|
13
|
-
import { PbEmailObjectStoreService } from '../../services/internals/pb-email-object-store/pb-email-object-store.service';
|
|
14
|
-
import { PbUserRestApiService } from '../../services/user-rest-api-service/user-rest-api.service';
|
|
15
|
-
import { PB_CONFIG } from '../../tokens/tokens';
|
|
16
|
-
import { PbStorageService } from '../../services/pb-storage/pb-storage.service';
|
|
17
|
-
// import { IpUserRestApiProvider } from '../providers';
|
|
18
|
-
export class BuilderContainerComponent {
|
|
19
|
-
constructor(userInterfaceService, emailObjectStore, userRestApi, pbStorage, pbMiddlewaresService, sanitizer, userConfig) {
|
|
20
|
-
var _a;
|
|
21
|
-
this.userInterfaceService = userInterfaceService;
|
|
22
|
-
this.emailObjectStore = emailObjectStore;
|
|
23
|
-
this.userRestApi = userRestApi;
|
|
24
|
-
this.pbStorage = pbStorage;
|
|
25
|
-
this.pbMiddlewaresService = pbMiddlewaresService;
|
|
26
|
-
this.sanitizer = sanitizer;
|
|
27
|
-
this.userConfig = userConfig;
|
|
28
|
-
this.showTemplateList = (_a = this.userConfig.templateListIfEmpty) !== null && _a !== void 0 ? _a : true;
|
|
29
|
-
this.getStructures$ = this.emailObjectStore.emailStructuresAsObservable$;
|
|
30
|
-
this.activeMatProgress$ = this.userInterfaceService.activeMatProgress$;
|
|
31
|
-
}
|
|
32
|
-
onHostClick() {
|
|
33
|
-
this.userInterfaceService.editGeneralSettings();
|
|
34
|
-
}
|
|
35
|
-
trackBy(structure) {
|
|
36
|
-
return structure.id;
|
|
37
|
-
}
|
|
38
|
-
disableStructureDrag$(structure) {
|
|
39
|
-
return this.pbMiddlewaresService.disableStructureDragWithinEmailBody(structure).pipe(take(1));
|
|
40
|
-
}
|
|
41
|
-
openTemplateDialog(ev) {
|
|
42
|
-
ev.stopImmediatePropagation();
|
|
43
|
-
this.userInterfaceService.activeMatProgress$.next(true);
|
|
44
|
-
const cachedTemplates = this.pbStorage.getCachedTemplateList();
|
|
45
|
-
return iif(() => cachedTemplates.length > 0, deferOf(cachedTemplates), this.userRestApi.getAllUserTemplates$.pipe(tap(list => this.pbStorage.cacheTemplateList(list))))
|
|
46
|
-
.pipe(
|
|
47
|
-
// map(() => []),
|
|
48
|
-
map(templates => {
|
|
49
|
-
return [...templates, { category: 'latest', templates: this.pbStorage.getLatestUsedTemplates() }];
|
|
50
|
-
}), finalize(() => this.userInterfaceService.activeMatProgress$.next(false)), exhaustMap(list => (list === null || list === void 0 ? void 0 : list.length) > 0 ? this.userInterfaceService.templatesListDialog$(list) : throwError(new Error('The template list is empty'))), switchMap(({ category, template }) => this.pbMiddlewaresService.chooseTemplate(category, template)), exhaustMap(({ category, template }) => this.userRestApi.getUserTemplateData$(category, template).pipe(tap(choosedTemplate => {
|
|
51
|
-
if (category !== 'latest') {
|
|
52
|
-
this.pbStorage.addTemplateToLatestUsed(choosedTemplate);
|
|
53
|
-
}
|
|
54
|
-
}))), catchError((error) => this.pbMiddlewaresService.catchError(error).pipe(switchMap(() => {
|
|
55
|
-
this.userInterfaceService.notify(error.message);
|
|
56
|
-
return EMPTY;
|
|
57
|
-
}))), take(1))
|
|
58
|
-
.subscribe((result) => {
|
|
59
|
-
if (result) {
|
|
60
|
-
this.emailObjectStore.setEmail(new PBEmail(result.templateData));
|
|
61
|
-
}
|
|
62
|
-
else {
|
|
63
|
-
this.userInterfaceService.notify('No template was chosen');
|
|
64
|
-
}
|
|
65
|
-
});
|
|
66
|
-
}
|
|
67
|
-
dropNewStructure(event) {
|
|
68
|
-
if (event.previousContainer === event.container) {
|
|
69
|
-
this.emailObjectStore.changeStructureOrder(event);
|
|
70
|
-
}
|
|
71
|
-
else {
|
|
72
|
-
this.pbMiddlewaresService
|
|
73
|
-
.addStructure(event)
|
|
74
|
-
.pipe(tap(newEvent => this.emailObjectStore.addStructure(newEvent)), take(1))
|
|
75
|
-
.subscribe();
|
|
76
|
-
}
|
|
77
|
-
}
|
|
78
|
-
getStructureStyles(structure) {
|
|
79
|
-
const { border, background, padding, margin, columnsWidth, fullWidth } = structure.options;
|
|
80
|
-
return Object.assign(Object.assign(Object.assign({
|
|
81
|
-
// direction,
|
|
82
|
-
width: fullWidth ? '100%' : `${this.emailObjectStore.Email.general.width.value}px`, backgroundRepeat: background.repeat, backgroundColor: background.color, backgroundSize: createWidthHeight(background.size), backgroundPosition: 'top center', gridTemplateColumns: columnsWidth.map(fr => `${fr}fr`).join(' ') }, createBorder(border)), createPadding(padding)), createMargin(margin));
|
|
83
|
-
}
|
|
84
|
-
getBackgroundImage(structure) {
|
|
85
|
-
const { background: { url } } = structure.options;
|
|
86
|
-
return this.sanitizer.bypassSecurityTrustStyle(url && `url(${url})`);
|
|
87
|
-
}
|
|
88
|
-
}
|
|
89
|
-
BuilderContainerComponent.decorators = [
|
|
90
|
-
{ type: Component, args: [{
|
|
91
|
-
selector: 'pb-builder-container',
|
|
92
|
-
template: "<!--\n ~ Copyright (c) 2024 Pobuca.\n ~ All rights reserved.\n -->\n\n<ng-container *ngIf=\"getStructures$ | async as structures\">\n <div cdkDropList [cdkDropListData]=\"structures\"\n cdkDropListConnectedTo=\"structures-drop-list\" id=\"structures-drop-list\"\n (cdkDropListDropped)=\"dropNewStructure($event)\" fxFlex fxLayout=\"column\" fxLayoutAlign=\"start center\">\n <pb-structure cdkDrag\n *ngFor=\"let structure of structures; trackBy: trackBy; let index = index\" [id]=\"structure.id\"\n [index]=\"index\" [ngClass]=\"structure.type\" [structure]=\"structure\"\n [ngStyle]=\"getStructureStyles(structure)\"\n [style.backgroundImage]=\"getBackgroundImage(structure)\"\n [cdkDragDisabled]=\"disableStructureDrag$(structure) | async\">\n <button cdkDragHandle mat-icon-button class=\"move\" *ngIf=\"!(disableStructureDrag$(structure) | async)\"\n i18n-matTooltip=\"structure|Move Structure\" matTooltip=\"Move Structure\">\n <mat-icon i18n-aria-label=\"structure|Move Structure\" aria-label=\"Move structure\" inline>pan_tool</mat-icon>\n </button>\n </pb-structure>\n\n <div class=\"empty-email mat-typography\" *ngIf=\"!structures.length\">\n <ng-content></ng-content>\n <div class=\"default-empty-email\" *ngIf=\"showTemplateList\">\n <h1 i18n=\"templates|First header\">Choose template from list</h1>\n <p i18n=\"templates|Description\">Or create one from scratch by dragging structures and blocks here!</p>\n <button type=\"button\" color=\"primary\" [disabled]=\"activeMatProgress$ | async\"\n (click)=\"openTemplateDialog($event)\" mat-flat-button i18n=\"templates|Choose a template button\">\n Choose template\n </button>\n </div>\n </div>\n </div>\n</ng-container>\n",
|
|
93
|
-
providers: [
|
|
94
|
-
// IpUserRestApiProvider
|
|
95
|
-
],
|
|
96
|
-
changeDetection: ChangeDetectionStrategy.OnPush
|
|
97
|
-
// encapsulation: ViewEncapsulation.None
|
|
98
|
-
,
|
|
99
|
-
styles: ["/*!\n * Copyright (c) 2024 Pobuca.\n * All rights reserved.\n */pb-structure>.cdk-drag-handle{position:absolute;cursor:move;border-radius:50% 50% 0 0;height:30px;width:30px;font-size:smaller;line-height:0;top:-30px;right:0;background-color:#ff4081;color:#fff;opacity:0}pb-structure.cdk-drag-preview>.cdk-drag-handle,pb-structure:hover>.cdk-drag-handle{opacity:.8}pb-structure.cdk-drag-preview>.cdk-drag-handle:hover,pb-structure:hover>.cdk-drag-handle:hover{opacity:1}pb-structure ::ng-deep .cdk-drag-placeholder{background-color:#3f51b5;opacity:.6;cursor:move;border-radius:0}pb-structure ::ng-deep .cdk-drag-placeholder ::ng-deep :not(mat-icon){display:none}pb-structure ::ng-deep .cdk-drag-placeholder ::ng-deep mat-icon{padding:5px;color:#fff}:host{background-color:#f2f2f2;overflow-x:hidden;overflow-y:auto;position:relative;height:100%}:host #structures-drop-list{height:-moz-fit-content;height:fit-content;max-width:100%;padding-bottom:3rem;will-change:box-shadow}:host #structures-drop-list .empty-email{display:flex;justify-content:center;align-items:center;flex-direction:column;flex:1 1 100%;margin-top:10%}:host #structures-drop-list .empty-email .default-empty-email{text-align:center}:host #structures-drop-list.cdk-drop-list-dragging .empty-email{display:none}"]
|
|
100
|
-
},] }
|
|
101
|
-
];
|
|
102
|
-
BuilderContainerComponent.ctorParameters = () => [
|
|
103
|
-
{ type: PbUserInterfaceService },
|
|
104
|
-
{ type: PbEmailObjectStoreService },
|
|
105
|
-
{ type: PbUserRestApiService },
|
|
106
|
-
{ type: PbStorageService },
|
|
107
|
-
{ type: PbUserMiddlewaresService },
|
|
108
|
-
{ type: DomSanitizer },
|
|
109
|
-
{ type: undefined, decorators: [{ type: Inject, args: [PB_CONFIG,] }] }
|
|
110
|
-
];
|
|
111
|
-
BuilderContainerComponent.propDecorators = {
|
|
112
|
-
onHostClick: [{ type: HostListener, args: ['click',] }]
|
|
113
|
-
};
|
|
114
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVpbGRlci1jb250YWluZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcGItZW1haWwtYnVpbGRlci9zcmMvbGliL2NvbXBvbmVudHMvYnVpbGRlci1jb250YWluZXIvYnVpbGRlci1jb250YWluZXIuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7R0FHRztBQUVILE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUV6RixPQUFPLEVBQUUsWUFBWSxFQUFhLE1BQU0sMkJBQTJCLENBQUM7QUFDcEUsT0FBTyxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdGLE9BQU8sRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLFVBQVUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUU5QyxPQUFPLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxhQUFhLEVBQUUsaUJBQWlCLEVBQUUsT0FBTyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRXBHLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNyRCxPQUFPLEVBQXNCLHdCQUF3QixFQUFFLE1BQU0sK0RBQStELENBQUM7QUFDN0gsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0saUVBQWlFLENBQUM7QUFDekcsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sOEVBQThFLENBQUM7QUFDekgsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sNERBQTRELENBQUM7QUFDbEcsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDhDQUE4QyxD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LENBQUMsU0FBUyxDQUFDLHdCQUF3QixDQUFDLEdBQUcsSUFBSSxPQUFPLEdBQUcsR0FBRyxDQUFDLENBQUM7SUFDdkUsQ0FBQzs7O1lBeEhGLFNBQVMsU0FBQztnQkFDVCxRQUFRLEVBQUUsc0JBQXNCO2dCQUNoQyxrM0RBQWlEO2dCQUVqRCxTQUFTLEVBQUU7Z0JBQ1Qsd0JBQXdCO2lCQUN6QjtnQkFDRCxlQUFlLEVBQUUsdUJBQXVCLENBQUMsTUFBTTtnQkFDL0Msd0NBQXdDOzs7YUFDekM7OztZQWpCUSxzQkFBc0I7WUFDdEIseUJBQXlCO1lBQ3pCLG9CQUFvQjtZQUVwQixnQkFBZ0I7WUFMSSx3QkFBd0I7WUFQNUMsWUFBWTs0Q0FzQ2hCLE1BQU0sU0FBQyxTQUFTOzs7MEJBR2xCLFlBQVksU0FBQyxPQUFPIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIENvcHlyaWdodCAoYykgMjAyNCBQb2J1Y2EuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICovXG5cbmltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIEhvc3RMaXN0ZW5lciwgSW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBIdHRwRXJyb3JSZXNwb25zZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IERvbVNhbml0aXplciwgU2FmZVN0eWxlIH0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlcic7XG5pbXBvcnQgeyBjYXRjaEVycm9yLCBleGhhdXN0TWFwLCBmaW5hbGl6ZSwgbWFwLCBzd2l0Y2hNYXAsIHRha2UsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IEVNUFRZLCBpaWYsIHRocm93RXJyb3IgfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgY3JlYXRlQm9yZGVyLCBjcmVhdGVNYXJnaW4sIGNyZWF0ZVBhZGRpbmcsIGNyZWF0ZVdpZHRoSGVpZ2h0LCBkZWZlck9mIH0gZnJvbSAnLi4vLi4vdXRpbHMnO1xuaW1wb3J0IHsgSUZvclJvb3RDb25mLCBJU3RydWN0dXJlLCBJVXNlclRlbXBsYXRlIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9pbnRlcmZhY2VzJztcbmltcG9ydCB7IFBCRW1haWwgfSBmcm9tICcuLi8uLi9jbGFzc2VzL0RlZmF1bHRFbWFpbCc7XG5pbXBvcnQgeyBJQWRkU3RydWN0dXJlRXZlbnQsIFBiVXNlck1pZGRsZXdhcmVzU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3VzZXItbWlkZGxld2FyZS1zZXJ2aWNlL3BiLW1pZGRsZXdhcmVzLnNlcnZpY2UnO1xuaW1wb3J0IHsgUGJVc2VySW50ZXJmYWNlU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2ludGVybmFscy91c2VyLWludGVyZmFjZXMvdXNlci1pbnRlcmZhY2Uuc2VydmljZSc7XG5pbXBvcnQgeyBQYkVtYWlsT2JqZWN0U3RvcmVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvaW50ZXJuYWxzL3BiLWVtYWlsLW9iamVjdC1zdG9yZS9wYi1lbWFpbC1vYmplY3Qtc3RvcmUuc2VydmljZSc7XG5pbXBvcnQgeyBQYlVzZXJSZXN0QXBpU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3VzZXItcmVzdC1hcGktc2VydmljZS91c2VyLXJlc3QtYXBpLnNlcnZpY2UnO1xuaW1wb3J0IHsgUEJfQ09ORklHIH0gZnJvbSAnLi4vLi4vdG9rZW5zL3Rva2Vucyc7XG5pbXBvcnQgeyBQYlN0b3JhZ2VTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvcGItc3RvcmFnZS9wYi1zdG9yYWdlLnNlcnZpY2UnO1xuXG4vLyBpbXBvcnQgeyBJcFVzZXJSZXN0QXBpUHJvdmlkZXIgfSBmcm9tICcuLi9wcm92aWRlcnMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdwYi1idWlsZGVyLWNvbnRhaW5lcicsXG4gIHRlbXBsYXRlVXJsOiAnLi9idWlsZGVyLWNvbnRhaW5lci5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2J1aWxkZXItY29udGFpbmVyLnNjc3MnXSxcbiAgcHJvdmlkZXJzOiBbXG4gICAgLy8gSXBVc2VyUmVzdEFwaVByb3ZpZGVyXG4gIF0sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXG4gIC8vIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmVcbn0pXG5leHBvcnQgY2xhc3MgQnVpbGRlckNvbnRhaW5lckNvbXBvbmVudCB7XG4gIHNob3dUZW1wbGF0ZUxpc3QgPSB0aGlzLnVzZXJDb25maWcudGVtcGxhdGVMaXN0SWZFbXB0eSA/PyB0cnVlO1xuICBnZXRTdHJ1Y3R1cmVzJCA9IHRoaXMuZW1haWxPYmplY3RTdG9yZS5lbWFpbFN0cnVjdHVyZXNBc09ic2VydmFibGUkO1xuICBhY3RpdmVNYXRQcm9ncmVzcyQgPSB0aGlzLnVzZXJJbnRlcmZhY2VTZXJ2aWNlLmFjdGl2ZU1hdFByb2dyZXNzJDtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHVzZXJJbnRlcmZhY2VTZXJ2aWNlOiBQYlVzZXJJbnRlcmZhY2VTZXJ2aWNlLFxuICAgIHByaXZhdGUgZW1haWxPYmplY3RTdG9yZTogUGJFbWFpbE9iamVjdFN0b3JlU2VydmljZSxcbiAgICBwcml2YXRlIHVzZXJSZXN0QXBpOiBQYlVzZXJSZXN0QXBpU2VydmljZSxcbiAgICBwcml2YXRlIHBiU3RvcmFnZTogUGJTdG9yYWdlU2VydmljZSxcbiAgICBwcml2YXRlIHBiTWlkZGxld2FyZXNTZXJ2aWNlOiBQYlVzZXJNaWRkbGV3YXJlc1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBzYW5pdGl6ZXI6IERvbVNhbml0aXplcixcbiAgICBASW5qZWN0KFBCX0NPTkZJRykgcHJpdmF0ZSB1c2VyQ29uZmlnOiBJRm9yUm9vdENvbmZcbiAgKSB7fVxuXG4gIEBIb3N0TGlzdGVuZXIoJ2NsaWNrJykgb25Ib3N0Q2xpY2soKSB7XG4gICAgdGhpcy51c2VySW50ZXJmYWNlU2VydmljZS5lZGl0R2VuZXJhbFNldHRpbmdzKCk7XG4gIH1cblxuICB0cmFja0J5KHN0cnVjdHVyZTogSVN0cnVjdHVyZSk6IG51bWJlciB7XG4gICAgcmV0dXJuIHN0cnVjdHVyZS5pZDtcbiAgfVxuXG4gIGRpc2FibGVTdHJ1Y3R1cmVEcmFnJChzdHJ1Y3R1cmU6IElTdHJ1Y3R1cmUpIHtcbiAgICByZXR1cm4gdGhpcy5wYk1pZGRsZXdhcmVzU2VydmljZS5kaXNhYmxlU3RydWN0dXJlRHJhZ1dpdGhpbkVtYWlsQm9keShzdHJ1Y3R1cmUpLnBpcGUodGFrZSgxKSk7XG4gIH1cblxuICBvcGVuVGVtcGxhdGVEaWFsb2coZXY6IEV2ZW50KSB7XG4gICAgZXYuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XG4gICAgdGhpcy51c2VySW50ZXJmYWNlU2VydmljZS5hY3RpdmVNYXRQcm9ncmVzcyQubmV4dCh0cnVlKTtcbiAgICBjb25zdCBjYWNoZWRUZW1wbGF0ZXMgPSB0aGlzLnBiU3RvcmFnZS5nZXRDYWNoZWRUZW1wbGF0ZUxpc3QoKTtcbiAgICByZXR1cm4gaWlmKFxuICAgICAgKCkgPT4gY2FjaGVkVGVtcGxhdGVzLmxlbmd0aCA+IDAsXG4gICAgICBkZWZlck9mKGNhY2hlZFRlbXBsYXRlcyksXG4gICAgICB0aGlzLnVzZXJSZXN0QXBpLmdldEFsbFVzZXJUZW1wbGF0ZXMkLnBpcGUodGFwKGxpc3QgPT4gdGhpcy5wYlN0b3JhZ2UuY2FjaGVUZW1wbGF0ZUxpc3QobGlzdCkpKVxuICAgIClcbiAgICAgIC5waXBlKFxuICAgICAgICAvLyBtYXAoKCkgPT4gW10pLFxuICAgICAgICBtYXAodGVtcGxhdGVzID0+IHtcbiAgICAgICAgICByZXR1cm4gWy4uLnRlbXBsYXRlcywgeyBjYXRlZ29yeTogJ2xhdGVzdCcsIHRlbXBsYXRlczogdGhpcy5wYlN0b3JhZ2UuZ2V0TGF0ZXN0VXNlZFRlbXBsYXRlcygpIH1dO1xuICAgICAgICB9KSxcbiAgICAgICAgZmluYWxpemUoKCkgPT4gdGhpcy51c2VySW50ZXJmYWNlU2VydmljZS5hY3RpdmVNYXRQcm9ncmVzcyQubmV4dChmYWxzZSkpLFxuICAgICAgICBleGhhdXN0TWFwKGxpc3QgPT5cbiAgICAgICAgICBsaXN0Py5sZW5ndGggPiAwID8gdGhpcy51c2VySW50ZXJmYWNlU2VydmljZS50ZW1wbGF0ZXNMaXN0RGlhbG9nJChsaXN0KSA6IHRocm93RXJyb3IobmV3IEVycm9yKCdUaGUgdGVtcGxhdGUgbGlzdCBpcyBlbXB0eScpKVxuICAgICAgICApLFxuICAgICAgICBzd2l0Y2hNYXAoKHsgY2F0ZWdvcnksIHRlbXBsYXRlIH0pID0+IHRoaXMucGJNaWRkbGV3YXJlc1NlcnZpY2UuY2hvb3NlVGVtcGxhdGUoY2F0ZWdvcnksIHRlbXBsYXRlKSksXG4gICAgICAgIGV4aGF1c3RNYXAoKHsgY2F0ZWdvcnksIHRlbXBsYXRlIH0pID0+XG4gICAgICAgICAgdGhpcy51c2VyUmVzdEFwaS5nZXRVc2VyVGVtcGxhdGVEYXRhJChjYXRlZ29yeSwgdGVtcGxhdGUpLnBpcGUoXG4gICAgICAgICAgICB0YXAoY2hvb3NlZFRlbXBsYXRlID0+IHtcbiAgICAgICAgICAgICAgaWYgKGNhdGVnb3J5ICE9PSAnbGF0ZXN0Jykge1xuICAgICAgICAgICAgICAgIHRoaXMucGJTdG9yYWdlLmFkZFRlbXBsYXRlVG9MYXRlc3RVc2VkKGNob29zZWRUZW1wbGF0ZSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgKVxuICAgICAgICApLFxuICAgICAgICBjYXRjaEVycm9yKChlcnJvcjogRXJyb3IgfCBIdHRwRXJyb3JSZXNwb25zZSkgPT5cbiAgICAgICAgICB0aGlzLnBiTWlkZGxld2FyZXNTZXJ2aWNlLmNhdGNoRXJyb3IoZXJyb3IpLnBpcGUoXG4gICAgICAgICAgICBzd2l0Y2hNYXAoKCkgPT4ge1xuICAgICAgICAgICAgICB0aGlzLnVzZXJJbnRlcmZhY2VTZXJ2aWNlLm5vdGlmeShlcnJvci5tZXNzYWdlKTtcbiAgICAgICAgICAgICAgcmV0dXJuIEVNUFRZO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICApXG4gICAgICAgICksXG4gICAgICAgIHRha2UoMSlcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKHJlc3VsdDogSVVzZXJUZW1wbGF0ZSkgPT4ge1xuICAgICAgICBpZiAocmVzdWx0KSB7XG4gICAgICAgICAgdGhpcy5lbWFpbE9iamVjdFN0b3JlLnNldEVtYWlsKG5ldyBQQkVtYWlsKHJlc3VsdC50ZW1wbGF0ZURhdGEpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnVzZXJJbnRlcmZhY2VTZXJ2aWNlLm5vdGlmeSgnTm8gdGVtcGxhdGUgd2FzIGNob3NlbicpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgfVxuXG4gIGRyb3BOZXdTdHJ1Y3R1cmUoZXZlbnQ6IElBZGRTdHJ1Y3R1cmVFdmVudCkge1xuICAgIGlmIChldmVudC5wcmV2aW91c0NvbnRhaW5lciA9PT0gZXZlbnQuY29udGFpbmVyKSB7XG4gICAgICB0aGlzLmVtYWlsT2JqZWN0U3RvcmUuY2hhbmdlU3RydWN0dXJlT3JkZXIoZXZlbnQpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnBiTWlkZGxld2FyZXNTZXJ2aWNlXG4gICAgICAgIC5hZGRTdHJ1Y3R1cmUoZXZlbnQpXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIHRhcChuZXdFdmVudCA9PiB0aGlzLmVtYWlsT2JqZWN0U3RvcmUuYWRkU3RydWN0dXJlKG5ld0V2ZW50KSksXG4gICAgICAgICAgdGFrZSgxKVxuICAgICAgICApXG4gICAgICAgIC5zdWJzY3JpYmUoKTtcbiAgICB9XG4gIH1cblxuICBnZXRTdHJ1Y3R1cmVTdHlsZXMoc3RydWN0dXJlOiBJU3RydWN0dXJlKSB7XG4gICAgY29uc3QgeyBib3JkZXIsIGJhY2tncm91bmQsIHBhZGRpbmcsIG1hcmdpbiwgY29sdW1uc1dpZHRoLCBmdWxsV2lkdGggfSA9IHN0cnVjdHVyZS5vcHRpb25zO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIC8vIGRpcmVjdGlvbixcbiAgICAgIHdpZHRoOiBmdWxsV2lkdGggPyAnMTAwJScgOiBgJHt0aGlzLmVtYWlsT2JqZWN0U3RvcmUuRW1haWwuZ2VuZXJhbC53aWR0aC52YWx1ZX1weGAsXG4gICAgICBiYWNrZ3JvdW5kUmVwZWF0OiBiYWNrZ3JvdW5kLnJlcGVhdCxcbiAgICAgIGJhY2tncm91bmRDb2xvcjogYmFja2dyb3VuZC5jb2xvcixcbiAgICAgIGJhY2tncm91bmRTaXplOiBjcmVhdGVXaWR0aEhlaWdodChiYWNrZ3JvdW5kLnNpemUpLFxuICAgICAgYmFja2dyb3VuZFBvc2l0aW9uOiAndG9wIGNlbnRlcicsXG4gICAgICBncmlkVGVtcGxhdGVDb2x1bW5zOiBjb2x1bW5zV2lkdGgubWFwKGZyID0+IGAke2ZyfWZyYCkuam9pbignICcpLFxuICAgICAgLi4uY3JlYXRlQm9yZGVyKGJvcmRlciksXG4gICAgICAuLi5jcmVhdGVQYWRkaW5nKHBhZGRpbmcpLFxuICAgICAgLi4uY3JlYXRlTWFyZ2luKG1hcmdpbilcbiAgICB9O1xuICB9XG5cbiAgZ2V0QmFja2dyb3VuZEltYWdlKHN0cnVjdHVyZTogSVN0cnVjdHVyZSk6IFNhZmVTdHlsZSB7XG4gICAgY29uc3Qge1xuICAgICAgYmFja2dyb3VuZDogeyB1cmwgfVxuICAgIH0gPSBzdHJ1Y3R1cmUub3B0aW9ucztcbiAgICByZXR1cm4gdGhpcy5zYW5pdGl6ZXIuYnlwYXNzU2VjdXJpdHlUcnVzdFN0eWxlKHVybCAmJiBgdXJsKCR7dXJsfSlgKTtcbiAgfVxufVxuIl19
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) 2024 Pobuca.
|
|
3
|
+
* All rights reserved.
|
|
4
|
+
*/
|
|
5
|
+
import { ChangeDetectionStrategy, Component, HostListener, Inject } from '@angular/core';
|
|
6
|
+
import { DomSanitizer } from '@angular/platform-browser';
|
|
7
|
+
import { catchError, exhaustMap, finalize, map, switchMap, take, tap } from 'rxjs/operators';
|
|
8
|
+
import { EMPTY, iif, throwError } from 'rxjs';
|
|
9
|
+
import { createBorder, createMargin, createPadding, createWidthHeight, deferOf } from '../../utils';
|
|
10
|
+
import { PBEmail } from '../../classes/DefaultEmail';
|
|
11
|
+
import { PbUserMiddlewaresService } from '../../services/user-middleware-service/pb-middlewares.service';
|
|
12
|
+
import { PbUserInterfaceService } from '../../services/internals/user-interfaces/user-interface.service';
|
|
13
|
+
import { PbEmailObjectStoreService } from '../../services/internals/pb-email-object-store/pb-email-object-store.service';
|
|
14
|
+
import { PbUserRestApiService } from '../../services/user-rest-api-service/user-rest-api.service';
|
|
15
|
+
import { PB_CONFIG } from '../../tokens/tokens';
|
|
16
|
+
import { PbStorageService } from '../../services/pb-storage/pb-storage.service';
|
|
17
|
+
// import { IpUserRestApiProvider } from '../providers';
|
|
18
|
+
export class BuilderContainerComponent {
|
|
19
|
+
constructor(userInterfaceService, emailObjectStore, userRestApi, pbStorage, pbMiddlewaresService, sanitizer, userConfig) {
|
|
20
|
+
var _a;
|
|
21
|
+
this.userInterfaceService = userInterfaceService;
|
|
22
|
+
this.emailObjectStore = emailObjectStore;
|
|
23
|
+
this.userRestApi = userRestApi;
|
|
24
|
+
this.pbStorage = pbStorage;
|
|
25
|
+
this.pbMiddlewaresService = pbMiddlewaresService;
|
|
26
|
+
this.sanitizer = sanitizer;
|
|
27
|
+
this.userConfig = userConfig;
|
|
28
|
+
this.showTemplateList = (_a = this.userConfig.templateListIfEmpty) !== null && _a !== void 0 ? _a : true;
|
|
29
|
+
this.getStructures$ = this.emailObjectStore.emailStructuresAsObservable$;
|
|
30
|
+
this.activeMatProgress$ = this.userInterfaceService.activeMatProgress$;
|
|
31
|
+
}
|
|
32
|
+
onHostClick() {
|
|
33
|
+
this.userInterfaceService.editGeneralSettings();
|
|
34
|
+
}
|
|
35
|
+
trackBy(structure) {
|
|
36
|
+
return structure.id;
|
|
37
|
+
}
|
|
38
|
+
disableStructureDrag$(structure) {
|
|
39
|
+
return this.pbMiddlewaresService.disableStructureDragWithinEmailBody(structure).pipe(take(1));
|
|
40
|
+
}
|
|
41
|
+
openTemplateDialog(ev) {
|
|
42
|
+
ev.stopImmediatePropagation();
|
|
43
|
+
this.userInterfaceService.activeMatProgress$.next(true);
|
|
44
|
+
const cachedTemplates = this.pbStorage.getCachedTemplateList();
|
|
45
|
+
return iif(() => cachedTemplates.length > 0, deferOf(cachedTemplates), this.userRestApi.getAllUserTemplates$.pipe(tap(list => this.pbStorage.cacheTemplateList(list))))
|
|
46
|
+
.pipe(
|
|
47
|
+
// map(() => []),
|
|
48
|
+
map(templates => {
|
|
49
|
+
return [...templates, { category: 'latest', templates: this.pbStorage.getLatestUsedTemplates() }];
|
|
50
|
+
}), finalize(() => this.userInterfaceService.activeMatProgress$.next(false)), exhaustMap(list => (list === null || list === void 0 ? void 0 : list.length) > 0 ? this.userInterfaceService.templatesListDialog$(list) : throwError(new Error('The template list is empty'))), switchMap(({ category, template }) => this.pbMiddlewaresService.chooseTemplate(category, template)), exhaustMap(({ category, template }) => this.userRestApi.getUserTemplateData$(category, template).pipe(tap(choosedTemplate => {
|
|
51
|
+
if (category !== 'latest') {
|
|
52
|
+
this.pbStorage.addTemplateToLatestUsed(choosedTemplate);
|
|
53
|
+
}
|
|
54
|
+
}))), catchError((error) => this.pbMiddlewaresService.catchError(error).pipe(switchMap(() => {
|
|
55
|
+
this.userInterfaceService.notify(error.message);
|
|
56
|
+
return EMPTY;
|
|
57
|
+
}))), take(1))
|
|
58
|
+
.subscribe((result) => {
|
|
59
|
+
if (result) {
|
|
60
|
+
this.emailObjectStore.setEmail(new PBEmail(result.templateData));
|
|
61
|
+
}
|
|
62
|
+
else {
|
|
63
|
+
this.userInterfaceService.notify('No template was chosen');
|
|
64
|
+
}
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
dropNewStructure(event) {
|
|
68
|
+
if (event.previousContainer === event.container) {
|
|
69
|
+
this.emailObjectStore.changeStructureOrder(event);
|
|
70
|
+
}
|
|
71
|
+
else {
|
|
72
|
+
this.pbMiddlewaresService
|
|
73
|
+
.addStructure(event)
|
|
74
|
+
.pipe(tap(newEvent => this.emailObjectStore.addStructure(newEvent)), take(1))
|
|
75
|
+
.subscribe();
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
getStructureStyles(structure) {
|
|
79
|
+
const { border, background, padding, margin, columnsWidth, fullWidth } = structure.options;
|
|
80
|
+
return Object.assign(Object.assign(Object.assign({
|
|
81
|
+
// direction,
|
|
82
|
+
width: fullWidth ? '100%' : `${this.emailObjectStore.Email.general.width.value}px`, backgroundRepeat: background.repeat, backgroundColor: background.color, backgroundSize: createWidthHeight(background.size), backgroundPosition: 'top center', gridTemplateColumns: columnsWidth.map(fr => `${fr}fr`).join(' ') }, createBorder(border)), createPadding(padding)), createMargin(margin));
|
|
83
|
+
}
|
|
84
|
+
getBackgroundImage(structure) {
|
|
85
|
+
const { background: { url } } = structure.options;
|
|
86
|
+
return this.sanitizer.bypassSecurityTrustStyle(url && `url(${url})`);
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
BuilderContainerComponent.decorators = [
|
|
90
|
+
{ type: Component, args: [{
|
|
91
|
+
selector: 'pb-builder-container',
|
|
92
|
+
template: "<!--\r\n ~ Copyright (c) 2024 Pobuca.\r\n ~ All rights reserved.\r\n -->\r\n\r\n<ng-container *ngIf=\"getStructures$ | async as structures\">\r\n <div cdkDropList [cdkDropListData]=\"structures\"\r\n cdkDropListConnectedTo=\"structures-drop-list\" id=\"structures-drop-list\"\r\n (cdkDropListDropped)=\"dropNewStructure($event)\" fxFlex fxLayout=\"column\" fxLayoutAlign=\"start center\">\r\n <pb-structure cdkDrag\r\n *ngFor=\"let structure of structures; trackBy: trackBy; let index = index\" [id]=\"structure.id\"\r\n [index]=\"index\" [ngClass]=\"structure.type\" [structure]=\"structure\"\r\n [ngStyle]=\"getStructureStyles(structure)\"\r\n [style.backgroundImage]=\"getBackgroundImage(structure)\"\r\n [cdkDragDisabled]=\"disableStructureDrag$(structure) | async\">\r\n <button cdkDragHandle mat-icon-button class=\"move\" *ngIf=\"!(disableStructureDrag$(structure) | async)\"\r\n i18n-matTooltip=\"structure|Move Structure\" matTooltip=\"Move Structure\">\r\n <mat-icon i18n-aria-label=\"structure|Move Structure\" aria-label=\"Move structure\" inline>pan_tool</mat-icon>\r\n </button>\r\n </pb-structure>\r\n\r\n <div class=\"empty-email mat-typography\" *ngIf=\"!structures.length\">\r\n <ng-content></ng-content>\r\n <div class=\"default-empty-email\" *ngIf=\"showTemplateList\">\r\n <h1 i18n=\"templates|First header\">Choose template from list</h1>\r\n <p i18n=\"templates|Description\">Or create one from scratch by dragging structures and blocks here!</p>\r\n <button type=\"button\" color=\"primary\" [disabled]=\"activeMatProgress$ | async\"\r\n (click)=\"openTemplateDialog($event)\" mat-flat-button i18n=\"templates|Choose a template button\">\r\n Choose template\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n</ng-container>\r\n",
|
|
93
|
+
providers: [
|
|
94
|
+
// IpUserRestApiProvider
|
|
95
|
+
],
|
|
96
|
+
changeDetection: ChangeDetectionStrategy.OnPush
|
|
97
|
+
// encapsulation: ViewEncapsulation.None
|
|
98
|
+
,
|
|
99
|
+
styles: ["/*!\n * Copyright (c) 2024 Pobuca.\n * All rights reserved.\n */pb-structure>.cdk-drag-handle{position:absolute;cursor:move;border-radius:50% 50% 0 0;height:30px;width:30px;font-size:smaller;line-height:0;top:-30px;right:0;background-color:#ff4081;color:#fff;opacity:0}pb-structure.cdk-drag-preview>.cdk-drag-handle,pb-structure:hover>.cdk-drag-handle{opacity:.8}pb-structure.cdk-drag-preview>.cdk-drag-handle:hover,pb-structure:hover>.cdk-drag-handle:hover{opacity:1}pb-structure ::ng-deep .cdk-drag-placeholder{background-color:#3f51b5;opacity:.6;cursor:move;border-radius:0}pb-structure ::ng-deep .cdk-drag-placeholder ::ng-deep :not(mat-icon){display:none}pb-structure ::ng-deep .cdk-drag-placeholder ::ng-deep mat-icon{padding:5px;color:#fff}:host{background-color:#f2f2f2;overflow-x:hidden;overflow-y:auto;position:relative;height:100%}:host #structures-drop-list{height:-moz-fit-content;height:fit-content;max-width:100%;padding-bottom:3rem;will-change:box-shadow}:host #structures-drop-list .empty-email{display:flex;justify-content:center;align-items:center;flex-direction:column;flex:1 1 100%;margin-top:10%}:host #structures-drop-list .empty-email .default-empty-email{text-align:center}:host #structures-drop-list.cdk-drop-list-dragging .empty-email{display:none}"]
|
|
100
|
+
},] }
|
|
101
|
+
];
|
|
102
|
+
BuilderContainerComponent.ctorParameters = () => [
|
|
103
|
+
{ type: PbUserInterfaceService },
|
|
104
|
+
{ type: PbEmailObjectStoreService },
|
|
105
|
+
{ type: PbUserRestApiService },
|
|
106
|
+
{ type: PbStorageService },
|
|
107
|
+
{ type: PbUserMiddlewaresService },
|
|
108
|
+
{ type: DomSanitizer },
|
|
109
|
+
{ type: undefined, decorators: [{ type: Inject, args: [PB_CONFIG,] }] }
|
|
110
|
+
];
|
|
111
|
+
BuilderContainerComponent.propDecorators = {
|
|
112
|
+
onHostClick: [{ type: HostListener, args: ['click',] }]
|
|
113
|
+
};
|
|
114
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVpbGRlci1jb250YWluZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcGItZW1haWwtYnVpbGRlci9zcmMvbGliL2NvbXBvbmVudHMvYnVpbGRlci1jb250YWluZXIvYnVpbGRlci1jb250YWluZXIuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7R0FHRztBQUVILE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUV6RixPQUFPLEVBQUUsWUFBWSxFQUFhLE1BQU0sMkJBQTJCLENBQUM7QUFDcEUsT0FBTyxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdGLE9BQU8sRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLFVBQVUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUU5QyxPQUFPLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxhQUFhLEVBQUUsaUJBQWlCLEVBQUUsT0FBTyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRXBHLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNyRCxPQUFPLEVBQXNCLHdCQUF3QixFQUFFLE1BQU0sK0RBQStELENBQUM7QUFDN0gsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0saUVBQWlFLENBQUM7QUFDekcsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sOEVBQThFLENBQUM7QUFDekgsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sNERBQTRELENBQUM7QUFDbEcsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDhDQUE4QyxD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LENBQUMsU0FBUyxDQUFDLHdCQUF3QixDQUFDLEdBQUcsSUFBSSxPQUFPLEdBQUcsR0FBRyxDQUFDLENBQUM7SUFDdkUsQ0FBQzs7O1lBeEhGLFNBQVMsU0FBQztnQkFDVCxRQUFRLEVBQUUsc0JBQXNCO2dCQUNoQyxzN0RBQWlEO2dCQUVqRCxTQUFTLEVBQUU7Z0JBQ1Qsd0JBQXdCO2lCQUN6QjtnQkFDRCxlQUFlLEVBQUUsdUJBQXVCLENBQUMsTUFBTTtnQkFDL0Msd0NBQXdDOzs7YUFDekM7OztZQWpCUSxzQkFBc0I7WUFDdEIseUJBQXlCO1lBQ3pCLG9CQUFvQjtZQUVwQixnQkFBZ0I7WUFMSSx3QkFBd0I7WUFQNUMsWUFBWTs0Q0FzQ2hCLE1BQU0sU0FBQyxTQUFTOzs7MEJBR2xCLFlBQVksU0FBQyxPQUFPIiwic291cmNlc0NvbnRlbnQiOlsiLypcclxuICogQ29weXJpZ2h0IChjKSAyMDI0IFBvYnVjYS5cclxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuICovXHJcblxyXG5pbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBIb3N0TGlzdGVuZXIsIEluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBIdHRwRXJyb3JSZXNwb25zZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHsgRG9tU2FuaXRpemVyLCBTYWZlU3R5bGUgfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJztcclxuaW1wb3J0IHsgY2F0Y2hFcnJvciwgZXhoYXVzdE1hcCwgZmluYWxpemUsIG1hcCwgc3dpdGNoTWFwLCB0YWtlLCB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7IEVNUFRZLCBpaWYsIHRocm93RXJyb3IgfSBmcm9tICdyeGpzJztcclxuXHJcbmltcG9ydCB7IGNyZWF0ZUJvcmRlciwgY3JlYXRlTWFyZ2luLCBjcmVhdGVQYWRkaW5nLCBjcmVhdGVXaWR0aEhlaWdodCwgZGVmZXJPZiB9IGZyb20gJy4uLy4uL3V0aWxzJztcclxuaW1wb3J0IHsgSUZvclJvb3RDb25mLCBJU3RydWN0dXJlLCBJVXNlclRlbXBsYXRlIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9pbnRlcmZhY2VzJztcclxuaW1wb3J0IHsgUEJFbWFpbCB9IGZyb20gJy4uLy4uL2NsYXNzZXMvRGVmYXVsdEVtYWlsJztcclxuaW1wb3J0IHsgSUFkZFN0cnVjdHVyZUV2ZW50LCBQYlVzZXJNaWRkbGV3YXJlc1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy91c2VyLW1pZGRsZXdhcmUtc2VydmljZS9wYi1taWRkbGV3YXJlcy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgUGJVc2VySW50ZXJmYWNlU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2ludGVybmFscy91c2VyLWludGVyZmFjZXMvdXNlci1pbnRlcmZhY2Uuc2VydmljZSc7XHJcbmltcG9ydCB7IFBiRW1haWxPYmplY3RTdG9yZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9pbnRlcm5hbHMvcGItZW1haWwtb2JqZWN0LXN0b3JlL3BiLWVtYWlsLW9iamVjdC1zdG9yZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgUGJVc2VyUmVzdEFwaVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy91c2VyLXJlc3QtYXBpLXNlcnZpY2UvdXNlci1yZXN0LWFwaS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgUEJfQ09ORklHIH0gZnJvbSAnLi4vLi4vdG9rZW5zL3Rva2Vucyc7XHJcbmltcG9ydCB7IFBiU3RvcmFnZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9wYi1zdG9yYWdlL3BiLXN0b3JhZ2Uuc2VydmljZSc7XHJcblxyXG4vLyBpbXBvcnQgeyBJcFVzZXJSZXN0QXBpUHJvdmlkZXIgfSBmcm9tICcuLi9wcm92aWRlcnMnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdwYi1idWlsZGVyLWNvbnRhaW5lcicsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2J1aWxkZXItY29udGFpbmVyLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9idWlsZGVyLWNvbnRhaW5lci5zY3NzJ10sXHJcbiAgcHJvdmlkZXJzOiBbXHJcbiAgICAvLyBJcFVzZXJSZXN0QXBpUHJvdmlkZXJcclxuICBdLFxyXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXHJcbiAgLy8gZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZVxyXG59KVxyXG5leHBvcnQgY2xhc3MgQnVpbGRlckNvbnRhaW5lckNvbXBvbmVudCB7XHJcbiAgc2hvd1RlbXBsYXRlTGlzdCA9IHRoaXMudXNlckNvbmZpZy50ZW1wbGF0ZUxpc3RJZkVtcHR5ID8/IHRydWU7XHJcbiAgZ2V0U3RydWN0dXJlcyQgPSB0aGlzLmVtYWlsT2JqZWN0U3RvcmUuZW1haWxTdHJ1Y3R1cmVzQXNPYnNlcnZhYmxlJDtcclxuICBhY3RpdmVNYXRQcm9ncmVzcyQgPSB0aGlzLnVzZXJJbnRlcmZhY2VTZXJ2aWNlLmFjdGl2ZU1hdFByb2dyZXNzJDtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIHVzZXJJbnRlcmZhY2VTZXJ2aWNlOiBQYlVzZXJJbnRlcmZhY2VTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBlbWFpbE9iamVjdFN0b3JlOiBQYkVtYWlsT2JqZWN0U3RvcmVTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSB1c2VyUmVzdEFwaTogUGJVc2VyUmVzdEFwaVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHBiU3RvcmFnZTogUGJTdG9yYWdlU2VydmljZSxcclxuICAgIHByaXZhdGUgcGJNaWRkbGV3YXJlc1NlcnZpY2U6IFBiVXNlck1pZGRsZXdhcmVzU2VydmljZSxcclxuICAgIHByaXZhdGUgc2FuaXRpemVyOiBEb21TYW5pdGl6ZXIsXHJcbiAgICBASW5qZWN0KFBCX0NPTkZJRykgcHJpdmF0ZSB1c2VyQ29uZmlnOiBJRm9yUm9vdENvbmZcclxuICApIHt9XHJcblxyXG4gIEBIb3N0TGlzdGVuZXIoJ2NsaWNrJykgb25Ib3N0Q2xpY2soKSB7XHJcbiAgICB0aGlzLnVzZXJJbnRlcmZhY2VTZXJ2aWNlLmVkaXRHZW5lcmFsU2V0dGluZ3MoKTtcclxuICB9XHJcblxyXG4gIHRyYWNrQnkoc3RydWN0dXJlOiBJU3RydWN0dXJlKTogbnVtYmVyIHtcclxuICAgIHJldHVybiBzdHJ1Y3R1cmUuaWQ7XHJcbiAgfVxyXG5cclxuICBkaXNhYmxlU3RydWN0dXJlRHJhZyQoc3RydWN0dXJlOiBJU3RydWN0dXJlKSB7XHJcbiAgICByZXR1cm4gdGhpcy5wYk1pZGRsZXdhcmVzU2VydmljZS5kaXNhYmxlU3RydWN0dXJlRHJhZ1dpdGhpbkVtYWlsQm9keShzdHJ1Y3R1cmUpLnBpcGUodGFrZSgxKSk7XHJcbiAgfVxyXG5cclxuICBvcGVuVGVtcGxhdGVEaWFsb2coZXY6IEV2ZW50KSB7XHJcbiAgICBldi5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcclxuICAgIHRoaXMudXNlckludGVyZmFjZVNlcnZpY2UuYWN0aXZlTWF0UHJvZ3Jlc3MkLm5leHQodHJ1ZSk7XHJcbiAgICBjb25zdCBjYWNoZWRUZW1wbGF0ZXMgPSB0aGlzLnBiU3RvcmFnZS5nZXRDYWNoZWRUZW1wbGF0ZUxpc3QoKTtcclxuICAgIHJldHVybiBpaWYoXHJcbiAgICAgICgpID0+IGNhY2hlZFRlbXBsYXRlcy5sZW5ndGggPiAwLFxyXG4gICAgICBkZWZlck9mKGNhY2hlZFRlbXBsYXRlcyksXHJcbiAgICAgIHRoaXMudXNlclJlc3RBcGkuZ2V0QWxsVXNlclRlbXBsYXRlcyQucGlwZSh0YXAobGlzdCA9PiB0aGlzLnBiU3RvcmFnZS5jYWNoZVRlbXBsYXRlTGlzdChsaXN0KSkpXHJcbiAgICApXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIC8vIG1hcCgoKSA9PiBbXSksXHJcbiAgICAgICAgbWFwKHRlbXBsYXRlcyA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gWy4uLnRlbXBsYXRlcywgeyBjYXRlZ29yeTogJ2xhdGVzdCcsIHRlbXBsYXRlczogdGhpcy5wYlN0b3JhZ2UuZ2V0TGF0ZXN0VXNlZFRlbXBsYXRlcygpIH1dO1xyXG4gICAgICAgIH0pLFxyXG4gICAgICAgIGZpbmFsaXplKCgpID0+IHRoaXMudXNlckludGVyZmFjZVNlcnZpY2UuYWN0aXZlTWF0UHJvZ3Jlc3MkLm5leHQoZmFsc2UpKSxcclxuICAgICAgICBleGhhdXN0TWFwKGxpc3QgPT5cclxuICAgICAgICAgIGxpc3Q/Lmxlbmd0aCA+IDAgPyB0aGlzLnVzZXJJbnRlcmZhY2VTZXJ2aWNlLnRlbXBsYXRlc0xpc3REaWFsb2ckKGxpc3QpIDogdGhyb3dFcnJvcihuZXcgRXJyb3IoJ1RoZSB0ZW1wbGF0ZSBsaXN0IGlzIGVtcHR5JykpXHJcbiAgICAgICAgKSxcclxuICAgICAgICBzd2l0Y2hNYXAoKHsgY2F0ZWdvcnksIHRlbXBsYXRlIH0pID0+IHRoaXMucGJNaWRkbGV3YXJlc1NlcnZpY2UuY2hvb3NlVGVtcGxhdGUoY2F0ZWdvcnksIHRlbXBsYXRlKSksXHJcbiAgICAgICAgZXhoYXVzdE1hcCgoeyBjYXRlZ29yeSwgdGVtcGxhdGUgfSkgPT5cclxuICAgICAgICAgIHRoaXMudXNlclJlc3RBcGkuZ2V0VXNlclRlbXBsYXRlRGF0YSQoY2F0ZWdvcnksIHRlbXBsYXRlKS5waXBlKFxyXG4gICAgICAgICAgICB0YXAoY2hvb3NlZFRlbXBsYXRlID0+IHtcclxuICAgICAgICAgICAgICBpZiAoY2F0ZWdvcnkgIT09ICdsYXRlc3QnKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnBiU3RvcmFnZS5hZGRUZW1wbGF0ZVRvTGF0ZXN0VXNlZChjaG9vc2VkVGVtcGxhdGUpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgIClcclxuICAgICAgICApLFxyXG4gICAgICAgIGNhdGNoRXJyb3IoKGVycm9yOiBFcnJvciB8IEh0dHBFcnJvclJlc3BvbnNlKSA9PlxyXG4gICAgICAgICAgdGhpcy5wYk1pZGRsZXdhcmVzU2VydmljZS5jYXRjaEVycm9yKGVycm9yKS5waXBlKFxyXG4gICAgICAgICAgICBzd2l0Y2hNYXAoKCkgPT4ge1xyXG4gICAgICAgICAgICAgIHRoaXMudXNlckludGVyZmFjZVNlcnZpY2Uubm90aWZ5KGVycm9yLm1lc3NhZ2UpO1xyXG4gICAgICAgICAgICAgIHJldHVybiBFTVBUWTtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgIClcclxuICAgICAgICApLFxyXG4gICAgICAgIHRha2UoMSlcclxuICAgICAgKVxyXG4gICAgICAuc3Vic2NyaWJlKChyZXN1bHQ6IElVc2VyVGVtcGxhdGUpID0+IHtcclxuICAgICAgICBpZiAocmVzdWx0KSB7XHJcbiAgICAgICAgICB0aGlzLmVtYWlsT2JqZWN0U3RvcmUuc2V0RW1haWwobmV3IFBCRW1haWwocmVzdWx0LnRlbXBsYXRlRGF0YSkpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLnVzZXJJbnRlcmZhY2VTZXJ2aWNlLm5vdGlmeSgnTm8gdGVtcGxhdGUgd2FzIGNob3NlbicpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICBkcm9wTmV3U3RydWN0dXJlKGV2ZW50OiBJQWRkU3RydWN0dXJlRXZlbnQpIHtcclxuICAgIGlmIChldmVudC5wcmV2aW91c0NvbnRhaW5lciA9PT0gZXZlbnQuY29udGFpbmVyKSB7XHJcbiAgICAgIHRoaXMuZW1haWxPYmplY3RTdG9yZS5jaGFuZ2VTdHJ1Y3R1cmVPcmRlcihldmVudCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnBiTWlkZGxld2FyZXNTZXJ2aWNlXHJcbiAgICAgICAgLmFkZFN0cnVjdHVyZShldmVudClcclxuICAgICAgICAucGlwZShcclxuICAgICAgICAgIHRhcChuZXdFdmVudCA9PiB0aGlzLmVtYWlsT2JqZWN0U3RvcmUuYWRkU3RydWN0dXJlKG5ld0V2ZW50KSksXHJcbiAgICAgICAgICB0YWtlKDEpXHJcbiAgICAgICAgKVxyXG4gICAgICAgIC5zdWJzY3JpYmUoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldFN0cnVjdHVyZVN0eWxlcyhzdHJ1Y3R1cmU6IElTdHJ1Y3R1cmUpIHtcclxuICAgIGNvbnN0IHsgYm9yZGVyLCBiYWNrZ3JvdW5kLCBwYWRkaW5nLCBtYXJnaW4sIGNvbHVtbnNXaWR0aCwgZnVsbFdpZHRoIH0gPSBzdHJ1Y3R1cmUub3B0aW9ucztcclxuXHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAvLyBkaXJlY3Rpb24sXHJcbiAgICAgIHdpZHRoOiBmdWxsV2lkdGggPyAnMTAwJScgOiBgJHt0aGlzLmVtYWlsT2JqZWN0U3RvcmUuRW1haWwuZ2VuZXJhbC53aWR0aC52YWx1ZX1weGAsXHJcbiAgICAgIGJhY2tncm91bmRSZXBlYXQ6IGJhY2tncm91bmQucmVwZWF0LFxyXG4gICAgICBiYWNrZ3JvdW5kQ29sb3I6IGJhY2tncm91bmQuY29sb3IsXHJcbiAgICAgIGJhY2tncm91bmRTaXplOiBjcmVhdGVXaWR0aEhlaWdodChiYWNrZ3JvdW5kLnNpemUpLFxyXG4gICAgICBiYWNrZ3JvdW5kUG9zaXRpb246ICd0b3AgY2VudGVyJyxcclxuICAgICAgZ3JpZFRlbXBsYXRlQ29sdW1uczogY29sdW1uc1dpZHRoLm1hcChmciA9PiBgJHtmcn1mcmApLmpvaW4oJyAnKSxcclxuICAgICAgLi4uY3JlYXRlQm9yZGVyKGJvcmRlciksXHJcbiAgICAgIC4uLmNyZWF0ZVBhZGRpbmcocGFkZGluZyksXHJcbiAgICAgIC4uLmNyZWF0ZU1hcmdpbihtYXJnaW4pXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgZ2V0QmFja2dyb3VuZEltYWdlKHN0cnVjdHVyZTogSVN0cnVjdHVyZSk6IFNhZmVTdHlsZSB7XHJcbiAgICBjb25zdCB7XHJcbiAgICAgIGJhY2tncm91bmQ6IHsgdXJsIH1cclxuICAgIH0gPSBzdHJ1Y3R1cmUub3B0aW9ucztcclxuICAgIHJldHVybiB0aGlzLnNhbml0aXplci5ieXBhc3NTZWN1cml0eVRydXN0U3R5bGUodXJsICYmIGB1cmwoJHt1cmx9KWApO1xyXG4gIH1cclxufVxyXG4iXX0=
|
|
@@ -1,30 +1,30 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* Copyright (c) 2024 Pobuca.
|
|
3
|
-
* All rights reserved.
|
|
4
|
-
*/
|
|
5
|
-
import { Component, Inject } from '@angular/core';
|
|
6
|
-
import { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';
|
|
7
|
-
// @dynamic
|
|
8
|
-
export class ConfirmDialogComponent {
|
|
9
|
-
constructor(dialogRef, data) {
|
|
10
|
-
this.dialogRef = dialogRef;
|
|
11
|
-
this.data = data;
|
|
12
|
-
}
|
|
13
|
-
}
|
|
14
|
-
ConfirmDialogComponent.decorators = [
|
|
15
|
-
{ type: Component, args: [{
|
|
16
|
-
selector: 'pb-confirm-dialog',
|
|
17
|
-
template: `
|
|
18
|
-
<h2 mat-dialog-title>Are you sure?</h2>
|
|
19
|
-
<mat-dialog-actions fxLayout fxLayoutAlign="space-between center" fxLayoutGap="1rem">
|
|
20
|
-
<button mat-stroked-button mat-dialog-close="0">No</button>
|
|
21
|
-
<button mat-stroked-button color="warn" mat-dialog-close="1">Yes</button>
|
|
22
|
-
</mat-dialog-actions>
|
|
23
|
-
`
|
|
24
|
-
},] }
|
|
25
|
-
];
|
|
26
|
-
ConfirmDialogComponent.ctorParameters = () => [
|
|
27
|
-
{ type: MatDialogRef },
|
|
28
|
-
{ type: undefined, decorators: [{ type: Inject, args: [MAT_DIALOG_DATA,] }] }
|
|
29
|
-
];
|
|
30
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) 2024 Pobuca.
|
|
3
|
+
* All rights reserved.
|
|
4
|
+
*/
|
|
5
|
+
import { Component, Inject } from '@angular/core';
|
|
6
|
+
import { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';
|
|
7
|
+
// @dynamic
|
|
8
|
+
export class ConfirmDialogComponent {
|
|
9
|
+
constructor(dialogRef, data) {
|
|
10
|
+
this.dialogRef = dialogRef;
|
|
11
|
+
this.data = data;
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
ConfirmDialogComponent.decorators = [
|
|
15
|
+
{ type: Component, args: [{
|
|
16
|
+
selector: 'pb-confirm-dialog',
|
|
17
|
+
template: `
|
|
18
|
+
<h2 mat-dialog-title>Are you sure?</h2>
|
|
19
|
+
<mat-dialog-actions fxLayout fxLayoutAlign="space-between center" fxLayoutGap="1rem">
|
|
20
|
+
<button mat-stroked-button mat-dialog-close="0">No</button>
|
|
21
|
+
<button mat-stroked-button color="warn" mat-dialog-close="1">Yes</button>
|
|
22
|
+
</mat-dialog-actions>
|
|
23
|
+
`
|
|
24
|
+
},] }
|
|
25
|
+
];
|
|
26
|
+
ConfirmDialogComponent.ctorParameters = () => [
|
|
27
|
+
{ type: MatDialogRef },
|
|
28
|
+
{ type: undefined, decorators: [{ type: Inject, args: [MAT_DIALOG_DATA,] }] }
|
|
29
|
+
];
|
|
30
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlhbG9nLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3BiLWVtYWlsLWJ1aWxkZXIvc3JjL2xpYi9jb21wb25lbnRzL2RpYWxvZy5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7OztHQUdHO0FBRUgsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbEQsT0FBTyxFQUFFLFlBQVksRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUV6RSxXQUFXO0FBV1gsTUFBTSxPQUFPLHNCQUFzQjtJQUNqQyxZQUNTLFNBQStDLEVBQ3RCLElBQXlCO1FBRGxELGNBQVMsR0FBVCxTQUFTLENBQXNDO1FBQ3RCLFNBQUksR0FBSixJQUFJLENBQXFCO0lBQ3ZELENBQUM7OztZQWROLFNBQVMsU0FBQztnQkFDVCxRQUFRLEVBQUUsbUJBQW1CO2dCQUM3QixRQUFRLEVBQUU7Ozs7OztHQU1UO2FBQ0Y7OztZQVpRLFlBQVk7NENBZ0JoQixNQUFNLFNBQUMsZUFBZSIsInNvdXJjZXNDb250ZW50IjpbIi8qXHJcbiAqIENvcHlyaWdodCAoYykgMjAyNCBQb2J1Y2EuXHJcbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbiAqL1xyXG5cclxuaW1wb3J0IHsgQ29tcG9uZW50LCBJbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgTWF0RGlhbG9nUmVmLCBNQVRfRElBTE9HX0RBVEEgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xyXG5cclxuLy8gQGR5bmFtaWNcclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdwYi1jb25maXJtLWRpYWxvZycsXHJcbiAgdGVtcGxhdGU6IGBcclxuICAgIDxoMiBtYXQtZGlhbG9nLXRpdGxlPkFyZSB5b3Ugc3VyZT88L2gyPlxyXG4gICAgPG1hdC1kaWFsb2ctYWN0aW9ucyBmeExheW91dCBmeExheW91dEFsaWduPVwic3BhY2UtYmV0d2VlbiBjZW50ZXJcIiBmeExheW91dEdhcD1cIjFyZW1cIj5cclxuICAgICAgPGJ1dHRvbiBtYXQtc3Ryb2tlZC1idXR0b24gbWF0LWRpYWxvZy1jbG9zZT1cIjBcIj5ObzwvYnV0dG9uPlxyXG4gICAgICA8YnV0dG9uIG1hdC1zdHJva2VkLWJ1dHRvbiBjb2xvcj1cIndhcm5cIiBtYXQtZGlhbG9nLWNsb3NlPVwiMVwiPlllczwvYnV0dG9uPlxyXG4gICAgPC9tYXQtZGlhbG9nLWFjdGlvbnM+XHJcbiAgYFxyXG59KVxyXG5leHBvcnQgY2xhc3MgQ29uZmlybURpYWxvZ0NvbXBvbmVudCB7XHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwdWJsaWMgZGlhbG9nUmVmOiBNYXREaWFsb2dSZWY8Q29uZmlybURpYWxvZ0NvbXBvbmVudD4sXHJcbiAgICBASW5qZWN0KE1BVF9ESUFMT0dfREFUQSkgcHVibGljIGRhdGE6IHsgbWVzc2FnZTogc3RyaW5nIH1cclxuICApIHsgfVxyXG59XHJcbiJdfQ==
|
|
@@ -1,25 +1,25 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* Copyright (c) 2024 Pobuca.
|
|
3
|
-
* All rights reserved.
|
|
4
|
-
*/
|
|
5
|
-
import { Component, ViewEncapsulation, ChangeDetectionStrategy } from '@angular/core';
|
|
6
|
-
import { PbEmailObjectStoreService } from '../../services/internals/pb-email-object-store/pb-email-object-store.service';
|
|
7
|
-
export class GeneralSettingsComponent {
|
|
8
|
-
constructor(pbEmailObject) {
|
|
9
|
-
this.pbEmailObject = pbEmailObject;
|
|
10
|
-
this.generalOptions$ = this.pbEmailObject.generalEmailOptionsAsObservable$;
|
|
11
|
-
}
|
|
12
|
-
}
|
|
13
|
-
GeneralSettingsComponent.decorators = [
|
|
14
|
-
{ type: Component, args: [{
|
|
15
|
-
selector: 'pb-general-settings',
|
|
16
|
-
template: "<!--\n ~ Copyright (c) 2024 Pobuca.\n ~ All rights reserved.\n -->\n\n<ng-container *ngIf=\"generalOptions$ | async as general\">\n <div class=\"mat-expansion-panel-body\" style=\"margin: 24px 0\">\n <mat-form-field appearance=\"outline\" style=\"width: 100%\">\n <mat-label i18n=\"General Settings|Email Name\">Email Name</mat-label>\n <input matInput [(ngModel)]=\"general.name\">\n </mat-form-field>\n <mat-form-field appearance=\"outline\" style=\"width: 100%\">\n <mat-label i18n=\"General Settings|Email Preview Text\">Preview Text</mat-label>\n <textarea matInput [(ngModel)]=\"general.previewText\"></textarea>\n <mat-hint i18n=\"General Settings|Email Preview Text Hint\">\n This text is displayed in the inbox of the recipient.\n </mat-hint>\n </mat-form-field>\n </div>\n\n <mat-accordion>\n <mat-expansion-panel>\n <mat-expansion-panel-header i18n=\"General Settings|Email Background\">\n Background\n </mat-expansion-panel-header>\n <ng-template matExpansionPanelContent>\n <pb-color [options]=\"general.background\" key=\"color\"></pb-color>\n <!-- <pb-image-upload [block]=\"structure.options.background\" key=\"url\" style=\"margin-bottom: 1em\"></pb-image-upload>\n <pb-back-repeat [disabled]=\"!structure.options.background.url\" [model]=\"structure.options.background\">\n </pb-back-repeat>\n <pb-width-height [model]=\"structure.options.background.size\" label=\"Background Size\"></pb-width-height> -->\n </ng-template>\n </mat-expansion-panel>\n\n <mat-expansion-panel>\n <mat-expansion-panel-header i18n=\"General Settings|Email Attributes\">\n Attributes\n </mat-expansion-panel-header>\n <ng-template matExpansionPanelContent>\n <pb-width-height [model]=\"general.width\" label=\"width\"></pb-width-height>\n <pb-direction [model]=\"general\"></pb-direction>\n </ng-template>\n </mat-expansion-panel>\n\n <mat-expansion-panel>\n <mat-expansion-panel-header i18n=\"General Settings|Email Padding\">\n Padding\n </mat-expansion-panel-header>\n <ng-template matExpansionPanelContent>\n <pb-padding [padding]=\"general.padding\"></pb-padding>\n </ng-template>\n </mat-expansion-panel>\n </mat-accordion>\n</ng-container>\n",
|
|
17
|
-
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
18
|
-
encapsulation: ViewEncapsulation.None,
|
|
19
|
-
styles: [""]
|
|
20
|
-
},] }
|
|
21
|
-
];
|
|
22
|
-
GeneralSettingsComponent.ctorParameters = () => [
|
|
23
|
-
{ type: PbEmailObjectStoreService }
|
|
24
|
-
];
|
|
25
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) 2024 Pobuca.
|
|
3
|
+
* All rights reserved.
|
|
4
|
+
*/
|
|
5
|
+
import { Component, ViewEncapsulation, ChangeDetectionStrategy } from '@angular/core';
|
|
6
|
+
import { PbEmailObjectStoreService } from '../../services/internals/pb-email-object-store/pb-email-object-store.service';
|
|
7
|
+
export class GeneralSettingsComponent {
|
|
8
|
+
constructor(pbEmailObject) {
|
|
9
|
+
this.pbEmailObject = pbEmailObject;
|
|
10
|
+
this.generalOptions$ = this.pbEmailObject.generalEmailOptionsAsObservable$;
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
GeneralSettingsComponent.decorators = [
|
|
14
|
+
{ type: Component, args: [{
|
|
15
|
+
selector: 'pb-general-settings',
|
|
16
|
+
template: "<!--\r\n ~ Copyright (c) 2024 Pobuca.\r\n ~ All rights reserved.\r\n -->\r\n\r\n<ng-container *ngIf=\"generalOptions$ | async as general\">\r\n <div class=\"mat-expansion-panel-body\" style=\"margin: 24px 0\">\r\n <mat-form-field appearance=\"outline\" style=\"width: 100%\">\r\n <mat-label i18n=\"General Settings|Email Name\">Email Name</mat-label>\r\n <input matInput [(ngModel)]=\"general.name\">\r\n </mat-form-field>\r\n <mat-form-field appearance=\"outline\" style=\"width: 100%\">\r\n <mat-label i18n=\"General Settings|Email Preview Text\">Preview Text</mat-label>\r\n <textarea matInput [(ngModel)]=\"general.previewText\"></textarea>\r\n <mat-hint i18n=\"General Settings|Email Preview Text Hint\">\r\n This text is displayed in the inbox of the recipient.\r\n </mat-hint>\r\n </mat-form-field>\r\n </div>\r\n\r\n <mat-accordion>\r\n <mat-expansion-panel>\r\n <mat-expansion-panel-header i18n=\"General Settings|Email Background\">\r\n Background\r\n </mat-expansion-panel-header>\r\n <ng-template matExpansionPanelContent>\r\n <pb-color [options]=\"general.background\" key=\"color\"></pb-color>\r\n <!-- <pb-image-upload [block]=\"structure.options.background\" key=\"url\" style=\"margin-bottom: 1em\"></pb-image-upload>\r\n <pb-back-repeat [disabled]=\"!structure.options.background.url\" [model]=\"structure.options.background\">\r\n </pb-back-repeat>\r\n <pb-width-height [model]=\"structure.options.background.size\" label=\"Background Size\"></pb-width-height> -->\r\n </ng-template>\r\n </mat-expansion-panel>\r\n\r\n <mat-expansion-panel>\r\n <mat-expansion-panel-header i18n=\"General Settings|Email Attributes\">\r\n Attributes\r\n </mat-expansion-panel-header>\r\n <ng-template matExpansionPanelContent>\r\n <pb-width-height [model]=\"general.width\" label=\"width\"></pb-width-height>\r\n <pb-direction [model]=\"general\"></pb-direction>\r\n </ng-template>\r\n </mat-expansion-panel>\r\n\r\n <mat-expansion-panel>\r\n <mat-expansion-panel-header i18n=\"General Settings|Email Padding\">\r\n Padding\r\n </mat-expansion-panel-header>\r\n <ng-template matExpansionPanelContent>\r\n <pb-padding [padding]=\"general.padding\"></pb-padding>\r\n </ng-template>\r\n </mat-expansion-panel>\r\n </mat-accordion>\r\n</ng-container>\r\n",
|
|
17
|
+
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
18
|
+
encapsulation: ViewEncapsulation.None,
|
|
19
|
+
styles: [""]
|
|
20
|
+
},] }
|
|
21
|
+
];
|
|
22
|
+
GeneralSettingsComponent.ctorParameters = () => [
|
|
23
|
+
{ type: PbEmailObjectStoreService }
|
|
24
|
+
];
|
|
25
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJhbC1zZXR0aW5ncy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9wYi1lbWFpbC1idWlsZGVyL3NyYy9saWIvY29tcG9uZW50cy9nZW5lcmFsLXNldHRpbmdzL2dlbmVyYWwtc2V0dGluZ3MuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7R0FHRztBQUVILE9BQU8sRUFBRSxTQUFTLEVBQUUsaUJBQWlCLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDdEYsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sOEVBQThFLENBQUM7QUFTekgsTUFBTSxPQUFPLHdCQUF3QjtJQUduQyxZQUFvQixhQUF3QztRQUF4QyxrQkFBYSxHQUFiLGFBQWEsQ0FBMkI7UUFGNUQsb0JBQWUsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLGdDQUFnQyxDQUFDO0lBRVAsQ0FBQzs7O1lBVmpFLFNBQVMsU0FBQztnQkFDVCxRQUFRLEVBQUUscUJBQXFCO2dCQUMvQiwwNkVBQWdEO2dCQUVoRCxlQUFlLEVBQUUsdUJBQXVCLENBQUMsTUFBTTtnQkFDL0MsYUFBYSxFQUFFLGlCQUFpQixDQUFDLElBQUk7O2FBQ3RDOzs7WUFSUSx5QkFBeUIiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxyXG4gKiBDb3B5cmlnaHQgKGMpIDIwMjQgUG9idWNhLlxyXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG4gKi9cclxuXHJcbmltcG9ydCB7IENvbXBvbmVudCwgVmlld0VuY2Fwc3VsYXRpb24sIENoYW5nZURldGVjdGlvblN0cmF0ZWd5IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFBiRW1haWxPYmplY3RTdG9yZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9pbnRlcm5hbHMvcGItZW1haWwtb2JqZWN0LXN0b3JlL3BiLWVtYWlsLW9iamVjdC1zdG9yZS5zZXJ2aWNlJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAncGItZ2VuZXJhbC1zZXR0aW5ncycsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2dlbmVyYWwtc2V0dGluZ3MuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2dlbmVyYWwtc2V0dGluZ3MuY29tcG9uZW50LmNzcyddLFxyXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxyXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmVcclxufSlcclxuZXhwb3J0IGNsYXNzIEdlbmVyYWxTZXR0aW5nc0NvbXBvbmVudCB7XHJcbiAgZ2VuZXJhbE9wdGlvbnMkID0gdGhpcy5wYkVtYWlsT2JqZWN0LmdlbmVyYWxFbWFpbE9wdGlvbnNBc09ic2VydmFibGUkO1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHBiRW1haWxPYmplY3Q6IFBiRW1haWxPYmplY3RTdG9yZVNlcnZpY2UpIHt9XHJcbn1cclxuIl19
|
|
@@ -1,62 +1,62 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* Copyright (c) 2024 Pobuca.
|
|
3
|
-
* All rights reserved.
|
|
4
|
-
*/
|
|
5
|
-
import { Component, ViewChild, ElementRef } from '@angular/core';
|
|
6
|
-
import { MatBottomSheetRef } from '@angular/material/bottom-sheet';
|
|
7
|
-
import { take, catchError, switchMap } from 'rxjs/operators';
|
|
8
|
-
import { EMPTY } from 'rxjs';
|
|
9
|
-
import { PbUserMiddlewaresService } from '../../services/user-middleware-service/pb-middlewares.service';
|
|
10
|
-
export class ImportDialogComponent {
|
|
11
|
-
constructor(pbMiddlewares, bottomSheetRef) {
|
|
12
|
-
this.pbMiddlewares = pbMiddlewares;
|
|
13
|
-
this.bottomSheetRef = bottomSheetRef;
|
|
14
|
-
this.importing = false;
|
|
15
|
-
this.fileReader = new FileReader();
|
|
16
|
-
}
|
|
17
|
-
openBrowserModal(event) {
|
|
18
|
-
event.preventDefault();
|
|
19
|
-
this.uploadInput.nativeElement.click();
|
|
20
|
-
}
|
|
21
|
-
startImporting() {
|
|
22
|
-
this.importing = true;
|
|
23
|
-
this.pbMiddlewares
|
|
24
|
-
.importFile(this.uploadInput.nativeElement.files.item(0))
|
|
25
|
-
.pipe(take(1), catchError(error => this.pbMiddlewares.catchError(error).pipe(switchMap(() => {
|
|
26
|
-
this.bottomSheetRef.dismiss(error);
|
|
27
|
-
return EMPTY;
|
|
28
|
-
}))))
|
|
29
|
-
.subscribe(file => {
|
|
30
|
-
this.fileReader.readAsText(file, 'utf-8');
|
|
31
|
-
});
|
|
32
|
-
}
|
|
33
|
-
ngOnInit() {
|
|
34
|
-
this.fileReader.addEventListener('loadend', () => {
|
|
35
|
-
this.importing = false;
|
|
36
|
-
try {
|
|
37
|
-
const email = JSON.parse(this.fileReader.result);
|
|
38
|
-
this.bottomSheetRef.dismiss(email);
|
|
39
|
-
}
|
|
40
|
-
catch (error) {
|
|
41
|
-
this.bottomSheetRef.dismiss(null);
|
|
42
|
-
throw new Error(error);
|
|
43
|
-
}
|
|
44
|
-
});
|
|
45
|
-
}
|
|
46
|
-
ngOnDestroy() { }
|
|
47
|
-
}
|
|
48
|
-
ImportDialogComponent.decorators = [
|
|
49
|
-
{ type: Component, args: [{
|
|
50
|
-
selector: 'pb-import-dialog',
|
|
51
|
-
template: "<!--\n ~ Copyright (c) 2024 Pobuca.\n ~ All rights reserved.\n -->\n\n<mat-nav-list>\n <mat-list-item (click)=\"openBrowserModal($event)\">\n <div *ngIf=\"!importing\">\n <span mat-line i18n=\"import|Import JSON file\">Import JSON file</span>\n </div>\n <ng-container *ngIf=\"importing\">\n <span mat-line i18n=\"import|Importing in progress\">Importing in progress ...</span>\n <!-- <span mat-line>{{ imageInfo }}</span> -->\n </ng-container>\n </mat-list-item>\n <mat-progress-bar *ngIf=\"importing\" mode=\"buffer\" value=\"100\"></mat-progress-bar>\n</mat-nav-list>\n<input type=\"file\" accept=\"application/json\" fxHide #uploadInput (change)=\"startImporting()\" />\n",
|
|
52
|
-
styles: ["/*!\n * Copyright (c) 2024 Pobuca.\n * All rights reserved.\n */"]
|
|
53
|
-
},] }
|
|
54
|
-
];
|
|
55
|
-
ImportDialogComponent.ctorParameters = () => [
|
|
56
|
-
{ type: PbUserMiddlewaresService },
|
|
57
|
-
{ type: MatBottomSheetRef }
|
|
58
|
-
];
|
|
59
|
-
ImportDialogComponent.propDecorators = {
|
|
60
|
-
uploadInput: [{ type: ViewChild, args: ['uploadInput', { read: ElementRef, static: true },] }]
|
|
61
|
-
};
|
|
62
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) 2024 Pobuca.
|
|
3
|
+
* All rights reserved.
|
|
4
|
+
*/
|
|
5
|
+
import { Component, ViewChild, ElementRef } from '@angular/core';
|
|
6
|
+
import { MatBottomSheetRef } from '@angular/material/bottom-sheet';
|
|
7
|
+
import { take, catchError, switchMap } from 'rxjs/operators';
|
|
8
|
+
import { EMPTY } from 'rxjs';
|
|
9
|
+
import { PbUserMiddlewaresService } from '../../services/user-middleware-service/pb-middlewares.service';
|
|
10
|
+
export class ImportDialogComponent {
|
|
11
|
+
constructor(pbMiddlewares, bottomSheetRef) {
|
|
12
|
+
this.pbMiddlewares = pbMiddlewares;
|
|
13
|
+
this.bottomSheetRef = bottomSheetRef;
|
|
14
|
+
this.importing = false;
|
|
15
|
+
this.fileReader = new FileReader();
|
|
16
|
+
}
|
|
17
|
+
openBrowserModal(event) {
|
|
18
|
+
event.preventDefault();
|
|
19
|
+
this.uploadInput.nativeElement.click();
|
|
20
|
+
}
|
|
21
|
+
startImporting() {
|
|
22
|
+
this.importing = true;
|
|
23
|
+
this.pbMiddlewares
|
|
24
|
+
.importFile(this.uploadInput.nativeElement.files.item(0))
|
|
25
|
+
.pipe(take(1), catchError(error => this.pbMiddlewares.catchError(error).pipe(switchMap(() => {
|
|
26
|
+
this.bottomSheetRef.dismiss(error);
|
|
27
|
+
return EMPTY;
|
|
28
|
+
}))))
|
|
29
|
+
.subscribe(file => {
|
|
30
|
+
this.fileReader.readAsText(file, 'utf-8');
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
ngOnInit() {
|
|
34
|
+
this.fileReader.addEventListener('loadend', () => {
|
|
35
|
+
this.importing = false;
|
|
36
|
+
try {
|
|
37
|
+
const email = JSON.parse(this.fileReader.result);
|
|
38
|
+
this.bottomSheetRef.dismiss(email);
|
|
39
|
+
}
|
|
40
|
+
catch (error) {
|
|
41
|
+
this.bottomSheetRef.dismiss(null);
|
|
42
|
+
throw new Error(error);
|
|
43
|
+
}
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
ngOnDestroy() { }
|
|
47
|
+
}
|
|
48
|
+
ImportDialogComponent.decorators = [
|
|
49
|
+
{ type: Component, args: [{
|
|
50
|
+
selector: 'pb-import-dialog',
|
|
51
|
+
template: "<!--\r\n ~ Copyright (c) 2024 Pobuca.\r\n ~ All rights reserved.\r\n -->\r\n\r\n<mat-nav-list>\r\n <mat-list-item (click)=\"openBrowserModal($event)\">\r\n <div *ngIf=\"!importing\">\r\n <span mat-line i18n=\"import|Import JSON file\">Import JSON file</span>\r\n </div>\r\n <ng-container *ngIf=\"importing\">\r\n <span mat-line i18n=\"import|Importing in progress\">Importing in progress ...</span>\r\n <!-- <span mat-line>{{ imageInfo }}</span> -->\r\n </ng-container>\r\n </mat-list-item>\r\n <mat-progress-bar *ngIf=\"importing\" mode=\"buffer\" value=\"100\"></mat-progress-bar>\r\n</mat-nav-list>\r\n<input type=\"file\" accept=\"application/json\" fxHide #uploadInput (change)=\"startImporting()\" />\r\n",
|
|
52
|
+
styles: ["/*!\n * Copyright (c) 2024 Pobuca.\n * All rights reserved.\n */"]
|
|
53
|
+
},] }
|
|
54
|
+
];
|
|
55
|
+
ImportDialogComponent.ctorParameters = () => [
|
|
56
|
+
{ type: PbUserMiddlewaresService },
|
|
57
|
+
{ type: MatBottomSheetRef }
|
|
58
|
+
];
|
|
59
|
+
ImportDialogComponent.propDecorators = {
|
|
60
|
+
uploadInput: [{ type: ViewChild, args: ['uploadInput', { read: ElementRef, static: true },] }]
|
|
61
|
+
};
|
|
62
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1wb3J0LWRpYWxvZy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9wYi1lbWFpbC1idWlsZGVyL3NyYy9saWIvY29tcG9uZW50cy9pbXBvcnQtZGlhbG9nL2ltcG9ydC1kaWFsb2cuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7R0FHRztBQUVILE9BQU8sRUFBRSxTQUFTLEVBQVUsU0FBUyxFQUFFLFVBQVUsRUFBYSxNQUFNLGVBQWUsQ0FBQztBQUNwRixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNuRSxPQUFPLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3RCxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRTdCLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLCtEQUErRCxDQUFDO0FBUXpHLE1BQU0sT0FBTyxxQkFBcUI7SUFPaEMsWUFBb0IsYUFBdUMsRUFBVSxjQUFpRTtRQUFsSCxrQkFBYSxHQUFiLGFBQWEsQ0FBMEI7UUFBVSxtQkFBYyxHQUFkLGNBQWMsQ0FBbUQ7UUFIL0gsY0FBUyxHQUFHLEtBQUssQ0FBQztRQUNqQixlQUFVLEdBQUcsSUFBSSxVQUFVLEVBQUUsQ0FBQztJQUVtRyxDQUFDO0lBRTFJLGdCQUFnQixDQUFDLEtBQWlCO1FBQ2hDLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUN2QixJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUN6QyxDQUFDO0lBRUQsY0FBYztRQUNaLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO1FBRXRCLElBQUksQ0FBQyxhQUFhO2FBQ2YsVUFBVSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDeEQsSUFBSSxDQUNILElBQUksQ0FBQyxDQUFDLENBQUMsRUFDUCxVQUFVLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FDakIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUN2QyxTQUFTLENBQUMsR0FBRyxFQUFFO1lBQ2IsSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDbkMsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDLENBQUMsQ0FDSCxDQUNGLENBQ0Y7YUFDQSxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDaEIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQzVDLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELFFBQVE7UUFDTixJQUFJLENBQUMsVUFBVSxDQUFDLGdCQUFnQixDQUFDLFNBQVMsRUFBRSxHQUFHLEVBQUU7WUFDL0MsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7WUFDdkIsSUFBSTtnQkFDRixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBZ0IsQ0FBQyxDQUFDO2dCQUMzRCxJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQzthQUNwQztZQUFDLE9BQU8sS0FBSyxFQUFFO2dCQUNkLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUNsQyxNQUFNLElBQUksS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO2FBQ3hCO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsV0FBVyxLQUFJLENBQUM7OztZQXJEakIsU0FBUyxTQUFDO2dCQUNULFFBQVEsRUFBRSxrQkFBa0I7Z0JBQzVCLDJ4QkFBNkM7O2FBRTlDOzs7WUFQUSx3QkFBd0I7WUFKeEIsaUJBQWlCOzs7MEJBYXZCLFNBQVMsU0FBQyxhQUFhLEVBQUUsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxyXG4gKiBDb3B5cmlnaHQgKGMpIDIwMjQgUG9idWNhLlxyXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG4gKi9cclxuXHJcbmltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBWaWV3Q2hpbGQsIEVsZW1lbnRSZWYsIE9uRGVzdHJveSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBNYXRCb3R0b21TaGVldFJlZiB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2JvdHRvbS1zaGVldCc7XHJcbmltcG9ydCB7IHRha2UsIGNhdGNoRXJyb3IsIHN3aXRjaE1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgRU1QVFkgfSBmcm9tICdyeGpzJztcclxuXHJcbmltcG9ydCB7IFBiVXNlck1pZGRsZXdhcmVzU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3VzZXItbWlkZGxld2FyZS1zZXJ2aWNlL3BiLW1pZGRsZXdhcmVzLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBQQkVtYWlsIH0gZnJvbSAnLi4vLi4vY2xhc3Nlcy9EZWZhdWx0RW1haWwnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdwYi1pbXBvcnQtZGlhbG9nJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vaW1wb3J0LWRpYWxvZy5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vaW1wb3J0LWRpYWxvZy5jb21wb25lbnQuc2NzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBJbXBvcnREaWFsb2dDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XHJcbiAgQFZpZXdDaGlsZCgndXBsb2FkSW5wdXQnLCB7IHJlYWQ6IEVsZW1lbnRSZWYsIHN0YXRpYzogdHJ1ZSB9KVxyXG4gIHByaXZhdGUgdXBsb2FkSW5wdXQ6IEVsZW1lbnRSZWY8SFRNTElucHV0RWxlbWVudD47XHJcblxyXG4gIHB1YmxpYyBpbXBvcnRpbmcgPSBmYWxzZTtcclxuICBwcml2YXRlIGZpbGVSZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHBiTWlkZGxld2FyZXM6IFBiVXNlck1pZGRsZXdhcmVzU2VydmljZSwgcHJpdmF0ZSBib3R0b21TaGVldFJlZjogTWF0Qm90dG9tU2hlZXRSZWY8SW1wb3J0RGlhbG9nQ29tcG9uZW50LCBQQkVtYWlsPikge31cclxuXHJcbiAgb3BlbkJyb3dzZXJNb2RhbChldmVudDogTW91c2VFdmVudCkge1xyXG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgIHRoaXMudXBsb2FkSW5wdXQubmF0aXZlRWxlbWVudC5jbGljaygpO1xyXG4gIH1cclxuXHJcbiAgc3RhcnRJbXBvcnRpbmcoKSB7XHJcbiAgICB0aGlzLmltcG9ydGluZyA9IHRydWU7XHJcblxyXG4gICAgdGhpcy5wYk1pZGRsZXdhcmVzXHJcbiAgICAgIC5pbXBvcnRGaWxlKHRoaXMudXBsb2FkSW5wdXQubmF0aXZlRWxlbWVudC5maWxlcy5pdGVtKDApKVxyXG4gICAgICAucGlwZShcclxuICAgICAgICB0YWtlKDEpLFxyXG4gICAgICAgIGNhdGNoRXJyb3IoZXJyb3IgPT5cclxuICAgICAgICAgIHRoaXMucGJNaWRkbGV3YXJlcy5jYXRjaEVycm9yKGVycm9yKS5waXBlKFxyXG4gICAgICAgICAgICBzd2l0Y2hNYXAoKCkgPT4ge1xyXG4gICAgICAgICAgICAgIHRoaXMuYm90dG9tU2hlZXRSZWYuZGlzbWlzcyhlcnJvcik7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIEVNUFRZO1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgKVxyXG4gICAgICAgIClcclxuICAgICAgKVxyXG4gICAgICAuc3Vic2NyaWJlKGZpbGUgPT4ge1xyXG4gICAgICAgIHRoaXMuZmlsZVJlYWRlci5yZWFkQXNUZXh0KGZpbGUsICd1dGYtOCcpO1xyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgdGhpcy5maWxlUmVhZGVyLmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWRlbmQnLCAoKSA9PiB7XHJcbiAgICAgIHRoaXMuaW1wb3J0aW5nID0gZmFsc2U7XHJcbiAgICAgIHRyeSB7XHJcbiAgICAgICAgY29uc3QgZW1haWwgPSBKU09OLnBhcnNlKHRoaXMuZmlsZVJlYWRlci5yZXN1bHQgYXMgc3RyaW5nKTtcclxuICAgICAgICB0aGlzLmJvdHRvbVNoZWV0UmVmLmRpc21pc3MoZW1haWwpO1xyXG4gICAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgIHRoaXMuYm90dG9tU2hlZXRSZWYuZGlzbWlzcyhudWxsKTtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoZXJyb3IpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCkge31cclxufVxyXG4iXX0=
|