@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
package/esm2015/lib/services/user-image-uploader-service/paid-users-image-uploader.service.js
CHANGED
|
@@ -1,30 +1,30 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* Copyright (c) 2024 Pobuca.
|
|
3
|
-
* All rights reserved.
|
|
4
|
-
*/
|
|
5
|
-
import { exhaustMap, filter, switchMap } from 'rxjs/operators';
|
|
6
|
-
import { PbUserImageUploaderService } from './user-image-uploader.service';
|
|
7
|
-
import { UploadImageGalleryComponent } from './upload-image-gallery/upload-image-gallery.component';
|
|
8
|
-
/**
|
|
9
|
-
* @internal
|
|
10
|
-
*/
|
|
11
|
-
export default class PaidUsersImageUploaderServiceService extends PbUserImageUploaderService {
|
|
12
|
-
constructor(matDialog, userMiddleware, userRestApi) {
|
|
13
|
-
super();
|
|
14
|
-
this.matDialog = matDialog;
|
|
15
|
-
this.userMiddleware = userMiddleware;
|
|
16
|
-
this.userRestApi = userRestApi;
|
|
17
|
-
}
|
|
18
|
-
browse$() {
|
|
19
|
-
return this.userRestApi.getUserImages$().pipe(exhaustMap(imageCategoryList => this.matDialog
|
|
20
|
-
.open(UploadImageGalleryComponent, {
|
|
21
|
-
data: imageCategoryList,
|
|
22
|
-
width: '60vw',
|
|
23
|
-
maxWidth: '800px',
|
|
24
|
-
height: '60vh',
|
|
25
|
-
maxHeight: '800px'
|
|
26
|
-
})
|
|
27
|
-
.afterClosed()), filter(path => !!path.length), switchMap(path => this.userMiddleware.uploadImage(path)));
|
|
28
|
-
}
|
|
29
|
-
}
|
|
30
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) 2024 Pobuca.
|
|
3
|
+
* All rights reserved.
|
|
4
|
+
*/
|
|
5
|
+
import { exhaustMap, filter, switchMap } from 'rxjs/operators';
|
|
6
|
+
import { PbUserImageUploaderService } from './user-image-uploader.service';
|
|
7
|
+
import { UploadImageGalleryComponent } from './upload-image-gallery/upload-image-gallery.component';
|
|
8
|
+
/**
|
|
9
|
+
* @internal
|
|
10
|
+
*/
|
|
11
|
+
export default class PaidUsersImageUploaderServiceService extends PbUserImageUploaderService {
|
|
12
|
+
constructor(matDialog, userMiddleware, userRestApi) {
|
|
13
|
+
super();
|
|
14
|
+
this.matDialog = matDialog;
|
|
15
|
+
this.userMiddleware = userMiddleware;
|
|
16
|
+
this.userRestApi = userRestApi;
|
|
17
|
+
}
|
|
18
|
+
browse$() {
|
|
19
|
+
return this.userRestApi.getUserImages$().pipe(exhaustMap(imageCategoryList => this.matDialog
|
|
20
|
+
.open(UploadImageGalleryComponent, {
|
|
21
|
+
data: imageCategoryList,
|
|
22
|
+
width: '60vw',
|
|
23
|
+
maxWidth: '800px',
|
|
24
|
+
height: '60vh',
|
|
25
|
+
maxHeight: '800px'
|
|
26
|
+
})
|
|
27
|
+
.afterClosed()), filter(path => !!path.length), switchMap(path => this.userMiddleware.uploadImage(path)));
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFpZC11c2Vycy1pbWFnZS11cGxvYWRlci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcGItZW1haWwtYnVpbGRlci9zcmMvbGliL3NlcnZpY2VzL3VzZXItaW1hZ2UtdXBsb2FkZXItc2VydmljZS9wYWlkLXVzZXJzLWltYWdlLXVwbG9hZGVyLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7OztHQUdHO0FBR0gsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFL0QsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFFM0UsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sdURBQXVELENBQUM7QUFHcEc7O0dBRUc7QUFDSCxNQUFNLENBQUMsT0FBTyxPQUFPLG9DQUFxQyxTQUFRLDBCQUEwQjtJQUMxRixZQUFvQixTQUFvQixFQUFVLGNBQXdDLEVBQVUsV0FBaUM7UUFDbkksS0FBSyxFQUFFLENBQUM7UUFEVSxjQUFTLEdBQVQsU0FBUyxDQUFXO1FBQVUsbUJBQWMsR0FBZCxjQUFjLENBQTBCO1FBQVUsZ0JBQVcsR0FBWCxXQUFXLENBQXNCO0lBRXJJLENBQUM7SUFFRCxPQUFPO1FBQ0wsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLGNBQWMsRUFBRSxDQUFDLElBQUksQ0FDM0MsVUFBVSxDQUFDLGlCQUFpQixDQUFDLEVBQUUsQ0FDN0IsSUFBSSxDQUFDLFNBQVM7YUFDWCxJQUFJLENBQUMsMkJBQTJCLEVBQUU7WUFDakMsSUFBSSxFQUFFLGlCQUFpQjtZQUN2QixLQUFLLEVBQUUsTUFBTTtZQUNiLFFBQVEsRUFBRSxPQUFPO1lBQ2pCLE1BQU0sRUFBRSxNQUFNO1lBQ2QsU0FBUyxFQUFFLE9BQU87U0FDbkIsQ0FBQzthQUNELFdBQVcsRUFBRSxDQUNqQixFQUNELE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQzdCLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQ3pELENBQUM7SUFDSixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxyXG4gKiBDb3B5cmlnaHQgKGMpIDIwMjQgUG9idWNhLlxyXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG4gKi9cclxuXHJcbmltcG9ydCB7IE1hdERpYWxvZyB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XHJcbmltcG9ydCB7IGV4aGF1c3RNYXAsIGZpbHRlciwgc3dpdGNoTWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5cclxuaW1wb3J0IHsgUGJVc2VySW1hZ2VVcGxvYWRlclNlcnZpY2UgfSBmcm9tICcuL3VzZXItaW1hZ2UtdXBsb2FkZXIuc2VydmljZSc7XHJcbmltcG9ydCB7IFBiVXNlck1pZGRsZXdhcmVzU2VydmljZSB9IGZyb20gJy4uL3VzZXItbWlkZGxld2FyZS1zZXJ2aWNlL3BiLW1pZGRsZXdhcmVzLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBVcGxvYWRJbWFnZUdhbGxlcnlDb21wb25lbnQgfSBmcm9tICcuL3VwbG9hZC1pbWFnZS1nYWxsZXJ5L3VwbG9hZC1pbWFnZS1nYWxsZXJ5LmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFBiVXNlclJlc3RBcGlTZXJ2aWNlIH0gZnJvbSAnLi4vdXNlci1yZXN0LWFwaS1zZXJ2aWNlL3VzZXItcmVzdC1hcGkuc2VydmljZSc7XHJcblxyXG4vKipcclxuICogQGludGVybmFsXHJcbiAqL1xyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBQYWlkVXNlcnNJbWFnZVVwbG9hZGVyU2VydmljZVNlcnZpY2UgZXh0ZW5kcyBQYlVzZXJJbWFnZVVwbG9hZGVyU2VydmljZSB7XHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBtYXREaWFsb2c6IE1hdERpYWxvZywgcHJpdmF0ZSB1c2VyTWlkZGxld2FyZTogUGJVc2VyTWlkZGxld2FyZXNTZXJ2aWNlLCBwcml2YXRlIHVzZXJSZXN0QXBpOiBQYlVzZXJSZXN0QXBpU2VydmljZSkge1xyXG4gICAgc3VwZXIoKTtcclxuICB9XHJcblxyXG4gIGJyb3dzZSQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy51c2VyUmVzdEFwaS5nZXRVc2VySW1hZ2VzJCgpLnBpcGUoXHJcbiAgICAgIGV4aGF1c3RNYXAoaW1hZ2VDYXRlZ29yeUxpc3QgPT5cclxuICAgICAgICB0aGlzLm1hdERpYWxvZ1xyXG4gICAgICAgICAgLm9wZW4oVXBsb2FkSW1hZ2VHYWxsZXJ5Q29tcG9uZW50LCB7XHJcbiAgICAgICAgICAgIGRhdGE6IGltYWdlQ2F0ZWdvcnlMaXN0LFxyXG4gICAgICAgICAgICB3aWR0aDogJzYwdncnLFxyXG4gICAgICAgICAgICBtYXhXaWR0aDogJzgwMHB4JyxcclxuICAgICAgICAgICAgaGVpZ2h0OiAnNjB2aCcsXHJcbiAgICAgICAgICAgIG1heEhlaWdodDogJzgwMHB4J1xyXG4gICAgICAgICAgfSlcclxuICAgICAgICAgIC5hZnRlckNsb3NlZCgpXHJcbiAgICAgICksXHJcbiAgICAgIGZpbHRlcihwYXRoID0+ICEhcGF0aC5sZW5ndGgpLFxyXG4gICAgICBzd2l0Y2hNYXAocGF0aCA9PiB0aGlzLnVzZXJNaWRkbGV3YXJlLnVwbG9hZEltYWdlKHBhdGgpKVxyXG4gICAgKTtcclxuICB9XHJcbn1cclxuIl19
|
|
@@ -1,112 +1,112 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* Copyright (c) 2024 Pobuca.
|
|
3
|
-
* All rights reserved.
|
|
4
|
-
*/
|
|
5
|
-
import { Component, ViewChild, ElementRef } from '@angular/core';
|
|
6
|
-
import { DomSanitizer } from '@angular/platform-browser';
|
|
7
|
-
import { Subject, EMPTY } from 'rxjs';
|
|
8
|
-
import { HttpEventType, HttpResponse } from '@angular/common/http';
|
|
9
|
-
import { MatBottomSheetRef } from '@angular/material/bottom-sheet';
|
|
10
|
-
import { catchError, finalize, switchMap } from 'rxjs/operators';
|
|
11
|
-
import { bytesToSize } from '../../../utils';
|
|
12
|
-
import { PbEmailBuilderService } from '../../../pb-email-builder.service';
|
|
13
|
-
import { PbUserMiddlewaresService } from '../../user-middleware-service/pb-middlewares.service';
|
|
14
|
-
import { PbUserInterfaceService } from '../../internals/user-interfaces/user-interface.service';
|
|
15
|
-
import { PbUserRestApiService } from '../../user-rest-api-service/user-rest-api.service';
|
|
16
|
-
export class UploadBottomSheetDialogComponent {
|
|
17
|
-
constructor(sanitizer, ngb, userRestApi, userInterface, middlewares, bottomSheetRef) {
|
|
18
|
-
this.sanitizer = sanitizer;
|
|
19
|
-
this.ngb = ngb;
|
|
20
|
-
this.userRestApi = userRestApi;
|
|
21
|
-
this.userInterface = userInterface;
|
|
22
|
-
this.middlewares = middlewares;
|
|
23
|
-
this.bottomSheetRef = bottomSheetRef;
|
|
24
|
-
this.uploading = false;
|
|
25
|
-
this.progress = new Subject();
|
|
26
|
-
}
|
|
27
|
-
get imageInfo() {
|
|
28
|
-
if (this.choosedImage) {
|
|
29
|
-
const { lastModified, size } = this.choosedImage;
|
|
30
|
-
const modTime = new Date(lastModified);
|
|
31
|
-
return `${modTime.toLocaleString()}, ${bytesToSize(size)}.`;
|
|
32
|
-
}
|
|
33
|
-
return '';
|
|
34
|
-
}
|
|
35
|
-
previewLink() {
|
|
36
|
-
return this.sanitizer.bypassSecurityTrustResourceUrl(this.objectUrl);
|
|
37
|
-
}
|
|
38
|
-
openBrowserModal(event) {
|
|
39
|
-
event.preventDefault();
|
|
40
|
-
const { uploadImagePath } = this.ngb.config;
|
|
41
|
-
if (!this.uploading && uploadImagePath) {
|
|
42
|
-
this.uploadInput.nativeElement.click();
|
|
43
|
-
}
|
|
44
|
-
else if (!uploadImagePath) {
|
|
45
|
-
this.userInterface.notify(`Hm ... this isn't a bug, it seems 'uploadImagePath' is empty!`);
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
|
-
uploadInputChanged() {
|
|
49
|
-
const { nativeElement } = this.uploadInput;
|
|
50
|
-
if (nativeElement.files.length) {
|
|
51
|
-
this._startUploading(nativeElement.files.item(0));
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
_startUploading(image) {
|
|
55
|
-
if (this.objectUrl) {
|
|
56
|
-
URL.revokeObjectURL(this.objectUrl);
|
|
57
|
-
}
|
|
58
|
-
this.objectUrl = URL.createObjectURL(image);
|
|
59
|
-
this.uploading = true;
|
|
60
|
-
const { uploadImagePath, csrf } = this.ngb.config;
|
|
61
|
-
const formData = new FormData();
|
|
62
|
-
if (csrf) {
|
|
63
|
-
formData.append(csrf.name, csrf.token);
|
|
64
|
-
}
|
|
65
|
-
formData.append('image', image);
|
|
66
|
-
return this.userRestApi
|
|
67
|
-
.userImageUpload$(formData, uploadImagePath)
|
|
68
|
-
.pipe(catchError((error) => this.middlewares.catchError(error).pipe(switchMap(() => {
|
|
69
|
-
this.userInterface.notify(error.message);
|
|
70
|
-
return EMPTY;
|
|
71
|
-
}))), finalize(() => this.progress.complete()))
|
|
72
|
-
.subscribe((event) => {
|
|
73
|
-
if (event.type === HttpEventType.UploadProgress) {
|
|
74
|
-
const percentDone = Math.round((100 * event.loaded) / event.total);
|
|
75
|
-
this.progress.next(percentDone);
|
|
76
|
-
}
|
|
77
|
-
else if (event instanceof HttpResponse) {
|
|
78
|
-
if (!event.body.success) {
|
|
79
|
-
this.userInterface.notify(event.body.message, 'Dismiss', null);
|
|
80
|
-
}
|
|
81
|
-
else {
|
|
82
|
-
this.bottomSheetRef.dismiss(event.body.path);
|
|
83
|
-
this.userInterface.notify('Successfully uploaded.', null, 1000);
|
|
84
|
-
}
|
|
85
|
-
}
|
|
86
|
-
});
|
|
87
|
-
}
|
|
88
|
-
ngOnDestroy() {
|
|
89
|
-
if (this.objectUrl) {
|
|
90
|
-
URL.revokeObjectURL(this.objectUrl);
|
|
91
|
-
}
|
|
92
|
-
}
|
|
93
|
-
}
|
|
94
|
-
UploadBottomSheetDialogComponent.decorators = [
|
|
95
|
-
{ type: Component, args: [{
|
|
96
|
-
selector: 'pb-upload-bottom-sheet-dialog',
|
|
97
|
-
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=\"!uploading\">\n <span mat-line i18n=\"upload|Browse images from computer\">Browse images from computer</span>\n </div>\n <ng-container *ngIf=\"uploading\">\n <img matListAvatar [src]=\"previewLink()\" />\n <span mat-line i18n=\"upload|Uploading Message\">Uploading ...</span>\n <span mat-line>{{ imageInfo }}</span>\n </ng-container>\n </mat-list-item>\n <mat-progress-bar *ngIf=\"uploading\" mode=\"buffer\" [value]=\"progress | async\"></mat-progress-bar>\n</mat-nav-list>\n<input type=\"file\" accept=\"image/*\" fxHide #uploadInput (change)=\"uploadInputChanged()\" />\n",
|
|
98
|
-
styles: [""]
|
|
99
|
-
},] }
|
|
100
|
-
];
|
|
101
|
-
UploadBottomSheetDialogComponent.ctorParameters = () => [
|
|
102
|
-
{ type: DomSanitizer },
|
|
103
|
-
{ type: PbEmailBuilderService },
|
|
104
|
-
{ type: PbUserRestApiService },
|
|
105
|
-
{ type: PbUserInterfaceService },
|
|
106
|
-
{ type: PbUserMiddlewaresService },
|
|
107
|
-
{ type: MatBottomSheetRef }
|
|
108
|
-
];
|
|
109
|
-
UploadBottomSheetDialogComponent.propDecorators = {
|
|
110
|
-
uploadInput: [{ type: ViewChild, args: ['uploadInput', { static: true },] }]
|
|
111
|
-
};
|
|
112
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBsb2FkLWJvdHRvbS1zaGVldC1kaWFsb2cuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcGItZW1haWwtYnVpbGRlci9zcmMvbGliL3NlcnZpY2VzL3VzZXItaW1hZ2UtdXBsb2FkZXItc2VydmljZS91cGxvYWQtYm90dG9tLXNoZWV0LWRpYWxvZy91cGxvYWQtYm90dG9tLXNoZWV0LWRpYWxvZy5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7OztHQUdHO0FBRUgsT0FBTyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFhLE1BQU0sZUFBZSxDQUFDO0FBQzVFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN0QyxPQUFPLEVBQUUsYUFBYSxFQUFFLFlBQVksRUFBZ0MsTUFBTSxzQkFBc0IsQ0FBQztBQUNqRyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNuRSxPQUFPLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVqRSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDMUUsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sc0RBQXNELENBQUM7QUFDaEcsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sd0RBQXdELENBQUM7QUFDaEcsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sbURBQW1ELENBQUM7QUFPekYsTUFBTSxPQUFPLGdDQUFnQztJQU8zQyxZQUNVLFNBQXVCLEVBQ3ZCLEdBQTBCLEVBQzFCLFdBQWlDLEVBQ2pDLGFBQXFD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QUM7Z0JBQ1QsUUFBUSxFQUFFLCtCQUErQjtnQkFDekMsMndCQUEwRDs7YUFFM0Q7OztZQWhCUSxZQUFZO1lBT1oscUJBQXFCO1lBR3JCLG9CQUFvQjtZQURwQixzQkFBc0I7WUFEdEIsd0JBQXdCO1lBTHhCLGlCQUFpQjs7OzBCQWV2QixTQUFTLFNBQUMsYUFBYSxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBDb3B5cmlnaHQgKGMpIDIwMjQgUG9idWNhLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqL1xuXG5pbXBvcnQgeyBDb21wb25lbnQsIFZpZXdDaGlsZCwgRWxlbWVudFJlZiwgT25EZXN0cm95IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBEb21TYW5pdGl6ZXIgfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJztcbmltcG9ydCB7IFN1YmplY3QsIEVNUFRZIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBIdHRwRXZlbnRUeXBlLCBIdHRwUmVzcG9uc2UsIEh0dHBFdmVudCwgSHR0cEVycm9yUmVzcG9uc2UgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBNYXRCb3R0b21TaGVldFJlZiB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2JvdHRvbS1zaGVldCc7XG5pbXBvcnQgeyBjYXRjaEVycm9yLCBmaW5hbGl6ZSwgc3dpdGNoTWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyBieXRlc1RvU2l6ZSB9IGZyb20gJy4uLy4uLy4uL3V0aWxzJztcbmltcG9ydCB7IFBiRW1haWxCdWlsZGVyU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3BiLWVtYWlsLWJ1aWxkZXIuc2VydmljZSc7XG5pbXBvcnQgeyBQYlVzZXJNaWRkbGV3YXJlc1NlcnZpY2UgfSBmcm9tICcuLi8uLi91c2VyLW1pZGRsZXdhcmUtc2VydmljZS9wYi1taWRkbGV3YXJlcy5zZXJ2aWNlJztcbmltcG9ydCB7IFBiVXNlckludGVyZmFjZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9pbnRlcm5hbHMvdXNlci1pbnRlcmZhY2VzL3VzZXItaW50ZXJmYWNlLnNlcnZpY2UnO1xuaW1wb3J0IHsgUGJVc2VyUmVzdEFwaVNlcnZpY2UgfSBmcm9tICcuLi8uLi91c2VyLXJlc3QtYXBpLXNlcnZpY2UvdXNlci1yZXN0LWFwaS5zZXJ2aWNlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAncGItdXBsb2FkLWJvdHRvbS1zaGVldC1kaWFsb2cnLFxuICB0ZW1wbGF0ZVVybDogJy4vdXBsb2FkLWJvdHRvbS1zaGVldC1kaWFsb2cuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi91cGxvYWQtYm90dG9tLXNoZWV0LWRpYWxvZy5jb21wb25lbnQuY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgVXBsb2FkQm90dG9tU2hlZXREaWFsb2dDb21wb25lbnQgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuICBAVmlld0NoaWxkKCd1cGxvYWRJbnB1dCcsIHsgc3RhdGljOiB0cnVlIH0pIHVwbG9hZElucHV0OiBFbGVtZW50UmVmPEhUTUxJbnB1dEVsZW1lbnQ+O1xuICBjaG9vc2VkSW1hZ2U6IEZpbGU7XG4gIHVwbG9hZGluZyA9IGZhbHNlO1xuICBwcm9ncmVzcyA9IG5ldyBTdWJqZWN0PG51bWJlcj4oKTtcbiAgcHJpdmF0ZSBvYmplY3RVcmw6IHN0cmluZztcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHNhbml0aXplcjogRG9tU2FuaXRpemVyLFxuICAgIHByaXZhdGUgbmdiOiBQYkVtYWlsQnVpbGRlclNlcnZpY2UsXG4gICAgcHJpdmF0ZSB1c2VyUmVzdEFwaTogUGJVc2VyUmVzdEFwaVNlcnZpY2UsXG4gICAgcHJpdmF0ZSB1c2VySW50ZXJmYWNlOiBQYlVzZXJJbnRlcmZhY2VTZXJ2aWNlLFxuICAgIHByaXZhdGUgbWlkZGxld2FyZXM6IFBiVXNlck1pZGRsZXdhcmVzU2VydmljZSxcbiAgICBwcml2YXRlIGJvdHRvbVNoZWV0UmVmOiBNYXRCb3R0b21TaGVldFJlZjxVcGxvYWRCb3R0b21TaGVldERpYWxvZ0NvbXBvbmVudD5cbiAgKSB7fVxuXG4gIGdldCBpbWFnZUluZm8oKSB7XG4gICAgaWYgKHRoaXMuY2hvb3NlZEltYWdlKSB7XG4gICAgICBjb25zdCB7IGxhc3RNb2RpZmllZCwgc2l6ZSB9ID0gdGhpcy5jaG9vc2VkSW1hZ2U7XG4gICAgICBjb25zdCBtb2RUaW1lID0gbmV3IERhdGUobGFzdE1vZGlmaWVkKTtcbiAgICAgIHJldHVybiBgJHttb2RUaW1lLnRvTG9jYWxlU3RyaW5nKCl9LCAke2J5dGVzVG9TaXplKHNpemUpfS5gO1xuICAgIH1cbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICBwcmV2aWV3TGluaygpIHtcbiAgICByZXR1cm4gdGhpcy5zYW5pdGl6ZXIuYnlwYXNzU2VjdXJpdHlUcnVzdFJlc291cmNlVXJsKHRoaXMub2JqZWN0VXJsKTtcbiAgfVxuXG4gIG9wZW5Ccm93c2VyTW9kYWwoZXZlbnQ6IE1vdXNlRXZlbnQpIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGNvbnN0IHsgdXBsb2FkSW1hZ2VQYXRoIH0gPSB0aGlzLm5nYi5jb25maWc7XG4gICAgaWYgKCF0aGlzLnVwbG9hZGluZyAmJiB1cGxvYWRJbWFnZVBhdGgpIHtcbiAgICAgIHRoaXMudXBsb2FkSW5wdXQubmF0aXZlRWxlbWVudC5jbGljaygpO1xuICAgIH0gZWxzZSBpZiAoIXVwbG9hZEltYWdlUGF0aCkge1xuICAgICAgdGhpcy51c2VySW50ZXJmYWNlLm5vdGlmeShgSG0gLi4uIHRoaXMgaXNuJ3QgYSBidWcsIGl0IHNlZW1zICd1cGxvYWRJbWFnZVBhdGgnIGlzIGVtcHR5IWApO1xuICAgIH1cbiAgfVxuXG4gIHVwbG9hZElucHV0Q2hhbmdlZCgpIHtcbiAgICBjb25zdCB7IG5hdGl2ZUVsZW1lbnQgfSA9IHRoaXMudXBsb2FkSW5wdXQ7XG4gICAgaWYgKG5hdGl2ZUVsZW1lbnQuZmlsZXMubGVuZ3RoKSB7XG4gICAgICB0aGlzLl9zdGFydFVwbG9hZGluZyhuYXRpdmVFbGVtZW50LmZpbGVzLml0ZW0oMCkpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX3N0YXJ0VXBsb2FkaW5nKGltYWdlOiBGaWxlKSB7XG4gICAgaWYgKHRoaXMub2JqZWN0VXJsKSB7XG4gICAgICBVUkwucmV2b2tlT2JqZWN0VVJMKHRoaXMub2JqZWN0VXJsKTtcbiAgICB9XG4gICAgdGhpcy5vYmplY3RVcmwgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKGltYWdlKTtcbiAgICB0aGlzLnVwbG9hZGluZyA9IHRydWU7XG5cbiAgICBjb25zdCB7IHVwbG9hZEltYWdlUGF0aCwgY3NyZiB9ID0gdGhpcy5uZ2IuY29uZmlnO1xuXG4gICAgY29uc3QgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTtcbiAgICBpZiAoY3NyZikge1xuICAgICAgZm9ybURhdGEuYXBwZW5kKGNzcmYubmFtZSwgY3NyZi50b2tlbik7XG4gICAgfVxuICAgIGZvcm1EYXRhLmFwcGVuZCgnaW1hZ2UnLCBpbWFnZSk7XG5cbiAgICByZXR1cm4gdGhpcy51c2VyUmVzdEFwaVxuICAgICAgLnVzZXJJbWFnZVVwbG9hZCQoZm9ybURhdGEsIHVwbG9hZEltYWdlUGF0aClcbiAgICAgIC5waXBlKFxuICAgICAgICBjYXRjaEVycm9yKChlcnJvcjogRXJyb3IgfCBIdHRwRXJyb3JSZXNwb25zZSkgPT5cbiAgICAgICAgICB0aGlzLm1pZGRsZXdhcmVzLmNhdGNoRXJyb3IoZXJyb3IpLnBpcGUoXG4gICAgICAgICAgICBzd2l0Y2hNYXAoKCkgPT4ge1xuICAgICAgICAgICAgICB0aGlzLnVzZXJJbnRlcmZhY2Uubm90aWZ5KGVycm9yLm1lc3NhZ2UpO1xuICAgICAgICAgICAgICByZXR1cm4gRU1QVFk7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgIClcbiAgICAgICAgKSxcbiAgICAgICAgZmluYWxpemUoKCkgPT4gdGhpcy5wcm9ncmVzcy5jb21wbGV0ZSgpKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgoZXZlbnQ6IEh0dHBFdmVudDx7IHN1Y2Nlc3M6IGJvb2xlYW47IHBhdGg6IHN0cmluZzsgbWVzc2FnZT86IHN0cmluZyB9PikgPT4ge1xuICAgICAgICBpZiAoZXZlbnQudHlwZSA9PT0gSHR0cEV2ZW50VHlwZS5VcGxvYWRQcm9ncmVzcykge1xuICAgICAgICAgIGNvbnN0IHBlcmNlbnREb25lID0gTWF0aC5yb3VuZCgoMTAwICogZXZlbnQubG9hZGVkKSAvIGV2ZW50LnRvdGFsKTtcbiAgICAgICAgICB0aGlzLnByb2dyZXNzLm5leHQocGVyY2VudERvbmUpO1xuICAgICAgICB9IGVsc2UgaWYgKGV2ZW50IGluc3RhbmNlb2YgSHR0cFJlc3BvbnNlKSB7XG4gICAgICAgICAgaWYgKCFldmVudC5ib2R5LnN1Y2Nlc3MpIHtcbiAgICAgICAgICAgIHRoaXMudXNlckludGVyZmFjZS5ub3RpZnkoZXZlbnQuYm9keS5tZXNzYWdlLCAnRGlzbWlzcycsIG51bGwpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmJvdHRvbVNoZWV0UmVmLmRpc21pc3MoZXZlbnQuYm9keS5wYXRoKTtcbiAgICAgICAgICAgIHRoaXMudXNlckludGVyZmFjZS5ub3RpZnkoJ1N1Y2Nlc3NmdWxseSB1cGxvYWRlZC4nLCBudWxsLCAxMDAwKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgaWYgKHRoaXMub2JqZWN0VXJsKSB7XG4gICAgICBVUkwucmV2b2tlT2JqZWN0VVJMKHRoaXMub2JqZWN0VXJsKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) 2024 Pobuca.
|
|
3
|
+
* All rights reserved.
|
|
4
|
+
*/
|
|
5
|
+
import { Component, ViewChild, ElementRef } from '@angular/core';
|
|
6
|
+
import { DomSanitizer } from '@angular/platform-browser';
|
|
7
|
+
import { Subject, EMPTY } from 'rxjs';
|
|
8
|
+
import { HttpEventType, HttpResponse } from '@angular/common/http';
|
|
9
|
+
import { MatBottomSheetRef } from '@angular/material/bottom-sheet';
|
|
10
|
+
import { catchError, finalize, switchMap } from 'rxjs/operators';
|
|
11
|
+
import { bytesToSize } from '../../../utils';
|
|
12
|
+
import { PbEmailBuilderService } from '../../../pb-email-builder.service';
|
|
13
|
+
import { PbUserMiddlewaresService } from '../../user-middleware-service/pb-middlewares.service';
|
|
14
|
+
import { PbUserInterfaceService } from '../../internals/user-interfaces/user-interface.service';
|
|
15
|
+
import { PbUserRestApiService } from '../../user-rest-api-service/user-rest-api.service';
|
|
16
|
+
export class UploadBottomSheetDialogComponent {
|
|
17
|
+
constructor(sanitizer, ngb, userRestApi, userInterface, middlewares, bottomSheetRef) {
|
|
18
|
+
this.sanitizer = sanitizer;
|
|
19
|
+
this.ngb = ngb;
|
|
20
|
+
this.userRestApi = userRestApi;
|
|
21
|
+
this.userInterface = userInterface;
|
|
22
|
+
this.middlewares = middlewares;
|
|
23
|
+
this.bottomSheetRef = bottomSheetRef;
|
|
24
|
+
this.uploading = false;
|
|
25
|
+
this.progress = new Subject();
|
|
26
|
+
}
|
|
27
|
+
get imageInfo() {
|
|
28
|
+
if (this.choosedImage) {
|
|
29
|
+
const { lastModified, size } = this.choosedImage;
|
|
30
|
+
const modTime = new Date(lastModified);
|
|
31
|
+
return `${modTime.toLocaleString()}, ${bytesToSize(size)}.`;
|
|
32
|
+
}
|
|
33
|
+
return '';
|
|
34
|
+
}
|
|
35
|
+
previewLink() {
|
|
36
|
+
return this.sanitizer.bypassSecurityTrustResourceUrl(this.objectUrl);
|
|
37
|
+
}
|
|
38
|
+
openBrowserModal(event) {
|
|
39
|
+
event.preventDefault();
|
|
40
|
+
const { uploadImagePath } = this.ngb.config;
|
|
41
|
+
if (!this.uploading && uploadImagePath) {
|
|
42
|
+
this.uploadInput.nativeElement.click();
|
|
43
|
+
}
|
|
44
|
+
else if (!uploadImagePath) {
|
|
45
|
+
this.userInterface.notify(`Hm ... this isn't a bug, it seems 'uploadImagePath' is empty!`);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
uploadInputChanged() {
|
|
49
|
+
const { nativeElement } = this.uploadInput;
|
|
50
|
+
if (nativeElement.files.length) {
|
|
51
|
+
this._startUploading(nativeElement.files.item(0));
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
_startUploading(image) {
|
|
55
|
+
if (this.objectUrl) {
|
|
56
|
+
URL.revokeObjectURL(this.objectUrl);
|
|
57
|
+
}
|
|
58
|
+
this.objectUrl = URL.createObjectURL(image);
|
|
59
|
+
this.uploading = true;
|
|
60
|
+
const { uploadImagePath, csrf } = this.ngb.config;
|
|
61
|
+
const formData = new FormData();
|
|
62
|
+
if (csrf) {
|
|
63
|
+
formData.append(csrf.name, csrf.token);
|
|
64
|
+
}
|
|
65
|
+
formData.append('image', image);
|
|
66
|
+
return this.userRestApi
|
|
67
|
+
.userImageUpload$(formData, uploadImagePath)
|
|
68
|
+
.pipe(catchError((error) => this.middlewares.catchError(error).pipe(switchMap(() => {
|
|
69
|
+
this.userInterface.notify(error.message);
|
|
70
|
+
return EMPTY;
|
|
71
|
+
}))), finalize(() => this.progress.complete()))
|
|
72
|
+
.subscribe((event) => {
|
|
73
|
+
if (event.type === HttpEventType.UploadProgress) {
|
|
74
|
+
const percentDone = Math.round((100 * event.loaded) / event.total);
|
|
75
|
+
this.progress.next(percentDone);
|
|
76
|
+
}
|
|
77
|
+
else if (event instanceof HttpResponse) {
|
|
78
|
+
if (!event.body.success) {
|
|
79
|
+
this.userInterface.notify(event.body.message, 'Dismiss', null);
|
|
80
|
+
}
|
|
81
|
+
else {
|
|
82
|
+
this.bottomSheetRef.dismiss(event.body.path);
|
|
83
|
+
this.userInterface.notify('Successfully uploaded.', null, 1000);
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
ngOnDestroy() {
|
|
89
|
+
if (this.objectUrl) {
|
|
90
|
+
URL.revokeObjectURL(this.objectUrl);
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
UploadBottomSheetDialogComponent.decorators = [
|
|
95
|
+
{ type: Component, args: [{
|
|
96
|
+
selector: 'pb-upload-bottom-sheet-dialog',
|
|
97
|
+
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=\"!uploading\">\r\n <span mat-line i18n=\"upload|Browse images from computer\">Browse images from computer</span>\r\n </div>\r\n <ng-container *ngIf=\"uploading\">\r\n <img matListAvatar [src]=\"previewLink()\" />\r\n <span mat-line i18n=\"upload|Uploading Message\">Uploading ...</span>\r\n <span mat-line>{{ imageInfo }}</span>\r\n </ng-container>\r\n </mat-list-item>\r\n <mat-progress-bar *ngIf=\"uploading\" mode=\"buffer\" [value]=\"progress | async\"></mat-progress-bar>\r\n</mat-nav-list>\r\n<input type=\"file\" accept=\"image/*\" fxHide #uploadInput (change)=\"uploadInputChanged()\" />\r\n",
|
|
98
|
+
styles: [""]
|
|
99
|
+
},] }
|
|
100
|
+
];
|
|
101
|
+
UploadBottomSheetDialogComponent.ctorParameters = () => [
|
|
102
|
+
{ type: DomSanitizer },
|
|
103
|
+
{ type: PbEmailBuilderService },
|
|
104
|
+
{ type: PbUserRestApiService },
|
|
105
|
+
{ type: PbUserInterfaceService },
|
|
106
|
+
{ type: PbUserMiddlewaresService },
|
|
107
|
+
{ type: MatBottomSheetRef }
|
|
108
|
+
];
|
|
109
|
+
UploadBottomSheetDialogComponent.propDecorators = {
|
|
110
|
+
uploadInput: [{ type: ViewChild, args: ['uploadInput', { static: true },] }]
|
|
111
|
+
};
|
|
112
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBsb2FkLWJvdHRvbS1zaGVldC1kaWFsb2cuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcGItZW1haWwtYnVpbGRlci9zcmMvbGliL3NlcnZpY2VzL3VzZXItaW1hZ2UtdXBsb2FkZXItc2VydmljZS91cGxvYWQtYm90dG9tLXNoZWV0LWRpYWxvZy91cGxvYWQtYm90dG9tLXNoZWV0LWRpYWxvZy5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7OztHQUdHO0FBRUgsT0FBTyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFhLE1BQU0sZUFBZSxDQUFDO0FBQzVFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN0QyxPQUFPLEVBQUUsYUFBYSxFQUFFLFlBQVksRUFBZ0MsTUFBTSxzQkFBc0IsQ0FBQztBQUNqRyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNuRSxPQUFPLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVqRSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDMUUsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sc0RBQXNELENBQUM7QUFDaEcsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sd0RBQXdELENBQUM7QUFDaEcsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sbURBQW1ELENBQUM7QUFPekYsTUFBTSxPQUFPLGdDQUFnQztJQU8zQyxZQUNVLFNBQXVCLEVBQ3ZCLEdBQTBCLEVBQzFCLFdBQWlDLEVBQ2pDLGFBQXFD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QUM7Z0JBQ1QsUUFBUSxFQUFFLCtCQUErQjtnQkFDekMsaXpCQUEwRDs7YUFFM0Q7OztZQWhCUSxZQUFZO1lBT1oscUJBQXFCO1lBR3JCLG9CQUFvQjtZQURwQixzQkFBc0I7WUFEdEIsd0JBQXdCO1lBTHhCLGlCQUFpQjs7OzBCQWV2QixTQUFTLFNBQUMsYUFBYSxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSIsInNvdXJjZXNDb250ZW50IjpbIi8qXHJcbiAqIENvcHlyaWdodCAoYykgMjAyNCBQb2J1Y2EuXHJcbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbiAqL1xyXG5cclxuaW1wb3J0IHsgQ29tcG9uZW50LCBWaWV3Q2hpbGQsIEVsZW1lbnRSZWYsIE9uRGVzdHJveSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBEb21TYW5pdGl6ZXIgfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJztcclxuaW1wb3J0IHsgU3ViamVjdCwgRU1QVFkgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgSHR0cEV2ZW50VHlwZSwgSHR0cFJlc3BvbnNlLCBIdHRwRXZlbnQsIEh0dHBFcnJvclJlc3BvbnNlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQgeyBNYXRCb3R0b21TaGVldFJlZiB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2JvdHRvbS1zaGVldCc7XHJcbmltcG9ydCB7IGNhdGNoRXJyb3IsIGZpbmFsaXplLCBzd2l0Y2hNYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcblxyXG5pbXBvcnQgeyBieXRlc1RvU2l6ZSB9IGZyb20gJy4uLy4uLy4uL3V0aWxzJztcclxuaW1wb3J0IHsgUGJFbWFpbEJ1aWxkZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vcGItZW1haWwtYnVpbGRlci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgUGJVc2VyTWlkZGxld2FyZXNTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vdXNlci1taWRkbGV3YXJlLXNlcnZpY2UvcGItbWlkZGxld2FyZXMuc2VydmljZSc7XHJcbmltcG9ydCB7IFBiVXNlckludGVyZmFjZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9pbnRlcm5hbHMvdXNlci1pbnRlcmZhY2VzL3VzZXItaW50ZXJmYWNlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBQYlVzZXJSZXN0QXBpU2VydmljZSB9IGZyb20gJy4uLy4uL3VzZXItcmVzdC1hcGktc2VydmljZS91c2VyLXJlc3QtYXBpLnNlcnZpY2UnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdwYi11cGxvYWQtYm90dG9tLXNoZWV0LWRpYWxvZycsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3VwbG9hZC1ib3R0b20tc2hlZXQtZGlhbG9nLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi91cGxvYWQtYm90dG9tLXNoZWV0LWRpYWxvZy5jb21wb25lbnQuY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIFVwbG9hZEJvdHRvbVNoZWV0RGlhbG9nQ29tcG9uZW50IGltcGxlbWVudHMgT25EZXN0cm95IHtcclxuICBAVmlld0NoaWxkKCd1cGxvYWRJbnB1dCcsIHsgc3RhdGljOiB0cnVlIH0pIHVwbG9hZElucHV0OiBFbGVtZW50UmVmPEhUTUxJbnB1dEVsZW1lbnQ+O1xyXG4gIGNob29zZWRJbWFnZTogRmlsZTtcclxuICB1cGxvYWRpbmcgPSBmYWxzZTtcclxuICBwcm9ncmVzcyA9IG5ldyBTdWJqZWN0PG51bWJlcj4oKTtcclxuICBwcml2YXRlIG9iamVjdFVybDogc3RyaW5nO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgc2FuaXRpemVyOiBEb21TYW5pdGl6ZXIsXHJcbiAgICBwcml2YXRlIG5nYjogUGJFbWFpbEJ1aWxkZXJTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSB1c2VyUmVzdEFwaTogUGJVc2VyUmVzdEFwaVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHVzZXJJbnRlcmZhY2U6IFBiVXNlckludGVyZmFjZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIG1pZGRsZXdhcmVzOiBQYlVzZXJNaWRkbGV3YXJlc1NlcnZpY2UsXHJcbiAgICBwcml2YXRlIGJvdHRvbVNoZWV0UmVmOiBNYXRCb3R0b21TaGVldFJlZjxVcGxvYWRCb3R0b21TaGVldERpYWxvZ0NvbXBvbmVudD5cclxuICApIHt9XHJcblxyXG4gIGdldCBpbWFnZUluZm8oKSB7XHJcbiAgICBpZiAodGhpcy5jaG9vc2VkSW1hZ2UpIHtcclxuICAgICAgY29uc3QgeyBsYXN0TW9kaWZpZWQsIHNpemUgfSA9IHRoaXMuY2hvb3NlZEltYWdlO1xyXG4gICAgICBjb25zdCBtb2RUaW1lID0gbmV3IERhdGUobGFzdE1vZGlmaWVkKTtcclxuICAgICAgcmV0dXJuIGAke21vZFRpbWUudG9Mb2NhbGVTdHJpbmcoKX0sICR7Ynl0ZXNUb1NpemUoc2l6ZSl9LmA7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gJyc7XHJcbiAgfVxyXG5cclxuICBwcmV2aWV3TGluaygpIHtcclxuICAgIHJldHVybiB0aGlzLnNhbml0aXplci5ieXBhc3NTZWN1cml0eVRydXN0UmVzb3VyY2VVcmwodGhpcy5vYmplY3RVcmwpO1xyXG4gIH1cclxuXHJcbiAgb3BlbkJyb3dzZXJNb2RhbChldmVudDogTW91c2VFdmVudCkge1xyXG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgIGNvbnN0IHsgdXBsb2FkSW1hZ2VQYXRoIH0gPSB0aGlzLm5nYi5jb25maWc7XHJcbiAgICBpZiAoIXRoaXMudXBsb2FkaW5nICYmIHVwbG9hZEltYWdlUGF0aCkge1xyXG4gICAgICB0aGlzLnVwbG9hZElucHV0Lm5hdGl2ZUVsZW1lbnQuY2xpY2soKTtcclxuICAgIH0gZWxzZSBpZiAoIXVwbG9hZEltYWdlUGF0aCkge1xyXG4gICAgICB0aGlzLnVzZXJJbnRlcmZhY2Uubm90aWZ5KGBIbSAuLi4gdGhpcyBpc24ndCBhIGJ1ZywgaXQgc2VlbXMgJ3VwbG9hZEltYWdlUGF0aCcgaXMgZW1wdHkhYCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB1cGxvYWRJbnB1dENoYW5nZWQoKSB7XHJcbiAgICBjb25zdCB7IG5hdGl2ZUVsZW1lbnQgfSA9IHRoaXMudXBsb2FkSW5wdXQ7XHJcbiAgICBpZiAobmF0aXZlRWxlbWVudC5maWxlcy5sZW5ndGgpIHtcclxuICAgICAgdGhpcy5fc3RhcnRVcGxvYWRpbmcobmF0aXZlRWxlbWVudC5maWxlcy5pdGVtKDApKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3N0YXJ0VXBsb2FkaW5nKGltYWdlOiBGaWxlKSB7XHJcbiAgICBpZiAodGhpcy5vYmplY3RVcmwpIHtcclxuICAgICAgVVJMLnJldm9rZU9iamVjdFVSTCh0aGlzLm9iamVjdFVybCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLm9iamVjdFVybCA9IFVSTC5jcmVhdGVPYmplY3RVUkwoaW1hZ2UpO1xyXG4gICAgdGhpcy51cGxvYWRpbmcgPSB0cnVlO1xyXG5cclxuICAgIGNvbnN0IHsgdXBsb2FkSW1hZ2VQYXRoLCBjc3JmIH0gPSB0aGlzLm5nYi5jb25maWc7XHJcblxyXG4gICAgY29uc3QgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTtcclxuICAgIGlmIChjc3JmKSB7XHJcbiAgICAgIGZvcm1EYXRhLmFwcGVuZChjc3JmLm5hbWUsIGNzcmYudG9rZW4pO1xyXG4gICAgfVxyXG4gICAgZm9ybURhdGEuYXBwZW5kKCdpbWFnZScsIGltYWdlKTtcclxuXHJcbiAgICByZXR1cm4gdGhpcy51c2VyUmVzdEFwaVxyXG4gICAgICAudXNlckltYWdlVXBsb2FkJChmb3JtRGF0YSwgdXBsb2FkSW1hZ2VQYXRoKVxyXG4gICAgICAucGlwZShcclxuICAgICAgICBjYXRjaEVycm9yKChlcnJvcjogRXJyb3IgfCBIdHRwRXJyb3JSZXNwb25zZSkgPT5cclxuICAgICAgICAgIHRoaXMubWlkZGxld2FyZXMuY2F0Y2hFcnJvcihlcnJvcikucGlwZShcclxuICAgICAgICAgICAgc3dpdGNoTWFwKCgpID0+IHtcclxuICAgICAgICAgICAgICB0aGlzLnVzZXJJbnRlcmZhY2Uubm90aWZ5KGVycm9yLm1lc3NhZ2UpO1xyXG4gICAgICAgICAgICAgIHJldHVybiBFTVBUWTtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgIClcclxuICAgICAgICApLFxyXG4gICAgICAgIGZpbmFsaXplKCgpID0+IHRoaXMucHJvZ3Jlc3MuY29tcGxldGUoKSlcclxuICAgICAgKVxyXG4gICAgICAuc3Vic2NyaWJlKChldmVudDogSHR0cEV2ZW50PHsgc3VjY2VzczogYm9vbGVhbjsgcGF0aDogc3RyaW5nOyBtZXNzYWdlPzogc3RyaW5nIH0+KSA9PiB7XHJcbiAgICAgICAgaWYgKGV2ZW50LnR5cGUgPT09IEh0dHBFdmVudFR5cGUuVXBsb2FkUHJvZ3Jlc3MpIHtcclxuICAgICAgICAgIGNvbnN0IHBlcmNlbnREb25lID0gTWF0aC5yb3VuZCgoMTAwICogZXZlbnQubG9hZGVkKSAvIGV2ZW50LnRvdGFsKTtcclxuICAgICAgICAgIHRoaXMucHJvZ3Jlc3MubmV4dChwZXJjZW50RG9uZSk7XHJcbiAgICAgICAgfSBlbHNlIGlmIChldmVudCBpbnN0YW5jZW9mIEh0dHBSZXNwb25zZSkge1xyXG4gICAgICAgICAgaWYgKCFldmVudC5ib2R5LnN1Y2Nlc3MpIHtcclxuICAgICAgICAgICAgdGhpcy51c2VySW50ZXJmYWNlLm5vdGlmeShldmVudC5ib2R5Lm1lc3NhZ2UsICdEaXNtaXNzJywgbnVsbCk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmJvdHRvbVNoZWV0UmVmLmRpc21pc3MoZXZlbnQuYm9keS5wYXRoKTtcclxuICAgICAgICAgICAgdGhpcy51c2VySW50ZXJmYWNlLm5vdGlmeSgnU3VjY2Vzc2Z1bGx5IHVwbG9hZGVkLicsIG51bGwsIDEwMDApO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpIHtcclxuICAgIGlmICh0aGlzLm9iamVjdFVybCkge1xyXG4gICAgICBVUkwucmV2b2tlT2JqZWN0VVJMKHRoaXMub2JqZWN0VXJsKTtcclxuICAgIH1cclxuICB9XHJcbn1cclxuIl19
|
|
@@ -1,91 +1,91 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* Copyright (c) 2024 Pobuca.
|
|
3
|
-
* All rights reserved.
|
|
4
|
-
*/
|
|
5
|
-
import { Component, Inject } from '@angular/core';
|
|
6
|
-
import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';
|
|
7
|
-
import { DomSanitizer } from '@angular/platform-browser';
|
|
8
|
-
import { catchError, switchMap } from 'rxjs/operators';
|
|
9
|
-
import { HttpEventType, HttpResponse } from '@angular/common/http';
|
|
10
|
-
import { EMPTY } from 'rxjs';
|
|
11
|
-
import { PbUserRestApiService } from '../../user-rest-api-service/user-rest-api.service';
|
|
12
|
-
import { PB_CONFIG } from '../../../tokens/tokens';
|
|
13
|
-
import { PbUserMiddlewaresService } from '../../user-middleware-service/pb-middlewares.service';
|
|
14
|
-
import { PbUserInterfaceService } from '../../internals/user-interfaces/user-interface.service';
|
|
15
|
-
export class UploadImageGalleryComponent {
|
|
16
|
-
constructor(imageCategoryList, userConfig, matDialogRef, sanitizer, userRestApi, middlewares, userInterface) {
|
|
17
|
-
this.imageCategoryList = imageCategoryList;
|
|
18
|
-
this.userConfig = userConfig;
|
|
19
|
-
this.matDialogRef = matDialogRef;
|
|
20
|
-
this.sanitizer = sanitizer;
|
|
21
|
-
this.userRestApi = userRestApi;
|
|
22
|
-
this.middlewares = middlewares;
|
|
23
|
-
this.userInterface = userInterface;
|
|
24
|
-
this.currentMenuItem = 'gallery';
|
|
25
|
-
}
|
|
26
|
-
changeCurrentMenuItem(item) {
|
|
27
|
-
this.currentMenuItem = item;
|
|
28
|
-
}
|
|
29
|
-
addImageToTemplate(imagePath = this.choseImage) {
|
|
30
|
-
this.matDialogRef.close(imagePath);
|
|
31
|
-
}
|
|
32
|
-
previewImage({ target }) {
|
|
33
|
-
this.uploadImageFile = target.files.item(0);
|
|
34
|
-
if (this.imagePreviewObjectUrl) {
|
|
35
|
-
URL.revokeObjectURL(this.imagePreviewObjectUrl);
|
|
36
|
-
}
|
|
37
|
-
this.imagePreviewObjectUrl = URL.createObjectURL(this.uploadImageFile);
|
|
38
|
-
this.uploadImagePreview = this.sanitizer.bypassSecurityTrustResourceUrl(this.imagePreviewObjectUrl);
|
|
39
|
-
}
|
|
40
|
-
startUploading() {
|
|
41
|
-
const { csrf, uploadImagePath } = this.userConfig;
|
|
42
|
-
const formData = new FormData();
|
|
43
|
-
if (csrf) {
|
|
44
|
-
formData.append(csrf.name, csrf.token);
|
|
45
|
-
}
|
|
46
|
-
formData.append('image', this.uploadImageFile);
|
|
47
|
-
return this.userRestApi
|
|
48
|
-
.userImageUpload$(formData, uploadImagePath)
|
|
49
|
-
.pipe(catchError((error) => this.middlewares.catchError(error).pipe(switchMap(() => {
|
|
50
|
-
this.userInterface.notify(error.message);
|
|
51
|
-
return EMPTY;
|
|
52
|
-
}))))
|
|
53
|
-
.subscribe((event) => {
|
|
54
|
-
if (event.type === HttpEventType.UploadProgress) {
|
|
55
|
-
// const percentDone = Math.round((100 * event.loaded) / event.total);
|
|
56
|
-
// this.progress.next(percentDone);
|
|
57
|
-
}
|
|
58
|
-
else if (event instanceof HttpResponse) {
|
|
59
|
-
if (!event.body.success) {
|
|
60
|
-
this.userInterface.notify(event.body.message, 'Dismiss', null);
|
|
61
|
-
}
|
|
62
|
-
else {
|
|
63
|
-
this.addImageToTemplate(event.body.path);
|
|
64
|
-
this.userInterface.notify('Successfully uploaded.', null, 1000);
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
|
-
});
|
|
68
|
-
}
|
|
69
|
-
ngOnDestroy() {
|
|
70
|
-
if (this.imagePreviewObjectUrl) {
|
|
71
|
-
URL.revokeObjectURL(this.imagePreviewObjectUrl);
|
|
72
|
-
}
|
|
73
|
-
}
|
|
74
|
-
}
|
|
75
|
-
UploadImageGalleryComponent.decorators = [
|
|
76
|
-
{ type: Component, args: [{
|
|
77
|
-
selector: 'pb-upload-image-gallery',
|
|
78
|
-
template: "<!--\n ~ Copyright (c) 2024 Pobuca.\n ~ All rights reserved.\n -->\n\n<div fxLayout=\"column\" style=\"height: 100%;\">\n <h2 mat-dialog-title i18n=\"image-gallery|Modal Image gallery header\">Image Gallery</h2>\n <div class=\"mat-typography gallery-list-wrapper\" fxLayout fxLayoutGap=\"1rem\" fxFlex>\n <mat-list fxFlex=\"200px\">\n <mat-list-item (click)=\"changeCurrentMenuItem('gallery')\" [class.active]=\"currentMenuItem === 'gallery'\"\n i18n=\"image-gallery|Image list\">\n Gallery Image list\n </mat-list-item>\n <mat-list-item (click)=\"changeCurrentMenuItem('upload')\" [class.active]=\"currentMenuItem === 'upload'\"\n i18n=\"image-gallery|Upload an image\">\n Upload an image\n </mat-list-item>\n </mat-list>\n\n <ng-container *ngIf=\"currentMenuItem === 'gallery'\">\n <ng-container *ngIf=\"imageCategoryList.length;else emptyImageList\">\n <cdk-virtual-scroll-viewport itemSize=\"150\" [minBufferPx]=\"150 * 10\" fxFlex\n class=\"gallery-list\">\n <div *cdkVirtualFor=\"let imagePath of imageCategoryList\" class=\"gallery-list-item\"\n (click)=\"choseImage = imagePath\" i18n-matTooltip=\"image-gallery|Click to choose message\"\n matTooltip=\"Click to choose\">\n <img [src]=\"imagePath\" />\n </div>\n </cdk-virtual-scroll-viewport>\n </ng-container>\n </ng-container>\n <ng-container *ngIf=\"currentMenuItem === 'upload'\">\n <div class=\"upload-image\" fxLayout=\"column\" fxLayoutAlign=\"center center\" fxFlex fxLayoutGap=\"1rem\">\n <label class=\"upload-image-item\" [class.empty]=\"!uploadImagePreview\">\n <div class=\"upload-image-item-overview\" fxLayout=\"column\" fxLayoutAlign=\"center center\">\n <mat-icon>backup</mat-icon>\n </div>\n <img class=\"upload-image-item-preview\" *ngIf=\"uploadImagePreview\" [src]=\"uploadImagePreview\" />\n <input type=\"file\" fxHide pattern=\"image/*\" (change)=\"previewImage($event)\">\n </label>\n <button mat-flat-button color=\"primary\" (click)=\"startUploading()\" i18n=\"image-gallery|Upload and insert into template\">\n Upload and insert into template\n </button>\n </div>\n </ng-container>\n </div>\n <mat-dialog-actions align=\"end\">\n <button mat-button mat-dialog-close i18n=\"actions|Undo\">Cancel</button>\n <button mat-stroked-button color=\"primary\" [disabled]=\"!choseImage\" (click)=\"addImageToTemplate()\"\n i18n=\"actions|Start\">\n Add to template\n </button>\n </mat-dialog-actions>\n</div>\n\n\n<ng-template #emptyImageList>\n <div fxFlex fxLayout=\"column\" fxLayoutAlign=\"center center\" class=\"empty-category-notification\">\n <mat-icon>notifications</mat-icon>\n <h2 i18n=\"image-gallery|Image list is empty message\">Image list is empty!</h2>\n </div>\n</ng-template>\n",
|
|
79
|
-
styles: ["/*!\n * Copyright (c) 2024 Pobuca.\n * All rights reserved.\n */mat-list{background-color:#fff}mat-list mat-list-item{cursor:pointer}mat-list mat-list-item.active{background-color:#ccc}.gallery-list ::ng-deep .cdk-virtual-scroll-content-wrapper{display:grid;gap:.3rem;grid-template:auto/repeat(4,1fr)}.gallery-list-item{height:120px;background-color:#ccc;cursor:pointer}.gallery-list-item img{width:100%;height:100%;-o-object-fit:contain;object-fit:contain;-o-object-position:center;object-position:center}.upload-image-item{width:80%;height:200px;background-color:#ccc;position:relative;border-radius:3px;padding:1em;text-align:center}.upload-image-item.empty .upload-image-item-overview,.upload-image-item:hover .upload-image-item-overview{opacity:1}.upload-image-item-overview{opacity:0;position:absolute;top:0;bottom:0;left:0;right:0;cursor:pointer;transition:opacity .5s linear}.upload-image-item-overview mat-icon{height:50px;width:50px;font-size:50px}.upload-image-item-preview{max-height:100%}"]
|
|
80
|
-
},] }
|
|
81
|
-
];
|
|
82
|
-
UploadImageGalleryComponent.ctorParameters = () => [
|
|
83
|
-
{ type: Array, decorators: [{ type: Inject, args: [MAT_DIALOG_DATA,] }] },
|
|
84
|
-
{ type: undefined, decorators: [{ type: Inject, args: [PB_CONFIG,] }] },
|
|
85
|
-
{ type: MatDialogRef },
|
|
86
|
-
{ type: DomSanitizer },
|
|
87
|
-
{ type: PbUserRestApiService },
|
|
88
|
-
{ type: PbUserMiddlewaresService },
|
|
89
|
-
{ type: PbUserInterfaceService }
|
|
90
|
-
];
|
|
91
|
-
//# 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 { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';
|
|
7
|
+
import { DomSanitizer } from '@angular/platform-browser';
|
|
8
|
+
import { catchError, switchMap } from 'rxjs/operators';
|
|
9
|
+
import { HttpEventType, HttpResponse } from '@angular/common/http';
|
|
10
|
+
import { EMPTY } from 'rxjs';
|
|
11
|
+
import { PbUserRestApiService } from '../../user-rest-api-service/user-rest-api.service';
|
|
12
|
+
import { PB_CONFIG } from '../../../tokens/tokens';
|
|
13
|
+
import { PbUserMiddlewaresService } from '../../user-middleware-service/pb-middlewares.service';
|
|
14
|
+
import { PbUserInterfaceService } from '../../internals/user-interfaces/user-interface.service';
|
|
15
|
+
export class UploadImageGalleryComponent {
|
|
16
|
+
constructor(imageCategoryList, userConfig, matDialogRef, sanitizer, userRestApi, middlewares, userInterface) {
|
|
17
|
+
this.imageCategoryList = imageCategoryList;
|
|
18
|
+
this.userConfig = userConfig;
|
|
19
|
+
this.matDialogRef = matDialogRef;
|
|
20
|
+
this.sanitizer = sanitizer;
|
|
21
|
+
this.userRestApi = userRestApi;
|
|
22
|
+
this.middlewares = middlewares;
|
|
23
|
+
this.userInterface = userInterface;
|
|
24
|
+
this.currentMenuItem = 'gallery';
|
|
25
|
+
}
|
|
26
|
+
changeCurrentMenuItem(item) {
|
|
27
|
+
this.currentMenuItem = item;
|
|
28
|
+
}
|
|
29
|
+
addImageToTemplate(imagePath = this.choseImage) {
|
|
30
|
+
this.matDialogRef.close(imagePath);
|
|
31
|
+
}
|
|
32
|
+
previewImage({ target }) {
|
|
33
|
+
this.uploadImageFile = target.files.item(0);
|
|
34
|
+
if (this.imagePreviewObjectUrl) {
|
|
35
|
+
URL.revokeObjectURL(this.imagePreviewObjectUrl);
|
|
36
|
+
}
|
|
37
|
+
this.imagePreviewObjectUrl = URL.createObjectURL(this.uploadImageFile);
|
|
38
|
+
this.uploadImagePreview = this.sanitizer.bypassSecurityTrustResourceUrl(this.imagePreviewObjectUrl);
|
|
39
|
+
}
|
|
40
|
+
startUploading() {
|
|
41
|
+
const { csrf, uploadImagePath } = this.userConfig;
|
|
42
|
+
const formData = new FormData();
|
|
43
|
+
if (csrf) {
|
|
44
|
+
formData.append(csrf.name, csrf.token);
|
|
45
|
+
}
|
|
46
|
+
formData.append('image', this.uploadImageFile);
|
|
47
|
+
return this.userRestApi
|
|
48
|
+
.userImageUpload$(formData, uploadImagePath)
|
|
49
|
+
.pipe(catchError((error) => this.middlewares.catchError(error).pipe(switchMap(() => {
|
|
50
|
+
this.userInterface.notify(error.message);
|
|
51
|
+
return EMPTY;
|
|
52
|
+
}))))
|
|
53
|
+
.subscribe((event) => {
|
|
54
|
+
if (event.type === HttpEventType.UploadProgress) {
|
|
55
|
+
// const percentDone = Math.round((100 * event.loaded) / event.total);
|
|
56
|
+
// this.progress.next(percentDone);
|
|
57
|
+
}
|
|
58
|
+
else if (event instanceof HttpResponse) {
|
|
59
|
+
if (!event.body.success) {
|
|
60
|
+
this.userInterface.notify(event.body.message, 'Dismiss', null);
|
|
61
|
+
}
|
|
62
|
+
else {
|
|
63
|
+
this.addImageToTemplate(event.body.path);
|
|
64
|
+
this.userInterface.notify('Successfully uploaded.', null, 1000);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
ngOnDestroy() {
|
|
70
|
+
if (this.imagePreviewObjectUrl) {
|
|
71
|
+
URL.revokeObjectURL(this.imagePreviewObjectUrl);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
UploadImageGalleryComponent.decorators = [
|
|
76
|
+
{ type: Component, args: [{
|
|
77
|
+
selector: 'pb-upload-image-gallery',
|
|
78
|
+
template: "<!--\r\n ~ Copyright (c) 2024 Pobuca.\r\n ~ All rights reserved.\r\n -->\r\n\r\n<div fxLayout=\"column\" style=\"height: 100%;\">\r\n <h2 mat-dialog-title i18n=\"image-gallery|Modal Image gallery header\">Image Gallery</h2>\r\n <div class=\"mat-typography gallery-list-wrapper\" fxLayout fxLayoutGap=\"1rem\" fxFlex>\r\n <mat-list fxFlex=\"200px\">\r\n <mat-list-item (click)=\"changeCurrentMenuItem('gallery')\" [class.active]=\"currentMenuItem === 'gallery'\"\r\n i18n=\"image-gallery|Image list\">\r\n Gallery Image list\r\n </mat-list-item>\r\n <mat-list-item (click)=\"changeCurrentMenuItem('upload')\" [class.active]=\"currentMenuItem === 'upload'\"\r\n i18n=\"image-gallery|Upload an image\">\r\n Upload an image\r\n </mat-list-item>\r\n </mat-list>\r\n\r\n <ng-container *ngIf=\"currentMenuItem === 'gallery'\">\r\n <ng-container *ngIf=\"imageCategoryList.length;else emptyImageList\">\r\n <cdk-virtual-scroll-viewport itemSize=\"150\" [minBufferPx]=\"150 * 10\" fxFlex\r\n class=\"gallery-list\">\r\n <div *cdkVirtualFor=\"let imagePath of imageCategoryList\" class=\"gallery-list-item\"\r\n (click)=\"choseImage = imagePath\" i18n-matTooltip=\"image-gallery|Click to choose message\"\r\n matTooltip=\"Click to choose\">\r\n <img [src]=\"imagePath\" />\r\n </div>\r\n </cdk-virtual-scroll-viewport>\r\n </ng-container>\r\n </ng-container>\r\n <ng-container *ngIf=\"currentMenuItem === 'upload'\">\r\n <div class=\"upload-image\" fxLayout=\"column\" fxLayoutAlign=\"center center\" fxFlex fxLayoutGap=\"1rem\">\r\n <label class=\"upload-image-item\" [class.empty]=\"!uploadImagePreview\">\r\n <div class=\"upload-image-item-overview\" fxLayout=\"column\" fxLayoutAlign=\"center center\">\r\n <mat-icon>backup</mat-icon>\r\n </div>\r\n <img class=\"upload-image-item-preview\" *ngIf=\"uploadImagePreview\" [src]=\"uploadImagePreview\" />\r\n <input type=\"file\" fxHide pattern=\"image/*\" (change)=\"previewImage($event)\">\r\n </label>\r\n <button mat-flat-button color=\"primary\" (click)=\"startUploading()\" i18n=\"image-gallery|Upload and insert into template\">\r\n Upload and insert into template\r\n </button>\r\n </div>\r\n </ng-container>\r\n </div>\r\n <mat-dialog-actions align=\"end\">\r\n <button mat-button mat-dialog-close i18n=\"actions|Undo\">Cancel</button>\r\n <button mat-stroked-button color=\"primary\" [disabled]=\"!choseImage\" (click)=\"addImageToTemplate()\"\r\n i18n=\"actions|Start\">\r\n Add to template\r\n </button>\r\n </mat-dialog-actions>\r\n</div>\r\n\r\n\r\n<ng-template #emptyImageList>\r\n <div fxFlex fxLayout=\"column\" fxLayoutAlign=\"center center\" class=\"empty-category-notification\">\r\n <mat-icon>notifications</mat-icon>\r\n <h2 i18n=\"image-gallery|Image list is empty message\">Image list is empty!</h2>\r\n </div>\r\n</ng-template>\r\n",
|
|
79
|
+
styles: ["/*!\n * Copyright (c) 2024 Pobuca.\n * All rights reserved.\n */mat-list{background-color:#fff}mat-list mat-list-item{cursor:pointer}mat-list mat-list-item.active{background-color:#ccc}.gallery-list ::ng-deep .cdk-virtual-scroll-content-wrapper{display:grid;gap:.3rem;grid-template:auto/repeat(4,1fr)}.gallery-list-item{height:120px;background-color:#ccc;cursor:pointer}.gallery-list-item img{width:100%;height:100%;-o-object-fit:contain;object-fit:contain;-o-object-position:center;object-position:center}.upload-image-item{width:80%;height:200px;background-color:#ccc;position:relative;border-radius:3px;padding:1em;text-align:center}.upload-image-item.empty .upload-image-item-overview,.upload-image-item:hover .upload-image-item-overview{opacity:1}.upload-image-item-overview{opacity:0;position:absolute;top:0;bottom:0;left:0;right:0;cursor:pointer;transition:opacity .5s linear}.upload-image-item-overview mat-icon{height:50px;width:50px;font-size:50px}.upload-image-item-preview{max-height:100%}"]
|
|
80
|
+
},] }
|
|
81
|
+
];
|
|
82
|
+
UploadImageGalleryComponent.ctorParameters = () => [
|
|
83
|
+
{ type: Array, decorators: [{ type: Inject, args: [MAT_DIALOG_DATA,] }] },
|
|
84
|
+
{ type: undefined, decorators: [{ type: Inject, args: [PB_CONFIG,] }] },
|
|
85
|
+
{ type: MatDialogRef },
|
|
86
|
+
{ type: DomSanitizer },
|
|
87
|
+
{ type: PbUserRestApiService },
|
|
88
|
+
{ type: PbUserMiddlewaresService },
|
|
89
|
+
{ type: PbUserInterfaceService }
|
|
90
|
+
];
|
|
91
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBsb2FkLWltYWdlLWdhbGxlcnkuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcGItZW1haWwtYnVpbGRlci9zcmMvbGliL3NlcnZpY2VzL3VzZXItaW1hZ2UtdXBsb2FkZXItc2VydmljZS91cGxvYWQtaW1hZ2UtZ2FsbGVyeS91cGxvYWQtaW1hZ2UtZ2FsbGVyeS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7OztHQUdHO0FBRUgsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQWEsTUFBTSxlQUFlLENBQUM7QUFDN0QsT0FBTyxFQUFFLGVBQWUsRUFBRSxZQUFZLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUN6RSxPQUFPLEVBQW1CLFlBQVksRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQzFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDdkQsT0FBTyxFQUFnQyxhQUFhLEVBQUUsWUFBWSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDakcsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUU3QixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxtREFBbUQsQ0FBQztBQUN6RixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFFbkQsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sc0RBQXNELENBQUM7QUFDaEcsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sd0RBQXdELENBQUM7QUFPaEcsTUFBTSxPQUFPLDJCQUEyQjtJQU90QyxZQUNrQyxpQkFBMkIsRUFDaEMsVUFBd0IsRUFDM0MsWUFBK0QsRUFDL0QsU0FBdUIsRUFDdkIsV0FBaUMsRUFDakMsV0FBcUMsRUFDckMsYUFBcUM7UUFOYixzQkFBaUIsR0FBakIsaUJBQWlCLENBQVU7UUFDaEMsZUFBVSxHQUFW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LElBQUksQ0FBQyxxQkFBcUIsRUFBRTtZQUM5QixHQUFHLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO1NBQ2pEO0lBQ0gsQ0FBQzs7O1lBN0VGLFNBQVMsU0FBQztnQkFDVCxRQUFRLEVBQUUseUJBQXlCO2dCQUNuQyx5MUdBQW9EOzthQUVyRDs7O3dDQVNJLE1BQU0sU0FBQyxlQUFlOzRDQUN0QixNQUFNLFNBQUMsU0FBUztZQTFCSyxZQUFZO1lBQ1osWUFBWTtZQUs3QixvQkFBb0I7WUFHcEIsd0JBQXdCO1lBQ3hCLHNCQUFzQiIsInNvdXJjZXNDb250ZW50IjpbIi8qXHJcbiAqIENvcHlyaWdodCAoYykgMjAyNCBQb2J1Y2EuXHJcbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbiAqL1xyXG5cclxuaW1wb3J0IHsgQ29tcG9uZW50LCBJbmplY3QsIE9uRGVzdHJveSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBNQVRfRElBTE9HX0RBVEEsIE1hdERpYWxvZ1JlZiB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XHJcbmltcG9ydCB7IFNhZmVSZXNvdXJjZVVybCwgRG9tU2FuaXRpemVyIH0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlcic7XHJcbmltcG9ydCB7IGNhdGNoRXJyb3IsIHN3aXRjaE1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgSHR0cEVycm9yUmVzcG9uc2UsIEh0dHBFdmVudCwgSHR0cEV2ZW50VHlwZSwgSHR0cFJlc3BvbnNlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQgeyBFTVBUWSB9IGZyb20gJ3J4anMnO1xyXG5cclxuaW1wb3J0IHsgUGJVc2VyUmVzdEFwaVNlcnZpY2UgfSBmcm9tICcuLi8uLi91c2VyLXJlc3QtYXBpLXNlcnZpY2UvdXNlci1yZXN0LWFwaS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgUEJfQ09ORklHIH0gZnJvbSAnLi4vLi4vLi4vdG9rZW5zL3Rva2Vucyc7XHJcbmltcG9ydCB7IElGb3JSb290Q29uZiB9IGZyb20gJy4uLy4uLy4uL2ludGVyZmFjZXMvaW50ZXJmYWNlcyc7XHJcbmltcG9ydCB7IFBiVXNlck1pZGRsZXdhcmVzU2VydmljZSB9IGZyb20gJy4uLy4uL3VzZXItbWlkZGxld2FyZS1zZXJ2aWNlL3BiLW1pZGRsZXdhcmVzLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBQYlVzZXJJbnRlcmZhY2VTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vaW50ZXJuYWxzL3VzZXItaW50ZXJmYWNlcy91c2VyLWludGVyZmFjZS5zZXJ2aWNlJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAncGItdXBsb2FkLWltYWdlLWdhbGxlcnknLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi91cGxvYWQtaW1hZ2UtZ2FsbGVyeS5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vdXBsb2FkLWltYWdlLWdhbGxlcnkuY29tcG9uZW50LnNjc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgVXBsb2FkSW1hZ2VHYWxsZXJ5Q29tcG9uZW50IGltcGxlbWVudHMgT25EZXN0cm95IHtcclxuICBjdXJyZW50TWVudUl0ZW06ICdnYWxsZXJ5JyB8ICd1cGxvYWQnID0gJ2dhbGxlcnknO1xyXG4gIGNob3NlSW1hZ2U6IHN0cmluZztcclxuICB1cGxvYWRJbWFnZVByZXZpZXc6IFNhZmVSZXNvdXJjZVVybDtcclxuICBwcml2YXRlIGltYWdlUHJldmlld09iamVjdFVybDogc3RyaW5nO1xyXG4gIHByaXZhdGUgdXBsb2FkSW1hZ2VGaWxlOiBGaWxlO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIEBJbmplY3QoTUFUX0RJQUxPR19EQVRBKSBwdWJsaWMgaW1hZ2VDYXRlZ29yeUxpc3Q6IHN0cmluZ1tdLFxyXG4gICAgQEluamVjdChQQl9DT05GSUcpIHByaXZhdGUgdXNlckNvbmZpZzogSUZvclJvb3RDb25mLFxyXG4gICAgcHJpdmF0ZSBtYXREaWFsb2dSZWY6IE1hdERpYWxvZ1JlZjxVcGxvYWRJbWFnZUdhbGxlcnlDb21wb25lbnQsIHN0cmluZz4sXHJcbiAgICBwcml2YXRlIHNhbml0aXplcjogRG9tU2FuaXRpemVyLFxyXG4gICAgcHJpdmF0ZSB1c2VyUmVzdEFwaTogUGJVc2VyUmVzdEFwaVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIG1pZGRsZXdhcmVzOiBQYlVzZXJNaWRkbGV3YXJlc1NlcnZpY2UsXHJcbiAgICBwcml2YXRlIHVzZXJJbnRlcmZhY2U6IFBiVXNlckludGVyZmFjZVNlcnZpY2VcclxuICApIHt9XHJcblxyXG4gIGNoYW5nZUN1cnJlbnRNZW51SXRlbShpdGVtOiAnZ2FsbGVyeScgfCAndXBsb2FkJykge1xyXG4gICAgdGhpcy5jdXJyZW50TWVudUl0ZW0gPSBpdGVtO1xyXG4gIH1cclxuXHJcbiAgYWRkSW1hZ2VUb1RlbXBsYXRlKGltYWdlUGF0aCA9IHRoaXMuY2hvc2VJbWFnZSkge1xyXG4gICAgdGhpcy5tYXREaWFsb2dSZWYuY2xvc2UoaW1hZ2VQYXRoKTtcclxuICB9XHJcblxyXG4gIHByZXZpZXdJbWFnZSh7IHRhcmdldCB9OiBFdmVudCkge1xyXG4gICAgdGhpcy51cGxvYWRJbWFnZUZpbGUgPSAodGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQpLmZpbGVzLml0ZW0oMCk7XHJcbiAgICBpZiAodGhpcy5pbWFnZVByZXZpZXdPYmplY3RVcmwpIHtcclxuICAgICAgVVJMLnJldm9rZU9iamVjdFVSTCh0aGlzLmltYWdlUHJldmlld09iamVjdFVybCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmltYWdlUHJldmlld09iamVjdFVybCA9IFVSTC5jcmVhdGVPYmplY3RVUkwodGhpcy51cGxvYWRJbWFnZUZpbGUpO1xyXG4gICAgdGhpcy51cGxvYWRJbWFnZVByZXZpZXcgPSB0aGlzLnNhbml0aXplci5ieXBhc3NTZWN1cml0eVRydXN0UmVzb3VyY2VVcmwodGhpcy5pbWFnZVByZXZpZXdPYmplY3RVcmwpO1xyXG4gIH1cclxuXHJcbiAgc3RhcnRVcGxvYWRpbmcoKSB7XHJcbiAgICBjb25zdCB7IGNzcmYsIHVwbG9hZEltYWdlUGF0aCB9ID0gdGhpcy51c2VyQ29uZmlnO1xyXG4gICAgY29uc3QgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTtcclxuICAgIGlmIChjc3JmKSB7XHJcbiAgICAgIGZvcm1EYXRhLmFwcGVuZChjc3JmLm5hbWUsIGNzcmYudG9rZW4pO1xyXG4gICAgfVxyXG4gICAgZm9ybURhdGEuYXBwZW5kKCdpbWFnZScsIHRoaXMudXBsb2FkSW1hZ2VGaWxlKTtcclxuICAgIHJldHVybiB0aGlzLnVzZXJSZXN0QXBpXHJcbiAgICAgIC51c2VySW1hZ2VVcGxvYWQkKGZvcm1EYXRhLCB1cGxvYWRJbWFnZVBhdGgpXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIGNhdGNoRXJyb3IoKGVycm9yOiBFcnJvciB8IEh0dHBFcnJvclJlc3BvbnNlKSA9PlxyXG4gICAgICAgICAgdGhpcy5taWRkbGV3YXJlcy5jYXRjaEVycm9yKGVycm9yKS5waXBlKFxyXG4gICAgICAgICAgICBzd2l0Y2hNYXAoKCkgPT4ge1xyXG4gICAgICAgICAgICAgIHRoaXMudXNlckludGVyZmFjZS5ub3RpZnkoZXJyb3IubWVzc2FnZSk7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIEVNUFRZO1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgKVxyXG4gICAgICAgIClcclxuICAgICAgKVxyXG4gICAgICAuc3Vic2NyaWJlKChldmVudDogSHR0cEV2ZW50PHsgc3VjY2VzczogYm9vbGVhbjsgcGF0aDogc3RyaW5nOyBtZXNzYWdlPzogc3RyaW5nIH0+KSA9PiB7XHJcbiAgICAgICAgaWYgKGV2ZW50LnR5cGUgPT09IEh0dHBFdmVudFR5cGUuVXBsb2FkUHJvZ3Jlc3MpIHtcclxuICAgICAgICAgIC8vIGNvbnN0IHBlcmNlbnREb25lID0gTWF0aC5yb3VuZCgoMTAwICogZXZlbnQubG9hZGVkKSAvIGV2ZW50LnRvdGFsKTtcclxuICAgICAgICAgIC8vIHRoaXMucHJvZ3Jlc3MubmV4dChwZXJjZW50RG9uZSk7XHJcbiAgICAgICAgfSBlbHNlIGlmIChldmVudCBpbnN0YW5jZW9mIEh0dHBSZXNwb25zZSkge1xyXG4gICAgICAgICAgaWYgKCFldmVudC5ib2R5LnN1Y2Nlc3MpIHtcclxuICAgICAgICAgICAgdGhpcy51c2VySW50ZXJmYWNlLm5vdGlmeShldmVudC5ib2R5Lm1lc3NhZ2UsICdEaXNtaXNzJywgbnVsbCk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmFkZEltYWdlVG9UZW1wbGF0ZShldmVudC5ib2R5LnBhdGgpO1xyXG4gICAgICAgICAgICB0aGlzLnVzZXJJbnRlcmZhY2Uubm90aWZ5KCdTdWNjZXNzZnVsbHkgdXBsb2FkZWQuJywgbnVsbCwgMTAwMCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCkge1xyXG4gICAgaWYgKHRoaXMuaW1hZ2VQcmV2aWV3T2JqZWN0VXJsKSB7XHJcbiAgICAgIFVSTC5yZXZva2VPYmplY3RVUkwodGhpcy5pbWFnZVByZXZpZXdPYmplY3RVcmwpO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iXX0=
|