@dbg-riskit/angular-file 15.0.1 → 15.0.2

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.
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Generated bundle index. Do not edit.
3
+ */
4
+ export * from './public_api';
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGJnLXJpc2tpdC1hbmd1bGFyLWZpbGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wa2cvZGJnLXJpc2tpdC9hbmd1bGFyLWZpbGUvc3JjL2RiZy1yaXNraXQtYW5ndWxhci1maWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsY0FBYyxjQUFjLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEdlbmVyYXRlZCBidW5kbGUgaW5kZXguIERvIG5vdCBlZGl0LlxuICovXG5cbmV4cG9ydCAqIGZyb20gJy4vcHVibGljX2FwaSc7XG4iXX0=
@@ -0,0 +1,139 @@
1
+ import { Directive, Input } from '@angular/core';
2
+ import { BaseComponent } from '@dbg-riskit/angular-view';
3
+ import { isEventObject, ObservableEventType } from '@dbg-riskit/common';
4
+ import { saveAs } from 'file-saver';
5
+ import { EMPTY, Observable, of, Subject } from 'rxjs';
6
+ import { catchError, filter, finalize, map, take, takeUntil, tap } from 'rxjs/operators';
7
+ import * as i0 from "@angular/core";
8
+ import * as i1 from "@dbg-riskit/angular-view";
9
+ import * as i2 from "./file.size.pipe";
10
+ import * as i3 from "@dbg-riskit/common";
11
+ export class AbstractFileDownloadDirective extends BaseComponent {
12
+ constructor(elementRef, dialogService, fileSizePipe, logger) {
13
+ super();
14
+ this.elementRef = elementRef;
15
+ this.dialogService = dialogService;
16
+ this.fileSizePipe = fileSizePipe;
17
+ this.logger = logger;
18
+ }
19
+ isDisabled() {
20
+ if (this.elementRef.nativeElement.disabled === true) {
21
+ return true;
22
+ }
23
+ if (this.disabled == null) {
24
+ return false;
25
+ }
26
+ switch (typeof this.disabled) {
27
+ case 'boolean':
28
+ return this.disabled;
29
+ case 'string':
30
+ return this.disabled.toLowerCase() === 'disabled' || this.disabled.toLowerCase() === 'true';
31
+ }
32
+ return false;
33
+ }
34
+ download() {
35
+ if (this.isDisabled()) {
36
+ return;
37
+ }
38
+ if (this.data == null) {
39
+ this.logger.error(new Error('No data provided for download!'));
40
+ return;
41
+ }
42
+ this.getDataObservable(this.data).pipe(takeUntil(this.destroyed), take(1), map((data) => this.mapToFile(data))).subscribe((file) => this.store(file));
43
+ }
44
+ store(file) {
45
+ setTimeout(() => {
46
+ saveAs(file.content, file.filename || 'data.txt');
47
+ });
48
+ }
49
+ getDataObservable(data) {
50
+ if (!(data instanceof Observable)) {
51
+ return of(data);
52
+ }
53
+ return this.downloadWithProgress(data);
54
+ }
55
+ downloadWithProgress(observableWithProgress) {
56
+ const canceled = new Subject();
57
+ let dialog;
58
+ return observableWithProgress.pipe(takeUntil(canceled), takeUntil(this.destroyed), tap((event) => {
59
+ dialog = this.updateProgress(event, dialog, canceled);
60
+ }), filter((event) => !isEventObject(event)
61
+ || event.type === ObservableEventType.Result), map((event) => {
62
+ if (isEventObject(event)) {
63
+ const resultEvent = event;
64
+ return resultEvent.result;
65
+ }
66
+ return event;
67
+ }), catchError((err) => this.processError(err)), finalize(() => {
68
+ if (dialog != null) {
69
+ dialog.close();
70
+ }
71
+ }));
72
+ }
73
+ updateProgress(event, dialog, canceledSubject) {
74
+ if (isEventObject(event) && event.type === ObservableEventType.Progress) {
75
+ const progressEvent = event;
76
+ if (dialog == null) {
77
+ dialog = this.dialogService.showProgressLoaderDialog({
78
+ title: 'Downloading file...',
79
+ cancel: () => {
80
+ canceledSubject.next();
81
+ canceledSubject.complete();
82
+ },
83
+ valueFormatter: this.fileSizePipe
84
+ });
85
+ }
86
+ dialog.value = progressEvent.current;
87
+ dialog.total = progressEvent.total;
88
+ }
89
+ return dialog;
90
+ }
91
+ processError(err) {
92
+ let title = 'Failed to download file:';
93
+ let message;
94
+ if ('errorType' in err) {
95
+ const errorMessage = err;
96
+ switch (errorMessage.status) {
97
+ case 401:
98
+ case 403:
99
+ message = 'You are not authorized to download this file.';
100
+ break;
101
+ case 404:
102
+ message = 'File not found.';
103
+ break;
104
+ default:
105
+ message = errorMessage.message;
106
+ }
107
+ }
108
+ else {
109
+ if ('message' in err) {
110
+ message = err.message;
111
+ }
112
+ else {
113
+ message = 'Failed to download file.';
114
+ title = undefined;
115
+ }
116
+ }
117
+ this.dialogService.showMessageDialog({
118
+ dialogType: 'error',
119
+ icon: 'cloud_off',
120
+ title,
121
+ message
122
+ });
123
+ return EMPTY;
124
+ }
125
+ /**
126
+ * Blob constructor for testing purposes.
127
+ */
128
+ createBlob(data, contentType) {
129
+ return new Blob(data, contentType);
130
+ }
131
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: AbstractFileDownloadDirective, deps: [{ token: i0.ElementRef }, { token: i1.DialogService }, { token: i2.FileSizePipe }, { token: i3.Logger }], target: i0.ɵɵFactoryTarget.Directive }); }
132
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.12", type: AbstractFileDownloadDirective, inputs: { disabled: "disabled" }, usesInheritance: true, ngImport: i0 }); }
133
+ }
134
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: AbstractFileDownloadDirective, decorators: [{
135
+ type: Directive
136
+ }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i1.DialogService }, { type: i2.FileSizePipe }, { type: i3.Logger }]; }, propDecorators: { disabled: [{
137
+ type: Input
138
+ }] } });
139
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWJzdHJhY3QuZmlsZS5kb3dubG9hZC5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wa2cvZGJnLXJpc2tpdC9hbmd1bGFyLWZpbGUvc3JjL2xpYi9hYnN0cmFjdC5maWxlLmRvd25sb2FkLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsU0FBUyxFQUFjLEtBQUssRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUMzRCxPQUFPLEVBQUMsYUFBYSxFQUF5QyxNQUFNLDBCQUEwQixDQUFDO0FBQy9GLE9BQU8sRUFHSCxhQUFhLEVBR2IsbUJBQW1CLEVBSXRCLE1BQU0sb0JBQW9CLENBQUM7QUFDNUIsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLFlBQVksQ0FBQztBQUNsQyxPQUFPLEVBQUMsS0FBSyxFQUFFLFVBQVUsRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBQ3BELE9BQU8sRUFBQyxVQUFVLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQzs7Ozs7QUFJdkYsTUFBTSxPQUFnQiw2QkFBaUMsU0FBUSxhQUFhO0lBU3hFLFlBQW9DLFVBQXNCLEVBQ3RCLGFBQTRCLEVBQzVCLFlBQTBCLEVBQzFCLE1BQWM7UUFDOUMsS0FBSyxFQUFFLENBQUM7UUFKd0IsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQUN0QixrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQUM1QixpQkFBWSxHQUFaLFlBQVksQ0FBYztRQUMxQixXQUFNLEdBQU4sTUFBTSxDQUFRO0lBRWxELENBQUM7SUFFTyxVQUFVO1FBQ2QsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxRQUFRLEtBQUssSUFBSSxFQUFFO1lBQ2pELE9BQU8sSUFBSSxDQUFDO1NBQ2Y7UUFFRCxJQUFJLElB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QUFPLEdBQUcsaUJBQWlCLENBQUM7b0JBQzVCLE1BQU07Z0JBQ1Y7b0JBQ0ksT0FBTyxHQUFHLFlBQVksQ0FBQyxPQUFPLENBQUM7YUFDdEM7U0FDSjthQUFNO1lBQ0gsSUFBSSxTQUFTLElBQUksR0FBRyxFQUFFO2dCQUNsQixPQUFPLEdBQUcsR0FBRyxDQUFDLE9BQU8sQ0FBQzthQUN6QjtpQkFBTTtnQkFDSCxPQUFPLEdBQUcsMEJBQTBCLENBQUM7Z0JBQ3JDLEtBQUssR0FBRyxTQUFTLENBQUM7YUFDckI7U0FDSjtRQUNELElBQUksQ0FBQyxhQUFhLENBQUMsaUJBQWlCLENBQUM7WUFDakMsVUFBVSxFQUFFLE9BQU87WUFDbkIsSUFBSSxFQUFRLFdBQVc7WUFDdkIsS0FBSztZQUNMLE9BQU87U0FDVixDQUFDLENBQUM7UUFDSCxPQUFPLEtBQUssQ0FBQztJQUNqQixDQUFDO0lBRUQ7O09BRUc7SUFDSSxVQUFVLENBQUMsSUFBZ0IsRUFBRSxXQUE2QjtRQUM3RCxPQUFPLElBQUksSUFBSSxDQUFDLElBQUksRUFBRSxXQUFXLENBQUMsQ0FBQztJQUN2QyxDQUFDOytHQWpLaUIsNkJBQTZCO21HQUE3Qiw2QkFBNkI7OzRGQUE3Qiw2QkFBNkI7a0JBRGxELFNBQVM7NktBSUMsUUFBUTtzQkFEZCxLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtEaXJlY3RpdmUsIEVsZW1lbnRSZWYsIElucHV0fSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7QmFzZUNvbXBvbmVudCwgRGlhbG9nU2VydmljZSwgUHJvZ3Jlc3NMb2FkZXJDb21wb25lbnR9IGZyb20gJ0BkYmctcmlza2l0L2FuZ3VsYXItdmlldyc7XG5pbXBvcnQge1xuICAgIEVycm9yTWVzc2FnZSxcbiAgICBGaWxlV2l0aENvbnRlbnQsXG4gICAgaXNFdmVudE9iamVjdCxcbiAgICBMb2dnZXIsXG4gICAgT2JzZXJ2YWJsZUV2ZW50LFxuICAgIE9ic2VydmFibGVFdmVudFR5cGUsXG4gICAgT2JzZXJ2YWJsZVdpdGhQcm9ncmVzcyxcbiAgICBQcm9ncmVzc0V2ZW50LFxuICAgIFJlc3VsdEV2ZW50XG59IGZyb20gJ0BkYmctcmlza2l0L2NvbW1vbic7XG5pbXBvcnQge3NhdmVBc30gZnJvbSAnZmlsZS1zYXZlcic7XG5pbXBvcnQge0VNUFRZLCBPYnNlcnZhYmxlLCBvZiwgU3ViamVjdH0gZnJvbSAncnhqcyc7XG5pbXBvcnQge2NhdGNoRXJyb3IsIGZpbHRlciwgZmluYWxpemUsIG1hcCwgdGFrZSwgdGFrZVVudGlsLCB0YXB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7RmlsZVNpemVQaXBlfSBmcm9tICcuL2ZpbGUuc2l6ZS5waXBlJztcblxuQERpcmVjdGl2ZSgpXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQWJzdHJhY3RGaWxlRG93bmxvYWREaXJlY3RpdmU8VD4gZXh0ZW5kcyBCYXNlQ29tcG9uZW50IHtcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGRpc2FibGVkPzogYm9vbGVhbiB8IHN0cmluZztcblxuICAgIHB1YmxpYyBkYXRhPzogT2JzZXJ2YWJsZVdpdGhQcm9ncmVzczxUPlxuICAgICAgICB8IE9ic2VydmFibGU8VD5cbiAgICAgICAgfCBUO1xuXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgZWxlbWVudFJlZjogRWxlbWVudFJlZixcbiAgICAgICAgICAgICAgICAgICAgICAgcHJpdmF0ZSByZWFkb25seSBkaWFsb2dTZXJ2aWNlOiBEaWFsb2dTZXJ2aWNlLFxuICAgICAgICAgICAgICAgICAgICAgICBwcml2YXRlIHJlYWRvbmx5IGZpbGVTaXplUGlwZTogRmlsZVNpemVQaXBlLFxuICAgICAgICAgICAgICAgICAgICAgICBwcml2YXRlIHJlYWRvbmx5IGxvZ2dlcjogTG9nZ2VyKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpc0Rpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgICAgICBpZiAodGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuZGlzYWJsZWQgPT09IHRydWUpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuZGlzYWJsZWQgPT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgc3dpdGNoICh0eXBlb2YgdGhpcy5kaXNhYmxlZCkge1xuICAgICAgICAgICAgY2FzZSAnYm9vbGVhbic6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGlzYWJsZWQ7XG4gICAgICAgICAgICBjYXNlICdzdHJpbmcnOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmRpc2FibGVkLnRvTG93ZXJDYXNlKCkgPT09ICdkaXNhYmxlZCcgfHwgdGhpcy5kaXNhYmxlZC50b0xvd2VyQ2FzZSgpID09PSAndHJ1ZSc7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgcHVibGljIGRvd25sb2FkKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5pc0Rpc2FibGVkKCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmRhdGEgPT0gbnVsbCkge1xuICAgICAgICAgICAgdGhpcy5sb2dnZXIuZXJyb3IobmV3IEVycm9yKCdObyBkYXRhIHByb3ZpZGVkIGZvciBkb3dubG9hZCEnKSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmdldERhdGFPYnNlcnZhYmxlKHRoaXMuZGF0YSkucGlwZShcbiAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLmRlc3Ryb3llZCksXG4gICAgICAgICAgICB0YWtlKDEpLFxuICAgICAgICAgICAgbWFwKChkYXRhOiBUKSA9PiB0aGlzLm1hcFRvRmlsZShkYXRhKSlcbiAgICAgICAgKS5zdWJzY3JpYmUoKGZpbGUpID0+IHRoaXMuc3RvcmUoZmlsZSkpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBhYnN0cmFjdCBtYXBUb0ZpbGUoZGF0YTogVCk6IEZpbGVXaXRoQ29udGVudDtcblxuICAgIHByaXZhdGUgc3RvcmUoZmlsZTogRmlsZVdpdGhDb250ZW50KSB7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgc2F2ZUFzKGZpbGUuY29udGVudCwgZmlsZS5maWxlbmFtZSB8fCAnZGF0YS50eHQnKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXREYXRhT2JzZXJ2YWJsZShcbiAgICAgICAgZGF0YTogT2JzZXJ2YWJsZVdpdGhQcm9ncmVzczxUPlxuICAgICAgICAgICAgfCBPYnNlcnZhYmxlPFQ+XG4gICAgICAgICAgICB8IFRcbiAgICApOiBPYnNlcnZhYmxlPFQ+IHtcbiAgICAgICAgaWYgKCEoZGF0YSBpbnN0YW5jZW9mIE9ic2VydmFibGUpKSB7XG4gICAgICAgICAgICByZXR1cm4gb2YoZGF0YSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5kb3dubG9hZFdpdGhQcm9ncmVzcyhkYXRhKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGRvd25sb2FkV2l0aFByb2dyZXNzKFxuICAgICAgICBvYnNlcnZhYmxlV2l0aFByb2dyZXNzOiBPYnNlcnZhYmxlPFQgfCBPYnNlcnZhYmxlRXZlbnQ8VD4+XG4gICAgKTogT2JzZXJ2YWJsZTxUPiB7XG4gICAgICAgIGNvbnN0IGNhbmNlbGVkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcbiAgICAgICAgbGV0IGRpYWxvZzogUHJvZ3Jlc3NMb2FkZXJDb21wb25lbnQgfCB1bmRlZmluZWQ7XG5cbiAgICAgICAgcmV0dXJuIG9ic2VydmFibGVXaXRoUHJvZ3Jlc3MucGlwZShcbiAgICAgICAgICAgIHRha2VVbnRpbChjYW5jZWxlZCksXG4gICAgICAgICAgICB0YWtlVW50aWwodGhpcy5kZXN0cm95ZWQpLFxuICAgICAgICAgICAgdGFwKChldmVudCkgPT4ge1xuICAgICAgICAgICAgICAgIGRpYWxvZyA9IHRoaXMudXBkYXRlUHJvZ3Jlc3MoZXZlbnQsIGRpYWxvZywgY2FuY2VsZWQpO1xuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBmaWx0ZXIoKGV2ZW50KSA9PiAhaXNFdmVudE9iamVjdChldmVudClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IChldmVudCBhcyBPYnNlcnZhYmxlRXZlbnQ8VD4pLnR5cGUgPT09IE9ic2VydmFibGVFdmVudFR5cGUuUmVzdWx0KSxcbiAgICAgICAgICAgIG1hcCgoZXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoaXNFdmVudE9iamVjdChldmVudCkpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0RXZlbnQgPSBldmVudCBhcyBSZXN1bHRFdmVudDxUPjtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdEV2ZW50LnJlc3VsdDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGV2ZW50IGFzIFQ7XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIGNhdGNoRXJyb3IoKGVycikgPT4gdGhpcy5wcm9jZXNzRXJyb3IoZXJyKSksXG4gICAgICAgICAgICBmaW5hbGl6ZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGRpYWxvZyAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIGRpYWxvZy5jbG9zZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB1cGRhdGVQcm9ncmVzcyhldmVudDogVCB8IE9ic2VydmFibGVFdmVudDxUPixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpYWxvZzogUHJvZ3Jlc3NMb2FkZXJDb21wb25lbnQgfCB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBjYW5jZWxlZFN1YmplY3Q6IFN1YmplY3Q8dm9pZD4pIHtcbiAgICAgICAgaWYgKGlzRXZlbnRPYmplY3QoZXZlbnQpICYmIChldmVudCBhcyBPYnNlcnZhYmxlRXZlbnQ8VD4pLnR5cGUgPT09IE9ic2VydmFibGVFdmVudFR5cGUuUHJvZ3Jlc3MpIHtcbiAgICAgICAgICAgIGNvbnN0IHByb2dyZXNzRXZlbnQgPSBldmVudCBhcyBQcm9ncmVzc0V2ZW50O1xuICAgICAgICAgICAgaWYgKGRpYWxvZyA9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgZGlhbG9nID0gdGhpcy5kaWFsb2dTZXJ2aWNlLnNob3dQcm9ncmVzc0xvYWRlckRpYWxvZyh7XG4gICAgICAgICAgICAgICAgICAgIHRpdGxlICAgICAgICAgOiAnRG93bmxvYWRpbmcgZmlsZS4uLicsXG4gICAgICAgICAgICAgICAgICAgIGNhbmNlbCAgICAgICAgOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYW5jZWxlZFN1YmplY3QubmV4dCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FuY2VsZWRTdWJqZWN0LmNvbXBsZXRlKCk7XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlRm9ybWF0dGVyOiB0aGlzLmZpbGVTaXplUGlwZVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGlhbG9nLnZhbHVlID0gcHJvZ3Jlc3NFdmVudC5jdXJyZW50O1xuICAgICAgICAgICAgZGlhbG9nLnRvdGFsID0gcHJvZ3Jlc3NFdmVudC50b3RhbDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZGlhbG9nO1xuICAgIH1cblxuICAgIHByaXZhdGUgcHJvY2Vzc0Vycm9yKGVycjogRXJyb3JNZXNzYWdlIHwgb2JqZWN0KSB7XG4gICAgICAgIGxldCB0aXRsZTogc3RyaW5nIHwgdW5kZWZpbmVkID0gJ0ZhaWxlZCB0byBkb3dubG9hZCBmaWxlOic7XG4gICAgICAgIGxldCBtZXNzYWdlO1xuICAgICAgICBpZiAoJ2Vycm9yVHlwZScgaW4gKGVyciBhcyBFcnJvck1lc3NhZ2UpKSB7XG4gICAgICAgICAgICBjb25zdCBlcnJvck1lc3NhZ2U6IEVycm9yTWVzc2FnZSA9IGVyciBhcyBFcnJvck1lc3NhZ2U7XG4gICAgICAgICAgICBzd2l0Y2ggKGVycm9yTWVzc2FnZS5zdGF0dXMpIHtcbiAgICAgICAgICAgICAgICBjYXNlIDQwMTpcbiAgICAgICAgICAgICAgICBjYXNlIDQwMzpcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZSA9ICdZb3UgYXJlIG5vdCBhdXRob3JpemVkIHRvIGRvd25sb2FkIHRoaXMgZmlsZS4nO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIDQwNDpcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZSA9ICdGaWxlIG5vdCBmb3VuZC4nO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlID0gZXJyb3JNZXNzYWdlLm1lc3NhZ2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoJ21lc3NhZ2UnIGluIGVycikge1xuICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSBlcnIubWVzc2FnZTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgbWVzc2FnZSA9ICdGYWlsZWQgdG8gZG93bmxvYWQgZmlsZS4nO1xuICAgICAgICAgICAgICAgIHRpdGxlID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5zaG93TWVzc2FnZURpYWxvZyh7XG4gICAgICAgICAgICBkaWFsb2dUeXBlOiAnZXJyb3InLFxuICAgICAgICAgICAgaWNvbiAgICAgIDogJ2Nsb3VkX29mZicsXG4gICAgICAgICAgICB0aXRsZSxcbiAgICAgICAgICAgIG1lc3NhZ2VcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBFTVBUWTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBCbG9iIGNvbnN0cnVjdG9yIGZvciB0ZXN0aW5nIHB1cnBvc2VzLlxuICAgICAqL1xuICAgIHB1YmxpYyBjcmVhdGVCbG9iKGRhdGE6IEJsb2JQYXJ0W10sIGNvbnRlbnRUeXBlPzogQmxvYlByb3BlcnR5QmFnKSB7XG4gICAgICAgIHJldHVybiBuZXcgQmxvYihkYXRhLCBjb250ZW50VHlwZSk7XG4gICAgfVxufVxuXG5cbiJdfQ==
@@ -0,0 +1,100 @@
1
+ import { Directive, ElementRef, EventEmitter, Input, Output, ViewChild } from '@angular/core';
2
+ import { MatAnchor } from '@angular/material/button';
3
+ import { BaseComponent } from '@dbg-riskit/angular-view';
4
+ import { ErrorType, toString } from '@dbg-riskit/common';
5
+ import { first, takeUntil } from 'rxjs/operators';
6
+ import * as i0 from "@angular/core";
7
+ export class AbstractFileUploadComponent extends BaseComponent {
8
+ constructor(renderer) {
9
+ super();
10
+ this.renderer = renderer;
11
+ this.error = new EventEmitter(true);
12
+ this.multiple = true;
13
+ this.filesLoaded = new EventEmitter(true);
14
+ this.offset = 0;
15
+ this.fileInputHidden = false;
16
+ this.raised = true;
17
+ this.color = 'primary';
18
+ this.disabled = false;
19
+ }
20
+ ngAfterViewInit() {
21
+ this.offset = this.wrapper.nativeElement.getBoundingClientRect().left
22
+ - this.anchor.nativeElement.getBoundingClientRect().left
23
+ + (this.wrapper.nativeElement.getBoundingClientRect().width / 2);
24
+ }
25
+ move(event) {
26
+ if (this.fileInput && event.target !== this.fileInput.nativeElement && this.anchor) {
27
+ const diff = event.target?.getBoundingClientRect().left
28
+ - event.currentTarget?.getBoundingClientRect().left
29
+ - this.offset;
30
+ this.renderer.setStyle(this.wrapper.nativeElement, 'left', `${event.offsetX + diff}px`);
31
+ }
32
+ }
33
+ handleFiles(fileList) {
34
+ // Check for the various File API support.
35
+ if ('FileReader' in window) {
36
+ this.readFiles(fileList).pipe(takeUntil(this.destroyed), first()).subscribe({
37
+ next: (files) => {
38
+ this.filesLoaded.emit(files);
39
+ this.resetInputField();
40
+ },
41
+ error: (error) => {
42
+ this.error.emit({
43
+ message: toString(error),
44
+ errorType: ErrorType.ERROR,
45
+ status: 0
46
+ });
47
+ this.resetInputField();
48
+ }
49
+ });
50
+ }
51
+ else {
52
+ this.error.emit({
53
+ message: 'FileReader is not supported in your browser! A newer browser (IE 11+, Chrome 50+, '
54
+ + 'FireFox 50+, Safari 9+) is required to use this application.',
55
+ errorType: ErrorType.ERROR,
56
+ status: 0
57
+ });
58
+ }
59
+ }
60
+ // Hide and show the input field to reset the selection
61
+ resetInputField() {
62
+ this.fileInputHidden = true;
63
+ setTimeout(() => {
64
+ this.fileInputHidden = false;
65
+ });
66
+ }
67
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: AbstractFileUploadComponent, deps: [{ token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Directive }); }
68
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.12", type: AbstractFileUploadComponent, inputs: { label: "label", accept: "accept", multiple: "multiple", raised: "raised", color: "color", icon: "icon", disabled: "disabled" }, outputs: { error: "error", filesLoaded: "filesLoaded" }, viewQueries: [{ propertyName: "anchor", first: true, predicate: MatAnchor, descendants: true, read: ElementRef }, { propertyName: "fileInput", first: true, predicate: ["fileInput"], descendants: true }, { propertyName: "wrapper", first: true, predicate: ["wrapper"], descendants: true }], usesInheritance: true, ngImport: i0 }); }
69
+ }
70
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: AbstractFileUploadComponent, decorators: [{
71
+ type: Directive
72
+ }], ctorParameters: function () { return [{ type: i0.Renderer2 }]; }, propDecorators: { error: [{
73
+ type: Output
74
+ }], label: [{
75
+ type: Input
76
+ }], accept: [{
77
+ type: Input
78
+ }], multiple: [{
79
+ type: Input
80
+ }], filesLoaded: [{
81
+ type: Output
82
+ }], anchor: [{
83
+ type: ViewChild,
84
+ args: [MatAnchor, { read: ElementRef }]
85
+ }], fileInput: [{
86
+ type: ViewChild,
87
+ args: ['fileInput']
88
+ }], wrapper: [{
89
+ type: ViewChild,
90
+ args: ['wrapper']
91
+ }], raised: [{
92
+ type: Input
93
+ }], color: [{
94
+ type: Input
95
+ }], icon: [{
96
+ type: Input
97
+ }], disabled: [{
98
+ type: Input
99
+ }] } });
100
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWJzdHJhY3QuZmlsZS51cGxvYWQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGtnL2RiZy1yaXNraXQvYW5ndWxhci1maWxlL3NyYy9saWIvYWJzdHJhY3QuZmlsZS51cGxvYWQuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBZ0IsU0FBUyxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBYSxTQUFTLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDdEgsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLDBCQUEwQixDQUFDO0FBRW5ELE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSwwQkFBMEIsQ0FBQztBQUN2RCxPQUFPLEVBQWUsU0FBUyxFQUFFLFFBQVEsRUFBQyxNQUFNLG9CQUFvQixDQUFDO0FBRXJFLE9BQU8sRUFBQyxLQUFLLEVBQUUsU0FBUyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7O0FBSWhELE1BQU0sT0FBZ0IsMkJBQTZDLFNBQVEsYUFBYTtJQTBDcEYsWUFBdUMsUUFBbUI7UUFDdEQsS0FBSyxFQUFFLENBQUM7UUFEMkIsYUFBUSxHQUFSLFFBQVEsQ0FBVztRQXZDMUMsVUFBSyxHQUFHLElBQUksWUFBWSxDQUFlLElBQUksQ0FBQyxDQUFDO1FBU3RELGFBQVEsR0FBRyxJQUFJLENBQUM7UUFHUCxnQkFBVyxHQUFHLElBQUksWUFBWSxDQUFNLElBQUksQ0FBQyxDQUFDO1FBV2xELFdBQU0sR0FBVyxDQUFDLENBQUM7UUFFcEIsb0JBQWUsR0FBRyxLQUFLLENBQUM7UUFHeEIsV0FBTSxHQUFHLElBQUksQ0FBQztRQUdkLFVBQUssR0FBa0IsU0FBUyxDQUFDO1FBTWpDLGFBQVEsR0FBRyxLQUFLLENBQUM7SUFJeEIsQ0FBQztJQUVNLGVBQWU7UUFDbEIsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsT0FBUSxDQUFDLGFBQWEs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QUFLO3NCQURYLEtBQUs7Z0JBSUMsSUFBSTtzQkFEVixLQUFLO2dCQUlDLFFBQVE7c0JBRGQsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7QWZ0ZXJWaWV3SW5pdCwgRGlyZWN0aXZlLCBFbGVtZW50UmVmLCBFdmVudEVtaXR0ZXIsIElucHV0LCBPdXRwdXQsIFJlbmRlcmVyMiwgVmlld0NoaWxkfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7TWF0QW5jaG9yfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9idXR0b24nO1xuaW1wb3J0IHtNYXRDb2xvclRoZW1lfSBmcm9tICdAZGJnLXJpc2tpdC9hbmd1bGFyLWNvbW1vbic7XG5pbXBvcnQge0Jhc2VDb21wb25lbnR9IGZyb20gJ0BkYmctcmlza2l0L2FuZ3VsYXItdmlldyc7XG5pbXBvcnQge0Vycm9yTWVzc2FnZSwgRXJyb3JUeXBlLCB0b1N0cmluZ30gZnJvbSAnQGRiZy1yaXNraXQvY29tbW9uJztcbmltcG9ydCB7T2JzZXJ2YWJsZX0gZnJvbSAncnhqcyc7XG5pbXBvcnQge2ZpcnN0LCB0YWtlVW50aWx9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7SUZpbGV9IGZyb20gJy4vZmlsZS50eXBlcyc7XG5cbkBEaXJlY3RpdmUoKVxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEFic3RyYWN0RmlsZVVwbG9hZENvbXBvbmVudDxUIGV4dGVuZHMgSUZpbGU+IGV4dGVuZHMgQmFzZUNvbXBvbmVudCBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQge1xuXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIHJlYWRvbmx5IGVycm9yID0gbmV3IEV2ZW50RW1pdHRlcjxFcnJvck1lc3NhZ2U+KHRydWUpO1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgbGFiZWw/OiBzdHJpbmc7XG5cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBhY2NlcHQ/OiBzdHJpbmc7XG5cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBtdWx0aXBsZSA9IHRydWU7XG5cbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgcmVhZG9ubHkgZmlsZXNMb2FkZWQgPSBuZXcgRXZlbnRFbWl0dGVyPFRbXT4odHJ1ZSk7XG5cbiAgICBAVmlld0NoaWxkKE1hdEFuY2hvciwge3JlYWQ6IEVsZW1lbnRSZWZ9KVxuICAgIHB1YmxpYyBhbmNob3I/OiBFbGVtZW50UmVmO1xuXG4gICAgQFZpZXdDaGlsZCgnZmlsZUlucHV0JylcbiAgICBwdWJsaWMgZmlsZUlucHV0PzogRWxlbWVudFJlZjtcblxuICAgIEBWaWV3Q2hpbGQoJ3dyYXBwZXInKVxuICAgIHB1YmxpYyB3cmFwcGVyPzogRWxlbWVudFJlZjtcblxuICAgIHByaXZhdGUgb2Zmc2V0OiBudW1iZXIgPSAwO1xuXG4gICAgcHVibGljIGZpbGVJbnB1dEhpZGRlbiA9IGZhbHNlO1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgcmFpc2VkID0gdHJ1ZTtcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGNvbG9yOiBNYXRDb2xvclRoZW1lID0gJ3ByaW1hcnknO1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgaWNvbj86IHN0cmluZztcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGRpc2FibGVkID0gZmFsc2U7XG5cbiAgICBwcm90ZWN0ZWQgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSByZW5kZXJlcjogUmVuZGVyZXIyKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgfVxuXG4gICAgcHVibGljIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5vZmZzZXQgPSB0aGlzLndyYXBwZXIhLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdFxuICAgICAgICAgICAgICAgICAgICAgIC0gdGhpcy5hbmNob3IhLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdFxuICAgICAgICAgICAgICAgICAgICAgICsgKHRoaXMud3JhcHBlciEubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aCAvIDIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBtb3ZlKGV2ZW50OiBNb3VzZUV2ZW50KSB7XG4gICAgICAgIGlmICh0aGlzLmZpbGVJbnB1dCAmJiBldmVudC50YXJnZXQgIT09IHRoaXMuZmlsZUlucHV0Lm5hdGl2ZUVsZW1lbnQgJiYgdGhpcy5hbmNob3IpIHtcbiAgICAgICAgICAgIGNvbnN0IGRpZmYgPSAoZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50KT8uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdFxuICAgICAgICAgICAgICAgICAgICAgICAgIC0gKGV2ZW50LmN1cnJlbnRUYXJnZXQgYXMgSFRNTEVsZW1lbnQpPy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0XG4gICAgICAgICAgICAgICAgICAgICAgICAgLSB0aGlzLm9mZnNldDtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy53cmFwcGVyIS5uYXRpdmVFbGVtZW50LCAnbGVmdCcsIGAke2V2ZW50Lm9mZnNldFggKyBkaWZmfXB4YCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgaGFuZGxlRmlsZXMoZmlsZUxpc3Q6IEZpbGVMaXN0KSB7XG4gICAgICAgIC8vIENoZWNrIGZvciB0aGUgdmFyaW91cyBGaWxlIEFQSSBzdXBwb3J0LlxuICAgICAgICBpZiAoJ0ZpbGVSZWFkZXInIGluIHdpbmRvdykge1xuICAgICAgICAgICAgdGhpcy5yZWFkRmlsZXMoZmlsZUxpc3QpLnBpcGUoXG4gICAgICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMuZGVzdHJveWVkKSxcbiAgICAgICAgICAgICAgICBmaXJzdCgpXG4gICAgICAgICAgICApLnN1YnNjcmliZSh7XG4gICAgICAgICAgICAgICAgbmV4dCA6IChmaWxlczogVFtdKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZmlsZXNMb2FkZWQuZW1pdChmaWxlcyk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVzZXRJbnB1dEZpZWxkKCk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBlcnJvcjogKGVycm9yOiBzdHJpbmcpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lcnJvci5lbWl0KHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UgIDogdG9TdHJpbmcoZXJyb3IpLFxuICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JUeXBlOiBFcnJvclR5cGUuRVJST1IsXG4gICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXMgICA6IDBcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVzZXRJbnB1dEZpZWxkKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmVycm9yLmVtaXQoe1xuICAgICAgICAgICAgICAgIG1lc3NhZ2UgIDogJ0ZpbGVSZWFkZXIgaXMgbm90IHN1cHBvcnRlZCBpbiB5b3VyIGJyb3dzZXIhIEEgbmV3ZXIgYnJvd3NlciAoSUUgMTErLCBDaHJvbWUgNTArLCAnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICArICdGaXJlRm94IDUwKywgU2FmYXJpIDkrKSBpcyByZXF1aXJlZCB0byB1c2UgdGhpcyBhcHBsaWNhdGlvbi4nLFxuICAgICAgICAgICAgICAgIGVycm9yVHlwZTogRXJyb3JUeXBlLkVSUk9SLFxuICAgICAgICAgICAgICAgIHN0YXR1cyAgIDogMFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgYWJzdHJhY3QgcmVhZEZpbGVzKGZpbGVMaXN0OiBGaWxlTGlzdCk6IE9ic2VydmFibGU8VFtdPjtcblxuICAgIC8vIEhpZGUgYW5kIHNob3cgdGhlIGlucHV0IGZpZWxkIHRvIHJlc2V0IHRoZSBzZWxlY3Rpb25cbiAgICBwcml2YXRlIHJlc2V0SW5wdXRGaWVsZCgpIHtcbiAgICAgICAgdGhpcy5maWxlSW5wdXRIaWRkZW4gPSB0cnVlO1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuZmlsZUlucHV0SGlkZGVuID0gZmFsc2U7XG4gICAgICAgIH0pO1xuICAgIH1cbn1cbiJdfQ==
@@ -0,0 +1,25 @@
1
+ import { ChangeDetectionStrategy, Component } from '@angular/core';
2
+ import { AbstractFileUploadComponent } from './abstract.file.upload.component';
3
+ import * as i0 from "@angular/core";
4
+ import * as i1 from "./binary.file.upload.service";
5
+ import * as i2 from "@angular/common";
6
+ import * as i3 from "@angular/material/button";
7
+ import * as i4 from "@angular/material/icon";
8
+ export class BinaryFileUploadComponent extends AbstractFileUploadComponent {
9
+ constructor(fileUploadService, renderer) {
10
+ super(renderer);
11
+ this.fileUploadService = fileUploadService;
12
+ }
13
+ readFiles(fileList) {
14
+ return this.fileUploadService.readFiles(fileList);
15
+ }
16
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: BinaryFileUploadComponent, deps: [{ token: i1.BinaryFileUploadService }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Component }); }
17
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: BinaryFileUploadComponent, selector: "risk-binary-file-upload", host: { properties: { "class.risk-binary-file-upload": "true" } }, usesInheritance: true, ngImport: i0, template: "<a *ngIf=\"raised; else notRaised\"\n mat-raised-button\n [disabled]=\"disabled\"\n [color]=\"color\"\n (mousemove)=\"move($event)\">\n <mat-icon *ngIf=\"icon\">{{icon}}</mat-icon>\n {{label}}\n <div #wrapper\n class=\"risk-file-upload-input-wrapper\">\n <input *ngIf=\"!fileInputHidden\" type=\"file\"\n id=\"fileInput\"\n #fileInput\n [multiple]=\"multiple\"\n [disabled]=\"disabled\"\n title=\"\"\n (change)=\"handleFiles($event.target.files)\"\n [accept]=\"accept\">\n </div>\n</a>\n<ng-template #notRaised>\n <a mat-button\n [disabled]=\"disabled\"\n [color]=\"color\"\n (mousemove)=\"move($event)\">\n <mat-icon *ngIf=\"icon\">{{icon}}</mat-icon>\n {{label}}\n <div #wrapper\n class=\"risk-file-upload-input-wrapper\">\n <input *ngIf=\"!fileInputHidden\" type=\"file\"\n id=\"fileInput\"\n #fileInput\n [multiple]=\"multiple\"\n [disabled]=\"disabled\"\n title=\"\"\n (change)=\"handleFiles($event.target.files)\"\n [accept]=\"accept\">\n </div>\n </a>\n</ng-template>\n", styles: [":host{display:block;padding:0;margin:0}:host>*{vertical-align:bottom}\n", ":host{display:inline-block}a{overflow:hidden}a .risk-file-upload-input-wrapper{width:30px;height:36px;margin-left:-15px;top:0;left:0;position:absolute;overflow:hidden;cursor:pointer;z-index:1}a .risk-file-upload-input-wrapper input{position:absolute;display:block;cursor:pointer;height:36px;font-size:36px;top:0;right:0;outline:0 none;opacity:0}\n"], dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.MatAnchor, selector: "a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button]", inputs: ["disabled", "disableRipple", "color", "tabIndex"], exportAs: ["matButton", "matAnchor"] }, { kind: "component", type: i4.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
18
+ }
19
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: BinaryFileUploadComponent, decorators: [{
20
+ type: Component,
21
+ args: [{ selector: 'risk-binary-file-upload', host: {
22
+ '[class.risk-binary-file-upload]': 'true'
23
+ }, changeDetection: ChangeDetectionStrategy.OnPush, preserveWhitespaces: false, template: "<a *ngIf=\"raised; else notRaised\"\n mat-raised-button\n [disabled]=\"disabled\"\n [color]=\"color\"\n (mousemove)=\"move($event)\">\n <mat-icon *ngIf=\"icon\">{{icon}}</mat-icon>\n {{label}}\n <div #wrapper\n class=\"risk-file-upload-input-wrapper\">\n <input *ngIf=\"!fileInputHidden\" type=\"file\"\n id=\"fileInput\"\n #fileInput\n [multiple]=\"multiple\"\n [disabled]=\"disabled\"\n title=\"\"\n (change)=\"handleFiles($event.target.files)\"\n [accept]=\"accept\">\n </div>\n</a>\n<ng-template #notRaised>\n <a mat-button\n [disabled]=\"disabled\"\n [color]=\"color\"\n (mousemove)=\"move($event)\">\n <mat-icon *ngIf=\"icon\">{{icon}}</mat-icon>\n {{label}}\n <div #wrapper\n class=\"risk-file-upload-input-wrapper\">\n <input *ngIf=\"!fileInputHidden\" type=\"file\"\n id=\"fileInput\"\n #fileInput\n [multiple]=\"multiple\"\n [disabled]=\"disabled\"\n title=\"\"\n (change)=\"handleFiles($event.target.files)\"\n [accept]=\"accept\">\n </div>\n </a>\n</ng-template>\n", styles: [":host{display:block;padding:0;margin:0}:host>*{vertical-align:bottom}\n", ":host{display:inline-block}a{overflow:hidden}a .risk-file-upload-input-wrapper{width:30px;height:36px;margin-left:-15px;top:0;left:0;position:absolute;overflow:hidden;cursor:pointer;z-index:1}a .risk-file-upload-input-wrapper input{position:absolute;display:block;cursor:pointer;height:36px;font-size:36px;top:0;right:0;outline:0 none;opacity:0}\n"] }]
24
+ }], ctorParameters: function () { return [{ type: i1.BinaryFileUploadService }, { type: i0.Renderer2 }]; } });
25
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmluYXJ5LmZpbGUudXBsb2FkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BrZy9kYmctcmlza2l0L2FuZ3VsYXItZmlsZS9zcmMvbGliL2JpbmFyeS5maWxlLnVwbG9hZC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wa2cvZGJnLXJpc2tpdC9hbmd1bGFyLWZpbGUvc3JjL2xpYi9hYnN0cmFjdC5maWxlLnVwbG9hZC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsdUJBQXVCLEVBQUUsU0FBUyxFQUFZLE1BQU0sZUFBZSxDQUFDO0FBRTVFLE9BQU8sRUFBQywyQkFBMkIsRUFBQyxNQUFNLGtDQUFrQyxDQUFDOzs7Ozs7QUFpQjdFLE1BQU0sT0FBTyx5QkFBMEIsU0FBUSwyQkFBdUM7SUFFbEYsWUFBb0MsaUJBQTBDLEVBQzNELFFBQW1CO1FBQ2xDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUZnQixzQkFBaUIsR0FBakIsaUJBQWlCLENBQXlCO0lBRzlFLENBQUM7SUFFUyxTQUFTLENBQUMsUUFBa0I7UUFDbEMsT0FBTyxJQUFJLENBQUMsaUJBQWlCLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ3RELENBQUM7K0dBVFEseUJBQXlCO21HQUF6Qix5QkFBeUIseUpDbkJ0QyxneUNBdUNBOzs0RkRwQmEseUJBQXlCO2tCQWJyQyxTQUFTOytCQUNlLHlCQUF5QixRQU16Qjt3QkFDakIsaUNBQWlDLEVBQUUsTUFBTTtxQkFDNUMsbUJBQ29CLHVCQUF1QixDQUFDLE1BQU0sdUJBQzlCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIFJlbmRlcmVyMn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge09ic2VydmFibGV9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtBYnN0cmFjdEZpbGVVcGxvYWRDb21wb25lbnR9IGZyb20gJy4vYWJzdHJhY3QuZmlsZS51cGxvYWQuY29tcG9uZW50JztcbmltcG9ydCB7QmluYXJ5RmlsZVVwbG9hZFNlcnZpY2V9IGZyb20gJy4vYmluYXJ5LmZpbGUudXBsb2FkLnNlcnZpY2UnO1xuaW1wb3J0IHtCaW5hcnlGaWxlfSBmcm9tICcuL2ZpbGUudHlwZXMnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvciAgICAgICAgICAgOiAncmlzay1iaW5hcnktZmlsZS11cGxvYWQnLFxuICAgIHRlbXBsYXRlVXJsICAgICAgICA6ICdhYnN0cmFjdC5maWxlLnVwbG9hZC5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzICAgICAgICAgIDogW1xuICAgICAgICAnLi4vLi4vLi4vY29tcG9uZW50LnNjc3MnLFxuICAgICAgICAnYWJzdHJhY3QuZmlsZS51cGxvYWQuY29tcG9uZW50LnNjc3MnXG4gICAgXSxcbiAgICBob3N0ICAgICAgICAgICAgICAgOiB7XG4gICAgICAgICdbY2xhc3Mucmlzay1iaW5hcnktZmlsZS11cGxvYWRdJzogJ3RydWUnXG4gICAgfSxcbiAgICBjaGFuZ2VEZXRlY3Rpb24gICAgOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gICAgcHJlc2VydmVXaGl0ZXNwYWNlczogZmFsc2Vcbn0pXG5leHBvcnQgY2xhc3MgQmluYXJ5RmlsZVVwbG9hZENvbXBvbmVudCBleHRlbmRzIEFic3RyYWN0RmlsZVVwbG9hZENvbXBvbmVudDxCaW5hcnlGaWxlPiB7XG5cbiAgICBwdWJsaWMgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBmaWxlVXBsb2FkU2VydmljZTogQmluYXJ5RmlsZVVwbG9hZFNlcnZpY2UsXG4gICAgICAgICAgICAgICAgICAgICAgIHJlbmRlcmVyOiBSZW5kZXJlcjIpIHtcbiAgICAgICAgc3VwZXIocmVuZGVyZXIpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCByZWFkRmlsZXMoZmlsZUxpc3Q6IEZpbGVMaXN0KTogT2JzZXJ2YWJsZTxCaW5hcnlGaWxlW10+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZmlsZVVwbG9hZFNlcnZpY2UucmVhZEZpbGVzKGZpbGVMaXN0KTtcbiAgICB9XG59XG4iLCI8YSAqbmdJZj1cInJhaXNlZDsgZWxzZSBub3RSYWlzZWRcIlxuICAgbWF0LXJhaXNlZC1idXR0b25cbiAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICBbY29sb3JdPVwiY29sb3JcIlxuICAgKG1vdXNlbW92ZSk9XCJtb3ZlKCRldmVudClcIj5cbiAgICA8bWF0LWljb24gKm5nSWY9XCJpY29uXCI+e3tpY29ufX08L21hdC1pY29uPlxuICAgIHt7bGFiZWx9fVxuICAgIDxkaXYgI3dyYXBwZXJcbiAgICAgICAgIGNsYXNzPVwicmlzay1maWxlLXVwbG9hZC1pbnB1dC13cmFwcGVyXCI+XG4gICAgICAgIDxpbnB1dCAqbmdJZj1cIiFmaWxlSW5wdXRIaWRkZW5cIiB0eXBlPVwiZmlsZVwiXG4gICAgICAgICAgICAgICBpZD1cImZpbGVJbnB1dFwiXG4gICAgICAgICAgICAgICAjZmlsZUlucHV0XG4gICAgICAgICAgICAgICBbbXVsdGlwbGVdPVwibXVsdGlwbGVcIlxuICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgICAgICAgICAgIHRpdGxlPVwiXCJcbiAgICAgICAgICAgICAgIChjaGFuZ2UpPVwiaGFuZGxlRmlsZXMoJGV2ZW50LnRhcmdldC5maWxlcylcIlxuICAgICAgICAgICAgICAgW2FjY2VwdF09XCJhY2NlcHRcIj5cbiAgICA8L2Rpdj5cbjwvYT5cbjxuZy10ZW1wbGF0ZSAjbm90UmFpc2VkPlxuICAgIDxhIG1hdC1idXR0b25cbiAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgIFtjb2xvcl09XCJjb2xvclwiXG4gICAgICAgKG1vdXNlbW92ZSk9XCJtb3ZlKCRldmVudClcIj5cbiAgICAgICAgPG1hdC1pY29uICpuZ0lmPVwiaWNvblwiPnt7aWNvbn19PC9tYXQtaWNvbj5cbiAgICAgICAge3tsYWJlbH19XG4gICAgICAgIDxkaXYgI3dyYXBwZXJcbiAgICAgICAgICAgICBjbGFzcz1cInJpc2stZmlsZS11cGxvYWQtaW5wdXQtd3JhcHBlclwiPlxuICAgICAgICAgICAgPGlucHV0ICpuZ0lmPVwiIWZpbGVJbnB1dEhpZGRlblwiIHR5cGU9XCJmaWxlXCJcbiAgICAgICAgICAgICAgICAgICBpZD1cImZpbGVJbnB1dFwiXG4gICAgICAgICAgICAgICAgICAgI2ZpbGVJbnB1dFxuICAgICAgICAgICAgICAgICAgIFttdWx0aXBsZV09XCJtdWx0aXBsZVwiXG4gICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgICAgICAgICAgICAgICB0aXRsZT1cIlwiXG4gICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJoYW5kbGVGaWxlcygkZXZlbnQudGFyZ2V0LmZpbGVzKVwiXG4gICAgICAgICAgICAgICAgICAgW2FjY2VwdF09XCJhY2NlcHRcIj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9hPlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
@@ -0,0 +1,41 @@
1
+ import { Injectable } from '@angular/core';
2
+ import { base64encode } from '@dbg-riskit/common';
3
+ import { forkJoin, Observable } from 'rxjs';
4
+ import * as i0 from "@angular/core";
5
+ export class BinaryFileUploadService {
6
+ readFiles(files) {
7
+ const fileOservables = [];
8
+ for (const file of Array.from(files)) {
9
+ fileOservables.push(new Observable((observer) => {
10
+ setTimeout(() => {
11
+ try {
12
+ const reader = new FileReader();
13
+ // Handle errors load
14
+ reader.onload = (event) => {
15
+ observer.next({
16
+ bodyBase64: base64encode((event.target.result)),
17
+ file
18
+ });
19
+ observer.complete();
20
+ };
21
+ reader.onerror = (event) => {
22
+ observer.error(event.target.error);
23
+ };
24
+ // Read file into memory as UTF-8
25
+ reader.readAsArrayBuffer(file);
26
+ }
27
+ catch (err) {
28
+ observer.error(err);
29
+ }
30
+ });
31
+ }));
32
+ }
33
+ return forkJoin(fileOservables);
34
+ }
35
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: BinaryFileUploadService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
36
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: BinaryFileUploadService }); }
37
+ }
38
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: BinaryFileUploadService, decorators: [{
39
+ type: Injectable
40
+ }] });
41
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmluYXJ5LmZpbGUudXBsb2FkLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wa2cvZGJnLXJpc2tpdC9hbmd1bGFyLWZpbGUvc3JjL2xpYi9iaW5hcnkuZmlsZS51cGxvYWQuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUNoRCxPQUFPLEVBQUMsUUFBUSxFQUFFLFVBQVUsRUFBYSxNQUFNLE1BQU0sQ0FBQzs7QUFJdEQsTUFBTSxPQUFPLHVCQUF1QjtJQUV6QixTQUFTLENBQUMsS0FBZTtRQUM1QixNQUFNLGNBQWMsR0FBa0MsRUFBRSxDQUFDO1FBQ3pELEtBQUssTUFBTSxJQUFJLElBQUksS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUNsQyxjQUFjLENBQUMsSUFBSSxDQUFDLElBQUksVUFBVSxDQUFDLENBQUMsUUFBZ0MsRUFBRSxFQUFFO2dCQUNwRSxVQUFVLENBQUMsR0FBRyxFQUFFO29CQUNaLElBQUk7d0JBQ0EsTUFBTSxNQUFNLEdBQUcsSUFBSSxVQUFVLEVBQUUsQ0FBQzt3QkFDaEMscUJBQXFCO3dCQUNyQixNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsS0FBb0IsRUFBRSxFQUFFOzRCQUNyQyxRQUFRLENBQUMsSUFBSSxDQUFDO2dDQUNWLFVBQVUsRUFBRSxZQUFZLENBQ3BCLENBQUUsS0FBSyxDQUFDLE1BQXFCLENBQUMsTUFBTSxDQUFnQixDQUFDO2dDQUN6RCxJQUFJOzZCQUNQLENBQUMsQ0FBQzs0QkFDSCxRQUFRLENBQUMsUUFBUSxFQUFFLENBQUM7d0JBQ3hCLENBQUMsQ0FBQzt3QkFDRixNQUFNLENBQUMsT0FBTyxHQUFHLENBQUMsS0FBb0IsRUFBRSxFQUFFOzRCQUN0QyxRQUFRLENBQUMsS0FBSyxDQUFFLEtBQUssQ0FBQyxNQUFxQixDQUFDLEtBQUssQ0FBQyxDQUFDO3dCQUN2RCxDQUFDLENBQUM7d0JBQ0YsaUNBQWlDO3dCQUNqQyxNQUFNLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLENBQUM7cUJBQ2xDO29CQUFDLE9BQU8sR0FBRyxFQUFFO3dCQUNWLFFBQVEsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7cUJBQ3ZCO2dCQUNMLENBQUMsQ0FBQyxDQUFDO1lBQ1AsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUNQO1FBQ0QsT0FBTyxRQUFRLENBQUMsY0FBYyxDQUFDLENBQUM7SUFDcEMsQ0FBQzsrR0E5QlEsdUJBQXVCO21IQUF2Qix1QkFBdUI7OzRGQUF2Qix1QkFBdUI7a0JBRG5DLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0luamVjdGFibGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtiYXNlNjRlbmNvZGV9IGZyb20gJ0BkYmctcmlza2l0L2NvbW1vbic7XG5pbXBvcnQge2ZvcmtKb2luLCBPYnNlcnZhYmxlLCBTdWJzY3JpYmVyfSBmcm9tICdyeGpzJztcbmltcG9ydCB7QmluYXJ5RmlsZX0gZnJvbSAnLi9maWxlLnR5cGVzJztcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIEJpbmFyeUZpbGVVcGxvYWRTZXJ2aWNlIHtcblxuICAgIHB1YmxpYyByZWFkRmlsZXMoZmlsZXM6IEZpbGVMaXN0KTogT2JzZXJ2YWJsZTxCaW5hcnlGaWxlW10+IHtcbiAgICAgICAgY29uc3QgZmlsZU9zZXJ2YWJsZXM6IEFycmF5PE9ic2VydmFibGU8QmluYXJ5RmlsZT4+ID0gW107XG4gICAgICAgIGZvciAoY29uc3QgZmlsZSBvZiBBcnJheS5mcm9tKGZpbGVzKSkge1xuICAgICAgICAgICAgZmlsZU9zZXJ2YWJsZXMucHVzaChuZXcgT2JzZXJ2YWJsZSgob2JzZXJ2ZXI6IFN1YnNjcmliZXI8QmluYXJ5RmlsZT4pID0+IHtcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBIYW5kbGUgZXJyb3JzIGxvYWRcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRlci5vbmxvYWQgPSAoZXZlbnQ6IFByb2dyZXNzRXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYnNlcnZlci5uZXh0KHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9keUJhc2U2NDogYmFzZTY0ZW5jb2RlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChldmVudC50YXJnZXQgYXMgRmlsZVJlYWRlcikucmVzdWx0KSBhcyBBcnJheUJ1ZmZlciksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYnNlcnZlci5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRlci5vbmVycm9yID0gKGV2ZW50OiBQcm9ncmVzc0V2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JzZXJ2ZXIuZXJyb3IoKGV2ZW50LnRhcmdldCBhcyBGaWxlUmVhZGVyKS5lcnJvcik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gUmVhZCBmaWxlIGludG8gbWVtb3J5IGFzIFVURi04XG4gICAgICAgICAgICAgICAgICAgICAgICByZWFkZXIucmVhZEFzQXJyYXlCdWZmZXIoZmlsZSk7XG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgICAgICAgICAgb2JzZXJ2ZXIuZXJyb3IoZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmb3JrSm9pbihmaWxlT3NlcnZhYmxlcyk7XG4gICAgfVxufVxuIl19
@@ -0,0 +1,83 @@
1
+ import { Directive, Input } from '@angular/core';
2
+ import { CONTENT_TYPE, toString } from '@dbg-riskit/common';
3
+ import { AbstractFileDownloadDirective } from './abstract.file.download.directive';
4
+ import * as i0 from "@angular/core";
5
+ import * as i1 from "@dbg-riskit/angular-view";
6
+ import * as i2 from "./file.size.pipe";
7
+ import * as i3 from "@dbg-riskit/common";
8
+ export class CSVFileDownloadDirective extends AbstractFileDownloadDirective {
9
+ constructor(dateFormatter, elementRef, dialogService, fileSizePipe, logger) {
10
+ super(elementRef, dialogService, fileSizePipe, logger);
11
+ this.dateFormatter = dateFormatter;
12
+ this.filename = 'data.csv';
13
+ this.crlfLineEnding = false;
14
+ }
15
+ mapToFile(data) {
16
+ let csvFile = '';
17
+ if (this.columns) {
18
+ csvFile += this.createHeader();
19
+ for (const row of data) {
20
+ csvFile += this.processRow(row);
21
+ }
22
+ }
23
+ return {
24
+ filename: this.filename,
25
+ content: this.createBlob([csvFile], { type: CONTENT_TYPE.TEXT_CSV })
26
+ };
27
+ }
28
+ processRow(row) {
29
+ return this.columns.map((column) => {
30
+ const value = column.get(row);
31
+ let innerValue = toString(value);
32
+ if (value instanceof Date) {
33
+ innerValue = this.dateFormatter.transform(value) || '';
34
+ }
35
+ let result = innerValue.replace(/"/g, '""');
36
+ if (result.search(/([",\n])/g) >= 0) {
37
+ result = `"${result}"`;
38
+ }
39
+ return result;
40
+ }).join(',') + this.getLineEnding();
41
+ }
42
+ createHeader() {
43
+ return this.columns.map((column) => {
44
+ const innerValue = toString(column.header);
45
+ let result = innerValue.replace(/"/g, '""');
46
+ if (result.search(/([",\n])/g) >= 0) {
47
+ result = `"${result}"`;
48
+ }
49
+ return result;
50
+ }).join(',') + this.getLineEnding();
51
+ }
52
+ getLineEnding() {
53
+ if (this.crlfLineEnding) {
54
+ return '\r\n';
55
+ }
56
+ return '\n';
57
+ }
58
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: CSVFileDownloadDirective, deps: [{ token: i1.DateFormatter }, { token: i0.ElementRef }, { token: i1.DialogService }, { token: i2.FileSizePipe }, { token: i3.Logger }], target: i0.ɵɵFactoryTarget.Directive }); }
59
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.12", type: CSVFileDownloadDirective, selector: "[risk-csv-download]", inputs: { columns: ["risk-csv-download-columns", "columns"], data: ["risk-csv-download", "data"], filename: ["risk-csv-download-filename", "filename"], crlfLineEnding: ["risk-csv-download-crlf", "crlfLineEnding"] }, host: { listeners: { "click": "download()" }, properties: { "class.risk-csv-download": "true" } }, usesInheritance: true, ngImport: i0 }); }
60
+ }
61
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: CSVFileDownloadDirective, decorators: [{
62
+ type: Directive,
63
+ args: [{
64
+ selector: '[risk-csv-download]',
65
+ host: {
66
+ '[class.risk-csv-download]': 'true',
67
+ '(click)': 'download()'
68
+ }
69
+ }]
70
+ }], ctorParameters: function () { return [{ type: i1.DateFormatter }, { type: i0.ElementRef }, { type: i1.DialogService }, { type: i2.FileSizePipe }, { type: i3.Logger }]; }, propDecorators: { columns: [{
71
+ type: Input,
72
+ args: ['risk-csv-download-columns']
73
+ }], data: [{
74
+ type: Input,
75
+ args: ['risk-csv-download']
76
+ }], filename: [{
77
+ type: Input,
78
+ args: ['risk-csv-download-filename']
79
+ }], crlfLineEnding: [{
80
+ type: Input,
81
+ args: ['risk-csv-download-crlf']
82
+ }] } });
83
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3N2LmZpbGUuZG93bmxvYWQuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGtnL2RiZy1yaXNraXQvYW5ndWxhci1maWxlL3NyYy9saWIvY3N2LmZpbGUuZG93bmxvYWQuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxTQUFTLEVBQWMsS0FBSyxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBRTNELE9BQU8sRUFBQyxZQUFZLEVBQW1ELFFBQVEsRUFBQyxNQUFNLG9CQUFvQixDQUFDO0FBRTNHLE9BQU8sRUFBQyw2QkFBNkIsRUFBQyxNQUFNLG9DQUFvQyxDQUFDOzs7OztBQVdqRixNQUFNLE9BQU8sd0JBQXlCLFNBQVEsNkJBQXdDO0lBZ0JsRixZQUFvQyxhQUE0QixFQUM3QyxVQUFzQixFQUN0QixhQUE0QixFQUM1QixZQUEwQixFQUMxQixNQUFjO1FBQzdCLEtBQUssQ0FBQyxVQUFVLEVBQUUsYUFBYSxFQUFFLFlBQVksRUFBRSxNQUFNLENBQUMsQ0FBQztRQUx2QixrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQUx6RCxhQUFRLEdBQUcsVUFBVSxDQUFDO1FBR3RCLG1CQUFjLEdBQUcsS0FBSyxDQUFDO0lBUTlCLENBQUM7SUFFUyxTQUFTLENBQUMsSUFBZTtRQUMvQixJQUFJLE9BQU8sR0FBRyxFQUFFLENBQUM7UUFFakIsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFO1lBQ2QsT0FBTyxJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUUvQixLQUFLLE1BQU0sR0FBRyxJQUFJLElBQUksRUFBRTtnQkFDcEIsT0FBTyxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUM7YUFDbkM7U0FDSjtRQUVELE9BQU87WUFDSCxRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVE7WUFDdkIsT0FBTyxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxPQUFPLENBQUMsRUFBRSxFQUFDLElBQUksRUFBRSxZQUFZLENBQUMsUUFBUSxFQUFDLENBQUM7U0FDckUsQ0FBQztJQUNOLENBQUM7SUFFTyxVQUFVLENBQUMsR0FBWTtRQUMzQixPQUFPLElBQUksQ0FBQyxPQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBZ0MsRUFBRSxFQUFFO1lBQzFELE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDOUIsSUFBSSxVQUFVLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBRWpDLElBQUksS0FBSyxZQUFZLElBQUksRUFBRTtnQkFDdkIsVUFBVSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQzthQUMxRDtZQUVELElBQUksTUFBTSxHQUFHLFVBQVUsQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO1lBRTVDLElBQUksTUFBTSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEVBQUU7Z0JBQ2pDLE1BQU0sR0FBRyxJQUFJLE1BQU0sR0FBRyxDQUFDO2FBQzFCO1lBRUQsT0FBTyxNQUFNLENBQUM7UUFDbEIsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUN4QyxDQUFDO0lBRU8sWUFBWTtRQUNoQixPQUFPLElBQUksQ0FBQyxPQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBZ0MsRUFBRSxFQUFFO1lBQzFELE1BQU0sVUFBVSxHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDM0MsSUFBSSxNQUFNLEdBQUcsVUFBVSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDNUMsSUFBSSxNQUFNLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsRUFBRTtnQkFDakMsTUFBTSxHQUFHLElBQUksTUFBTSxHQUFHLENBQUM7YUFDMUI7WUFDRCxPQUFPLE1BQU0sQ0FBQztRQUNsQixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQ3hDLENBQUM7SUFFTyxhQUFhO1FBQ2pCLElBQUksSUFBSSxDQUFDLGNBQWMsRUFBRTtZQUNyQixPQUFPLE1BQU0sQ0FBQztTQUNqQjtRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7K0dBNUVRLHdCQUF3QjttR0FBeEIsd0JBQXdCOzs0RkFBeEIsd0JBQXdCO2tCQVBwQyxTQUFTO21CQUFDO29CQUNQLFFBQVEsRUFBRSxxQkFBcUI7b0JBQy9CLElBQUksRUFBTTt3QkFDTiwyQkFBMkIsRUFBRSxNQUFNO3dCQUNuQyxTQUFTLEVBQW9CLFlBQVk7cUJBQzVDO2lCQUNKO3lNQUlVLE9BQU87c0JBRGIsS0FBSzt1QkFBQywyQkFBMkI7Z0JBSTNCLElBQUk7c0JBRFYsS0FBSzt1QkFBQyxtQkFBbUI7Z0JBTW5CLFFBQVE7c0JBRGQsS0FBSzt1QkFBQyw0QkFBNEI7Z0JBSTVCLGNBQWM7c0JBRHBCLEtBQUs7dUJBQUMsd0JBQXdCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtEaXJlY3RpdmUsIEVsZW1lbnRSZWYsIElucHV0fSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7RGF0ZUZvcm1hdHRlciwgRGlhbG9nU2VydmljZX0gZnJvbSAnQGRiZy1yaXNraXQvYW5ndWxhci12aWV3JztcbmltcG9ydCB7Q09OVEVOVF9UWVBFLCBGaWxlV2l0aENvbnRlbnQsIExvZ2dlciwgT2JzZXJ2YWJsZVdpdGhQcm9ncmVzcywgdG9TdHJpbmd9IGZyb20gJ0BkYmctcmlza2l0L2NvbW1vbic7XG5pbXBvcnQge09ic2VydmFibGV9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtBYnN0cmFjdEZpbGVEb3dubG9hZERpcmVjdGl2ZX0gZnJvbSAnLi9hYnN0cmFjdC5maWxlLmRvd25sb2FkLmRpcmVjdGl2ZSc7XG5pbXBvcnQge0ZpbGVTaXplUGlwZX0gZnJvbSAnLi9maWxlLnNpemUucGlwZSc7XG5pbXBvcnQge0NTVkV4cG9ydENvbHVtbn0gZnJvbSAnLi9maWxlLnR5cGVzJztcblxuQERpcmVjdGl2ZSh7XG4gICAgc2VsZWN0b3I6ICdbcmlzay1jc3YtZG93bmxvYWRdJyxcbiAgICBob3N0ICAgIDoge1xuICAgICAgICAnW2NsYXNzLnJpc2stY3N2LWRvd25sb2FkXSc6ICd0cnVlJyxcbiAgICAgICAgJyhjbGljayknICAgICAgICAgICAgICAgICAgOiAnZG93bmxvYWQoKSdcbiAgICB9XG59KVxuZXhwb3J0IGNsYXNzIENTVkZpbGVEb3dubG9hZERpcmVjdGl2ZSBleHRlbmRzIEFic3RyYWN0RmlsZURvd25sb2FkRGlyZWN0aXZlPHVua25vd25bXT4ge1xuXG4gICAgQElucHV0KCdyaXNrLWNzdi1kb3dubG9hZC1jb2x1bW5zJylcbiAgICBwdWJsaWMgY29sdW1ucz86IEFycmF5PENTVkV4cG9ydENvbHVtbjx1bmtub3duPj47XG5cbiAgICBASW5wdXQoJ3Jpc2stY3N2LWRvd25sb2FkJylcbiAgICBwdWJsaWMgZGF0YT86IE9ic2VydmFibGVXaXRoUHJvZ3Jlc3M8dW5rbm93bltdPlxuICAgICAgICB8IE9ic2VydmFibGU8dW5rbm93bltdPlxuICAgICAgICB8IHVua25vd25bXTtcblxuICAgIEBJbnB1dCgncmlzay1jc3YtZG93bmxvYWQtZmlsZW5hbWUnKVxuICAgIHB1YmxpYyBmaWxlbmFtZSA9ICdkYXRhLmNzdic7XG5cbiAgICBASW5wdXQoJ3Jpc2stY3N2LWRvd25sb2FkLWNybGYnKVxuICAgIHB1YmxpYyBjcmxmTGluZUVuZGluZyA9IGZhbHNlO1xuXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgZGF0ZUZvcm1hdHRlcjogRGF0ZUZvcm1hdHRlcixcbiAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudFJlZjogRWxlbWVudFJlZixcbiAgICAgICAgICAgICAgICAgICAgICAgZGlhbG9nU2VydmljZTogRGlhbG9nU2VydmljZSxcbiAgICAgICAgICAgICAgICAgICAgICAgZmlsZVNpemVQaXBlOiBGaWxlU2l6ZVBpcGUsXG4gICAgICAgICAgICAgICAgICAgICAgIGxvZ2dlcjogTG9nZ2VyKSB7XG4gICAgICAgIHN1cGVyKGVsZW1lbnRSZWYsIGRpYWxvZ1NlcnZpY2UsIGZpbGVTaXplUGlwZSwgbG9nZ2VyKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgbWFwVG9GaWxlKGRhdGE6IHVua25vd25bXSk6IEZpbGVXaXRoQ29udGVudCB7XG4gICAgICAgIGxldCBjc3ZGaWxlID0gJyc7XG5cbiAgICAgICAgaWYgKHRoaXMuY29sdW1ucykge1xuICAgICAgICAgICAgY3N2RmlsZSArPSB0aGlzLmNyZWF0ZUhlYWRlcigpO1xuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IHJvdyBvZiBkYXRhKSB7XG4gICAgICAgICAgICAgICAgY3N2RmlsZSArPSB0aGlzLnByb2Nlc3NSb3cocm93KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBmaWxlbmFtZTogdGhpcy5maWxlbmFtZSxcbiAgICAgICAgICAgIGNvbnRlbnQ6IHRoaXMuY3JlYXRlQmxvYihbY3N2RmlsZV0sIHt0eXBlOiBDT05URU5UX1RZUEUuVEVYVF9DU1Z9KVxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHByaXZhdGUgcHJvY2Vzc1Jvdyhyb3c6IHVua25vd24pOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5jb2x1bW5zIS5tYXAoKGNvbHVtbjogQ1NWRXhwb3J0Q29sdW1uPHVua25vd24+KSA9PiB7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGNvbHVtbi5nZXQocm93KTtcbiAgICAgICAgICAgIGxldCBpbm5lclZhbHVlID0gdG9TdHJpbmcodmFsdWUpO1xuXG4gICAgICAgICAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBEYXRlKSB7XG4gICAgICAgICAgICAgICAgaW5uZXJWYWx1ZSA9IHRoaXMuZGF0ZUZvcm1hdHRlci50cmFuc2Zvcm0odmFsdWUpIHx8ICcnO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBsZXQgcmVzdWx0ID0gaW5uZXJWYWx1ZS5yZXBsYWNlKC9cIi9nLCAnXCJcIicpO1xuXG4gICAgICAgICAgICBpZiAocmVzdWx0LnNlYXJjaCgvKFtcIixcXG5dKS9nKSA+PSAwKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gYFwiJHtyZXN1bHR9XCJgO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9KS5qb2luKCcsJykgKyB0aGlzLmdldExpbmVFbmRpbmcoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNyZWF0ZUhlYWRlcigpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5jb2x1bW5zIS5tYXAoKGNvbHVtbjogQ1NWRXhwb3J0Q29sdW1uPHVua25vd24+KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBpbm5lclZhbHVlID0gdG9TdHJpbmcoY29sdW1uLmhlYWRlcik7XG4gICAgICAgICAgICBsZXQgcmVzdWx0ID0gaW5uZXJWYWx1ZS5yZXBsYWNlKC9cIi9nLCAnXCJcIicpO1xuICAgICAgICAgICAgaWYgKHJlc3VsdC5zZWFyY2goLyhbXCIsXFxuXSkvZykgPj0gMCkge1xuICAgICAgICAgICAgICAgIHJlc3VsdCA9IGBcIiR7cmVzdWx0fVwiYDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH0pLmpvaW4oJywnKSArIHRoaXMuZ2V0TGluZUVuZGluZygpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0TGluZUVuZGluZygpIHtcbiAgICAgICAgaWYgKHRoaXMuY3JsZkxpbmVFbmRpbmcpIHtcbiAgICAgICAgICAgIHJldHVybiAnXFxyXFxuJztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gJ1xcbic7XG4gICAgfVxufVxuIl19
@@ -0,0 +1,47 @@
1
+ import { ChangeDetectionStrategy, Component, Input } from '@angular/core';
2
+ import { of, throwError } from 'rxjs';
3
+ import { switchMap } from 'rxjs/operators';
4
+ import { AbstractFileUploadComponent } from './abstract.file.upload.component';
5
+ import * as i0 from "@angular/core";
6
+ import * as i1 from "./csv.file.upload.service";
7
+ import * as i2 from "@angular/common";
8
+ import * as i3 from "@angular/material/button";
9
+ import * as i4 from "@angular/material/icon";
10
+ export class CSVFileUploadComponent extends AbstractFileUploadComponent {
11
+ constructor(fileUploadService, renderer) {
12
+ super(renderer);
13
+ this.fileUploadService = fileUploadService;
14
+ }
15
+ readFiles(fileList) {
16
+ return this.fileUploadService.readFiles(fileList, this.nameMapper).pipe(switchMap((files) => {
17
+ const validationErrors = [];
18
+ if (!this.validator || files.every((file) => {
19
+ const result = this.validator(file);
20
+ if (!result.result && result.messages != null) {
21
+ result.messages.forEach((message) => {
22
+ validationErrors.push(message);
23
+ });
24
+ }
25
+ return result.result;
26
+ })) {
27
+ return of(files);
28
+ }
29
+ else {
30
+ return throwError(`<li>${validationErrors.join('</li><li>')}</li>`);
31
+ }
32
+ }));
33
+ }
34
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: CSVFileUploadComponent, deps: [{ token: i1.CSVFileUploadService }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Component }); }
35
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: CSVFileUploadComponent, selector: "risk-csv-file-upload", inputs: { validator: "validator", nameMapper: "nameMapper" }, host: { properties: { "class.risk-csv-file-upload": "true" } }, usesInheritance: true, ngImport: i0, template: "<a *ngIf=\"raised; else notRaised\"\n mat-raised-button\n [disabled]=\"disabled\"\n [color]=\"color\"\n (mousemove)=\"move($event)\">\n <mat-icon *ngIf=\"icon\">{{icon}}</mat-icon>\n {{label}}\n <div #wrapper\n class=\"risk-file-upload-input-wrapper\">\n <input *ngIf=\"!fileInputHidden\" type=\"file\"\n id=\"fileInput\"\n #fileInput\n [multiple]=\"multiple\"\n [disabled]=\"disabled\"\n title=\"\"\n (change)=\"handleFiles($event.target.files)\"\n [accept]=\"accept\">\n </div>\n</a>\n<ng-template #notRaised>\n <a mat-button\n [disabled]=\"disabled\"\n [color]=\"color\"\n (mousemove)=\"move($event)\">\n <mat-icon *ngIf=\"icon\">{{icon}}</mat-icon>\n {{label}}\n <div #wrapper\n class=\"risk-file-upload-input-wrapper\">\n <input *ngIf=\"!fileInputHidden\" type=\"file\"\n id=\"fileInput\"\n #fileInput\n [multiple]=\"multiple\"\n [disabled]=\"disabled\"\n title=\"\"\n (change)=\"handleFiles($event.target.files)\"\n [accept]=\"accept\">\n </div>\n </a>\n</ng-template>\n", styles: [":host{display:block;padding:0;margin:0}:host>*{vertical-align:bottom}\n", ":host{display:inline-block}a{overflow:hidden}a .risk-file-upload-input-wrapper{width:30px;height:36px;margin-left:-15px;top:0;left:0;position:absolute;overflow:hidden;cursor:pointer;z-index:1}a .risk-file-upload-input-wrapper input{position:absolute;display:block;cursor:pointer;height:36px;font-size:36px;top:0;right:0;outline:0 none;opacity:0}\n"], dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.MatAnchor, selector: "a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button]", inputs: ["disabled", "disableRipple", "color", "tabIndex"], exportAs: ["matButton", "matAnchor"] }, { kind: "component", type: i4.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
36
+ }
37
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: CSVFileUploadComponent, decorators: [{
38
+ type: Component,
39
+ args: [{ selector: 'risk-csv-file-upload', host: {
40
+ '[class.risk-csv-file-upload]': 'true'
41
+ }, changeDetection: ChangeDetectionStrategy.OnPush, preserveWhitespaces: false, template: "<a *ngIf=\"raised; else notRaised\"\n mat-raised-button\n [disabled]=\"disabled\"\n [color]=\"color\"\n (mousemove)=\"move($event)\">\n <mat-icon *ngIf=\"icon\">{{icon}}</mat-icon>\n {{label}}\n <div #wrapper\n class=\"risk-file-upload-input-wrapper\">\n <input *ngIf=\"!fileInputHidden\" type=\"file\"\n id=\"fileInput\"\n #fileInput\n [multiple]=\"multiple\"\n [disabled]=\"disabled\"\n title=\"\"\n (change)=\"handleFiles($event.target.files)\"\n [accept]=\"accept\">\n </div>\n</a>\n<ng-template #notRaised>\n <a mat-button\n [disabled]=\"disabled\"\n [color]=\"color\"\n (mousemove)=\"move($event)\">\n <mat-icon *ngIf=\"icon\">{{icon}}</mat-icon>\n {{label}}\n <div #wrapper\n class=\"risk-file-upload-input-wrapper\">\n <input *ngIf=\"!fileInputHidden\" type=\"file\"\n id=\"fileInput\"\n #fileInput\n [multiple]=\"multiple\"\n [disabled]=\"disabled\"\n title=\"\"\n (change)=\"handleFiles($event.target.files)\"\n [accept]=\"accept\">\n </div>\n </a>\n</ng-template>\n", styles: [":host{display:block;padding:0;margin:0}:host>*{vertical-align:bottom}\n", ":host{display:inline-block}a{overflow:hidden}a .risk-file-upload-input-wrapper{width:30px;height:36px;margin-left:-15px;top:0;left:0;position:absolute;overflow:hidden;cursor:pointer;z-index:1}a .risk-file-upload-input-wrapper input{position:absolute;display:block;cursor:pointer;height:36px;font-size:36px;top:0;right:0;outline:0 none;opacity:0}\n"] }]
42
+ }], ctorParameters: function () { return [{ type: i1.CSVFileUploadService }, { type: i0.Renderer2 }]; }, propDecorators: { validator: [{
43
+ type: Input
44
+ }], nameMapper: [{
45
+ type: Input
46
+ }] } });
47
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3N2LmZpbGUudXBsb2FkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BrZy9kYmctcmlza2l0L2FuZ3VsYXItZmlsZS9zcmMvbGliL2Nzdi5maWxlLnVwbG9hZC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wa2cvZGJnLXJpc2tpdC9hbmd1bGFyLWZpbGUvc3JjL2xpYi9hYnN0cmFjdC5maWxlLnVwbG9hZC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBWSxNQUFNLGVBQWUsQ0FBQztBQUNuRixPQUFPLEVBQWEsRUFBRSxFQUFFLFVBQVUsRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUNoRCxPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDekMsT0FBTyxFQUFDLDJCQUEyQixFQUFDLE1BQU0sa0NBQWtDLENBQUM7Ozs7OztBQWlCN0UsTUFBTSxPQUFPLHNCQUF1QixTQUFRLDJCQUFvQztJQVE1RSxZQUFvQyxpQkFBdUMsRUFBRSxRQUFtQjtRQUM1RixLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7UUFEZ0Isc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFzQjtJQUUzRSxDQUFDO0lBRVMsU0FBUyxDQUFDLFFBQWtCO1FBQ2xDLE9BQU8sSUFBSSxDQUFDLGlCQUFpQixDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLElBQUksQ0FDbkUsU0FBUyxDQUFDLENBQUMsS0FBZ0IsRUFBRSxFQUFFO1lBQzNCLE1BQU0sZ0JBQWdCLEdBQWEsRUFBRSxDQUFDO1lBQ3RDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxJQUFJLEtBQUssQ0FBQyxLQUFLLENBQzlCLENBQUMsSUFBYSxFQUFFLEVBQUU7Z0JBQ2QsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLFNBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDckMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLElBQUksTUFBTSxDQUFDLFFBQVEsSUFBSSxJQUFJLEVBQUU7b0JBQzNDLE1BQU0sQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBZSxFQUFFLEVBQUU7d0JBQ3hDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztvQkFDbkMsQ0FBQyxDQUFDLENBQUM7aUJBQ047Z0JBQ0QsT0FBTyxNQUFNLENBQUMsTUFBTSxDQUFDO1lBQ3pCLENBQUMsQ0FBQyxFQUFFO2dCQUNKLE9BQU8sRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDO2FBQ3BCO2lCQUFNO2dCQUNILE9BQU8sVUFBVSxDQUFDLE9BQU8sZ0JBQWdCLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQzthQUN2RTtRQUNMLENBQUMsQ0FBQyxDQUNMLENBQUM7SUFDTixDQUFDOytHQWhDUSxzQkFBc0I7bUdBQXRCLHNCQUFzQixpTkNwQm5DLGd5Q0F1Q0E7OzRGRG5CYSxzQkFBc0I7a0JBYmxDLFNBQVM7K0JBQ2Usc0JBQXNCLFFBTXRCO3dCQUNqQiw4QkFBOEIsRUFBRSxNQUFNO3FCQUN6QyxtQkFDb0IsdUJBQXVCLENBQUMsTUFBTSx1QkFDOUIsS0FBSzttSUFLbkIsU0FBUztzQkFEZixLQUFLO2dCQUlDLFVBQVU7c0JBRGhCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIElucHV0LCBSZW5kZXJlcjJ9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtPYnNlcnZhYmxlLCBvZiwgdGhyb3dFcnJvcn0gZnJvbSAncnhqcyc7XG5pbXBvcnQge3N3aXRjaE1hcH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHtBYnN0cmFjdEZpbGVVcGxvYWRDb21wb25lbnR9IGZyb20gJy4vYWJzdHJhY3QuZmlsZS51cGxvYWQuY29tcG9uZW50JztcbmltcG9ydCB7Q1NWRmlsZVVwbG9hZFNlcnZpY2V9IGZyb20gJy4vY3N2LmZpbGUudXBsb2FkLnNlcnZpY2UnO1xuaW1wb3J0IHtDU1ZDb2x1bW5OYW1lTWFwcGVyLCBDU1ZGaWxlLCBDU1ZWYWxpZGF0b3J9IGZyb20gJy4vZmlsZS50eXBlcyc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yICAgICAgICAgICA6ICdyaXNrLWNzdi1maWxlLXVwbG9hZCcsXG4gICAgdGVtcGxhdGVVcmwgICAgICAgIDogJ2Fic3RyYWN0LmZpbGUudXBsb2FkLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHMgICAgICAgICAgOiBbXG4gICAgICAgICcuLi8uLi8uLi9jb21wb25lbnQuc2NzcycsXG4gICAgICAgICdhYnN0cmFjdC5maWxlLnVwbG9hZC5jb21wb25lbnQuc2NzcydcbiAgICBdLFxuICAgIGhvc3QgICAgICAgICAgICAgICA6IHtcbiAgICAgICAgJ1tjbGFzcy5yaXNrLWNzdi1maWxlLXVwbG9hZF0nOiAndHJ1ZSdcbiAgICB9LFxuICAgIGNoYW5nZURldGVjdGlvbiAgICA6IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgICBwcmVzZXJ2ZVdoaXRlc3BhY2VzOiBmYWxzZVxufSlcbmV4cG9ydCBjbGFzcyBDU1ZGaWxlVXBsb2FkQ29tcG9uZW50IGV4dGVuZHMgQWJzdHJhY3RGaWxlVXBsb2FkQ29tcG9uZW50PENTVkZpbGU+IHtcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHZhbGlkYXRvcj86IENTVlZhbGlkYXRvcjtcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIG5hbWVNYXBwZXI/OiBDU1ZDb2x1bW5OYW1lTWFwcGVyO1xuXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgZmlsZVVwbG9hZFNlcnZpY2U6IENTVkZpbGVVcGxvYWRTZXJ2aWNlLCByZW5kZXJlcjogUmVuZGVyZXIyKSB7XG4gICAgICAgIHN1cGVyKHJlbmRlcmVyKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgcmVhZEZpbGVzKGZpbGVMaXN0OiBGaWxlTGlzdCk6IE9ic2VydmFibGU8Q1NWRmlsZVtdPiB7XG4gICAgICAgIHJldHVybiB0aGlzLmZpbGVVcGxvYWRTZXJ2aWNlLnJlYWRGaWxlcyhmaWxlTGlzdCwgdGhpcy5uYW1lTWFwcGVyKS5waXBlKFxuICAgICAgICAgICAgc3dpdGNoTWFwKChmaWxlczogQ1NWRmlsZVtdKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgdmFsaWRhdGlvbkVycm9yczogc3RyaW5nW10gPSBbXTtcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMudmFsaWRhdG9yIHx8IGZpbGVzLmV2ZXJ5KFxuICAgICAgICAgICAgICAgICAgICAoZmlsZTogQ1NWRmlsZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gdGhpcy52YWxpZGF0b3IhKGZpbGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFyZXN1bHQucmVzdWx0ICYmIHJlc3VsdC5tZXNzYWdlcyAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0Lm1lc3NhZ2VzLmZvckVhY2goKG1lc3NhZ2U6IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0aW9uRXJyb3JzLnB1c2gobWVzc2FnZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0LnJlc3VsdDtcbiAgICAgICAgICAgICAgICAgICAgfSkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9mKGZpbGVzKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihgPGxpPiR7dmFsaWRhdGlvbkVycm9ycy5qb2luKCc8L2xpPjxsaT4nKX08L2xpPmApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgfVxufVxuIiwiPGEgKm5nSWY9XCJyYWlzZWQ7IGVsc2Ugbm90UmFpc2VkXCJcbiAgIG1hdC1yYWlzZWQtYnV0dG9uXG4gICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgW2NvbG9yXT1cImNvbG9yXCJcbiAgIChtb3VzZW1vdmUpPVwibW92ZSgkZXZlbnQpXCI+XG4gICAgPG1hdC1pY29uICpuZ0lmPVwiaWNvblwiPnt7aWNvbn19PC9tYXQtaWNvbj5cbiAgICB7e2xhYmVsfX1cbiAgICA8ZGl2ICN3cmFwcGVyXG4gICAgICAgICBjbGFzcz1cInJpc2stZmlsZS11cGxvYWQtaW5wdXQtd3JhcHBlclwiPlxuICAgICAgICA8aW5wdXQgKm5nSWY9XCIhZmlsZUlucHV0SGlkZGVuXCIgdHlwZT1cImZpbGVcIlxuICAgICAgICAgICAgICAgaWQ9XCJmaWxlSW5wdXRcIlxuICAgICAgICAgICAgICAgI2ZpbGVJbnB1dFxuICAgICAgICAgICAgICAgW211bHRpcGxlXT1cIm11bHRpcGxlXCJcbiAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICAgICAgICAgICB0aXRsZT1cIlwiXG4gICAgICAgICAgICAgICAoY2hhbmdlKT1cImhhbmRsZUZpbGVzKCRldmVudC50YXJnZXQuZmlsZXMpXCJcbiAgICAgICAgICAgICAgIFthY2NlcHRdPVwiYWNjZXB0XCI+XG4gICAgPC9kaXY+XG48L2E+XG48bmctdGVtcGxhdGUgI25vdFJhaXNlZD5cbiAgICA8YSBtYXQtYnV0dG9uXG4gICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgICBbY29sb3JdPVwiY29sb3JcIlxuICAgICAgIChtb3VzZW1vdmUpPVwibW92ZSgkZXZlbnQpXCI+XG4gICAgICAgIDxtYXQtaWNvbiAqbmdJZj1cImljb25cIj57e2ljb259fTwvbWF0LWljb24+XG4gICAgICAgIHt7bGFiZWx9fVxuICAgICAgICA8ZGl2ICN3cmFwcGVyXG4gICAgICAgICAgICAgY2xhc3M9XCJyaXNrLWZpbGUtdXBsb2FkLWlucHV0LXdyYXBwZXJcIj5cbiAgICAgICAgICAgIDxpbnB1dCAqbmdJZj1cIiFmaWxlSW5wdXRIaWRkZW5cIiB0eXBlPVwiZmlsZVwiXG4gICAgICAgICAgICAgICAgICAgaWQ9XCJmaWxlSW5wdXRcIlxuICAgICAgICAgICAgICAgICAgICNmaWxlSW5wdXRcbiAgICAgICAgICAgICAgICAgICBbbXVsdGlwbGVdPVwibXVsdGlwbGVcIlxuICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICAgICAgICAgICAgICAgdGl0bGU9XCJcIlxuICAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwiaGFuZGxlRmlsZXMoJGV2ZW50LnRhcmdldC5maWxlcylcIlxuICAgICAgICAgICAgICAgICAgIFthY2NlcHRdPVwiYWNjZXB0XCI+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvYT5cbjwvbmctdGVtcGxhdGU+XG4iXX0=