@valtimo/components 4.15.2-next-main.14 → 4.15.3-next-main.15
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/bundles/valtimo-components.umd.js +4795 -4793
- package/bundles/valtimo-components.umd.js.map +1 -1
- package/bundles/valtimo-components.umd.min.js +1 -1
- package/bundles/valtimo-components.umd.min.js.map +1 -1
- package/esm2015/lib/alert/alert.component.js +141 -141
- package/esm2015/lib/alert/alert.module.js +27 -27
- package/esm2015/lib/alert/alert.service.js +80 -80
- package/esm2015/lib/bpmn-js-diagram/bpmn-js-diagram.component.js +159 -159
- package/esm2015/lib/bpmn-js-diagram/bpmn-js-diagram.module.js +29 -29
- package/esm2015/lib/breadcrumb-navigation/breadcrumb-navigation.component.js +92 -92
- package/esm2015/lib/breadcrumb-navigation/breadcrumb-navigation.module.js +33 -33
- package/esm2015/lib/camunda/form/camunda-form.components.js +36 -36
- package/esm2015/lib/camunda/form/camunda-form.module.js +37 -37
- package/esm2015/lib/camunda/form/custom/camunda-custom-form.component.js +41 -41
- package/esm2015/lib/camunda/form/custom/camunda-custom-form.module.js +33 -33
- package/esm2015/lib/camunda/form/generated/camunda-generated-form.component.js +68 -68
- package/esm2015/lib/camunda/form/generated/camunda-generated-form.module.js +62 -62
- package/esm2015/lib/camunda/form/generated/formfield/boolean/camunda-boolean-formfield.component.js +27 -27
- package/esm2015/lib/camunda/form/generated/formfield/camunda-formfield-generator.directive.js +63 -63
- package/esm2015/lib/camunda/form/generated/formfield/camunda-formfield.service.js +66 -66
- package/esm2015/lib/camunda/form/generated/formfield/choicefield/camunda-choicefield-formfield.component.js +37 -37
- package/esm2015/lib/camunda/form/generated/formfield/date/camunda-date-formfield.component.js +65 -65
- package/esm2015/lib/camunda/form/generated/formfield/enum/camunda-enum-formfield.component.js +30 -30
- package/esm2015/lib/camunda/form/generated/formfield/formfield.model.js +15 -15
- package/esm2015/lib/camunda/form/generated/formfield/long/camunda-long-formfield.component.js +27 -27
- package/esm2015/lib/camunda/form/generated/formfield/string/camunda-string-formfield.component.js +27 -27
- package/esm2015/lib/camunda/form/generated/formfield/textarea/camunda-textarea-formfield.component.js +27 -27
- package/esm2015/lib/camunda/form/generated/formfield/validation/camunda-formfield-validation.component.js +35 -35
- package/esm2015/lib/camunda/form/generated/formfield/validation/date.validators.js +59 -59
- package/esm2015/lib/card/card.component.js +36 -36
- package/esm2015/lib/card/card.module.js +29 -29
- package/esm2015/lib/components.module.js +21 -21
- package/esm2015/lib/data-list/data-list.component.js +33 -33
- package/esm2015/lib/data-list/data-list.module.js +29 -29
- package/esm2015/lib/dropzone/dropzone.component.js +142 -142
- package/esm2015/lib/dropzone/dropzone.module.js +31 -31
- package/esm2015/lib/field-auto-focus/field-auto-focus.directive.js +34 -34
- package/esm2015/lib/field-auto-focus/field-auto-focus.module.js +31 -31
- package/esm2015/lib/file-size/file-size.module.js +29 -29
- package/esm2015/lib/file-size/file-size.pipe.js +44 -44
- package/esm2015/lib/filter-sidebar/filter-sidebar.component.js +45 -45
- package/esm2015/lib/filter-sidebar/filter-sidebar.module.js +29 -29
- package/esm2015/lib/form-io/form-io-builder.component.js +38 -38
- package/esm2015/lib/form-io/form-io-uploader/form-io-uploader-edit-form.js +89 -89
- package/esm2015/lib/form-io/form-io-uploader/form-io-uploader.component.js +71 -71
- package/esm2015/lib/form-io/form-io-uploader/form-io-uploader.formio.js +25 -25
- package/esm2015/lib/form-io/form-io.component.js +157 -157
- package/esm2015/lib/form-io/form-io.module.js +55 -55
- package/esm2015/lib/form-io/formio-config.js +21 -21
- package/esm2015/lib/form-io/services/form-io-dom.service.js +22 -22
- package/esm2015/lib/form-io/services/form-io-state.service.js +23 -23
- package/esm2015/lib/left-sidebar/left-sidebar.component.js +113 -113
- package/esm2015/lib/left-sidebar/left-sidebar.module.js +33 -33
- package/esm2015/lib/list/ListFilterPipe.directive.js +34 -34
- package/esm2015/lib/list/list.component.js +176 -176
- package/esm2015/lib/list/list.module.js +32 -32
- package/esm2015/lib/menu/menu-item-text.component.js +27 -27
- package/esm2015/lib/menu/menu-routing.module.js +28 -28
- package/esm2015/lib/menu/menu.component.js +64 -64
- package/esm2015/lib/menu/menu.init.js +33 -33
- package/esm2015/lib/menu/menu.module.js +38 -38
- package/esm2015/lib/menu/menu.service.js +126 -126
- package/esm2015/lib/menu/submenu-item-text.component.js +27 -27
- package/esm2015/lib/modal/modal.component.js +47 -47
- package/esm2015/lib/modal/modal.module.js +27 -27
- package/esm2015/lib/page-header/page-header.component.js +28 -28
- package/esm2015/lib/page-header/page-header.module.js +33 -33
- package/esm2015/lib/page-title/page-title.component.js +75 -75
- package/esm2015/lib/page-title/page-title.module.js +31 -31
- package/esm2015/lib/progress-bar/progress-bar.component.js +25 -25
- package/esm2015/lib/progress-bar/progress-bar.module.js +29 -29
- package/esm2015/lib/right-sidebar/right-sidebar.component.js +130 -130
- package/esm2015/lib/right-sidebar/right-sidebar.module.js +48 -48
- package/esm2015/lib/searchable-dropdown/searchable-dropdown.component.js +184 -184
- package/esm2015/lib/searchable-dropdown/searchable-dropdown.module.js +28 -28
- package/esm2015/lib/searchable-dropdown-select/searchable-dropdown-select.component.js +51 -51
- package/esm2015/lib/searchable-dropdown-select/searchable-dropdown-select.module.js +29 -29
- package/esm2015/lib/spinner/spinner.component.js +45 -43
- package/esm2015/lib/spinner/spinner.module.js +35 -35
- package/esm2015/lib/timeline/timeline.component.js +28 -28
- package/esm2015/lib/timeline/timeline.module.js +31 -31
- package/esm2015/lib/topbar/topbar.component.js +28 -28
- package/esm2015/lib/topbar/topbar.module.js +31 -31
- package/esm2015/lib/uploader/uploader-drag-drop.directive.js +48 -48
- package/esm2015/lib/uploader/uploader.component.js +69 -69
- package/esm2015/lib/uploader/uploader.module.js +32 -32
- package/esm2015/lib/version/version.service.js +37 -37
- package/esm2015/lib/view-content/type-converters/booleanTypeConverter.js +28 -28
- package/esm2015/lib/view-content/type-converters/dateTypeConverter.js +29 -29
- package/esm2015/lib/view-content/type-converters/enumTypeConverter.js +23 -23
- package/esm2015/lib/view-content/type-converters/relatedFilesTypeConverter.js +23 -23
- package/esm2015/lib/view-content/type-converters/stringReplaceUnderscoreTypeConverter.js +26 -26
- package/esm2015/lib/view-content/type-converters/stringTypeConverter.js +23 -23
- package/esm2015/lib/view-content/type-converters/type-converters.model.js +36 -36
- package/esm2015/lib/view-content/view-content.service.js +50 -50
- package/esm2015/lib/webcam/webcam.component.js +102 -102
- package/esm2015/lib/webcam/webcam.module.js +31 -31
- package/esm2015/lib/widget/widget.component.js +79 -79
- package/esm2015/lib/widget/widget.module.js +29 -29
- package/esm2015/public_api.js +83 -83
- package/esm2015/valtimo-components.js +26 -26
- package/fesm2015/valtimo-components.js +4303 -4301
- package/fesm2015/valtimo-components.js.map +1 -1
- package/lib/alert/alert.component.d.ts +21 -21
- package/lib/alert/alert.module.d.ts +2 -2
- package/lib/alert/alert.service.d.ts +21 -21
- package/lib/bpmn-js-diagram/bpmn-js-diagram.component.d.ts +27 -27
- package/lib/bpmn-js-diagram/bpmn-js-diagram.module.d.ts +2 -2
- package/lib/breadcrumb-navigation/breadcrumb-navigation.component.d.ts +14 -14
- package/lib/breadcrumb-navigation/breadcrumb-navigation.module.d.ts +2 -2
- package/lib/camunda/form/camunda-form.components.d.ts +9 -9
- package/lib/camunda/form/camunda-form.module.d.ts +2 -2
- package/lib/camunda/form/custom/camunda-custom-form.component.d.ts +8 -8
- package/lib/camunda/form/custom/camunda-custom-form.module.d.ts +2 -2
- package/lib/camunda/form/generated/camunda-generated-form.component.d.ts +19 -19
- package/lib/camunda/form/generated/camunda-generated-form.module.d.ts +2 -2
- package/lib/camunda/form/generated/formfield/boolean/camunda-boolean-formfield.component.d.ts +7 -7
- package/lib/camunda/form/generated/formfield/camunda-formfield-generator.directive.d.ts +13 -13
- package/lib/camunda/form/generated/formfield/camunda-formfield.service.d.ts +7 -7
- package/lib/camunda/form/generated/formfield/choicefield/camunda-choicefield-formfield.component.d.ts +12 -12
- package/lib/camunda/form/generated/formfield/date/camunda-date-formfield.component.d.ts +14 -14
- package/lib/camunda/form/generated/formfield/enum/camunda-enum-formfield.component.d.ts +10 -10
- package/lib/camunda/form/generated/formfield/formfield.model.d.ts +20 -20
- package/lib/camunda/form/generated/formfield/long/camunda-long-formfield.component.d.ts +7 -7
- package/lib/camunda/form/generated/formfield/string/camunda-string-formfield.component.d.ts +7 -7
- package/lib/camunda/form/generated/formfield/textarea/camunda-textarea-formfield.component.d.ts +7 -7
- package/lib/camunda/form/generated/formfield/validation/camunda-formfield-validation.component.d.ts +10 -10
- package/lib/camunda/form/generated/formfield/validation/date.validators.d.ts +3 -3
- package/lib/card/card.component.d.ts +16 -16
- package/lib/card/card.module.d.ts +2 -2
- package/lib/components.module.d.ts +2 -2
- package/lib/data-list/data-list.component.d.ts +7 -7
- package/lib/data-list/data-list.module.d.ts +2 -2
- package/lib/dropzone/dropzone.component.d.ts +38 -38
- package/lib/dropzone/dropzone.module.d.ts +2 -2
- package/lib/field-auto-focus/field-auto-focus.directive.d.ts +6 -6
- package/lib/field-auto-focus/field-auto-focus.module.d.ts +2 -2
- package/lib/file-size/file-size.module.d.ts +2 -2
- package/lib/file-size/file-size.pipe.d.ts +5 -5
- package/lib/filter-sidebar/filter-sidebar.component.d.ts +8 -8
- package/lib/filter-sidebar/filter-sidebar.module.d.ts +2 -2
- package/lib/form-io/form-io-builder.component.d.ts +8 -8
- package/lib/form-io/form-io-uploader/form-io-uploader-edit-form.d.ts +61 -61
- package/lib/form-io/form-io-uploader/form-io-uploader.component.d.ts +29 -29
- package/lib/form-io/form-io-uploader/form-io-uploader.formio.d.ts +3 -3
- package/lib/form-io/form-io.component.d.ts +44 -44
- package/lib/form-io/form-io.module.d.ts +2 -2
- package/lib/form-io/formio-config.d.ts +6 -6
- package/lib/form-io/services/form-io-dom.service.d.ts +6 -6
- package/lib/form-io/services/form-io-state.service.d.ts +10 -10
- package/lib/left-sidebar/left-sidebar.component.d.ts +34 -34
- package/lib/left-sidebar/left-sidebar.module.d.ts +2 -2
- package/lib/list/ListFilterPipe.directive.d.ts +4 -4
- package/lib/list/list.component.d.ts +43 -43
- package/lib/list/list.module.d.ts +2 -2
- package/lib/menu/menu-item-text.component.d.ts +4 -4
- package/lib/menu/menu-routing.module.d.ts +2 -2
- package/lib/menu/menu.component.d.ts +18 -18
- package/lib/menu/menu.init.d.ts +3 -3
- package/lib/menu/menu.module.d.ts +2 -2
- package/lib/menu/menu.service.d.ts +23 -23
- package/lib/menu/submenu-item-text.component.d.ts +4 -4
- package/lib/modal/modal.component.d.ts +12 -12
- package/lib/modal/modal.module.d.ts +2 -2
- package/lib/page-header/page-header.component.d.ts +5 -5
- package/lib/page-header/page-header.module.d.ts +2 -2
- package/lib/page-title/page-title.component.d.ts +19 -19
- package/lib/page-title/page-title.module.d.ts +2 -2
- package/lib/progress-bar/progress-bar.component.d.ts +2 -2
- package/lib/progress-bar/progress-bar.module.d.ts +2 -2
- package/lib/right-sidebar/right-sidebar.component.d.ts +34 -34
- package/lib/right-sidebar/right-sidebar.module.d.ts +2 -2
- package/lib/searchable-dropdown/searchable-dropdown.component.d.ts +39 -39
- package/lib/searchable-dropdown/searchable-dropdown.module.d.ts +2 -2
- package/lib/searchable-dropdown-select/searchable-dropdown-select.component.d.ts +19 -19
- package/lib/searchable-dropdown-select/searchable-dropdown-select.module.d.ts +2 -2
- package/lib/spinner/spinner.component.d.ts +10 -9
- package/lib/spinner/spinner.module.d.ts +2 -2
- package/lib/timeline/timeline.component.d.ts +4 -4
- package/lib/timeline/timeline.module.d.ts +2 -2
- package/lib/topbar/topbar.component.d.ts +3 -3
- package/lib/topbar/topbar.module.d.ts +2 -2
- package/lib/uploader/uploader-drag-drop.directive.d.ts +7 -7
- package/lib/uploader/uploader.component.d.ts +15 -15
- package/lib/uploader/uploader.module.d.ts +2 -2
- package/lib/version/version.service.d.ts +8 -8
- package/lib/view-content/type-converters/booleanTypeConverter.d.ts +5 -5
- package/lib/view-content/type-converters/dateTypeConverter.d.ts +5 -5
- package/lib/view-content/type-converters/enumTypeConverter.d.ts +5 -5
- package/lib/view-content/type-converters/relatedFilesTypeConverter.d.ts +5 -5
- package/lib/view-content/type-converters/stringReplaceUnderscoreTypeConverter.d.ts +6 -6
- package/lib/view-content/type-converters/stringTypeConverter.d.ts +5 -5
- package/lib/view-content/type-converters/type-converters.model.d.ts +5 -5
- package/lib/view-content/view-content.service.d.ts +8 -8
- package/lib/webcam/webcam.component.d.ts +20 -20
- package/lib/webcam/webcam.module.d.ts +2 -2
- package/lib/widget/widget.component.d.ts +28 -28
- package/lib/widget/widget.module.d.ts +2 -2
- package/package.json +1 -1
- package/public_api.d.ts +65 -65
- package/valtimo-components.d.ts +26 -26
- package/valtimo-components.metadata.json +1 -1
|
@@ -1,72 +1,72 @@
|
|
|
1
|
-
import { Component, EventEmitter, Input, Output } from '@angular/core';
|
|
2
|
-
import { BehaviorSubject } from 'rxjs';
|
|
3
|
-
import { FormIoStateService } from '../services/form-io-state.service';
|
|
4
|
-
import { take } from 'rxjs/operators';
|
|
5
|
-
import { FormIoDomService } from '../services/form-io-dom.service';
|
|
6
|
-
import { DownloadService, UploadProviderService } from '@valtimo/resource';
|
|
7
|
-
export class FormIoUploaderComponent {
|
|
8
|
-
constructor(uploadProviderService, stateService, domService, downloadService) {
|
|
9
|
-
this.uploadProviderService = uploadProviderService;
|
|
10
|
-
this.stateService = stateService;
|
|
11
|
-
this.domService = domService;
|
|
12
|
-
this.downloadService = downloadService;
|
|
13
|
-
this.valueChange = new EventEmitter();
|
|
14
|
-
this.uploading$ = new BehaviorSubject(false);
|
|
15
|
-
this._value = [];
|
|
16
|
-
}
|
|
17
|
-
get value() {
|
|
18
|
-
return this._value;
|
|
19
|
-
}
|
|
20
|
-
set value(value) {
|
|
21
|
-
if (Array.isArray(value)) {
|
|
22
|
-
this._value = value;
|
|
23
|
-
}
|
|
24
|
-
}
|
|
25
|
-
downloadFile(resourceFile) {
|
|
26
|
-
this.uploadProviderService.getResource(resourceFile.data.resourceId).subscribe((resource) => {
|
|
27
|
-
this.downloadService.downloadFile(resource.url, resource.resource.name);
|
|
28
|
-
});
|
|
29
|
-
}
|
|
30
|
-
fileSelected(file) {
|
|
31
|
-
this.domService.toggleSubmitButton(true);
|
|
32
|
-
this.uploading$.next(true);
|
|
33
|
-
this.stateService.documentDefinitionName$.pipe(take(1)).subscribe((name) => {
|
|
34
|
-
this.uploadProviderService.uploadFile(file, name).subscribe((result) => {
|
|
35
|
-
this.domService.toggleSubmitButton(false);
|
|
36
|
-
this.uploading$.next(false);
|
|
37
|
-
this._value.push(result);
|
|
38
|
-
this.valueChange.emit(this._value);
|
|
39
|
-
});
|
|
40
|
-
});
|
|
41
|
-
}
|
|
42
|
-
deleteFile(resourceId) {
|
|
43
|
-
this.domService.toggleSubmitButton(true);
|
|
44
|
-
this._value = this._value.filter((file) => { var _a; return (file === null || file === void 0 ? void 0 : file.data) ? ((_a = file === null || file === void 0 ? void 0 : file.data) === null || _a === void 0 ? void 0 : _a.resourceId) !== resourceId : true; });
|
|
45
|
-
this.valueChange.emit(this._value);
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
|
-
FormIoUploaderComponent.decorators = [
|
|
49
|
-
{ type: Component, args: [{
|
|
50
|
-
selector: 'valtimo-formio-uploader',
|
|
51
|
-
template: "<valtimo-dropzone\n (fileSelected)=\"fileSelected($event)\"\n [acceptedFiles]=\"null\"\n [disabled]=\"disabled\"\n [hideFilePreview]=\"true\"\n [hideTitle]=\"hideTitle\"\n [maxFileSize]=\"maxFileSize\"\n [showMaxFileSize]=\"!hideMaxFileSize\"\n [subtitle]=\"subtitle\"\n [title]=\"title\"\n [camera]=\"camera\"\n [uploading]=\"uploading$ | async\"\n></valtimo-dropzone>\n\n<div class=\"file-preview\" *ngFor=\"let resource of _value\">\n <div class=\"file-preview-name\">\n <a href=\"#\" (click)=\"downloadFile(resource)\">\n {{resource.originalName}}\n </a>\n </div>\n <div class=\"file-preview-size\">\n <span>\n {{resource.size | filesize}}\n </span>\n </div>\n <div class=\"file-preview-delete\" *ngIf=\"!disabled\">\n <a (click)=\"deleteFile(resource.data.resourceId)\">\n <i class=\"icon fa fa-trash\"></i>\n </a>\n </div>\n</div>\n",
|
|
52
|
-
styles: [".progress-bar-container{padding:15px 20px}::ng-deep .formio-component-valtimo-file .btn-secondary,::ng-deep .formio-component-valtimo-file .formio-button-add-another{display:none}::ng-deep .formio-component-valtimo-file td{border:none;padding:0!important}::ng-deep .formio-component-valtimo-file .table{border:none;border-collapse:collapse;margin:10px 0}.dropzone-container{margin-bottom:12px}.file-preview{border:1px solid #dee2e6;display:flex;margin-top:-1px}.file-preview div{padding:12px 10px}.file-preview .file-preview-name{width:65%}.file-preview .file-preview-size{width:35%}.file-preview .icon{color:#a1a1a1;cursor:pointer;font-size:1.3846rem;line-height:18px}.file-preview .icon:hover{color:grey}"]
|
|
53
|
-
},] }
|
|
54
|
-
];
|
|
55
|
-
FormIoUploaderComponent.ctorParameters = () => [
|
|
56
|
-
{ type: UploadProviderService },
|
|
57
|
-
{ type: FormIoStateService },
|
|
58
|
-
{ type: FormIoDomService },
|
|
59
|
-
{ type: DownloadService }
|
|
60
|
-
];
|
|
61
|
-
FormIoUploaderComponent.propDecorators = {
|
|
62
|
-
disabled: [{ type: Input }],
|
|
63
|
-
title: [{ type: Input }],
|
|
64
|
-
hideTitle: [{ type: Input }],
|
|
65
|
-
subtitle: [{ type: Input }],
|
|
66
|
-
maxFileSize: [{ type: Input }],
|
|
67
|
-
hideMaxFileSize: [{ type: Input }],
|
|
68
|
-
camera: [{ type: Input }],
|
|
69
|
-
valueChange: [{ type: Output }],
|
|
70
|
-
value: [{ type: Input }]
|
|
71
|
-
};
|
|
1
|
+
import { Component, EventEmitter, Input, Output } from '@angular/core';
|
|
2
|
+
import { BehaviorSubject } from 'rxjs';
|
|
3
|
+
import { FormIoStateService } from '../services/form-io-state.service';
|
|
4
|
+
import { take } from 'rxjs/operators';
|
|
5
|
+
import { FormIoDomService } from '../services/form-io-dom.service';
|
|
6
|
+
import { DownloadService, UploadProviderService } from '@valtimo/resource';
|
|
7
|
+
export class FormIoUploaderComponent {
|
|
8
|
+
constructor(uploadProviderService, stateService, domService, downloadService) {
|
|
9
|
+
this.uploadProviderService = uploadProviderService;
|
|
10
|
+
this.stateService = stateService;
|
|
11
|
+
this.domService = domService;
|
|
12
|
+
this.downloadService = downloadService;
|
|
13
|
+
this.valueChange = new EventEmitter();
|
|
14
|
+
this.uploading$ = new BehaviorSubject(false);
|
|
15
|
+
this._value = [];
|
|
16
|
+
}
|
|
17
|
+
get value() {
|
|
18
|
+
return this._value;
|
|
19
|
+
}
|
|
20
|
+
set value(value) {
|
|
21
|
+
if (Array.isArray(value)) {
|
|
22
|
+
this._value = value;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
downloadFile(resourceFile) {
|
|
26
|
+
this.uploadProviderService.getResource(resourceFile.data.resourceId).subscribe((resource) => {
|
|
27
|
+
this.downloadService.downloadFile(resource.url, resource.resource.name);
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
fileSelected(file) {
|
|
31
|
+
this.domService.toggleSubmitButton(true);
|
|
32
|
+
this.uploading$.next(true);
|
|
33
|
+
this.stateService.documentDefinitionName$.pipe(take(1)).subscribe((name) => {
|
|
34
|
+
this.uploadProviderService.uploadFile(file, name).subscribe((result) => {
|
|
35
|
+
this.domService.toggleSubmitButton(false);
|
|
36
|
+
this.uploading$.next(false);
|
|
37
|
+
this._value.push(result);
|
|
38
|
+
this.valueChange.emit(this._value);
|
|
39
|
+
});
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
deleteFile(resourceId) {
|
|
43
|
+
this.domService.toggleSubmitButton(true);
|
|
44
|
+
this._value = this._value.filter((file) => { var _a; return (file === null || file === void 0 ? void 0 : file.data) ? ((_a = file === null || file === void 0 ? void 0 : file.data) === null || _a === void 0 ? void 0 : _a.resourceId) !== resourceId : true; });
|
|
45
|
+
this.valueChange.emit(this._value);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
FormIoUploaderComponent.decorators = [
|
|
49
|
+
{ type: Component, args: [{
|
|
50
|
+
selector: 'valtimo-formio-uploader',
|
|
51
|
+
template: "<valtimo-dropzone\n (fileSelected)=\"fileSelected($event)\"\n [acceptedFiles]=\"null\"\n [disabled]=\"disabled\"\n [hideFilePreview]=\"true\"\n [hideTitle]=\"hideTitle\"\n [maxFileSize]=\"maxFileSize\"\n [showMaxFileSize]=\"!hideMaxFileSize\"\n [subtitle]=\"subtitle\"\n [title]=\"title\"\n [camera]=\"camera\"\n [uploading]=\"uploading$ | async\"\n></valtimo-dropzone>\n\n<div class=\"file-preview\" *ngFor=\"let resource of _value\">\n <div class=\"file-preview-name\">\n <a href=\"#\" (click)=\"downloadFile(resource)\">\n {{resource.originalName}}\n </a>\n </div>\n <div class=\"file-preview-size\">\n <span>\n {{resource.size | filesize}}\n </span>\n </div>\n <div class=\"file-preview-delete\" *ngIf=\"!disabled\">\n <a (click)=\"deleteFile(resource.data.resourceId)\">\n <i class=\"icon fa fa-trash\"></i>\n </a>\n </div>\n</div>\n",
|
|
52
|
+
styles: [".progress-bar-container{padding:15px 20px}::ng-deep .formio-component-valtimo-file .btn-secondary,::ng-deep .formio-component-valtimo-file .formio-button-add-another{display:none}::ng-deep .formio-component-valtimo-file td{border:none;padding:0!important}::ng-deep .formio-component-valtimo-file .table{border:none;border-collapse:collapse;margin:10px 0}.dropzone-container{margin-bottom:12px}.file-preview{border:1px solid #dee2e6;display:flex;margin-top:-1px}.file-preview div{padding:12px 10px}.file-preview .file-preview-name{width:65%}.file-preview .file-preview-size{width:35%}.file-preview .icon{color:#a1a1a1;cursor:pointer;font-size:1.3846rem;line-height:18px}.file-preview .icon:hover{color:grey}"]
|
|
53
|
+
},] }
|
|
54
|
+
];
|
|
55
|
+
FormIoUploaderComponent.ctorParameters = () => [
|
|
56
|
+
{ type: UploadProviderService },
|
|
57
|
+
{ type: FormIoStateService },
|
|
58
|
+
{ type: FormIoDomService },
|
|
59
|
+
{ type: DownloadService }
|
|
60
|
+
];
|
|
61
|
+
FormIoUploaderComponent.propDecorators = {
|
|
62
|
+
disabled: [{ type: Input }],
|
|
63
|
+
title: [{ type: Input }],
|
|
64
|
+
hideTitle: [{ type: Input }],
|
|
65
|
+
subtitle: [{ type: Input }],
|
|
66
|
+
maxFileSize: [{ type: Input }],
|
|
67
|
+
hideMaxFileSize: [{ type: Input }],
|
|
68
|
+
camera: [{ type: Input }],
|
|
69
|
+
valueChange: [{ type: Output }],
|
|
70
|
+
value: [{ type: Input }]
|
|
71
|
+
};
|
|
72
72
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1pby11cGxvYWRlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92YWx0aW1vL2NvbXBvbmVudHMvc3JjL2xpYi9mb3JtLWlvL2Zvcm0taW8tdXBsb2FkZXIvZm9ybS1pby11cGxvYWRlci5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUVyRSxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBRXJDLE9BQU8sRUFBQyxrQkFBa0IsRUFBQyxNQUFNLG1DQUFtQyxDQUFDO0FBQ3JFLE9BQU8sRUFBQyxJQUFJLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUNwQyxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSxpQ0FBaUMsQ0FBQztBQUNqRSxPQUFPLEVBQUMsZUFBZSxFQUFFLHFCQUFxQixFQUFDLE1BQU0sbUJBQW1CLENBQUM7QUFPekUsTUFBTSxPQUFPLHVCQUF1QjtJQVlsQyxZQUNtQixxQkFBNEMsRUFDNUMsWUFBZ0MsRUFDaEMsVUFBNEIsRUFDNUIsZUFBZ0M7UUFIaEMsMEJBQXFCLEdBQXJCLHFCQUFxQixDQUF1QjtRQUM1QyxpQkFBWSxHQUFaLFlBQVksQ0FBb0I7UUFDaEMsZUFBVSxHQUFWLFVBQVUsQ0FBa0I7UUFDNUIsb0JBQWUsR0FBZixlQUFlLENBQWlCO1FBUnpDLGdCQUFXLEdBQUcsSUFBSSxZQUFZLEVBQXVCLENBQUM7UUFFdkQsZUFBVSxHQUFHLElBQUksZUFBZSxDQUFVLEtBQUssQ0FBQyxDQUFDO1FBVTFELFdBQU0sR0FBd0IsRUFBRSxDQUFDO0lBRmpDLENBQUM7SUFJRCxJQUFXLEtBQUs7UUFDZCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUM7SUFDckIsQ0FBQztJQUVELElBQ1csS0FBSyxDQUFDLEtBQTBCO1FBQ3pDLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUN4QixJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztTQUNyQjtJQUNILENBQUM7SUFFRCxZQUFZLENBQUMsWUFBMEI7UUFDckMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLFdBQVcsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLFFBQXFCLEVBQUUsRUFBRTtZQUN2RyxJQUFJLENBQUMsZUFBZSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsR0FBRyxFQUFFLFFBQVEsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDMUUsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsWUFBWSxDQUFDLElBQVU7UUFDckIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN6QyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMzQixJQUFJLENBQUMsWUFBWSxDQUFDLHVCQUF1QixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtZQUN6RSxJQUFJLENBQUMscUJBQXFCLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRTtnQkFDckUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDMUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQzVCLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO2dCQUN6QixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDckMsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxVQUFVLENBQUMsVUFBa0I7UUFDM0IsSUFBSSxDQUFDLFVBQVUsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN6QyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBa0IsRUFBRSxFQUFFLFdBQUMsT0FBQSxDQUFBLElBQUksYUFBSixJQUFJLHVCQUFKLElBQUksQ0FBRSxJQUFJLEVBQUMsQ0FBQyxDQUFDLE9BQUEsSUFBSSxhQUFKLElBQUksdUJBQUosSUFBSSxDQUFFLElBQUksMENBQUUsVUFBVSxNQUFLLFVBQVUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFBLEVBQUEsQ0FBQyxDQUFDO1FBQ3BILElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNyQyxDQUFDOzs7WUE3REYsU0FBUyxTQUFDO2dCQUNULFFBQVEsRUFBRSx5QkFBeUI7Z0JBQ25DLHM4QkFBZ0Q7O2FBRWpEOzs7WUFOd0IscUJBQXFCO1lBSHRDLGtCQUFrQjtZQUVsQixnQkFBZ0I7WUFDaEIsZUFBZTs7O3VCQVFwQixLQUFLO29CQUNMLEtBQUs7d0JBQ0wsS0FBSzt1QkFDTCxLQUFLOzBCQUNMLEtBQUs7OEJBQ0wsS0FBSztxQkFDTCxLQUFLOzBCQUNMLE1BQU07b0JBa0JOLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT3V0cHV0fSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7Rm9ybWlvQ3VzdG9tQ29tcG9uZW50fSBmcm9tICdhbmd1bGFyLWZvcm1pbyc7XG5pbXBvcnQge0JlaGF2aW9yU3ViamVjdH0gZnJvbSAncnhqcyc7XG5pbXBvcnQge1Jlc291cmNlRHRvLCBSZXNvdXJjZUZpbGV9IGZyb20gJ0B2YWx0aW1vL2NvbnRyYWN0JztcbmltcG9ydCB7Rm9ybUlvU3RhdGVTZXJ2aWNlfSBmcm9tICcuLi9zZXJ2aWNlcy9mb3JtLWlvLXN0YXRlLnNlcnZpY2UnO1xuaW1wb3J0IHt0YWtlfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQge0Zvcm1Jb0RvbVNlcnZpY2V9IGZyb20gJy4uL3NlcnZpY2VzL2Zvcm0taW8tZG9tLnNlcnZpY2UnO1xuaW1wb3J0IHtEb3dubG9hZFNlcnZpY2UsIFVwbG9hZFByb3ZpZGVyU2VydmljZX0gZnJvbSAnQHZhbHRpbW8vcmVzb3VyY2UnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd2YWx0aW1vLWZvcm1pby11cGxvYWRlcicsXG4gIHRlbXBsYXRlVXJsOiAnLi9mb3JtLWlvLXVwbG9hZGVyLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vZm9ybS1pby11cGxvYWRlci5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIEZvcm1Jb1VwbG9hZGVyQ29tcG9uZW50IGltcGxlbWVudHMgRm9ybWlvQ3VzdG9tQ29tcG9uZW50PEFycmF5PFJlc291cmNlRmlsZT4+IHtcbiAgQElucHV0KCkgZGlzYWJsZWQ6IGJvb2xlYW47XG4gIEBJbnB1dCgpIHRpdGxlOiBzdHJpbmc7XG4gIEBJbnB1dCgpIGhpZGVUaXRsZTogYm9vbGVhbjtcbiAgQElucHV0KCkgc3VidGl0bGU6IHN0cmluZztcbiAgQElucHV0KCkgbWF4RmlsZVNpemU6IG51bWJlcjtcbiAgQElucHV0KCkgaGlkZU1heEZpbGVTaXplOiBib29sZWFuO1xuICBASW5wdXQoKSBjYW1lcmE6IGJvb2xlYW47XG4gIEBPdXRwdXQoKSB2YWx1ZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8QXJyYXk8UmVzb3VyY2VGaWxlPj4oKTtcblxuICByZWFkb25seSB1cGxvYWRpbmckID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSB1cGxvYWRQcm92aWRlclNlcnZpY2U6IFVwbG9hZFByb3ZpZGVyU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHN0YXRlU2VydmljZTogRm9ybUlvU3RhdGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgZG9tU2VydmljZTogRm9ybUlvRG9tU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGRvd25sb2FkU2VydmljZTogRG93bmxvYWRTZXJ2aWNlLFxuICApIHtcbiAgfVxuXG4gIF92YWx1ZTogQXJyYXk8UmVzb3VyY2VGaWxlPiA9IFtdO1xuXG4gIHB1YmxpYyBnZXQgdmFsdWUoKTogQXJyYXk8UmVzb3VyY2VGaWxlPiB7XG4gICAgcmV0dXJuIHRoaXMuX3ZhbHVlO1xuICB9XG5cbiAgQElucHV0KClcbiAgcHVibGljIHNldCB2YWx1ZSh2YWx1ZTogQXJyYXk8UmVzb3VyY2VGaWxlPikge1xuICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgdGhpcy5fdmFsdWUgPSB2YWx1ZTtcbiAgICB9XG4gIH1cblxuICBkb3dubG9hZEZpbGUocmVzb3VyY2VGaWxlOiBSZXNvdXJjZUZpbGUpIHtcbiAgICB0aGlzLnVwbG9hZFByb3ZpZGVyU2VydmljZS5nZXRSZXNvdXJjZShyZXNvdXJjZUZpbGUuZGF0YS5yZXNvdXJjZUlkKS5zdWJzY3JpYmUoKHJlc291cmNlOiBSZXNvdXJjZUR0bykgPT4ge1xuICAgICAgdGhpcy5kb3dubG9hZFNlcnZpY2UuZG93bmxvYWRGaWxlKHJlc291cmNlLnVybCwgcmVzb3VyY2UucmVzb3VyY2UubmFtZSk7XG4gICAgfSk7XG4gIH1cblxuICBmaWxlU2VsZWN0ZWQoZmlsZTogRmlsZSkge1xuICAgIHRoaXMuZG9tU2VydmljZS50b2dnbGVTdWJtaXRCdXR0b24odHJ1ZSk7XG4gICAgdGhpcy51cGxvYWRpbmckLm5leHQodHJ1ZSk7XG4gICAgdGhpcy5zdGF0ZVNlcnZpY2UuZG9jdW1lbnREZWZpbml0aW9uTmFtZSQucGlwZSh0YWtlKDEpKS5zdWJzY3JpYmUoKG5hbWUpID0+IHtcbiAgICAgIHRoaXMudXBsb2FkUHJvdmlkZXJTZXJ2aWNlLnVwbG9hZEZpbGUoZmlsZSwgbmFtZSkuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcbiAgICAgICAgdGhpcy5kb21TZXJ2aWNlLnRvZ2dsZVN1Ym1pdEJ1dHRvbihmYWxzZSk7XG4gICAgICAgIHRoaXMudXBsb2FkaW5nJC5uZXh0KGZhbHNlKTtcbiAgICAgICAgdGhpcy5fdmFsdWUucHVzaChyZXN1bHQpO1xuICAgICAgICB0aGlzLnZhbHVlQ2hhbmdlLmVtaXQodGhpcy5fdmFsdWUpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBkZWxldGVGaWxlKHJlc291cmNlSWQ6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuZG9tU2VydmljZS50b2dnbGVTdWJtaXRCdXR0b24odHJ1ZSk7XG4gICAgdGhpcy5fdmFsdWUgPSB0aGlzLl92YWx1ZS5maWx0ZXIoKGZpbGU6IFJlc291cmNlRmlsZSkgPT4gZmlsZT8uZGF0YSA/IGZpbGU/LmRhdGE/LnJlc291cmNlSWQgIT09IHJlc291cmNlSWQgOiB0cnVlKTtcbiAgICB0aGlzLnZhbHVlQ2hhbmdlLmVtaXQodGhpcy5fdmFsdWUpO1xuICB9XG59XG4iXX0=
|
|
@@ -1,26 +1,26 @@
|
|
|
1
|
-
import { createCustomFormioComponent, registerCustomFormioComponentWithClass } from 'angular-formio';
|
|
2
|
-
import { FormIoUploaderComponent } from './form-io-uploader.component';
|
|
3
|
-
import { formIoUploaderEditForm } from './form-io-uploader-edit-form';
|
|
4
|
-
export const customUploaderType = 'valtimo-file';
|
|
5
|
-
const COMPONENT_OPTIONS = {
|
|
6
|
-
type: customUploaderType,
|
|
7
|
-
selector: 'valtimo-form-io-uploader',
|
|
8
|
-
title: 'Valtimo File Upload',
|
|
9
|
-
group: 'basic',
|
|
10
|
-
icon: 'upload',
|
|
11
|
-
// set empty value to force formio to accept arrays as valid input value for this field type
|
|
12
|
-
emptyValue: [],
|
|
13
|
-
editForm: formIoUploaderEditForm,
|
|
14
|
-
};
|
|
15
|
-
export function registerFormioUploadComponent(injector) {
|
|
16
|
-
const originalUploadComponent = createCustomFormioComponent(COMPONENT_OPTIONS);
|
|
17
|
-
// override setValue function to allow for setting an array value
|
|
18
|
-
class UploaderComponent extends originalUploadComponent {
|
|
19
|
-
setValue(value) {
|
|
20
|
-
this._customAngularElement.value = value;
|
|
21
|
-
return true;
|
|
22
|
-
}
|
|
23
|
-
}
|
|
24
|
-
registerCustomFormioComponentWithClass(COMPONENT_OPTIONS, FormIoUploaderComponent, UploaderComponent, injector);
|
|
25
|
-
}
|
|
1
|
+
import { createCustomFormioComponent, registerCustomFormioComponentWithClass } from 'angular-formio';
|
|
2
|
+
import { FormIoUploaderComponent } from './form-io-uploader.component';
|
|
3
|
+
import { formIoUploaderEditForm } from './form-io-uploader-edit-form';
|
|
4
|
+
export const customUploaderType = 'valtimo-file';
|
|
5
|
+
const COMPONENT_OPTIONS = {
|
|
6
|
+
type: customUploaderType,
|
|
7
|
+
selector: 'valtimo-form-io-uploader',
|
|
8
|
+
title: 'Valtimo File Upload',
|
|
9
|
+
group: 'basic',
|
|
10
|
+
icon: 'upload',
|
|
11
|
+
// set empty value to force formio to accept arrays as valid input value for this field type
|
|
12
|
+
emptyValue: [],
|
|
13
|
+
editForm: formIoUploaderEditForm,
|
|
14
|
+
};
|
|
15
|
+
export function registerFormioUploadComponent(injector) {
|
|
16
|
+
const originalUploadComponent = createCustomFormioComponent(COMPONENT_OPTIONS);
|
|
17
|
+
// override setValue function to allow for setting an array value
|
|
18
|
+
class UploaderComponent extends originalUploadComponent {
|
|
19
|
+
setValue(value) {
|
|
20
|
+
this._customAngularElement.value = value;
|
|
21
|
+
return true;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
registerCustomFormioComponentWithClass(COMPONENT_OPTIONS, FormIoUploaderComponent, UploaderComponent, injector);
|
|
25
|
+
}
|
|
26
26
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1pby11cGxvYWRlci5mb3JtaW8uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92YWx0aW1vL2NvbXBvbmVudHMvc3JjL2xpYi9mb3JtLWlvL2Zvcm0taW8tdXBsb2FkZXIvZm9ybS1pby11cGxvYWRlci5mb3JtaW8udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFDLDJCQUEyQixFQUE2QixzQ0FBc0MsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQzlILE9BQU8sRUFBQyx1QkFBdUIsRUFBQyxNQUFNLDhCQUE4QixDQUFDO0FBQ3JFLE9BQU8sRUFBQyxzQkFBc0IsRUFBQyxNQUFNLDhCQUE4QixDQUFDO0FBRXBFLE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFHLGNBQWMsQ0FBQztBQUVqRCxNQUFNLGlCQUFpQixHQUE4QjtJQUNuRCxJQUFJLEVBQUUsa0JBQWtCO0lBQ3hCLFFBQVEsRUFBRSwwQkFBMEI7SUFDcEMsS0FBSyxFQUFFLHFCQUFxQjtJQUM1QixLQUFLLEVBQUUsT0FBTztJQUNkLElBQUksRUFBRSxRQUFRO0lBQ2QsNEZBQTRGO0lBQzVGLFVBQVUsRUFBRSxFQUFFO0lBQ2QsUUFBUSxFQUFFLHNCQUFzQjtDQUNqQyxDQUFDO0FBRUYsTUFBTSxVQUFVLDZCQUE2QixDQUFDLFFBQWtCO0lBRTlELE1BQU0sdUJBQXVCLEdBQUcsMkJBQTJCLENBQUMsaUJBQWlCLENBQUMsQ0FBQztJQUUvRSxpRUFBaUU7SUFDakUsTUFBTSxpQkFBa0IsU0FBUSx1QkFBdUI7UUFDckQsUUFBUSxDQUFFLEtBQUs7WUFDYixJQUFJLENBQUMscUJBQXFCLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztZQUN6QyxPQUFPLElBQUksQ0FBQztRQUNkLENBQUM7S0FDRjtJQUNELHNDQUFzQyxDQUNwQyxpQkFBaUIsRUFDakIsdUJBQXVCLEVBQ3ZCLGlCQUFpQixFQUNqQixRQUFRLENBQ1QsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0luamVjdG9yfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7Y3JlYXRlQ3VzdG9tRm9ybWlvQ29tcG9uZW50LCBGb3JtaW9DdXN0b21Db21wb25lbnRJbmZvLCByZWdpc3RlckN1c3RvbUZvcm1pb0NvbXBvbmVudFdpdGhDbGFzc30gZnJvbSAnYW5ndWxhci1mb3JtaW8nO1xuaW1wb3J0IHtGb3JtSW9VcGxvYWRlckNvbXBvbmVudH0gZnJvbSAnLi9mb3JtLWlvLXVwbG9hZGVyLmNvbXBvbmVudCc7XG5pbXBvcnQge2Zvcm1Jb1VwbG9hZGVyRWRpdEZvcm19IGZyb20gJy4vZm9ybS1pby11cGxvYWRlci1lZGl0LWZvcm0nO1xuXG5leHBvcnQgY29uc3QgY3VzdG9tVXBsb2FkZXJUeXBlID0gJ3ZhbHRpbW8tZmlsZSc7XG5cbmNvbnN0IENPTVBPTkVOVF9PUFRJT05TOiBGb3JtaW9DdXN0b21Db21wb25lbnRJbmZvID0ge1xuICB0eXBlOiBjdXN0b21VcGxvYWRlclR5cGUsXG4gIHNlbGVjdG9yOiAndmFsdGltby1mb3JtLWlvLXVwbG9hZGVyJyxcbiAgdGl0bGU6ICdWYWx0aW1vIEZpbGUgVXBsb2FkJyxcbiAgZ3JvdXA6ICdiYXNpYycsXG4gIGljb246ICd1cGxvYWQnLFxuICAvLyBzZXQgZW1wdHkgdmFsdWUgdG8gZm9yY2UgZm9ybWlvIHRvIGFjY2VwdCBhcnJheXMgYXMgdmFsaWQgaW5wdXQgdmFsdWUgZm9yIHRoaXMgZmllbGQgdHlwZVxuICBlbXB0eVZhbHVlOiBbXSxcbiAgZWRpdEZvcm06IGZvcm1Jb1VwbG9hZGVyRWRpdEZvcm0sXG59O1xuXG5leHBvcnQgZnVuY3Rpb24gcmVnaXN0ZXJGb3JtaW9VcGxvYWRDb21wb25lbnQoaW5qZWN0b3I6IEluamVjdG9yKSB7XG5cbiAgY29uc3Qgb3JpZ2luYWxVcGxvYWRDb21wb25lbnQgPSBjcmVhdGVDdXN0b21Gb3JtaW9Db21wb25lbnQoQ09NUE9ORU5UX09QVElPTlMpO1xuXG4gIC8vIG92ZXJyaWRlIHNldFZhbHVlIGZ1bmN0aW9uIHRvIGFsbG93IGZvciBzZXR0aW5nIGFuIGFycmF5IHZhbHVlXG4gIGNsYXNzIFVwbG9hZGVyQ29tcG9uZW50IGV4dGVuZHMgb3JpZ2luYWxVcGxvYWRDb21wb25lbnQge1xuICAgIHNldFZhbHVlICh2YWx1ZSk6IGJvb2xlYW4ge1xuICAgICAgdGhpcy5fY3VzdG9tQW5ndWxhckVsZW1lbnQudmFsdWUgPSB2YWx1ZTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuICByZWdpc3RlckN1c3RvbUZvcm1pb0NvbXBvbmVudFdpdGhDbGFzcyhcbiAgICBDT01QT05FTlRfT1BUSU9OUyxcbiAgICBGb3JtSW9VcGxvYWRlckNvbXBvbmVudCxcbiAgICBVcGxvYWRlckNvbXBvbmVudCxcbiAgICBpbmplY3RvclxuICApO1xufVxuIl19
|
|
@@ -1,158 +1,158 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* Copyright 2015-2020 Ritense BV, the Netherlands.
|
|
3
|
-
*
|
|
4
|
-
* Licensed under EUPL, Version 1.2 (the "License");
|
|
5
|
-
* you may not use this file except in compliance with the License.
|
|
6
|
-
* You may obtain a copy of the License at
|
|
7
|
-
*
|
|
8
|
-
* https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
|
|
9
|
-
*
|
|
10
|
-
* Unless required by applicable law or agreed to in writing, software
|
|
11
|
-
* distributed under the License is distributed on an "AS IS" basis,
|
|
12
|
-
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
-
* See the License for the specific language governing permissions and
|
|
14
|
-
* limitations under the License.
|
|
15
|
-
*/
|
|
16
|
-
import { Component, EventEmitter, Input, Output } from '@angular/core';
|
|
17
|
-
import { UserProviderService } from '@valtimo/security';
|
|
18
|
-
import { Formio } from 'angular-formio';
|
|
19
|
-
import jwt_decode from 'jwt-decode';
|
|
20
|
-
import { NGXLogger } from 'ngx-logger';
|
|
21
|
-
import { from, Subject, timer } from 'rxjs';
|
|
22
|
-
import { switchMap, take } from 'rxjs/operators';
|
|
23
|
-
import { FormIoStateService } from './services/form-io-state.service';
|
|
24
|
-
import { ActivatedRoute } from '@angular/router';
|
|
25
|
-
export class FormioComponent {
|
|
26
|
-
constructor(userProviderService, logger, stateService, route) {
|
|
27
|
-
this.userProviderService = userProviderService;
|
|
28
|
-
this.logger = logger;
|
|
29
|
-
this.stateService = stateService;
|
|
30
|
-
this.route = route;
|
|
31
|
-
this.submission = {};
|
|
32
|
-
this.submit = new EventEmitter();
|
|
33
|
-
this.change = new EventEmitter();
|
|
34
|
-
this.refreshForm = new EventEmitter();
|
|
35
|
-
this.errors = [];
|
|
36
|
-
}
|
|
37
|
-
ngOnInit() {
|
|
38
|
-
const documentDefinitionName = this.route.snapshot.paramMap.get('documentDefinitionName');
|
|
39
|
-
const formDefinition = this.form;
|
|
40
|
-
this.loadUserLanguageSetting();
|
|
41
|
-
this.formDefinition = formDefinition;
|
|
42
|
-
this.errors = [];
|
|
43
|
-
if (this.formHasLegacyUpload(formDefinition)) {
|
|
44
|
-
this.setInitialToken();
|
|
45
|
-
}
|
|
46
|
-
if (documentDefinitionName) {
|
|
47
|
-
this.stateService.setDocumentDefinitionName(documentDefinitionName);
|
|
48
|
-
}
|
|
49
|
-
this.subscribeFormRefresh();
|
|
50
|
-
}
|
|
51
|
-
ngOnChanges(changes) {
|
|
52
|
-
const currentForm = changes.form.currentValue;
|
|
53
|
-
this.formDefinition = currentForm;
|
|
54
|
-
this.loadUserLanguageSetting();
|
|
55
|
-
this.reloadForm();
|
|
56
|
-
if (this.formHasLegacyUpload(currentForm)) {
|
|
57
|
-
this.setInitialToken();
|
|
58
|
-
}
|
|
59
|
-
if (changes.formDefinitionRefresh$) {
|
|
60
|
-
this.unsubscribeFormRefresh();
|
|
61
|
-
this.subscribeFormRefresh();
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
ngOnDestroy() {
|
|
65
|
-
this.unsubscribeFormRefresh();
|
|
66
|
-
if (this.tokenRefreshTimerSubscription) {
|
|
67
|
-
this.tokenRefreshTimerSubscription.unsubscribe();
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
loadUserLanguageSetting() {
|
|
71
|
-
this.language = localStorage.getItem('langKey') || '';
|
|
72
|
-
}
|
|
73
|
-
reloadForm() {
|
|
74
|
-
this.refreshForm.emit({
|
|
75
|
-
form: this.formDefinition
|
|
76
|
-
});
|
|
77
|
-
}
|
|
78
|
-
showErrors(errors) {
|
|
79
|
-
this.errors = errors;
|
|
80
|
-
}
|
|
81
|
-
onSubmit(submission) {
|
|
82
|
-
this.errors = [];
|
|
83
|
-
this.submit.emit(submission);
|
|
84
|
-
}
|
|
85
|
-
formReady(form) {
|
|
86
|
-
this.reloadForm();
|
|
87
|
-
this.stateService.currentForm = form;
|
|
88
|
-
}
|
|
89
|
-
onChange(object) {
|
|
90
|
-
this.change.emit(object);
|
|
91
|
-
}
|
|
92
|
-
formHasLegacyUpload(formDefinition) {
|
|
93
|
-
const stringifiedFormDefinition = JSON.stringify(formDefinition);
|
|
94
|
-
const legacyUploadString = '"type":"file"';
|
|
95
|
-
return stringifiedFormDefinition.includes(legacyUploadString);
|
|
96
|
-
}
|
|
97
|
-
setInitialToken() {
|
|
98
|
-
this.userProviderService.getToken().then((token) => {
|
|
99
|
-
this.setToken(token);
|
|
100
|
-
});
|
|
101
|
-
}
|
|
102
|
-
setToken(token) {
|
|
103
|
-
Formio.setToken(token);
|
|
104
|
-
this.setTimerForTokenRefresh(token);
|
|
105
|
-
this.logger.debug('New token set for form.io.');
|
|
106
|
-
}
|
|
107
|
-
setTimerForTokenRefresh(token) {
|
|
108
|
-
const tokenExp = jwt_decode(token).exp * 1000;
|
|
109
|
-
const expiryTime = tokenExp - Date.now() - 1000;
|
|
110
|
-
this.tokenRefreshTimerSubscription = timer(expiryTime).subscribe(() => {
|
|
111
|
-
this.refreshToken();
|
|
112
|
-
});
|
|
113
|
-
this.logger.debug(`Timer for form.io token refresh set for: ${expiryTime}ms.`);
|
|
114
|
-
}
|
|
115
|
-
refreshToken() {
|
|
116
|
-
from(this.userProviderService.updateToken(-1))
|
|
117
|
-
.pipe(switchMap(() => this.userProviderService.getToken()), take(1))
|
|
118
|
-
.subscribe(token => {
|
|
119
|
-
this.setToken(token);
|
|
120
|
-
});
|
|
121
|
-
}
|
|
122
|
-
subscribeFormRefresh() {
|
|
123
|
-
if (this.formRefresh$) {
|
|
124
|
-
this.formRefreshSubscription = this.formRefresh$.subscribe((refreshValue) => {
|
|
125
|
-
if (refreshValue) {
|
|
126
|
-
this.refreshForm.emit(refreshValue);
|
|
127
|
-
}
|
|
128
|
-
});
|
|
129
|
-
}
|
|
130
|
-
}
|
|
131
|
-
unsubscribeFormRefresh() {
|
|
132
|
-
if (this.formRefreshSubscription) {
|
|
133
|
-
this.formRefreshSubscription.unsubscribe();
|
|
134
|
-
}
|
|
135
|
-
}
|
|
136
|
-
}
|
|
137
|
-
FormioComponent.decorators = [
|
|
138
|
-
{ type: Component, args: [{
|
|
139
|
-
selector: 'valtimo-form-io',
|
|
140
|
-
template: "<!--\n ~ Copyright 2015-2020 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<div>\n <div *ngIf=\"errors.length > 0\" class=\"alert alert-danger pt-5 pb-5 mb-2\">\n <ol>\n <li *ngFor=\"let error of errors\">\n {{error}}\n </li>\n </ol>\n </div>\n <formio [submission]=\"submission\"\n [form]=\"formDefinition\"\n [refresh]=\"refreshForm\"\n [options]=\"options\"\n [language]=\"language\"\n (submit)=\"onSubmit($event)\"\n (ready)=\"formReady($event)\"\n (change)=\"onChange($event)\"\n >\n </formio>\n</div>\n",
|
|
141
|
-
styles: [""]
|
|
142
|
-
},] }
|
|
143
|
-
];
|
|
144
|
-
FormioComponent.ctorParameters = () => [
|
|
145
|
-
{ type: UserProviderService },
|
|
146
|
-
{ type: NGXLogger },
|
|
147
|
-
{ type: FormIoStateService },
|
|
148
|
-
{ type: ActivatedRoute }
|
|
149
|
-
];
|
|
150
|
-
FormioComponent.propDecorators = {
|
|
151
|
-
form: [{ type: Input }],
|
|
152
|
-
options: [{ type: Input }],
|
|
153
|
-
submission: [{ type: Input }],
|
|
154
|
-
formRefresh$: [{ type: Input }],
|
|
155
|
-
submit: [{ type: Output }],
|
|
156
|
-
change: [{ type: Output }]
|
|
157
|
-
};
|
|
1
|
+
/*
|
|
2
|
+
* Copyright 2015-2020 Ritense BV, the Netherlands.
|
|
3
|
+
*
|
|
4
|
+
* Licensed under EUPL, Version 1.2 (the "License");
|
|
5
|
+
* you may not use this file except in compliance with the License.
|
|
6
|
+
* You may obtain a copy of the License at
|
|
7
|
+
*
|
|
8
|
+
* https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
|
|
9
|
+
*
|
|
10
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
* distributed under the License is distributed on an "AS IS" basis,
|
|
12
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
* See the License for the specific language governing permissions and
|
|
14
|
+
* limitations under the License.
|
|
15
|
+
*/
|
|
16
|
+
import { Component, EventEmitter, Input, Output } from '@angular/core';
|
|
17
|
+
import { UserProviderService } from '@valtimo/security';
|
|
18
|
+
import { Formio } from 'angular-formio';
|
|
19
|
+
import jwt_decode from 'jwt-decode';
|
|
20
|
+
import { NGXLogger } from 'ngx-logger';
|
|
21
|
+
import { from, Subject, timer } from 'rxjs';
|
|
22
|
+
import { switchMap, take } from 'rxjs/operators';
|
|
23
|
+
import { FormIoStateService } from './services/form-io-state.service';
|
|
24
|
+
import { ActivatedRoute } from '@angular/router';
|
|
25
|
+
export class FormioComponent {
|
|
26
|
+
constructor(userProviderService, logger, stateService, route) {
|
|
27
|
+
this.userProviderService = userProviderService;
|
|
28
|
+
this.logger = logger;
|
|
29
|
+
this.stateService = stateService;
|
|
30
|
+
this.route = route;
|
|
31
|
+
this.submission = {};
|
|
32
|
+
this.submit = new EventEmitter();
|
|
33
|
+
this.change = new EventEmitter();
|
|
34
|
+
this.refreshForm = new EventEmitter();
|
|
35
|
+
this.errors = [];
|
|
36
|
+
}
|
|
37
|
+
ngOnInit() {
|
|
38
|
+
const documentDefinitionName = this.route.snapshot.paramMap.get('documentDefinitionName');
|
|
39
|
+
const formDefinition = this.form;
|
|
40
|
+
this.loadUserLanguageSetting();
|
|
41
|
+
this.formDefinition = formDefinition;
|
|
42
|
+
this.errors = [];
|
|
43
|
+
if (this.formHasLegacyUpload(formDefinition)) {
|
|
44
|
+
this.setInitialToken();
|
|
45
|
+
}
|
|
46
|
+
if (documentDefinitionName) {
|
|
47
|
+
this.stateService.setDocumentDefinitionName(documentDefinitionName);
|
|
48
|
+
}
|
|
49
|
+
this.subscribeFormRefresh();
|
|
50
|
+
}
|
|
51
|
+
ngOnChanges(changes) {
|
|
52
|
+
const currentForm = changes.form.currentValue;
|
|
53
|
+
this.formDefinition = currentForm;
|
|
54
|
+
this.loadUserLanguageSetting();
|
|
55
|
+
this.reloadForm();
|
|
56
|
+
if (this.formHasLegacyUpload(currentForm)) {
|
|
57
|
+
this.setInitialToken();
|
|
58
|
+
}
|
|
59
|
+
if (changes.formDefinitionRefresh$) {
|
|
60
|
+
this.unsubscribeFormRefresh();
|
|
61
|
+
this.subscribeFormRefresh();
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
ngOnDestroy() {
|
|
65
|
+
this.unsubscribeFormRefresh();
|
|
66
|
+
if (this.tokenRefreshTimerSubscription) {
|
|
67
|
+
this.tokenRefreshTimerSubscription.unsubscribe();
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
loadUserLanguageSetting() {
|
|
71
|
+
this.language = localStorage.getItem('langKey') || '';
|
|
72
|
+
}
|
|
73
|
+
reloadForm() {
|
|
74
|
+
this.refreshForm.emit({
|
|
75
|
+
form: this.formDefinition
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
showErrors(errors) {
|
|
79
|
+
this.errors = errors;
|
|
80
|
+
}
|
|
81
|
+
onSubmit(submission) {
|
|
82
|
+
this.errors = [];
|
|
83
|
+
this.submit.emit(submission);
|
|
84
|
+
}
|
|
85
|
+
formReady(form) {
|
|
86
|
+
this.reloadForm();
|
|
87
|
+
this.stateService.currentForm = form;
|
|
88
|
+
}
|
|
89
|
+
onChange(object) {
|
|
90
|
+
this.change.emit(object);
|
|
91
|
+
}
|
|
92
|
+
formHasLegacyUpload(formDefinition) {
|
|
93
|
+
const stringifiedFormDefinition = JSON.stringify(formDefinition);
|
|
94
|
+
const legacyUploadString = '"type":"file"';
|
|
95
|
+
return stringifiedFormDefinition.includes(legacyUploadString);
|
|
96
|
+
}
|
|
97
|
+
setInitialToken() {
|
|
98
|
+
this.userProviderService.getToken().then((token) => {
|
|
99
|
+
this.setToken(token);
|
|
100
|
+
});
|
|
101
|
+
}
|
|
102
|
+
setToken(token) {
|
|
103
|
+
Formio.setToken(token);
|
|
104
|
+
this.setTimerForTokenRefresh(token);
|
|
105
|
+
this.logger.debug('New token set for form.io.');
|
|
106
|
+
}
|
|
107
|
+
setTimerForTokenRefresh(token) {
|
|
108
|
+
const tokenExp = jwt_decode(token).exp * 1000;
|
|
109
|
+
const expiryTime = tokenExp - Date.now() - 1000;
|
|
110
|
+
this.tokenRefreshTimerSubscription = timer(expiryTime).subscribe(() => {
|
|
111
|
+
this.refreshToken();
|
|
112
|
+
});
|
|
113
|
+
this.logger.debug(`Timer for form.io token refresh set for: ${expiryTime}ms.`);
|
|
114
|
+
}
|
|
115
|
+
refreshToken() {
|
|
116
|
+
from(this.userProviderService.updateToken(-1))
|
|
117
|
+
.pipe(switchMap(() => this.userProviderService.getToken()), take(1))
|
|
118
|
+
.subscribe(token => {
|
|
119
|
+
this.setToken(token);
|
|
120
|
+
});
|
|
121
|
+
}
|
|
122
|
+
subscribeFormRefresh() {
|
|
123
|
+
if (this.formRefresh$) {
|
|
124
|
+
this.formRefreshSubscription = this.formRefresh$.subscribe((refreshValue) => {
|
|
125
|
+
if (refreshValue) {
|
|
126
|
+
this.refreshForm.emit(refreshValue);
|
|
127
|
+
}
|
|
128
|
+
});
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
unsubscribeFormRefresh() {
|
|
132
|
+
if (this.formRefreshSubscription) {
|
|
133
|
+
this.formRefreshSubscription.unsubscribe();
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
FormioComponent.decorators = [
|
|
138
|
+
{ type: Component, args: [{
|
|
139
|
+
selector: 'valtimo-form-io',
|
|
140
|
+
template: "<!--\n ~ Copyright 2015-2020 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<div>\n <div *ngIf=\"errors.length > 0\" class=\"alert alert-danger pt-5 pb-5 mb-2\">\n <ol>\n <li *ngFor=\"let error of errors\">\n {{error}}\n </li>\n </ol>\n </div>\n <formio [submission]=\"submission\"\n [form]=\"formDefinition\"\n [refresh]=\"refreshForm\"\n [options]=\"options\"\n [language]=\"language\"\n (submit)=\"onSubmit($event)\"\n (ready)=\"formReady($event)\"\n (change)=\"onChange($event)\"\n >\n </formio>\n</div>\n",
|
|
141
|
+
styles: [""]
|
|
142
|
+
},] }
|
|
143
|
+
];
|
|
144
|
+
FormioComponent.ctorParameters = () => [
|
|
145
|
+
{ type: UserProviderService },
|
|
146
|
+
{ type: NGXLogger },
|
|
147
|
+
{ type: FormIoStateService },
|
|
148
|
+
{ type: ActivatedRoute }
|
|
149
|
+
];
|
|
150
|
+
FormioComponent.propDecorators = {
|
|
151
|
+
form: [{ type: Input }],
|
|
152
|
+
options: [{ type: Input }],
|
|
153
|
+
submission: [{ type: Input }],
|
|
154
|
+
formRefresh$: [{ type: Input }],
|
|
155
|
+
submit: [{ type: Output }],
|
|
156
|
+
change: [{ type: Output }]
|
|
157
|
+
};
|
|
158
158
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1pby5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92YWx0aW1vL2NvbXBvbmVudHMvc3JjL2xpYi9mb3JtLWlvL2Zvcm0taW8uY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7OztHQWNHO0FBRUgsT0FBTyxFQUFDLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFnQyxNQUFNLEVBQWdCLE1BQU0sZUFBZSxDQUFDO0FBRWxILE9BQU8sRUFBQyxtQkFBbUIsRUFBQyxNQUFNLG1CQUFtQixDQUFDO0FBQ3RELE9BQU8sRUFBQyxNQUFNLEVBQXVELE1BQU0sZ0JBQWdCLENBQUM7QUFFNUYsT0FBTyxVQUFVLE1BQU0sWUFBWSxDQUFDO0FBQ3BDLE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSxZQUFZLENBQUM7QUFDckMsT0FBTyxFQUFDLElBQUksRUFBRSxPQUFPLEVBQWdCLEtBQUssRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUN4RCxPQUFPLEVBQUMsU0FBUyxFQUFFLElBQUksRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQy9DLE9BQU8sRUFBQyxrQkFBa0IsRUFBQyxNQUFNLGtDQUFrQyxDQUFDO0FBQ3BFLE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQU8vQyxNQUFNLE9BQU8sZUFBZTtJQWUxQixZQUNVLG1CQUF3QyxFQUN4QyxNQUFpQixFQUNSLFlBQWdDLEVBQ2hDLEtBQXFCO1FBSDlCLHdCQUFtQixHQUFuQixtQkFBbUIsQ0FBcUI7UUFDeEMsV0FBTSxHQUFOLE1BQU0sQ0FBVztRQUNSLGlCQUFZLEdBQVosWUFBWSxDQUFvQjtRQUNoQyxVQUFLLEdBQUwsS0FBSyxDQUFnQjtRQWhCL0IsZUFBVSxHQUFpQixFQUFFLENBQUM7UUFFN0IsV0FBTSxHQUFzQixJQUFJLFlBQVksRUFBRSxDQUFDO1FBQy9DLFdBQU0s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QUU7WUFDakIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN2QixDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFTyxvQkFBb0I7UUFDMUIsSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFO1lBQ3JCLElBQUksQ0FBQyx1QkFBdUIsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxDQUFDLFlBQVksRUFBRSxFQUFFO2dCQUMxRSxJQUFJLFlBQVksRUFBRTtvQkFDaEIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7aUJBQ3JDO1lBQ0gsQ0FBQyxDQUFDLENBQUM7U0FDSjtJQUNILENBQUM7SUFFTyxzQkFBc0I7UUFDNUIsSUFBSSxJQUFJLENBQUMsdUJBQXVCLEVBQUU7WUFDaEMsSUFBSSxDQUFDLHVCQUF1QixDQUFDLFdBQVcsRUFBRSxDQUFDO1NBQzVDO0lBQ0gsQ0FBQzs7O1lBMUpGLFNBQVMsU0FBQztnQkFDVCxRQUFRLEVBQUUsaUJBQWlCO2dCQUMzQix3cUNBQXVDOzthQUV4Qzs7O1lBZE8sbUJBQW1CO1lBSW5CLFNBQVM7WUFHVCxrQkFBa0I7WUFDbEIsY0FBYzs7O21CQVFuQixLQUFLO3NCQUNMLEtBQUs7eUJBQ0wsS0FBSzsyQkFDTCxLQUFLO3FCQUNMLE1BQU07cUJBQ04sTUFBTSIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBDb3B5cmlnaHQgMjAxNS0yMDIwIFJpdGVuc2UgQlYsIHRoZSBOZXRoZXJsYW5kcy5cbiAqXG4gKiBMaWNlbnNlZCB1bmRlciBFVVBMLCBWZXJzaW9uIDEuMiAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHBzOi8vam9pbnVwLmVjLmV1cm9wYS5ldS9jb2xsZWN0aW9uL2V1cGwvZXVwbC10ZXh0LWV1cGwtMTJcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgYmFzaXMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbmltcG9ydCB7Q29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkNoYW5nZXMsIE9uRGVzdHJveSwgT25Jbml0LCBPdXRwdXQsIFNpbXBsZUNoYW5nZXN9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtGb3JtaW9TdWJtaXNzaW9uLCBWYWx0aW1vRm9ybWlvT3B0aW9uc30gZnJvbSAnQHZhbHRpbW8vY29udHJhY3QnO1xuaW1wb3J0IHtVc2VyUHJvdmlkZXJTZXJ2aWNlfSBmcm9tICdAdmFsdGltby9zZWN1cml0eSc7XG5pbXBvcnQge0Zvcm1pbywgRm9ybWlvQ29tcG9uZW50IGFzIEZvcm1Jb1NvdXJjZUNvbXBvbmVudCwgRm9ybWlvRm9ybX0gZnJvbSAnYW5ndWxhci1mb3JtaW8nO1xuaW1wb3J0IHtGb3JtaW9SZWZyZXNoVmFsdWV9IGZyb20gJ2FuZ3VsYXItZm9ybWlvL2Zvcm1pby5jb21tb24nO1xuaW1wb3J0IGp3dF9kZWNvZGUgZnJvbSAnand0LWRlY29kZSc7XG5pbXBvcnQge05HWExvZ2dlcn0gZnJvbSAnbmd4LWxvZ2dlcic7XG5pbXBvcnQge2Zyb20sIFN1YmplY3QsIFN1YnNjcmlwdGlvbiwgdGltZXJ9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtzd2l0Y2hNYXAsIHRha2V9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7Rm9ybUlvU3RhdGVTZXJ2aWNlfSBmcm9tICcuL3NlcnZpY2VzL2Zvcm0taW8tc3RhdGUuc2VydmljZSc7XG5pbXBvcnQge0FjdGl2YXRlZFJvdXRlfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd2YWx0aW1vLWZvcm0taW8nLFxuICB0ZW1wbGF0ZVVybDogJy4vZm9ybS1pby5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2Zvcm0taW8uY29tcG9uZW50LmNzcyddXG59KVxuZXhwb3J0IGNsYXNzIEZvcm1pb0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3kge1xuICBASW5wdXQoKSBmb3JtOiBhbnk7XG4gIEBJbnB1dCgpIG9wdGlvbnM6IFZhbHRpbW9Gb3JtaW9PcHRpb25zO1xuICBASW5wdXQoKSBzdWJtaXNzaW9uPzogb2JqZWN0IHwge30gPSB7fTtcbiAgQElucHV0KCkgZm9ybVJlZnJlc2gkITogU3ViamVjdDxGb3JtaW9SZWZyZXNoVmFsdWU+O1xuICBAT3V0cHV0KCkgc3VibWl0OiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIGNoYW5nZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIHJlZnJlc2hGb3JtOiBFdmVudEVtaXR0ZXI8Rm9ybWlvUmVmcmVzaFZhbHVlPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgZm9ybURlZmluaXRpb246IEZvcm1pb0Zvcm07XG4gIGxhbmd1YWdlOiBzdHJpbmc7XG4gIHB1YmxpYyBlcnJvcnM6IHN0cmluZ1tdID0gW107XG5cbiAgcHJpdmF0ZSB0b2tlblJlZnJlc2hUaW1lclN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuICBwcml2YXRlIGZvcm1SZWZyZXNoU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSB1c2VyUHJvdmlkZXJTZXJ2aWNlOiBVc2VyUHJvdmlkZXJTZXJ2aWNlLFxuICAgIHByaXZhdGUgbG9nZ2VyOiBOR1hMb2dnZXIsXG4gICAgcHJpdmF0ZSByZWFkb25seSBzdGF0ZVNlcnZpY2U6IEZvcm1Jb1N0YXRlU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZVxuICApIHtcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIGNvbnN0IGRvY3VtZW50RGVmaW5pdGlvbk5hbWUgPSB0aGlzLnJvdXRlLnNuYXBzaG90LnBhcmFtTWFwLmdldCgnZG9jdW1lbnREZWZpbml0aW9uTmFtZScpO1xuICAgIGNvbnN0IGZvcm1EZWZpbml0aW9uID0gdGhpcy5mb3JtO1xuXG4gICAgdGhpcy5sb2FkVXNlckxhbmd1YWdlU2V0dGluZygpO1xuICAgIHRoaXMuZm9ybURlZmluaXRpb24gPSBmb3JtRGVmaW5pdGlvbjtcbiAgICB0aGlzLmVycm9ycyA9IFtdO1xuXG4gICAgaWYgKHRoaXMuZm9ybUhhc0xlZ2FjeVVwbG9hZChmb3JtRGVmaW5pdGlvbikpIHtcbiAgICAgIHRoaXMuc2V0SW5pdGlhbFRva2VuKCk7XG4gICAgfVxuXG4gICAgaWYgKGRvY3VtZW50RGVmaW5pdGlvbk5hbWUpIHtcbiAgICAgIHRoaXMuc3RhdGVTZXJ2aWNlLnNldERvY3VtZW50RGVmaW5pdGlvbk5hbWUoZG9jdW1lbnREZWZpbml0aW9uTmFtZSk7XG4gICAgfVxuXG4gICAgdGhpcy5zdWJzY3JpYmVGb3JtUmVmcmVzaCgpO1xuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGNvbnN0IGN1cnJlbnRGb3JtID0gY2hhbmdlcy5mb3JtLmN1cnJlbnRWYWx1ZTtcbiAgICB0aGlzLmZvcm1EZWZpbml0aW9uID0gY3VycmVudEZvcm07XG4gICAgdGhpcy5sb2FkVXNlckxhbmd1YWdlU2V0dGluZygpO1xuICAgIHRoaXMucmVsb2FkRm9ybSgpO1xuXG4gICAgaWYgKHRoaXMuZm9ybUhhc0xlZ2FjeVVwbG9hZChjdXJyZW50Rm9ybSkpIHtcbiAgICAgIHRoaXMuc2V0SW5pdGlhbFRva2VuKCk7XG4gICAgfVxuXG4gICAgaWYgKGNoYW5nZXMuZm9ybURlZmluaXRpb25SZWZyZXNoJCkge1xuICAgICAgdGhpcy51bnN1YnNjcmliZUZvcm1SZWZyZXNoKCk7XG4gICAgICB0aGlzLnN1YnNjcmliZUZvcm1SZWZyZXNoKCk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy51bnN1YnNjcmliZUZvcm1SZWZyZXNoKCk7XG5cbiAgICBpZiAodGhpcy50b2tlblJlZnJlc2hUaW1lclN1YnNjcmlwdGlvbikge1xuICAgICAgdGhpcy50b2tlblJlZnJlc2hUaW1lclN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgfVxuXG4gIGxvYWRVc2VyTGFuZ3VhZ2VTZXR0aW5nKCk6IHZvaWQge1xuICAgIHRoaXMubGFuZ3VhZ2UgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnbGFuZ0tleScpIHx8ICcnO1xuICB9XG5cbiAgcmVsb2FkRm9ybSgpIHtcbiAgICB0aGlzLnJlZnJlc2hGb3JtLmVtaXQoe1xuICAgICAgZm9ybTogdGhpcy5mb3JtRGVmaW5pdGlvblxuICAgIH0pO1xuICB9XG5cbiAgc2hvd0Vycm9ycyhlcnJvcnM6IHN0cmluZ1tdKSB7XG4gICAgdGhpcy5lcnJvcnMgPSBlcnJvcnM7XG4gIH1cblxuICBvblN1Ym1pdChzdWJtaXNzaW9uOiBGb3JtaW9TdWJtaXNzaW9uKSB7XG4gICAgdGhpcy5lcnJvcnMgPSBbXTtcbiAgICB0aGlzLnN1Ym1pdC5lbWl0KHN1Ym1pc3Npb24pO1xuICB9XG5cbiAgZm9ybVJlYWR5KGZvcm06IEZvcm1Jb1NvdXJjZUNvbXBvbmVudCk6IHZvaWQge1xuICAgIHRoaXMucmVsb2FkRm9ybSgpO1xuICAgIHRoaXMuc3RhdGVTZXJ2aWNlLmN1cnJlbnRGb3JtID0gZm9ybTtcbiAgfVxuXG4gIG9uQ2hhbmdlKG9iamVjdDogYW55KTogdm9pZCB7XG4gICAgdGhpcy5jaGFuZ2UuZW1pdChvYmplY3QpO1xuICB9XG5cbiAgcHJpdmF0ZSBmb3JtSGFzTGVnYWN5VXBsb2FkKGZvcm1EZWZpbml0aW9uOiBhbnkpOiBib29sZWFuIHtcbiAgICBjb25zdCBzdHJpbmdpZmllZEZvcm1EZWZpbml0aW9uID0gSlNPTi5zdHJpbmdpZnkoZm9ybURlZmluaXRpb24pO1xuICAgIGNvbnN0IGxlZ2FjeVVwbG9hZFN0cmluZyA9ICdcInR5cGVcIjpcImZpbGVcIic7XG5cbiAgICByZXR1cm4gc3RyaW5naWZpZWRGb3JtRGVmaW5pdGlvbi5pbmNsdWRlcyhsZWdhY3lVcGxvYWRTdHJpbmcpO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRJbml0aWFsVG9rZW4oKTogdm9pZCB7XG4gICAgdGhpcy51c2VyUHJvdmlkZXJTZXJ2aWNlLmdldFRva2VuKCkudGhlbigodG9rZW46IHN0cmluZykgPT4ge1xuICAgICAgdGhpcy5zZXRUb2tlbih0b2tlbik7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHNldFRva2VuKHRva2VuOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBGb3JtaW8uc2V0VG9rZW4odG9rZW4pO1xuICAgIHRoaXMuc2V0VGltZXJGb3JUb2tlblJlZnJlc2godG9rZW4pO1xuXG4gICAgdGhpcy5sb2dnZXIuZGVidWcoJ05ldyB0b2tlbiBzZXQgZm9yIGZvcm0uaW8uJyk7XG4gIH1cblxuICBwcml2YXRlIHNldFRpbWVyRm9yVG9rZW5SZWZyZXNoKHRva2VuOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCB0b2tlbkV4cCA9IChqd3RfZGVjb2RlKHRva2VuKSBhcyBhbnkpLmV4cCAqIDEwMDA7XG4gICAgY29uc3QgZXhwaXJ5VGltZSA9IHRva2VuRXhwIC0gRGF0ZS5ub3coKSAtIDEwMDA7XG4gICAgdGhpcy50b2tlblJlZnJlc2hUaW1lclN1YnNjcmlwdGlvbiA9IHRpbWVyKGV4cGlyeVRpbWUpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICB0aGlzLnJlZnJlc2hUb2tlbigpO1xuICAgIH0pO1xuXG4gICAgdGhpcy5sb2dnZXIuZGVidWcoYFRpbWVyIGZvciBmb3JtLmlvIHRva2VuIHJlZnJlc2ggc2V0IGZvcjogJHtleHBpcnlUaW1lfW1zLmApO1xuICB9XG5cbiAgcHJpdmF0ZSByZWZyZXNoVG9rZW4oKTogdm9pZCB7XG4gICAgZnJvbSh0aGlzLnVzZXJQcm92aWRlclNlcnZpY2UudXBkYXRlVG9rZW4oLTEpKVxuICAgICAgLnBpcGUoXG4gICAgICAgIHN3aXRjaE1hcCgoKSA9PiB0aGlzLnVzZXJQcm92aWRlclNlcnZpY2UuZ2V0VG9rZW4oKSksXG4gICAgICAgIHRha2UoMSlcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUodG9rZW4gPT4ge1xuICAgICAgICB0aGlzLnNldFRva2VuKHRva2VuKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBzdWJzY3JpYmVGb3JtUmVmcmVzaCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5mb3JtUmVmcmVzaCQpIHtcbiAgICAgIHRoaXMuZm9ybVJlZnJlc2hTdWJzY3JpcHRpb24gPSB0aGlzLmZvcm1SZWZyZXNoJC5zdWJzY3JpYmUoKHJlZnJlc2hWYWx1ZSkgPT4ge1xuICAgICAgICBpZiAocmVmcmVzaFZhbHVlKSB7XG4gICAgICAgICAgdGhpcy5yZWZyZXNoRm9ybS5lbWl0KHJlZnJlc2hWYWx1ZSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgdW5zdWJzY3JpYmVGb3JtUmVmcmVzaCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5mb3JtUmVmcmVzaFN1YnNjcmlwdGlvbikge1xuICAgICAgdGhpcy5mb3JtUmVmcmVzaFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgfVxufVxuIl19
|