@wemake4u/form-player-se 1.0.47 → 1.0.49
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/THIRD_PARTY_LICENSES.txt +6 -0
- package/esm2022/lib/builtIn/function.json +16 -0
- package/esm2022/lib/components/actionsCellRenderer/actionsCellRenderer.component.mjs +18 -14
- package/esm2022/lib/components/badge/badge.component.mjs +16 -0
- package/esm2022/lib/components/hostCellRenderer/hostCellRenderer.component.mjs +10 -8
- package/esm2022/lib/controls/factory.mjs +7 -1
- package/esm2022/lib/controls/navigator.mjs +4 -0
- package/esm2022/lib/controls/treerlist.mjs +4 -0
- package/esm2022/lib/dialog/dialog.component.mjs +10 -8
- package/esm2022/lib/directives/collapse.directive.mjs +3 -3
- package/esm2022/lib/directives/date.directive.mjs +139 -44
- package/esm2022/lib/directives/dialog.directive.mjs +7 -1
- package/esm2022/lib/directives/dropdown.directive.mjs +13 -8
- package/esm2022/lib/directives/file.directive.mjs +212 -0
- package/esm2022/lib/directives/filemanager.directive.mjs +233 -0
- package/esm2022/lib/directives/filepicker.directive.mjs +40 -0
- package/esm2022/lib/directives/jsonfile.directive.mjs +59 -0
- package/esm2022/lib/directives/navigator.directive.mjs +76 -0
- package/esm2022/lib/directives/repeat.directive.mjs +8 -7
- package/esm2022/lib/directives/tab.badge.directive.mjs +95 -0
- package/esm2022/lib/directives/tabitem.directive.mjs +7 -4
- package/esm2022/lib/dynamic-fields/dynamic-fields.component.mjs +62 -149
- package/esm2022/lib/dynamic-form/dynamic-form.component.mjs +11 -8
- package/esm2022/lib/locale/locale-de.mjs +6 -2
- package/esm2022/lib/locale/locale-en.mjs +6 -2
- package/esm2022/lib/locale/locale-es.mjs +6 -2
- package/esm2022/lib/locale/locale-fr.mjs +6 -2
- package/esm2022/lib/locale/locale-it.mjs +6 -2
- package/esm2022/lib/locale/locale-pt.mjs +6 -2
- package/esm2022/lib/pipes/times.mjs +14 -0
- package/esm2022/lib/services/builder.service.mjs +43 -89
- package/esm2022/lib/services/compute.service.mjs +9 -9
- package/esm2022/lib/services/dialog.service.mjs +35 -4
- package/esm2022/lib/services/disable.service.mjs +30 -11
- package/esm2022/lib/services/event.service.mjs +14 -12
- package/esm2022/lib/services/form.service.mjs +32 -46
- package/esm2022/lib/services/function.service.mjs +6 -2
- package/esm2022/lib/services/grid.service.mjs +20 -14
- package/esm2022/lib/services/lifetime.service.mjs +36 -0
- package/esm2022/lib/services/programmability.service.mjs +22 -18
- package/esm2022/lib/services/status.service.mjs +88 -25
- package/esm2022/lib/services/validation.service.mjs +7 -7
- package/esm2022/lib/utils/FormArrayEx.mjs +63 -0
- package/esm2022/lib/utils/window.mjs +3 -2
- package/fesm2022/wemake4u-form-player-se.mjs +1460 -509
- package/fesm2022/wemake4u-form-player-se.mjs.map +1 -1
- package/lib/components/badge/badge.component.d.ts +13 -0
- package/lib/components/deleteRowRenderer/deleteRowRenderer.component.d.ts +4 -0
- package/lib/components/objectURLRenderer/objectURLRenderer.component.d.ts +4 -0
- package/lib/components/setFilter/setFilter.component.d.ts +4 -0
- package/lib/controls/navigator.d.ts +3 -0
- package/lib/controls/treerlist.d.ts +3 -0
- package/lib/dialog/dialog.component.d.ts +30 -2
- package/lib/directives/collapse.directive.d.ts +3 -2
- package/lib/directives/date.directive.d.ts +15 -4
- package/lib/directives/dropdown.directive.d.ts +2 -2
- package/lib/directives/file.directive.d.ts +31 -0
- package/lib/directives/filemanager.directive.d.ts +47 -0
- package/lib/directives/filepicker.directive.d.ts +23 -0
- package/lib/directives/jsonfile.directive.d.ts +14 -0
- package/lib/directives/navigator.directive.d.ts +22 -0
- package/lib/directives/tab.badge.directive.d.ts +28 -0
- package/lib/directives/tabitem.directive.d.ts +2 -1
- package/lib/dynamic-fields/dynamic-fields.component.d.ts +38 -11
- package/lib/dynamic-form/dynamic-form.component.d.ts +29 -1
- package/lib/locale/locale-de.d.ts +4 -0
- package/lib/locale/locale-en.d.ts +4 -0
- package/lib/locale/locale-es.d.ts +4 -0
- package/lib/locale/locale-fr.d.ts +4 -0
- package/lib/locale/locale-it.d.ts +4 -0
- package/lib/locale/locale-pt.d.ts +4 -0
- package/lib/locale/locale.d.ts +28 -0
- package/lib/pipes/times.d.ts +7 -0
- package/lib/services/builder.service.d.ts +6 -10
- package/lib/services/compute.service.d.ts +2 -1
- package/lib/services/dialog.service.d.ts +10 -3
- package/lib/services/disable.service.d.ts +5 -1
- package/lib/services/event.service.d.ts +1 -1
- package/lib/services/form.service.d.ts +5 -2
- package/lib/services/function.service.d.ts +1 -0
- package/lib/services/grid.service.d.ts +1 -1
- package/lib/services/lifetime.service.d.ts +12 -0
- package/lib/services/programmability.service.d.ts +3 -1
- package/lib/services/status.service.d.ts +18 -4
- package/lib/services/validation.service.d.ts +2 -1
- package/lib/utils/FormArrayEx.d.ts +26 -0
- package/package.json +3 -2
|
@@ -0,0 +1,212 @@
|
|
|
1
|
+
import { Directive, Input } from '@angular/core';
|
|
2
|
+
import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
|
|
3
|
+
import { finalize, isObservable, take } from 'rxjs';
|
|
4
|
+
import { downloadBlob, downloadFile } from '@wemake4u/interact';
|
|
5
|
+
import * as i0 from "@angular/core";
|
|
6
|
+
import * as i1 from "../services/toast.service";
|
|
7
|
+
export class FileHandlerDirective {
|
|
8
|
+
toastService;
|
|
9
|
+
destroyRef;
|
|
10
|
+
constructor(toastService, destroyRef) {
|
|
11
|
+
this.toastService = toastService;
|
|
12
|
+
this.destroyRef = destroyRef;
|
|
13
|
+
}
|
|
14
|
+
downloadHandler;
|
|
15
|
+
getExtension(file) {
|
|
16
|
+
const name = file?.name?.trim();
|
|
17
|
+
if (!name) {
|
|
18
|
+
return '';
|
|
19
|
+
}
|
|
20
|
+
const index = name.lastIndexOf('.');
|
|
21
|
+
if (index < 0 || index === name.length - 1) {
|
|
22
|
+
return '';
|
|
23
|
+
}
|
|
24
|
+
return name.substring(index + 1).toUpperCase();
|
|
25
|
+
}
|
|
26
|
+
getIcon(file) {
|
|
27
|
+
const extension = this.getExtension(file).toLowerCase();
|
|
28
|
+
return FILE_ICONS[extension] ?? 'fa-file';
|
|
29
|
+
}
|
|
30
|
+
getSize(file) {
|
|
31
|
+
const size = file?.size;
|
|
32
|
+
if (typeof size !== 'number' ||
|
|
33
|
+
!Number.isFinite(size) ||
|
|
34
|
+
size < 0) {
|
|
35
|
+
return '';
|
|
36
|
+
}
|
|
37
|
+
const units = ['B', 'KB', 'MB', 'GB', 'TB'];
|
|
38
|
+
let value = size;
|
|
39
|
+
let unit = 0;
|
|
40
|
+
while (value >= 1024 &&
|
|
41
|
+
unit < units.length - 1) {
|
|
42
|
+
value /= 1024;
|
|
43
|
+
unit++;
|
|
44
|
+
}
|
|
45
|
+
const decimals = unit === 0
|
|
46
|
+
? 0
|
|
47
|
+
: value < 10
|
|
48
|
+
? 1
|
|
49
|
+
: 0;
|
|
50
|
+
return `${value.toFixed(decimals)} ${units[unit]}`;
|
|
51
|
+
}
|
|
52
|
+
canDownload(file) {
|
|
53
|
+
return this.isLocal(file)
|
|
54
|
+
|| (this.isHandled(file) && !this.isDownloading(file));
|
|
55
|
+
}
|
|
56
|
+
isLocal(file) {
|
|
57
|
+
return file instanceof File;
|
|
58
|
+
}
|
|
59
|
+
downloadLocal(file) {
|
|
60
|
+
downloadBlob(file, file.name);
|
|
61
|
+
}
|
|
62
|
+
isHandled(file) {
|
|
63
|
+
return !this.isLocal(file)
|
|
64
|
+
&& typeof file === 'object'
|
|
65
|
+
&& file !== null
|
|
66
|
+
&& 'name' in file
|
|
67
|
+
&& 'type' in file
|
|
68
|
+
&& typeof file.name === 'string'
|
|
69
|
+
&& this.downloadHandler != null;
|
|
70
|
+
}
|
|
71
|
+
downloadHandled(file) {
|
|
72
|
+
if (!this.downloadHandler || !this.isHandled(file))
|
|
73
|
+
return;
|
|
74
|
+
const downloadResult = this.downloadHandler(file);
|
|
75
|
+
if (typeof downloadResult === 'string') {
|
|
76
|
+
this.downloadUrl(downloadResult, file.name);
|
|
77
|
+
}
|
|
78
|
+
if (isObservable(downloadResult)) {
|
|
79
|
+
this.downloadingHandled.add(file);
|
|
80
|
+
downloadResult
|
|
81
|
+
.pipe(take(1), finalize(() => this.downloadingHandled.delete(file)), takeUntilDestroyed(this.destroyRef))
|
|
82
|
+
.subscribe({
|
|
83
|
+
next: (result) => {
|
|
84
|
+
if (this.isBase64(result)) {
|
|
85
|
+
downloadFile(result, file.name, file.type);
|
|
86
|
+
}
|
|
87
|
+
else if (this.isUri(result)) {
|
|
88
|
+
this.downloadUrl(result, file.name);
|
|
89
|
+
}
|
|
90
|
+
},
|
|
91
|
+
error: error => {
|
|
92
|
+
this.logError(error);
|
|
93
|
+
}
|
|
94
|
+
});
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
isDownloading(file) {
|
|
98
|
+
return this.downloadingHandled.has(file);
|
|
99
|
+
}
|
|
100
|
+
downloadingHandled = new WeakSet();
|
|
101
|
+
downloadUrl(url, fileName) {
|
|
102
|
+
const link = document.createElement('a');
|
|
103
|
+
link.href = url;
|
|
104
|
+
link.download = fileName;
|
|
105
|
+
link.target = '_blank';
|
|
106
|
+
link.click();
|
|
107
|
+
}
|
|
108
|
+
isBase64(value) {
|
|
109
|
+
if (!value) {
|
|
110
|
+
return false;
|
|
111
|
+
}
|
|
112
|
+
// Data URI
|
|
113
|
+
if (value.startsWith('data:')) {
|
|
114
|
+
return value.includes(';base64,');
|
|
115
|
+
}
|
|
116
|
+
// Lunghezza multipla di 4
|
|
117
|
+
if (value.length % 4 !== 0) {
|
|
118
|
+
return false;
|
|
119
|
+
}
|
|
120
|
+
// Caratteri validi Base64
|
|
121
|
+
if (!/^[A-Za-z0-9+/]*={0,2}$/.test(value)) {
|
|
122
|
+
return false;
|
|
123
|
+
}
|
|
124
|
+
try {
|
|
125
|
+
atob(value);
|
|
126
|
+
return true;
|
|
127
|
+
}
|
|
128
|
+
catch {
|
|
129
|
+
return false;
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
isUri(value) {
|
|
133
|
+
try {
|
|
134
|
+
new URL(value, window.location.origin);
|
|
135
|
+
return true;
|
|
136
|
+
}
|
|
137
|
+
catch {
|
|
138
|
+
return false;
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
logError(error) {
|
|
142
|
+
if (!error)
|
|
143
|
+
return;
|
|
144
|
+
console.error(error);
|
|
145
|
+
if (error.message)
|
|
146
|
+
this.toastService.notifyError(error.message);
|
|
147
|
+
}
|
|
148
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: FileHandlerDirective, deps: [{ token: i1.ToastService }, { token: i0.DestroyRef }], target: i0.ɵɵFactoryTarget.Directive });
|
|
149
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.14", type: FileHandlerDirective, isStandalone: true, selector: "[fileHandler]", inputs: { downloadHandler: "downloadHandler" }, exportAs: ["fileHandler"], ngImport: i0 });
|
|
150
|
+
}
|
|
151
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: FileHandlerDirective, decorators: [{
|
|
152
|
+
type: Directive,
|
|
153
|
+
args: [{
|
|
154
|
+
selector: '[fileHandler]',
|
|
155
|
+
exportAs: 'fileHandler',
|
|
156
|
+
standalone: true
|
|
157
|
+
}]
|
|
158
|
+
}], ctorParameters: () => [{ type: i1.ToastService }, { type: i0.DestroyRef }], propDecorators: { downloadHandler: [{
|
|
159
|
+
type: Input
|
|
160
|
+
}] } });
|
|
161
|
+
const FILE_ICONS = {
|
|
162
|
+
zip: 'fa-file-zipper',
|
|
163
|
+
rar: 'fa-file-zipper',
|
|
164
|
+
'7z': 'fa-file-zipper',
|
|
165
|
+
tar: 'fa-file-zipper',
|
|
166
|
+
gz: 'fa-file-zipper',
|
|
167
|
+
doc: 'fa-file-word',
|
|
168
|
+
docx: 'fa-file-word',
|
|
169
|
+
ppt: 'fa-file-powerpoint',
|
|
170
|
+
pptx: 'fa-file-powerpoint',
|
|
171
|
+
txt: 'fa-file-lines',
|
|
172
|
+
log: 'fa-file-lines',
|
|
173
|
+
md: 'fa-file-lines',
|
|
174
|
+
pdf: 'fa-file-pdf',
|
|
175
|
+
jpg: 'fa-file-image',
|
|
176
|
+
jpeg: 'fa-file-image',
|
|
177
|
+
png: 'fa-file-image',
|
|
178
|
+
gif: 'fa-file-image',
|
|
179
|
+
bmp: 'fa-file-image',
|
|
180
|
+
svg: 'fa-file-image',
|
|
181
|
+
webp: 'fa-file-image',
|
|
182
|
+
xls: 'fa-file-excel',
|
|
183
|
+
xlsx: 'fa-file-excel',
|
|
184
|
+
csv: 'fa-file-csv',
|
|
185
|
+
mp3: 'fa-file-audio',
|
|
186
|
+
wav: 'fa-file-audio',
|
|
187
|
+
ogg: 'fa-file-audio',
|
|
188
|
+
flac: 'fa-file-audio',
|
|
189
|
+
aac: 'fa-file-audio',
|
|
190
|
+
m4a: 'fa-file-audio',
|
|
191
|
+
wma: 'fa-file-audio',
|
|
192
|
+
mp4: 'fa-file-video',
|
|
193
|
+
avi: 'fa-file-video',
|
|
194
|
+
mov: 'fa-file-video',
|
|
195
|
+
wmv: 'fa-file-video',
|
|
196
|
+
mkv: 'fa-file-video',
|
|
197
|
+
webm: 'fa-file-video',
|
|
198
|
+
mpeg: 'fa-file-video',
|
|
199
|
+
mpg: 'fa-file-video',
|
|
200
|
+
m4v: 'fa-file-video',
|
|
201
|
+
html: 'fa-file-code',
|
|
202
|
+
css: 'fa-file-code',
|
|
203
|
+
js: 'fa-file-code',
|
|
204
|
+
ts: 'fa-file-code',
|
|
205
|
+
json: 'fa-file-code',
|
|
206
|
+
xml: 'fa-file-code',
|
|
207
|
+
cs: 'fa-file-code',
|
|
208
|
+
java: 'fa-file-code',
|
|
209
|
+
py: 'fa-file-code',
|
|
210
|
+
sql: 'fa-file-code'
|
|
211
|
+
};
|
|
212
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtc2lyaW8vc3JjL2xpYi9kaXJlY3RpdmVzL2ZpbGUuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBYyxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzdELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxRQUFRLEVBQUUsWUFBWSxFQUFjLElBQUksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUVoRSxPQUFPLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxNQUFNLG9CQUFvQixDQUFBOzs7QUFPL0QsTUFBTSxPQUFPLG9CQUFvQjtJQUduQjtJQUNBO0lBRlosWUFDWSxZQUEwQixFQUMxQixVQUFzQjtRQUR0QixpQkFBWSxHQUFaLFlBQVksQ0FBYztRQUMxQixlQUFVLEdBQVYsVUFBVSxDQUFZO0lBQzlCLENBQUM7SUFHTCxlQUFlLENBQTJDO0lBRTFELFlBQVksQ0FBQyxJQUFzQjtRQUNqQyxNQUFNLElBQUksR0FBRyxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDO1FBRWhDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNWLE9BQU8sRUFBRSxDQUFDO1FBQ1osQ0FBQztRQUVELE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUM7UUFFcEMsSUFBSSxLQUFLLEdBQUcsQ0FBQyxJQUFJLEtBQUssS0FBSyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQzNDLE9BQU8sRUFBRSxDQUFDO1FBQ1osQ0FBQztRQUVELE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDakQsQ0FBQztJ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LGVBQWU7SUFDcEIsR0FBRyxFQUFFLGVBQWU7SUFDcEIsR0FBRyxFQUFFLGVBQWU7SUFDcEIsSUFBSSxFQUFFLGVBQWU7SUFDckIsSUFBSSxFQUFFLGVBQWU7SUFDckIsR0FBRyxFQUFFLGVBQWU7SUFDcEIsR0FBRyxFQUFFLGVBQWU7SUFFcEIsSUFBSSxFQUFFLGNBQWM7SUFDcEIsR0FBRyxFQUFFLGNBQWM7SUFDbkIsRUFBRSxFQUFFLGNBQWM7SUFDbEIsRUFBRSxFQUFFLGNBQWM7SUFDbEIsSUFBSSxFQUFFLGNBQWM7SUFDcEIsR0FBRyxFQUFFLGNBQWM7SUFDbkIsRUFBRSxFQUFFLGNBQWM7SUFDbEIsSUFBSSxFQUFFLGNBQWM7SUFDcEIsRUFBRSxFQUFFLGNBQWM7SUFDbEIsR0FBRyxFQUFFLGNBQWM7Q0FDcEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERlc3Ryb3lSZWYsIERpcmVjdGl2ZSwgSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgdGFrZVVudGlsRGVzdHJveWVkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xyXG5pbXBvcnQgeyBmaW5hbGl6ZSwgaXNPYnNlcnZhYmxlLCBPYnNlcnZhYmxlLCB0YWtlIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IFRvYXN0U2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL3RvYXN0LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBkb3dubG9hZEJsb2IsIGRvd25sb2FkRmlsZSB9IGZyb20gJ0B3ZW1ha2U0dS9pbnRlcmFjdCdcclxuXHJcbkBEaXJlY3RpdmUoe1xyXG4gIHNlbGVjdG9yOiAnW2ZpbGVIYW5kbGVyXScsXHJcbiAgZXhwb3J0QXM6ICdmaWxlSGFuZGxlcicsXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZVxyXG59KVxyXG5leHBvcnQgY2xhc3MgRmlsZUhhbmRsZXJEaXJlY3RpdmUge1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByb3RlY3RlZCB0b2FzdFNlcnZpY2U6IFRvYXN0U2VydmljZSxcclxuICAgIHByb3RlY3RlZCBkZXN0cm95UmVmOiBEZXN0cm95UmVmXHJcbiAgKSB7IH1cclxuXHJcbiAgQElucHV0KClcclxuICBkb3dubG9hZEhhbmRsZXI/OiAoZmlsZTogYW55KSA9PiBPYnNlcnZhYmxlPGFueT4gfCBzdHJpbmc7XHJcblxyXG4gIGdldEV4dGVuc2lvbihmaWxlPzogRmlsZUluZm8gfCBudWxsKTogc3RyaW5nIHtcclxuICAgIGNvbnN0IG5hbWUgPSBmaWxlPy5uYW1lPy50cmltKCk7XHJcblxyXG4gICAgaWYgKCFuYW1lKSB7XHJcbiAgICAgIHJldHVybiAnJztcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBpbmRleCA9IG5hbWUubGFzdEluZGV4T2YoJy4nKTtcclxuXHJcbiAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID09PSBuYW1lLmxlbmd0aCAtIDEpIHtcclxuICAgICAgcmV0dXJuICcnO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBuYW1lLnN1YnN0cmluZyhpbmRleCArIDEpLnRvVXBwZXJDYXNlKCk7XHJcbiAgfVxyXG5cclxuICBnZXRJY29uKGZpbGU6IEZpbGUpOiBzdHJpbmcge1xyXG4gICAgY29uc3QgZXh0ZW5zaW9uID0gdGhpcy5nZXRFeHRlbnNpb24oZmlsZSkudG9Mb3dlckNhc2UoKTtcclxuICAgIHJldHVybiBGSUxFX0lDT05TW2V4dGVuc2lvbl0gPz8gJ2ZhLWZpbGUnO1xyXG4gIH1cclxuXHJcbiAgZ2V0U2l6ZShmaWxlPzogRmlsZUluZm8gfCBudWxsKTogc3RyaW5nIHtcclxuICAgIGNvbnN0IHNpemUgPSBmaWxlPy5zaXplO1xyXG5cclxuICAgIGlmIChcclxuICAgICAgdHlwZW9mIHNpemUgIT09ICdudW1iZXInIHx8XHJcbiAgICAgICFOdW1iZXIuaXNGaW5pdGUoc2l6ZSkgfHxcclxuICAgICAgc2l6ZSA8IDBcclxuICAgICkge1xyXG4gICAgICByZXR1cm4gJyc7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgdW5pdHMgPSBbJ0InLCAnS0InLCAnTUInLCAnR0InLCAnVEInXTtcclxuXHJcbiAgICBsZXQgdmFsdWUgPSBzaXplO1xyXG4gICAgbGV0IHVuaXQgPSAwO1xyXG5cclxuICAgIHdoaWxlIChcclxuICAgICAgdmFsdWUgPj0gMTAyNCAmJlxyXG4gICAgICB1bml0IDwgdW5pdHMubGVuZ3RoIC0gMVxyXG4gICAgKSB7XHJcbiAgICAgIHZhbHVlIC89IDEwMjQ7XHJcbiAgICAgIHVuaXQrKztcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBkZWNpbWFscyA9XHJcbiAgICAgIHVuaXQgPT09IDBcclxuICAgICAgICA/IDBcclxuICAgICAgICA6IHZhbHVlIDwgMTBcclxuICAgICAgICAgID8gMVxyXG4gICAgICAgICAgOiAwO1xyXG5cclxuICAgIHJldHVybiBgJHt2YWx1ZS50b0ZpeGVkKGRlY2ltYWxzKX0gJHt1bml0c1t1bml0XX1gO1xyXG4gIH1cclxuXHJcbiAgY2FuRG93bmxvYWQoZmlsZTogYW55KTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5pc0xvY2FsKGZpbGUpXHJcbiAgICAgIHx8ICh0aGlzLmlzSGFuZGxlZChmaWxlKSAmJiAhdGhpcy5pc0Rvd25sb2FkaW5nKGZpbGUpKTtcclxuICB9XHJcblxyXG4gIGlzTG9jYWwoZmlsZTogYW55KTogZmlsZSBpcyBGaWxlIHtcclxuICAgIHJldHVybiBmaWxlIGluc3RhbmNlb2YgRmlsZTtcclxuICB9XHJcblxyXG4gIGRvd25sb2FkTG9jYWwoZmlsZTogRmlsZSk6IHZvaWQge1xyXG4gICAgZG93bmxvYWRCbG9iKGZpbGUsIGZpbGUubmFtZSk7ICAgIFxyXG4gIH1cclxuXHJcbiAgaXNIYW5kbGVkKGZpbGU6IGFueSk6IGZpbGUgaXMgeyBuYW1lOiBzdHJpbmcsIHR5cGU6IHN0cmluZyB9IHtcclxuICAgIHJldHVybiAhdGhpcy5pc0xvY2FsKGZpbGUpXHJcbiAgICAgICYmIHR5cGVvZiBmaWxlID09PSAnb2JqZWN0J1xyXG4gICAgICAmJiBmaWxlICE9PSBudWxsXHJcbiAgICAgICYmICduYW1lJyBpbiBmaWxlXHJcbiAgICAgICYmICd0eXBlJyBpbiBmaWxlICAgICAgXHJcbiAgICAgICYmIHR5cGVvZiBmaWxlLm5hbWUgPT09ICdzdHJpbmcnXHJcbiAgICAgICYmIHRoaXMuZG93bmxvYWRIYW5kbGVyICE9IG51bGw7XHJcbiAgfVxyXG5cclxuICBkb3dubG9hZEhhbmRsZWQoZmlsZTogYW55KTogdm9pZCB7XHJcblxyXG4gICAgaWYgKCF0aGlzLmRvd25sb2FkSGFuZGxlciB8fCAhdGhpcy5pc0hhbmRsZWQoZmlsZSkpXHJcbiAgICAgIHJldHVybjtcclxuXHJcbiAgICBjb25zdCBkb3dubG9hZFJlc3VsdCA9IHRoaXMuZG93bmxvYWRIYW5kbGVyKGZpbGUpO1xyXG5cclxuICAgIGlmICh0eXBlb2YgZG93bmxvYWRSZXN1bHQgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgIHRoaXMuZG93bmxvYWRVcmwoZG93bmxvYWRSZXN1bHQsIGZpbGUubmFtZSk7ICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGlzT2JzZXJ2YWJsZShkb3dubG9hZFJlc3VsdCkpIHtcclxuXHJcbiAgICAgIHRoaXMuZG93bmxvYWRpbmdIYW5kbGVkLmFkZChmaWxlKTtcclxuXHJcbiAgICAgIGRvd25sb2FkUmVzdWx0XHJcbiAgICAgICAgLnBpcGUoXHJcbiAgICAgICAgICB0YWtlKDEpLFxyXG4gICAgICAgICAgZmluYWxpemUoKCkgPT4gdGhpcy5kb3dubG9hZGluZ0hhbmRsZWQuZGVsZXRlKGZpbGUpKSxcclxuICAgICAgICAgIHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpXHJcbiAgICAgICAgKVxyXG4gICAgICAgIC5zdWJzY3JpYmUoe1xyXG4gICAgICAgICAgbmV4dDogKHJlc3VsdDogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmlzQmFzZTY0KHJlc3VsdCkpIHtcclxuICAgICAgICAgICAgICBkb3dubG9hZEZpbGUocmVzdWx0LCBmaWxlLm5hbWUsIGZpbGUudHlwZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAodGhpcy5pc1VyaShyZXN1bHQpKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5kb3dubG9hZFVybChyZXN1bHQsIGZpbGUubmFtZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBlcnJvcjogZXJyb3IgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmxvZ0Vycm9yKGVycm9yKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGlzRG93bmxvYWRpbmcoZmlsZTogYW55KTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5kb3dubG9hZGluZ0hhbmRsZWQuaGFzKGZpbGUpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZWFkb25seSBkb3dubG9hZGluZ0hhbmRsZWQgPSBuZXcgV2Vha1NldDxvYmplY3Q+KCk7XHJcblxyXG4gIHByaXZhdGUgZG93bmxvYWRVcmwodXJsOiBzdHJpbmcsIGZpbGVOYW1lOiBzdHJpbmcpIHtcclxuICAgIGNvbnN0IGxpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7XHJcbiAgICBsaW5rLmhyZWYgPSB1cmw7XHJcbiAgICBsaW5rLmRvd25sb2FkID0gZmlsZU5hbWU7XHJcbiAgICBsaW5rLnRhcmdldCA9ICdfYmxhbmsnO1xyXG4gICAgbGluay5jbGljaygpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBpc0Jhc2U2NCh2YWx1ZTogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICBpZiAoIXZhbHVlKSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBEYXRhIFVSSVxyXG4gICAgaWYgKHZhbHVlLnN0YXJ0c1dpdGgoJ2RhdGE6JykpIHtcclxuICAgICAgcmV0dXJuIHZhbHVlLmluY2x1ZGVzKCc7YmFzZTY0LCcpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIEx1bmdoZXp6YSBtdWx0aXBsYSBkaSA0XHJcbiAgICBpZiAodmFsdWUubGVuZ3RoICUgNCAhPT0gMCkge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gQ2FyYXR0ZXJpIHZhbGlkaSBCYXNlNjRcclxuICAgIGlmICghL15bQS1aYS16MC05Ky9dKj17MCwyfSQvLnRlc3QodmFsdWUpKSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICB0cnkge1xyXG4gICAgICBhdG9iKHZhbHVlKTtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9IGNhdGNoIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBpc1VyaSh2YWx1ZTogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICB0cnkge1xyXG4gICAgICBuZXcgVVJMKHZhbHVlLCB3aW5kb3cubG9jYXRpb24ub3JpZ2luKTtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9IGNhdGNoIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIGxvZ0Vycm9yKGVycm9yOiBFcnJvcikge1xyXG4gICAgaWYgKCFlcnJvcikgcmV0dXJuO1xyXG4gICAgY29uc29sZS5lcnJvcihlcnJvcik7XHJcbiAgICBpZiAoZXJyb3IubWVzc2FnZSlcclxuICAgICAgdGhpcy50b2FzdFNlcnZpY2Uubm90aWZ5RXJyb3IoZXJyb3IubWVzc2FnZSk7XHJcbiAgfVxyXG5cclxufVxyXG5cclxudHlwZSBGaWxlSW5mbyA9IFBpY2s8RmlsZSwgJ25hbWUnIHwgJ3NpemUnPjtcclxuXHJcbmNvbnN0IEZJTEVfSUNPTlM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XHJcbiAgemlwOiAnZmEtZmlsZS16aXBwZXInLFxyXG4gIHJhcjogJ2ZhLWZpbGUtemlwcGVyJyxcclxuICAnN3onOiAnZmEtZmlsZS16aXBwZXInLFxyXG4gIHRhcjogJ2ZhLWZpbGUtemlwcGVyJyxcclxuICBnejogJ2ZhLWZpbGUtemlwcGVyJyxcclxuXHJcbiAgZG9jOiAnZmEtZmlsZS13b3JkJyxcclxuICBkb2N4OiAnZmEtZmlsZS13b3JkJyxcclxuXHJcbiAgcHB0OiAnZmEtZmlsZS1wb3dlcnBvaW50JyxcclxuICBwcHR4OiAnZmEtZmlsZS1wb3dlcnBvaW50JyxcclxuXHJcbiAgdHh0OiAnZmEtZmlsZS1saW5lcycsXHJcbiAgbG9nOiAnZmEtZmlsZS1saW5lcycsXHJcbiAgbWQ6ICdmYS1maWxlLWxpbmVzJyxcclxuXHJcbiAgcGRmOiAnZmEtZmlsZS1wZGYnLFxyXG5cclxuICBqcGc6ICdmYS1maWxlLWltYWdlJyxcclxuICBqcGVnOiAnZmEtZmlsZS1pbWFnZScsXHJcbiAgcG5nOiAnZmEtZmlsZS1pbWFnZScsXHJcbiAgZ2lmOiAnZmEtZmlsZS1pbWFnZScsXHJcbiAgYm1wOiAnZmEtZmlsZS1pbWFnZScsXHJcbiAgc3ZnOiAnZmEtZmlsZS1pbWFnZScsXHJcbiAgd2VicDogJ2ZhLWZpbGUtaW1hZ2UnLFxyXG5cclxuICB4bHM6ICdmYS1maWxlLWV4Y2VsJyxcclxuICB4bHN4OiAnZmEtZmlsZS1leGNlbCcsXHJcblxyXG4gIGNzdjogJ2ZhLWZpbGUtY3N2JyxcclxuXHJcbiAgbXAzOiAnZmEtZmlsZS1hdWRpbycsXHJcbiAgd2F2OiAnZmEtZmlsZS1hdWRpbycsXHJcbiAgb2dnOiAnZmEtZmlsZS1hdWRpbycsXHJcbiAgZmxhYzogJ2ZhLWZpbGUtYXVkaW8nLFxyXG4gIGFhYzogJ2ZhLWZpbGUtYXVkaW8nLFxyXG4gIG00YTogJ2ZhLWZpbGUtYXVkaW8nLFxyXG4gIHdtYTogJ2ZhLWZpbGUtYXVkaW8nLFxyXG5cclxuICBtcDQ6ICdmYS1maWxlLXZpZGVvJyxcclxuICBhdmk6ICdmYS1maWxlLXZpZGVvJyxcclxuICBtb3Y6ICdmYS1maWxlLXZpZGVvJyxcclxuICB3bXY6ICdmYS1maWxlLXZpZGVvJyxcclxuICBta3Y6ICdmYS1maWxlLXZpZGVvJyxcclxuICB3ZWJtOiAnZmEtZmlsZS12aWRlbycsXHJcbiAgbXBlZzogJ2ZhLWZpbGUtdmlkZW8nLFxyXG4gIG1wZzogJ2ZhLWZpbGUtdmlkZW8nLFxyXG4gIG00djogJ2ZhLWZpbGUtdmlkZW8nLFxyXG5cclxuICBodG1sOiAnZmEtZmlsZS1jb2RlJyxcclxuICBjc3M6ICdmYS1maWxlLWNvZGUnLFxyXG4gIGpzOiAnZmEtZmlsZS1jb2RlJyxcclxuICB0czogJ2ZhLWZpbGUtY29kZScsXHJcbiAganNvbjogJ2ZhLWZpbGUtY29kZScsXHJcbiAgeG1sOiAnZmEtZmlsZS1jb2RlJyxcclxuICBjczogJ2ZhLWZpbGUtY29kZScsXHJcbiAgamF2YTogJ2ZhLWZpbGUtY29kZScsXHJcbiAgcHk6ICdmYS1maWxlLWNvZGUnLFxyXG4gIHNxbDogJ2ZhLWZpbGUtY29kZSdcclxufTtcclxuIl19
|
|
@@ -0,0 +1,233 @@
|
|
|
1
|
+
import { Directive, Input, Self } from '@angular/core';
|
|
2
|
+
import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
|
|
3
|
+
import { Subscription, take, tap } from 'rxjs';
|
|
4
|
+
import { FileHandlerDirective } from './file.directive';
|
|
5
|
+
import * as i0 from "@angular/core";
|
|
6
|
+
import * as i1 from "@angular/forms";
|
|
7
|
+
import * as i2 from "ngx-sirio-lib";
|
|
8
|
+
import * as i3 from "../services/toast.service";
|
|
9
|
+
export class FileManagerDirective extends FileHandlerDirective {
|
|
10
|
+
ngControl;
|
|
11
|
+
fileUpload;
|
|
12
|
+
renderer;
|
|
13
|
+
instantUpload = false;
|
|
14
|
+
readonly = false;
|
|
15
|
+
multiple = false;
|
|
16
|
+
uploadHandler;
|
|
17
|
+
deleteHandler;
|
|
18
|
+
constructor(ngControl, fileUpload, renderer, toastService, destroyRef) {
|
|
19
|
+
super(toastService, destroyRef);
|
|
20
|
+
this.ngControl = ngControl;
|
|
21
|
+
this.fileUpload = fileUpload;
|
|
22
|
+
this.renderer = renderer;
|
|
23
|
+
}
|
|
24
|
+
ngOnDestroy() {
|
|
25
|
+
this.cleanupInstant();
|
|
26
|
+
}
|
|
27
|
+
ngOnChanges(changes) {
|
|
28
|
+
if (changes["instantUpload"] || changes["multiple"]
|
|
29
|
+
|| changes["uploadHandler"] || changes["deleteHandler"]) {
|
|
30
|
+
this.cleanupInstant();
|
|
31
|
+
if (this.instantUpload && this.uploadHandler && this.deleteHandler) {
|
|
32
|
+
this.setupInstant();
|
|
33
|
+
}
|
|
34
|
+
this.setupButton();
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
canRemove(file) {
|
|
38
|
+
if (this.readonly || !file)
|
|
39
|
+
return false;
|
|
40
|
+
if (this.instantUpload)
|
|
41
|
+
return !this.isUploading(file) && !this.isDeleting(file);
|
|
42
|
+
return true;
|
|
43
|
+
}
|
|
44
|
+
removeFile(file) {
|
|
45
|
+
if (!this.canRemove(file))
|
|
46
|
+
return;
|
|
47
|
+
this.onRemovingFile(file);
|
|
48
|
+
}
|
|
49
|
+
canDownload(file) {
|
|
50
|
+
if (!this.instantUpload)
|
|
51
|
+
return super.canDownload(file);
|
|
52
|
+
return !this.isUploading(file)
|
|
53
|
+
&& !this.isDeleting(file)
|
|
54
|
+
&& super.canDownload(file);
|
|
55
|
+
}
|
|
56
|
+
isUploading(file) {
|
|
57
|
+
return this.getStatus(file) === UploadStatus.Uploading;
|
|
58
|
+
}
|
|
59
|
+
isDeleting(file) {
|
|
60
|
+
return this.getStatus(file) === UploadStatus.Deleting;
|
|
61
|
+
}
|
|
62
|
+
instantSubscription = new Subscription();
|
|
63
|
+
lastSingleUploaded = null;
|
|
64
|
+
setupInstant() {
|
|
65
|
+
this.instantSubscription.add(this.fileUpload.fileUploadedEvent.subscribe((e) => {
|
|
66
|
+
const target = e.event.target;
|
|
67
|
+
if (this.multiple) {
|
|
68
|
+
for (const file of Array.from(target.files ?? [])) {
|
|
69
|
+
this.onAddFile(file);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
else {
|
|
73
|
+
if (this.lastSingleUploaded)
|
|
74
|
+
this.onRemoveFile(this.lastSingleUploaded);
|
|
75
|
+
this.lastSingleUploaded = target.files?.[0] ?? null;
|
|
76
|
+
this.onAddFile(this.lastSingleUploaded);
|
|
77
|
+
}
|
|
78
|
+
}));
|
|
79
|
+
this.instantSubscription.add(this.fileUpload.fileDeletedEvent.subscribe((e) => {
|
|
80
|
+
this.onRemoveFile(e.data.fileDeleted);
|
|
81
|
+
}));
|
|
82
|
+
this.lastSingleUploaded = null;
|
|
83
|
+
}
|
|
84
|
+
cleanupInstant() {
|
|
85
|
+
this.instantSubscription.unsubscribe();
|
|
86
|
+
this.instantSubscription = new Subscription();
|
|
87
|
+
this.lastSingleUploaded = null;
|
|
88
|
+
}
|
|
89
|
+
setupButton() {
|
|
90
|
+
this.instantSubscription.add(this.ngControl.control?.valueChanges.subscribe(value => {
|
|
91
|
+
this.refreshButton(value);
|
|
92
|
+
}));
|
|
93
|
+
setTimeout(() => this.refreshButton(this.ngControl.control?.value));
|
|
94
|
+
}
|
|
95
|
+
onAddFile(file) {
|
|
96
|
+
if (!file || !this.uploadHandler)
|
|
97
|
+
return;
|
|
98
|
+
this.setStatus(file, UploadStatus.Uploading);
|
|
99
|
+
this.uploadHandler(file)
|
|
100
|
+
.pipe(take(1), takeUntilDestroyed(this.destroyRef))
|
|
101
|
+
.subscribe({
|
|
102
|
+
next: result => {
|
|
103
|
+
this.setStatus(file, UploadStatus.Uploaded);
|
|
104
|
+
this.markUploaded(file, result);
|
|
105
|
+
},
|
|
106
|
+
error: error => {
|
|
107
|
+
this.setStatus(file, UploadStatus.Failed);
|
|
108
|
+
this.removeFromUploader(file);
|
|
109
|
+
this.logError(error);
|
|
110
|
+
}
|
|
111
|
+
});
|
|
112
|
+
}
|
|
113
|
+
onRemoveFile(file) {
|
|
114
|
+
if (!file)
|
|
115
|
+
return;
|
|
116
|
+
const currentStatus = this.getStatus(file);
|
|
117
|
+
const shouldDelete = this.deleteHandler
|
|
118
|
+
&& (currentStatus === UploadStatus.Uploaded
|
|
119
|
+
|| currentStatus == null);
|
|
120
|
+
if (!shouldDelete)
|
|
121
|
+
return;
|
|
122
|
+
this.deleteHandler?.(file)
|
|
123
|
+
.pipe(take(1), takeUntilDestroyed(this.destroyRef))
|
|
124
|
+
.subscribe({
|
|
125
|
+
next: result => {
|
|
126
|
+
this.setStatus(file, undefined);
|
|
127
|
+
},
|
|
128
|
+
error: error => {
|
|
129
|
+
this.logError(error);
|
|
130
|
+
}
|
|
131
|
+
});
|
|
132
|
+
}
|
|
133
|
+
onRemovingFile(file) {
|
|
134
|
+
if (!this.deleteHandler) {
|
|
135
|
+
this.removeFromUploader(file);
|
|
136
|
+
return;
|
|
137
|
+
}
|
|
138
|
+
const currentStatus = this.getStatus(file);
|
|
139
|
+
this.setStatus(file, UploadStatus.Deleting);
|
|
140
|
+
this.deleteHandler?.(file)
|
|
141
|
+
.pipe(take(1), tap(result => {
|
|
142
|
+
if (!result) {
|
|
143
|
+
throw new Error('Delete failed');
|
|
144
|
+
}
|
|
145
|
+
}), takeUntilDestroyed(this.destroyRef))
|
|
146
|
+
.subscribe({
|
|
147
|
+
next: result => {
|
|
148
|
+
this.setStatus(file, UploadStatus.Deleted);
|
|
149
|
+
this.removeFromUploader(file);
|
|
150
|
+
},
|
|
151
|
+
error: error => {
|
|
152
|
+
this.setStatus(file, currentStatus);
|
|
153
|
+
this.logError(error);
|
|
154
|
+
}
|
|
155
|
+
});
|
|
156
|
+
}
|
|
157
|
+
removeFromUploader(file) {
|
|
158
|
+
this.fileUpload.onFileDeleted(file);
|
|
159
|
+
}
|
|
160
|
+
refreshButton(value) {
|
|
161
|
+
const hideButton = (value?.length ?? 0) > 0 && !this.multiple;
|
|
162
|
+
const button = this.fileUpload.sirioInput?.sirioButton?.nativeElement;
|
|
163
|
+
if (!button)
|
|
164
|
+
return;
|
|
165
|
+
this.renderer[hideButton ? 'addClass' : 'removeClass'](button, 'd-none');
|
|
166
|
+
}
|
|
167
|
+
markUploaded(file, result) {
|
|
168
|
+
for (const [key, value] of Object.entries(result)) {
|
|
169
|
+
if (key in file) {
|
|
170
|
+
continue;
|
|
171
|
+
}
|
|
172
|
+
Object.defineProperty(file, key, {
|
|
173
|
+
value,
|
|
174
|
+
writable: false,
|
|
175
|
+
enumerable: true,
|
|
176
|
+
configurable: false
|
|
177
|
+
});
|
|
178
|
+
}
|
|
179
|
+
Object.defineProperty(file, "uploaded", {
|
|
180
|
+
value: true,
|
|
181
|
+
writable: false,
|
|
182
|
+
enumerable: false,
|
|
183
|
+
configurable: false
|
|
184
|
+
});
|
|
185
|
+
}
|
|
186
|
+
getStatus(file) {
|
|
187
|
+
return file.status;
|
|
188
|
+
}
|
|
189
|
+
setStatus(file, status) {
|
|
190
|
+
const key = 'status';
|
|
191
|
+
if (Object.prototype.hasOwnProperty.call(file, key)) {
|
|
192
|
+
file[key] = status;
|
|
193
|
+
return;
|
|
194
|
+
}
|
|
195
|
+
Object.defineProperty(file, key, {
|
|
196
|
+
value: status,
|
|
197
|
+
writable: true,
|
|
198
|
+
enumerable: false,
|
|
199
|
+
configurable: true
|
|
200
|
+
});
|
|
201
|
+
}
|
|
202
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: FileManagerDirective, deps: [{ token: i1.NgControl, self: true }, { token: i2.SirioFileUploadComponent }, { token: i0.Renderer2 }, { token: i3.ToastService }, { token: i0.DestroyRef }], target: i0.ɵɵFactoryTarget.Directive });
|
|
203
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.14", type: FileManagerDirective, isStandalone: true, selector: "[fileManager]", inputs: { instantUpload: "instantUpload", readonly: "readonly", multiple: "multiple", uploadHandler: "uploadHandler", deleteHandler: "deleteHandler" }, exportAs: ["fileManager"], usesInheritance: true, usesOnChanges: true, ngImport: i0 });
|
|
204
|
+
}
|
|
205
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: FileManagerDirective, decorators: [{
|
|
206
|
+
type: Directive,
|
|
207
|
+
args: [{
|
|
208
|
+
selector: '[fileManager]',
|
|
209
|
+
exportAs: 'fileManager',
|
|
210
|
+
standalone: true
|
|
211
|
+
}]
|
|
212
|
+
}], ctorParameters: () => [{ type: i1.NgControl, decorators: [{
|
|
213
|
+
type: Self
|
|
214
|
+
}] }, { type: i2.SirioFileUploadComponent }, { type: i0.Renderer2 }, { type: i3.ToastService }, { type: i0.DestroyRef }], propDecorators: { instantUpload: [{
|
|
215
|
+
type: Input
|
|
216
|
+
}], readonly: [{
|
|
217
|
+
type: Input
|
|
218
|
+
}], multiple: [{
|
|
219
|
+
type: Input
|
|
220
|
+
}], uploadHandler: [{
|
|
221
|
+
type: Input
|
|
222
|
+
}], deleteHandler: [{
|
|
223
|
+
type: Input
|
|
224
|
+
}] } });
|
|
225
|
+
export var UploadStatus;
|
|
226
|
+
(function (UploadStatus) {
|
|
227
|
+
UploadStatus[UploadStatus["Uploading"] = 0] = "Uploading";
|
|
228
|
+
UploadStatus[UploadStatus["Uploaded"] = 1] = "Uploaded";
|
|
229
|
+
UploadStatus[UploadStatus["Deleting"] = 2] = "Deleting";
|
|
230
|
+
UploadStatus[UploadStatus["Deleted"] = 3] = "Deleted";
|
|
231
|
+
UploadStatus[UploadStatus["Failed"] = 4] = "Failed";
|
|
232
|
+
})(UploadStatus || (UploadStatus = {}));
|
|
233
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZW1hbmFnZXIuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXNpcmlvL3NyYy9saWIvZGlyZWN0aXZlcy9maWxlbWFuYWdlci5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFjLFNBQVMsRUFBRSxLQUFLLEVBQW1DLElBQUksRUFBaUIsTUFBTSxlQUFlLENBQUM7QUFDbkgsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFHaEUsT0FBTyxFQUFjLFlBQVksRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRTNELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGtCQUFrQixDQUFDOzs7OztBQU94RCxNQUFNLE9BQU8sb0JBQXFCLFNBQVEsb0JBQW9CO0lBa0IxQztJQUNSO0lBQ0E7SUFqQlYsYUFBYSxHQUFtQixLQUFLLENBQUM7SUFHdEMsUUFBUSxHQUFtQixLQUFLLENBQUM7SUFHakMsUUFBUSxHQUFtQixLQUFLLENBQUM7SUFHakMsYUFBYSxDQUFtQztJQUdoRCxhQUFhLENBQXVDO0lBRXBELFlBQ2tCLFNBQW9CLEVBQzVCLFVBQW9DLEVBQ3BDLFFBQW1CLEVBQzNCLFlBQTBCLEVBQzFCLFVBQXNCO1FBRXRCLEtBQUssQ0FBQyxZQUFZLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFOaEIsY0FBUyxHQUFULFNBQVMsQ0FBVztRQUM1QixlQUFVLEdBQVYsVUFBVSxDQUEwQjtRQUNwQyxhQUFRLEdBQVIsUUFBUSxDQUFXO0lBSzdCLENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO0lBQ3hCLENBQUM7SUFFRCxXQUFXLENBQUMsT0FBc0I7UUFDaEMsSUFBSSxPQUFPLENBQUMsZUFBZSxDQUFDLElBQUksT0FBTyxDQUFDLFVBQVUsQ0FBQztlQUM5QyxPQUFPLENB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RCxNQUFNLEdBQUcsR0FBRyxRQUFRLENBQUM7UUFFckIsSUFBSSxNQUFNLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDbkQsSUFBWSxDQUFDLEdBQUcsQ0FBQyxHQUFHLE1BQU0sQ0FBQztZQUM1QixPQUFPO1FBQ1QsQ0FBQztRQUVELE1BQU0sQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRTtZQUMvQixLQUFLLEVBQUUsTUFBTTtZQUNiLFFBQVEsRUFBRSxJQUFJO1lBQ2QsVUFBVSxFQUFFLEtBQUs7WUFDakIsWUFBWSxFQUFFLElBQUk7U0FDbkIsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzt3R0F6UlUsb0JBQW9COzRGQUFwQixvQkFBb0I7OzRGQUFwQixvQkFBb0I7a0JBTGhDLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLGVBQWU7b0JBQ3pCLFFBQVEsRUFBRSxhQUFhO29CQUN2QixVQUFVLEVBQUUsSUFBSTtpQkFDakI7OzBCQW1CSSxJQUFJOzRKQWZQLGFBQWE7c0JBRFosS0FBSztnQkFJTixRQUFRO3NCQURQLEtBQUs7Z0JBSU4sUUFBUTtzQkFEUCxLQUFLO2dCQUlOLGFBQWE7c0JBRFosS0FBSztnQkFJTixhQUFhO3NCQURaLEtBQUs7O0FBOFFSLE1BQU0sQ0FBTixJQUFZLFlBTVg7QUFORCxXQUFZLFlBQVk7SUFDdEIseURBQVMsQ0FBQTtJQUNULHVEQUFRLENBQUE7SUFDUix1REFBUSxDQUFBO0lBQ1IscURBQU8sQ0FBQTtJQUNQLG1EQUFNLENBQUE7QUFDUixDQUFDLEVBTlcsWUFBWSxLQUFaLFlBQVksUUFNdkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEZXN0cm95UmVmLCBEaXJlY3RpdmUsIElucHV0LCBPbkNoYW5nZXMsIE9uRGVzdHJveSwgUmVuZGVyZXIyLCBTZWxmLCBTaW1wbGVDaGFuZ2VzIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IHRha2VVbnRpbERlc3Ryb3llZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcclxuaW1wb3J0IHsgTmdDb250cm9sIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBTaXJpb0ZpbGVVcGxvYWRDb21wb25lbnQgfSBmcm9tICduZ3gtc2lyaW8tbGliJztcclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgU3Vic2NyaXB0aW9uLCB0YWtlLCB0YXAgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgVG9hc3RTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvdG9hc3Quc2VydmljZSc7XHJcbmltcG9ydCB7IEZpbGVIYW5kbGVyRGlyZWN0aXZlIH0gZnJvbSAnLi9maWxlLmRpcmVjdGl2ZSc7XHJcblxyXG5ARGlyZWN0aXZlKHtcclxuICBzZWxlY3RvcjogJ1tmaWxlTWFuYWdlcl0nLFxyXG4gIGV4cG9ydEFzOiAnZmlsZU1hbmFnZXInLFxyXG4gIHN0YW5kYWxvbmU6IHRydWVcclxufSlcclxuZXhwb3J0IGNsYXNzIEZpbGVNYW5hZ2VyRGlyZWN0aXZlIGV4dGVuZHMgRmlsZUhhbmRsZXJEaXJlY3RpdmUgaW1wbGVtZW50cyBPbkNoYW5nZXMsIE9uRGVzdHJveSB7XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgaW5zdGFudFVwbG9hZDogYm9vbGVhbiB8IG51bGwgPSBmYWxzZTtcclxuXHJcbiAgQElucHV0KClcclxuICByZWFkb25seTogYm9vbGVhbiB8IG51bGwgPSBmYWxzZTtcclxuXHJcbiAgQElucHV0KClcclxuICBtdWx0aXBsZTogYm9vbGVhbiB8IG51bGwgPSBmYWxzZTtcclxuXHJcbiAgQElucHV0KClcclxuICB1cGxvYWRIYW5kbGVyPzogKGZpbGU6IEZpbGUpID0+IE9ic2VydmFibGU8YW55PjtcclxuXHJcbiAgQElucHV0KClcclxuICBkZWxldGVIYW5kbGVyPzogKGZpbGU6IEZpbGUpID0+IE9ic2VydmFibGU8Ym9vbGVhbj47XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgQFNlbGYoKSBwcml2YXRlIG5nQ29udHJvbDogTmdDb250cm9sLFxyXG4gICAgcHJpdmF0ZSBmaWxlVXBsb2FkOiBTaXJpb0ZpbGVVcGxvYWRDb21wb25lbnQsXHJcbiAgICBwcml2YXRlIHJlbmRlcmVyOiBSZW5kZXJlcjIsXHJcbiAgICB0b2FzdFNlcnZpY2U6IFRvYXN0U2VydmljZSxcclxuICAgIGRlc3Ryb3lSZWY6IERlc3Ryb3lSZWZcclxuICApIHtcclxuICAgIHN1cGVyKHRvYXN0U2VydmljZSwgZGVzdHJveVJlZik7XHJcbiAgfVxyXG4gIFxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgdGhpcy5jbGVhbnVwSW5zdGFudCgpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xyXG4gICAgaWYgKGNoYW5nZXNbXCJpbnN0YW50VXBsb2FkXCJdIHx8IGNoYW5nZXNbXCJtdWx0aXBsZVwiXVxyXG4gICAgICB8fCBjaGFuZ2VzW1widXBsb2FkSGFuZGxlclwiXSB8fCBjaGFuZ2VzW1wiZGVsZXRlSGFuZGxlclwiXSApIHtcclxuICAgICAgdGhpcy5jbGVhbnVwSW5zdGFudCgpO1xyXG5cclxuICAgICAgaWYgKHRoaXMuaW5zdGFudFVwbG9hZCAmJiB0aGlzLnVwbG9hZEhhbmRsZXIgJiYgdGhpcy5kZWxldGVIYW5kbGVyKSB7XHJcbiAgICAgICAgdGhpcy5zZXR1cEluc3RhbnQoKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5zZXR1cEJ1dHRvbigpOyAgICAgICAgXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjYW5SZW1vdmUoZmlsZTogRmlsZSk6IGJvb2xlYW5cclxuICB7XHJcbiAgICBpZiAodGhpcy5yZWFkb25seSB8fCAhZmlsZSlcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgIGlmICh0aGlzLmluc3RhbnRVcGxvYWQpXHJcbiAgICAgIHJldHVybiAhdGhpcy5pc1VwbG9hZGluZyhmaWxlKSAmJiAhdGhpcy5pc0RlbGV0aW5nKGZpbGUpO1xyXG5cclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH1cclxuXHJcbiAgcmVtb3ZlRmlsZShmaWxlOiBGaWxlKSB7XHJcblxyXG4gICAgaWYgKCF0aGlzLmNhblJlbW92ZShmaWxlKSlcclxuICAgICAgcmV0dXJuO1xyXG5cclxuICAgIHRoaXMub25SZW1vdmluZ0ZpbGUoZmlsZSk7XHJcbiAgfVxyXG5cclxuICBvdmVycmlkZSBjYW5Eb3dubG9hZChmaWxlOiBGaWxlKTogYm9vbGVhbiB7XHJcbiAgICBpZiAoIXRoaXMuaW5zdGFudFVwbG9hZClcclxuICAgICAgcmV0dXJuIHN1cGVyLmNhbkRvd25sb2FkKGZpbGUpO1xyXG5cclxuICAgIHJldHVybiAhdGhpcy5pc1VwbG9hZGluZyhmaWxlKVxyXG4gICAgICAmJiAhdGhpcy5pc0RlbGV0aW5nKGZpbGUpXHJcbiAgICAgICYmIHN1cGVyLmNhbkRvd25sb2FkKGZpbGUpO1xyXG4gIH1cclxuXHJcbiAgaXNVcGxvYWRpbmcoZmlsZTogRmlsZSkge1xyXG4gICAgcmV0dXJuIHRoaXMuZ2V0U3RhdHVzKGZpbGUpID09PSBVcGxvYWRTdGF0dXMuVXBsb2FkaW5nO1xyXG4gIH1cclxuXHJcbiAgaXNEZWxldGluZyhmaWxlOiBGaWxlKSB7XHJcbiAgICByZXR1cm4gdGhpcy5nZXRTdGF0dXMoZmlsZSkgPT09IFVwbG9hZFN0YXR1cy5EZWxldGluZztcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaW5zdGFudFN1YnNjcmlwdGlvbiA9IG5ldyBTdWJzY3JpcHRpb24oKTtcclxuXHJcbiAgcHJpdmF0ZSBsYXN0U2luZ2xlVXBsb2FkZWQ6IEZpbGUgfCBudWxsID0gbnVsbDtcclxuXHJcbiAgcHJpdmF0ZSBzZXR1cEluc3RhbnQoKSB7XHJcblxyXG4gICAgdGhpcy5pbnN0YW50U3Vic2NyaXB0aW9uLmFkZChcclxuICAgICAgdGhpcy5maWxlVXBsb2FkLmZpbGVVcGxvYWRlZEV2ZW50LnN1YnNjcmliZSgoZSkgPT4ge1xyXG5cclxuICAgICAgICBjb25zdCB0YXJnZXQgPSBlLmV2ZW50LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50O1xyXG5cclxuICAgICAgICBpZiAodGhpcy5tdWx0aXBsZSkge1xyXG4gICAgICAgICAgZm9yIChjb25zdCBmaWxlIG9mIEFycmF5LmZyb20odGFyZ2V0LmZpbGVzID8/IFtdKSkge1xyXG4gICAgICAgICAgICB0aGlzLm9uQWRkRmlsZShmaWxlKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcblxyXG4gICAgICAgICAgaWYgKHRoaXMubGFzdFNpbmdsZVVwbG9hZGVkKVxyXG4gICAgICAgICAgICB0aGlzLm9uUmVtb3ZlRmlsZSh0aGlzLmxhc3RTaW5nbGVVcGxvYWRlZCk7XHJcblxyXG4gICAgICAgICAgdGhpcy5sYXN0U2luZ2xlVXBsb2FkZWQgPSB0YXJnZXQuZmlsZXM/LlswXSA/PyBudWxsO1xyXG4gICAgICAgICAgXHJcbiAgICAgICAgICB0aGlzLm9uQWRkRmlsZSh0aGlzLmxhc3RTaW5nbGVVcGxvYWRlZCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgfSlcclxuICAgICk7XHJcblxyXG4gICAgdGhpcy5pbnN0YW50U3Vic2NyaXB0aW9uLmFkZChcclxuICAgICAgdGhpcy5maWxlVXBsb2FkLmZpbGVEZWxldGVkRXZlbnQuc3Vic2NyaWJlKChlKSA9PiB7ICAgICAgICBcclxuICAgICAgICB0aGlzLm9uUmVtb3ZlRmlsZShlLmRhdGEuZmlsZURlbGV0ZWQpO1xyXG4gICAgICB9KVxyXG4gICAgKTtcclxuXHJcbiAgICB0aGlzLmxhc3RTaW5nbGVVcGxvYWRlZCA9IG51bGw7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNsZWFudXBJbnN0YW50KCkge1xyXG4gICAgdGhpcy5pbnN0YW50U3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XHJcbiAgICB0aGlzLmluc3RhbnRTdWJzY3JpcHRpb24gPSBuZXcgU3Vic2NyaXB0aW9uKCk7XHJcblxyXG4gICAgdGhpcy5sYXN0U2luZ2xlVXBsb2FkZWQgPSBudWxsO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXR1cEJ1dHRvbigpIHtcclxuICAgIHRoaXMuaW5zdGFudFN1YnNjcmlwdGlvbi5hZGQoXHJcbiAgICAgIHRoaXMubmdDb250cm9sLmNvbnRyb2w/LnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUodmFsdWUgPT4ge1xyXG4gICAgICAgIHRoaXMucmVmcmVzaEJ1dHRvbih2YWx1ZSk7XHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG4gICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLnJlZnJlc2hCdXR0b24odGhpcy5uZ0NvbnRyb2wuY29udHJvbD8udmFsdWUpKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgb25BZGRGaWxlKGZpbGU6IEZpbGUgfCBudWxsKTogdm9pZCB7XHJcbiAgICBcclxuICAgIGlmICghZmlsZSB8fCAhdGhpcy51cGxvYWRIYW5kbGVyKVxyXG4gICAgICByZXR1cm47XHJcblxyXG4gICAgdGhpcy5zZXRTdGF0dXMoZmlsZSwgVXBsb2FkU3RhdHVzLlVwbG9hZGluZyk7XHJcblxyXG4gICAgdGhpcy51cGxvYWRIYW5kbGVyKGZpbGUpXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIHRha2UoMSksXHJcbiAgICAgICAgdGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZilcclxuICAgICAgKVxyXG4gICAgICAuc3Vic2NyaWJlKHtcclxuICAgICAgICBuZXh0OiByZXN1bHQgPT4ge1xyXG4gICAgICAgICAgdGhpcy5zZXRTdGF0dXMoZmlsZSwgVXBsb2FkU3RhdHVzLlVwbG9hZGVkKTtcclxuICAgICAgICAgIHRoaXMubWFya1VwbG9hZGVkKGZpbGUsIHJlc3VsdCk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBlcnJvcjogZXJyb3IgPT4ge1xyXG4gICAgICAgICAgdGhpcy5zZXRTdGF0dXMoZmlsZSwgVXBsb2FkU3RhdHVzLkZhaWxlZCk7XHJcbiAgICAgICAgICB0aGlzLnJlbW92ZUZyb21VcGxvYWRlcihmaWxlKTtcclxuICAgICAgICAgIHRoaXMubG9nRXJyb3IoZXJyb3IpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICB9XHJcblxyXG4gIHByaXZhdGUgb25SZW1vdmVGaWxlKGZpbGU6IEZpbGUgfCBudWxsKTogdm9pZCB7XHJcblxyXG4gICAgaWYgKCFmaWxlKVxyXG4gICAgICByZXR1cm47XHJcblxyXG4gICAgY29uc3QgY3VycmVudFN0YXR1cyA9IHRoaXMuZ2V0U3RhdHVzKGZpbGUpO1xyXG5cclxuICAgIGNvbnN0IHNob3VsZERlbGV0ZSA9IHRoaXMuZGVsZXRlSGFuZGxlclxyXG4gICAgICAmJiAoY3VycmVudFN0YXR1cyA9PT0gVXBsb2FkU3RhdHVzLlVwbG9hZGVkXHJcbiAgICAgIHx8IGN1cnJlbnRTdGF0dXMgPT0gbnVsbCk7XHJcblxyXG4gICAgaWYgKCFzaG91bGREZWxldGUpXHJcbiAgICAgIHJldHVybjtcclxuXHJcbiAgICB0aGlzLmRlbGV0ZUhhbmRsZXI/LihmaWxlKVxyXG4gICAgICAucGlwZShcclxuICAgICAgICB0YWtlKDEpLFxyXG4gICAgICAgIHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpXHJcbiAgICAgIClcclxuICAgICAgLnN1YnNjcmliZSh7XHJcbiAgICAgICAgbmV4dDogcmVzdWx0ID0+IHtcclxuICAgICAgICAgIHRoaXMuc2V0U3RhdHVzKGZpbGUsIHVuZGVmaW5lZCk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBlcnJvcjogZXJyb3IgPT4ge1xyXG4gICAgICAgICAgdGhpcy5sb2dFcnJvcihlcnJvcik7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgb25SZW1vdmluZ0ZpbGUoZmlsZTogRmlsZSkge1xyXG5cclxuICAgIGlmICghdGhpcy5kZWxldGVIYW5kbGVyKSB7XHJcbiAgICAgIHRoaXMucmVtb3ZlRnJvbVVwbG9hZGVyKGZpbGUpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgY3VycmVudFN0YXR1cyA9IHRoaXMuZ2V0U3RhdHVzKGZpbGUpO1xyXG5cclxuICAgIHRoaXMuc2V0U3RhdHVzKGZpbGUsIFVwbG9hZFN0YXR1cy5EZWxldGluZyk7XHJcblxyXG4gICAgdGhpcy5kZWxldGVIYW5kbGVyPy4oZmlsZSlcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgdGFrZSgxKSxcclxuICAgICAgICB0YXAocmVzdWx0ID0+IHtcclxuICAgICAgICAgIGlmICghcmVzdWx0KSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignRGVsZXRlIGZhaWxlZCcpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pLFxyXG4gICAgICAgIHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpXHJcbiAgICAgIClcclxuICAgICAgLnN1YnNjcmliZSh7XHJcbiAgICAgICAgbmV4dDogcmVzdWx0ID0+IHtcclxuICAgICAgICAgIHRoaXMuc2V0U3RhdHVzKGZpbGUsIFVwbG9hZFN0YXR1cy5EZWxldGVkKTtcclxuICAgICAgICAgIHRoaXMucmVtb3ZlRnJvbVVwbG9hZGVyKGZpbGUpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZXJyb3I6IGVycm9yID0+IHtcclxuICAgICAgICAgIHRoaXMuc2V0U3RhdHVzKGZpbGUsIGN1cnJlbnRTdGF0dXMpO1xyXG4gICAgICAgICAgdGhpcy5sb2dFcnJvcihlcnJvcik7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTsgIFxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZW1vdmVGcm9tVXBsb2FkZXIoZmlsZTogRmlsZSkge1xyXG4gICAgdGhpcy5maWxlVXBsb2FkLm9uRmlsZURlbGV0ZWQoZmlsZSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHJlZnJlc2hCdXR0b24odmFsdWU6IGFueSkge1xyXG4gICAgY29uc3QgaGlkZUJ1dHRvbiA9ICh2YWx1ZT8ubGVuZ3RoID8/IDApID4gMCAmJiAhdGhpcy5tdWx0aXBsZTtcclxuXHJcbiAgICBjb25zdCBidXR0b24gPSB0aGlzLmZpbGVVcGxvYWQuc2lyaW9JbnB1dD8uc2lyaW9CdXR0b24/Lm5hdGl2ZUVsZW1lbnQ7XHJcblxyXG4gICAgaWYgKCFidXR0b24pXHJcbiAgICAgIHJldHVybjtcclxuXHJcbiAgICB0aGlzLnJlbmRlcmVyW2hpZGVCdXR0b24gPyAnYWRkQ2xhc3MnIDogJ3JlbW92ZUNsYXNzJ10oXHJcbiAgICAgIGJ1dHRvbixcclxuICAgICAgJ2Qtbm9uZSdcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIG1hcmtVcGxvYWRlZChmaWxlOiBGaWxlLCByZXN1bHQ6IFJlY29yZDxzdHJpbmcsIGFueT4pIHtcclxuXHJcbiAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhyZXN1bHQpKSB7XHJcblxyXG4gICAgICBpZiAoa2V5IGluIGZpbGUpIHtcclxuICAgICAgICBjb250aW51ZTtcclxuICAgICAgfVxyXG5cclxuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGZpbGUsIGtleSwge1xyXG4gICAgICAgIHZhbHVlLFxyXG4gICAgICAgIHdyaXRhYmxlOiBmYWxzZSxcclxuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxyXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogZmFsc2VcclxuICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGZpbGUsIFwidXBsb2FkZWRcIiwge1xyXG4gICAgICB2YWx1ZTogdHJ1ZSxcclxuICAgICAgd3JpdGFibGU6IGZhbHNlLFxyXG4gICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcclxuICAgICAgY29uZmlndXJhYmxlOiBmYWxzZVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldFN0YXR1cyhmaWxlOiBGaWxlKTogVXBsb2FkU3RhdHVzIHwgdW5kZWZpbmVkIHtcclxuICAgIHJldHVybiAoZmlsZSBhcyBhbnkpLnN0YXR1cztcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0U3RhdHVzKGZpbGU6IEZpbGUsIHN0YXR1czogVXBsb2FkU3RhdHVzIHwgdW5kZWZpbmVkKTogdm9pZCB7XHJcbiAgICBjb25zdCBrZXkgPSAnc3RhdHVzJztcclxuXHJcbiAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGZpbGUsIGtleSkpIHtcclxuICAgICAgKGZpbGUgYXMgYW55KVtrZXldID0gc3RhdHVzO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGZpbGUsIGtleSwge1xyXG4gICAgICB2YWx1ZTogc3RhdHVzLFxyXG4gICAgICB3cml0YWJsZTogdHJ1ZSxcclxuICAgICAgZW51bWVyYWJsZTogZmFsc2UsXHJcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxyXG4gICAgfSk7XHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgZW51bSBVcGxvYWRTdGF0dXMge1xyXG4gIFVwbG9hZGluZyxcclxuICBVcGxvYWRlZCxcclxuICBEZWxldGluZyxcclxuICBEZWxldGVkLFxyXG4gIEZhaWxlZFxyXG59XHJcbiJdfQ==
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { Directive, Input } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
export class FileListReadonlyDirective {
|
|
4
|
+
host;
|
|
5
|
+
renderer;
|
|
6
|
+
readonly = false;
|
|
7
|
+
constructor(host, renderer) {
|
|
8
|
+
this.host = host;
|
|
9
|
+
this.renderer = renderer;
|
|
10
|
+
}
|
|
11
|
+
ngAfterViewChecked() {
|
|
12
|
+
const buttons = this.host.nativeElement.querySelectorAll('.sirio-upload-file-list button');
|
|
13
|
+
buttons.forEach((button, index) => {
|
|
14
|
+
if (this.readonly) {
|
|
15
|
+
this.renderer.setAttribute(button, 'disabled', '');
|
|
16
|
+
}
|
|
17
|
+
else {
|
|
18
|
+
this.renderer.removeAttribute(button, 'disabled');
|
|
19
|
+
}
|
|
20
|
+
});
|
|
21
|
+
}
|
|
22
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: FileListReadonlyDirective, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Directive });
|
|
23
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.14", type: FileListReadonlyDirective, isStandalone: true, selector: "ngx-sirio-file-upload", inputs: { readonly: "readonly" }, ngImport: i0 });
|
|
24
|
+
}
|
|
25
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: FileListReadonlyDirective, decorators: [{
|
|
26
|
+
type: Directive,
|
|
27
|
+
args: [{
|
|
28
|
+
selector: 'ngx-sirio-file-upload',
|
|
29
|
+
standalone: true
|
|
30
|
+
}]
|
|
31
|
+
}], ctorParameters: () => [{ type: i0.ElementRef }, { type: i0.Renderer2 }], propDecorators: { readonly: [{
|
|
32
|
+
type: Input
|
|
33
|
+
}] } });
|
|
34
|
+
export var UploadStatus;
|
|
35
|
+
(function (UploadStatus) {
|
|
36
|
+
UploadStatus[UploadStatus["Uploading"] = 0] = "Uploading";
|
|
37
|
+
UploadStatus[UploadStatus["Uploaded"] = 1] = "Uploaded";
|
|
38
|
+
UploadStatus[UploadStatus["Failed"] = 2] = "Failed";
|
|
39
|
+
})(UploadStatus || (UploadStatus = {}));
|
|
40
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZXBpY2tlci5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtc2lyaW8vc3JjL2xpYi9kaXJlY3RpdmVzL2ZpbGVwaWNrZXIuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBb0IsU0FBUyxFQUFjLEtBQUssRUFBYSxNQUFNLGVBQWUsQ0FBQzs7QUFNMUYsTUFBTSxPQUFPLHlCQUF5QjtJQU0xQjtJQUNBO0lBSlYsUUFBUSxHQUFtQixLQUFLLENBQUM7SUFFakMsWUFDVSxJQUE2QixFQUM3QixRQUFtQjtRQURuQixTQUFJLEdBQUosSUFBSSxDQUF5QjtRQUM3QixhQUFRLEdBQVIsUUFBUSxDQUFXO0lBQ3pCLENBQUM7SUFFTCxrQkFBa0I7UUFFaEIsTUFBTSxPQUFPLEdBQ1gsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsZ0JBQWdCLENBQ3RDLGdDQUFnQyxDQUNqQyxDQUFDO1FBRUosT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsRUFBRTtZQUVoQyxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztnQkFDbEIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsTUFBTSxFQUFFLFVBQVUsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUNyRCxDQUFDO2lCQUNJLENBQUM7Z0JBQ0osSUFBSSxDQUFDLFFBQVEsQ0FBQyxlQUFlLENBQUMsTUFBTSxFQUFFLFVBQVUsQ0FBQyxDQUFDO1lBQ3BELENBQUM7UUFFSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7d0dBM0JVLHlCQUF5Qjs0RkFBekIseUJBQXlCOzs0RkFBekIseUJBQXlCO2tCQUpyQyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSx1QkFBdUI7b0JBQ2pDLFVBQVUsRUFBRSxJQUFJO2lCQUNqQjt1R0FJQyxRQUFRO3NCQURQLEtBQUs7O0FBNkJSLE1BQU0sQ0FBTixJQUFZLFlBSVg7QUFKRCxXQUFZLFlBQVk7SUFDdEIseURBQVMsQ0FBQTtJQUNULHVEQUFRLENBQUE7SUFDUixtREFBTSxDQUFBO0FBQ1IsQ0FBQyxFQUpXLFlBQVksS0FBWixZQUFZLFFBSXZCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWZ0ZXJWaWV3Q2hlY2tlZCwgRGlyZWN0aXZlLCBFbGVtZW50UmVmLCBJbnB1dCwgUmVuZGVyZXIyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcblxyXG5ARGlyZWN0aXZlKHtcclxuICBzZWxlY3RvcjogJ25neC1zaXJpby1maWxlLXVwbG9hZCcsXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZVxyXG59KVxyXG5leHBvcnQgY2xhc3MgRmlsZUxpc3RSZWFkb25seURpcmVjdGl2ZSBpbXBsZW1lbnRzIEFmdGVyVmlld0NoZWNrZWQge1xyXG5cclxuICBASW5wdXQoKVxyXG4gIHJlYWRvbmx5OiBib29sZWFuIHwgbnVsbCA9IGZhbHNlO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgaG9zdDogRWxlbWVudFJlZjxIVE1MRWxlbWVudD4sXHJcbiAgICBwcml2YXRlIHJlbmRlcmVyOiBSZW5kZXJlcjJcclxuICApIHsgfVxyXG5cclxuICBuZ0FmdGVyVmlld0NoZWNrZWQoKTogdm9pZCB7XHJcblxyXG4gICAgY29uc3QgYnV0dG9ucyA9XHJcbiAgICAgIHRoaXMuaG9zdC5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXHJcbiAgICAgICAgJy5zaXJpby11cGxvYWQtZmlsZS1saXN0IGJ1dHRvbidcclxuICAgICAgKTtcclxuXHJcbiAgICBidXR0b25zLmZvckVhY2goKGJ1dHRvbiwgaW5kZXgpID0+IHtcclxuXHJcbiAgICAgIGlmICh0aGlzLnJlYWRvbmx5KSB7XHJcbiAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRBdHRyaWJ1dGUoYnV0dG9uLCAnZGlzYWJsZWQnLCAnJyk7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgdGhpcy5yZW5kZXJlci5yZW1vdmVBdHRyaWJ1dGUoYnV0dG9uLCAnZGlzYWJsZWQnKTtcclxuICAgICAgfVxyXG5cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbn1cclxuXHJcbmV4cG9ydCBlbnVtIFVwbG9hZFN0YXR1cyB7XHJcbiAgVXBsb2FkaW5nLFxyXG4gIFVwbG9hZGVkLFxyXG4gIEZhaWxlZFxyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFVwbG9hZEZpbGU8VFJlc3VsdCA9IGFueT4ge1xyXG4gIGZpbGU6IEZpbGU7XHJcbiAgc3RhdHVzOiBVcGxvYWRTdGF0dXM7XHJcbiAgcHJvZ3Jlc3M6IG51bWJlcjtcclxuICByZXN1bHQ/OiBUUmVzdWx0O1xyXG4gIGVycm9yPzogYW55O1xyXG59XHJcbiJdfQ==
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { Directive, Self } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
import * as i1 from "@angular/forms";
|
|
4
|
+
import * as i2 from "../services/subscribe.service";
|
|
5
|
+
export class JsonFileDirective {
|
|
6
|
+
ngControl;
|
|
7
|
+
subscribe;
|
|
8
|
+
destroyRef;
|
|
9
|
+
constructor(ngControl, subscribe, destroyRef) {
|
|
10
|
+
this.ngControl = ngControl;
|
|
11
|
+
this.subscribe = subscribe;
|
|
12
|
+
this.destroyRef = destroyRef;
|
|
13
|
+
}
|
|
14
|
+
ngOnInit() {
|
|
15
|
+
const control = this.ngControl.control;
|
|
16
|
+
if (!control)
|
|
17
|
+
return;
|
|
18
|
+
this.subscribe.subscribeChanges(control.valueChanges, control, undefined, this.destroyRef, (_, n) => this.defineJson(n));
|
|
19
|
+
}
|
|
20
|
+
defineJson(value) {
|
|
21
|
+
if (!Array.isArray(value)) {
|
|
22
|
+
return;
|
|
23
|
+
}
|
|
24
|
+
for (const item of value) {
|
|
25
|
+
if (!(item instanceof File)) {
|
|
26
|
+
continue;
|
|
27
|
+
}
|
|
28
|
+
if (typeof item.toJSON === 'function') {
|
|
29
|
+
continue;
|
|
30
|
+
}
|
|
31
|
+
Object.defineProperty(item, 'toJSON', {
|
|
32
|
+
value() {
|
|
33
|
+
return {
|
|
34
|
+
...this,
|
|
35
|
+
name: this.name,
|
|
36
|
+
size: this.size,
|
|
37
|
+
type: this.type,
|
|
38
|
+
lastModified: this.lastModified
|
|
39
|
+
};
|
|
40
|
+
},
|
|
41
|
+
writable: true,
|
|
42
|
+
configurable: true,
|
|
43
|
+
enumerable: false
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: JsonFileDirective, deps: [{ token: i1.NgControl, self: true }, { token: i2.SubscribeService }, { token: i0.DestroyRef }], target: i0.ɵɵFactoryTarget.Directive });
|
|
48
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.14", type: JsonFileDirective, isStandalone: true, selector: "ngx-sirio-file-upload", ngImport: i0 });
|
|
49
|
+
}
|
|
50
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: JsonFileDirective, decorators: [{
|
|
51
|
+
type: Directive,
|
|
52
|
+
args: [{
|
|
53
|
+
selector: 'ngx-sirio-file-upload',
|
|
54
|
+
standalone: true
|
|
55
|
+
}]
|
|
56
|
+
}], ctorParameters: () => [{ type: i1.NgControl, decorators: [{
|
|
57
|
+
type: Self
|
|
58
|
+
}] }, { type: i2.SubscribeService }, { type: i0.DestroyRef }] });
|
|
59
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoianNvbmZpbGUuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXNpcmlvL3NyYy9saWIvZGlyZWN0aXZlcy9qc29uZmlsZS5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFjLFNBQVMsRUFBVSxJQUFJLEVBQUUsTUFBTSxlQUFlLENBQUM7Ozs7QUFRcEUsTUFBTSxPQUFPLGlCQUFpQjtJQUdWO0lBQ1I7SUFDQTtJQUhWLFlBQ2tCLFNBQW9CLEVBQzVCLFNBQTJCLEVBQzNCLFVBQXNCO1FBRmQsY0FBUyxHQUFULFNBQVMsQ0FBVztRQUM1QixjQUFTLEdBQVQsU0FBUyxDQUFrQjtRQUMzQixlQUFVLEdBQVYsVUFBVSxDQUFZO0lBQzVCLENBQUM7SUFFTCxRQUFRO1FBRU4sTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUM7UUFFdkMsSUFBSSxDQUFDLE9BQU87WUFDVixPQUFPO1FBRVQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsWUFBWSxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUUzSCxDQUFDO0lBRU8sVUFBVSxDQUFDLEtBQVU7UUFFM0IsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUMxQixPQUFPO1FBQ1QsQ0FBQztRQUVELEtBQUssTUFBTSxJQUFJLElBQUksS0FBSyxFQUFFLENBQUM7WUFFekIsSUFBSSxDQUFDLENBQUMsSUFBSSxZQUFZLElBQUksQ0FBQyxFQUFFLENBQUM7Z0JBQzVCLFNBQVM7WUFDWCxDQUFDO1lBRUQsSUFBSSxPQUFRLElBQVksQ0FBQyxNQUFNLEtBQUssVUFBVSxFQUFFLENBQUM7Z0JBQy9DLFNBQVM7WUFDWCxDQUFDO1lBRUQsTUFBTSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsUUFBUSxFQUFFO2dCQUNwQyxLQUFLO29CQUNILE9BQU87d0JBQ0wsR0FBRyxJQUFJO3dCQUNQLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSTt3QkFDZixJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUk7d0JBQ2YsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJO3dCQUNmLFlBQVksRUFBRSxJQUFJLENBQUMsWUFBWTtxQkFDaEMsQ0FBQztnQkFDSixDQUFDO2dCQUNELFFBQVEsRUFBRSxJQUFJO2dCQUNkLFlBQVksRUFBRSxJQUFJO2dCQUNsQixVQUFVLEVBQUUsS0FBSzthQUNsQixDQUFDLENBQUM7UUFDTCxDQUFDO0lBQ0gsQ0FBQzt3R0FsRFUsaUJBQWlCOzRGQUFqQixpQkFBaUI7OzRGQUFqQixpQkFBaUI7a0JBSjdCLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLHVCQUF1QjtvQkFDakMsVUFBVSxFQUFFLElBQUk7aUJBQ2pCOzswQkFJSSxJQUFJIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGVzdHJveVJlZiwgRGlyZWN0aXZlLCBPbkluaXQsIFNlbGYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgTmdDb250cm9sIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBTdWJzY3JpYmVTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvc3Vic2NyaWJlLnNlcnZpY2UnO1xyXG5cclxuQERpcmVjdGl2ZSh7XHJcbiAgc2VsZWN0b3I6ICduZ3gtc2lyaW8tZmlsZS11cGxvYWQnLFxyXG4gIHN0YW5kYWxvbmU6IHRydWVcclxufSlcclxuZXhwb3J0IGNsYXNzIEpzb25GaWxlRGlyZWN0aXZlIGltcGxlbWVudHMgT25Jbml0IHtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBAU2VsZigpIHByaXZhdGUgbmdDb250cm9sOiBOZ0NvbnRyb2wsXHJcbiAgICBwcml2YXRlIHN1YnNjcmliZTogU3Vic2NyaWJlU2VydmljZSxcclxuICAgIHByaXZhdGUgZGVzdHJveVJlZjogRGVzdHJveVJlZlxyXG4gICkgeyB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG5cclxuICAgIGNvbnN0IGNvbnRyb2wgPSB0aGlzLm5nQ29udHJvbC5jb250cm9sO1xyXG5cclxuICAgIGlmICghY29udHJvbClcclxuICAgICAgcmV0dXJuO1xyXG5cclxuICAgIHRoaXMuc3Vic2NyaWJlLnN1YnNjcmliZUNoYW5nZXMoY29udHJvbC52YWx1ZUNoYW5nZXMsIGNvbnRyb2wsIHVuZGVmaW5lZCwgdGhpcy5kZXN0cm95UmVmLCAoXywgbikgPT4gdGhpcy5kZWZpbmVKc29uKG4pKTtcclxuXHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGRlZmluZUpzb24odmFsdWU6IGFueSk6IHZvaWQge1xyXG5cclxuICAgIGlmICghQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGZvciAoY29uc3QgaXRlbSBvZiB2YWx1ZSkge1xyXG5cclxuICAgICAgaWYgKCEoaXRlbSBpbnN0YW5jZW9mIEZpbGUpKSB7XHJcbiAgICAgICAgY29udGludWU7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICh0eXBlb2YgKGl0ZW0gYXMgYW55KS50b0pTT04gPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICBjb250aW51ZTtcclxuICAgICAgfVxyXG5cclxuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGl0ZW0sICd0b0pTT04nLCB7XHJcbiAgICAgICAgdmFsdWUoKSB7XHJcbiAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAuLi50aGlzLFxyXG4gICAgICAgICAgICBuYW1lOiB0aGlzLm5hbWUsXHJcbiAgICAgICAgICAgIHNpemU6IHRoaXMuc2l6ZSxcclxuICAgICAgICAgICAgdHlwZTogdGhpcy50eXBlLFxyXG4gICAgICAgICAgICBsYXN0TW9kaWZpZWQ6IHRoaXMubGFzdE1vZGlmaWVkXHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgd3JpdGFibGU6IHRydWUsXHJcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxyXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlXHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuICAgIFxyXG59XHJcbiJdfQ==
|