@ieeesa-npm/presentation 0.33.0 → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/assets/constants.json +13 -561
- package/esm2022/lib/components/autocomplete/autocomplete.component.mjs +28 -60
- package/esm2022/lib/components/checkbox/checkbox.component.mjs +16 -77
- package/esm2022/lib/components/date-picker/date-picker.component.mjs +10 -27
- package/esm2022/lib/components/date-picker-header/date-picker-header.component.mjs +11 -6
- package/esm2022/lib/components/dynamic-form/dynamic-form.component.mjs +14 -275
- package/esm2022/lib/components/form-error/form-error.component.mjs +6 -6
- package/esm2022/lib/components/input/input.component.mjs +13 -34
- package/esm2022/lib/components/notification/notification.component.mjs +6 -18
- package/esm2022/lib/components/radio/radio.component.mjs +6 -12
- package/esm2022/lib/components/search/search.component.mjs +10 -62
- package/esm2022/lib/components/select/select.component.mjs +9 -32
- package/esm2022/lib/components/text-area/text-area.component.mjs +7 -65
- package/esm2022/lib/date-formats.mjs +2 -2
- package/esm2022/lib/directives/dynamic-form-field/dynamic-form-field.directive.mjs +5 -206
- package/esm2022/lib/models/checkbox-option.model.mjs +2 -0
- package/esm2022/lib/models/confirmation-modal-data.model.mjs +2 -0
- package/esm2022/lib/models/date-picker.model.mjs +1 -1
- package/esm2022/lib/models/field-config.model.mjs +1 -1
- package/esm2022/lib/models/footer-config.model.mjs +1 -1
- package/esm2022/lib/models/form-control-types.model.mjs +9 -9
- package/esm2022/lib/models/header-config.model.mjs +1 -1
- package/esm2022/lib/models/navigation-menu.model.mjs +1 -1
- package/esm2022/lib/models/select-option.model.mjs +2 -0
- package/esm2022/lib/models/toggle-button.model.mjs +1 -1
- package/esm2022/lib/presentation.module.mjs +5 -5
- package/esm2022/lib/services/datepicker.service.mjs +4 -4
- package/esm2022/lib/services/form-utility.service.mjs +5 -17
- package/esm2022/public-api.mjs +17 -97
- package/fesm2022/ieeesa-npm-presentation.mjs +599 -7589
- package/fesm2022/ieeesa-npm-presentation.mjs.map +1 -1
- package/lib/components/autocomplete/autocomplete.component.d.ts +13 -27
- package/lib/components/checkbox/checkbox.component.d.ts +6 -32
- package/lib/components/date-picker/date-picker.component.d.ts +2 -11
- package/lib/components/dynamic-form/dynamic-form.component.d.ts +11 -157
- package/lib/components/input/input.component.d.ts +2 -9
- package/lib/components/notification/notification.component.d.ts +1 -4
- package/lib/components/radio/radio.component.d.ts +1 -3
- package/lib/components/search/search.component.d.ts +4 -13
- package/lib/components/select/select.component.d.ts +2 -5
- package/lib/components/text-area/text-area.component.d.ts +2 -24
- package/lib/directives/dynamic-form-field/dynamic-form-field.directive.d.ts +3 -36
- package/lib/models/checkbox-option.model.d.ts +6 -0
- package/lib/models/confirmation-modal-data.model.d.ts +5 -0
- package/lib/models/date-picker.model.d.ts +0 -3
- package/lib/models/field-config.model.d.ts +2 -54
- package/lib/models/footer-config.model.d.ts +0 -1
- package/lib/models/form-control-types.model.d.ts +1 -8
- package/lib/models/header-config.model.d.ts +0 -6
- package/lib/models/navigation-menu.model.d.ts +1 -1
- package/lib/models/select-option.model.d.ts +5 -0
- package/lib/models/toggle-button.model.d.ts +0 -4
- package/lib/services/form-utility.service.d.ts +1 -1
- package/package.json +2 -4
- package/public-api.d.ts +16 -95
- package/src/lib/assets/constants.json +13 -561
- package/esm2022/lib/components/accordion/accordion.component.mjs +0 -61
- package/esm2022/lib/components/add-form-group/add-form-group.component.mjs +0 -34
- package/esm2022/lib/components/breadcrumb/breadcrumb.component.mjs +0 -129
- package/esm2022/lib/components/card/card.component.mjs +0 -74
- package/esm2022/lib/components/chips/chips.component.mjs +0 -162
- package/esm2022/lib/components/color-picker/color-picker.component.mjs +0 -314
- package/esm2022/lib/components/data-table/data-table.component.mjs +0 -781
- package/esm2022/lib/components/export-format-popover/export-format-popover.component.mjs +0 -75
- package/esm2022/lib/components/export-success-dialog/export-success-dialog.component.mjs +0 -39
- package/esm2022/lib/components/file-download/file-download.component.mjs +0 -176
- package/esm2022/lib/components/file-upload/file-upload.component.mjs +0 -474
- package/esm2022/lib/components/filter/filter.component.mjs +0 -302
- package/esm2022/lib/components/filter-popover/filter-popover.component.mjs +0 -198
- package/esm2022/lib/components/footer/footer.component.mjs +0 -55
- package/esm2022/lib/components/form-support-text/form-support-text.component.mjs +0 -63
- package/esm2022/lib/components/header/header.component.mjs +0 -193
- package/esm2022/lib/components/icon-button/icon-button.component.mjs +0 -38
- package/esm2022/lib/components/image-preview/image-preview.component.mjs +0 -30
- package/esm2022/lib/components/inactive-tenant/inactive-tenant.component.mjs +0 -44
- package/esm2022/lib/components/legend/legend.component.mjs +0 -37
- package/esm2022/lib/components/list/list.component.mjs +0 -199
- package/esm2022/lib/components/loader/loader.component.mjs +0 -22
- package/esm2022/lib/components/menu/menu.component.mjs +0 -75
- package/esm2022/lib/components/modal/modal.component.mjs +0 -166
- package/esm2022/lib/components/modal-confirmation/modal-confirmation.component.mjs +0 -45
- package/esm2022/lib/components/modal-info/modal-info.component.mjs +0 -41
- package/esm2022/lib/components/multi-select-autocomplete/multi-select-autocomplete.component.mjs +0 -321
- package/esm2022/lib/components/navigation-menu/navigation-menu.component.mjs +0 -89
- package/esm2022/lib/components/policy-confirmation-dialog/policy-confirmation-dialog.component.mjs +0 -81
- package/esm2022/lib/components/rich-text-editor/rich-text-editor.component.mjs +0 -214
- package/esm2022/lib/components/slide-toggle/slide-toggle.component.mjs +0 -98
- package/esm2022/lib/components/stepper/stepper.component.mjs +0 -69
- package/esm2022/lib/components/tabs/tabs.component.mjs +0 -210
- package/esm2022/lib/components/tile/tile.component.mjs +0 -70
- package/esm2022/lib/components/time-picker/time-picker.component.mjs +0 -59
- package/esm2022/lib/components/toggle-button/toggle-button.component.mjs +0 -76
- package/esm2022/lib/components/welcome/welcome.component.mjs +0 -85
- package/esm2022/lib/directives/file-upload/file-upload.directive.mjs +0 -85
- package/esm2022/lib/directives/focus-invalid-form-field/focus-invalid-form-field.directive.mjs +0 -34
- package/esm2022/lib/directives/observe-dom-change/observe-dom-change.directive.mjs +0 -54
- package/esm2022/lib/directives/set-background/set-background.directive.mjs +0 -53
- package/esm2022/lib/directives/text-truncated/text-truncated.directive.mjs +0 -72
- package/esm2022/lib/models/accordion-info.model.mjs +0 -14
- package/esm2022/lib/models/align-browsed-files.model.mjs +0 -7
- package/esm2022/lib/models/allowed-file-types.model.mjs +0 -8
- package/esm2022/lib/models/app-config-info.model.mjs +0 -2
- package/esm2022/lib/models/breadcrumb.model.mjs +0 -2
- package/esm2022/lib/models/button-type.model.mjs +0 -7
- package/esm2022/lib/models/card-button.model.mjs +0 -2
- package/esm2022/lib/models/card-info.model.mjs +0 -2
- package/esm2022/lib/models/chip-option.model.mjs +0 -21
- package/esm2022/lib/models/color-format.model.mjs +0 -13
- package/esm2022/lib/models/custom-properties.model.mjs +0 -14
- package/esm2022/lib/models/download-file.model.mjs +0 -2
- package/esm2022/lib/models/event-emit-type.model.mjs +0 -2
- package/esm2022/lib/models/export-format-popover.model.mjs +0 -10
- package/esm2022/lib/models/export-success-dialog.model.mjs +0 -2
- package/esm2022/lib/models/file-download-config.model.mjs +0 -2
- package/esm2022/lib/models/file-info.model.mjs +0 -2
- package/esm2022/lib/models/file-upload-payload-model.mjs +0 -2
- package/esm2022/lib/models/file-upload-presigned-url-res.model.mjs +0 -2
- package/esm2022/lib/models/file-upload-response.model.mjs +0 -2
- package/esm2022/lib/models/file-upload-status.model.mjs +0 -2
- package/esm2022/lib/models/filter-popover.model.mjs +0 -2
- package/esm2022/lib/models/filters-options.model.mjs +0 -2
- package/esm2022/lib/models/inactive-tenant.model.mjs +0 -2
- package/esm2022/lib/models/input-field-type.model.mjs +0 -8
- package/esm2022/lib/models/legend.model.mjs +0 -2
- package/esm2022/lib/models/link-type.model.mjs +0 -6
- package/esm2022/lib/models/list-item.model.mjs +0 -2
- package/esm2022/lib/models/menu.model.mjs +0 -2
- package/esm2022/lib/models/paginator-config.model.mjs +0 -2
- package/esm2022/lib/models/policy-confirmation-dialog.model.mjs +0 -2
- package/esm2022/lib/models/profile-menu.model.mjs +0 -8
- package/esm2022/lib/models/select-opened-state.model.mjs +0 -2
- package/esm2022/lib/models/selected-date.model.mjs +0 -2
- package/esm2022/lib/models/selected-time.model.mjs +0 -2
- package/esm2022/lib/models/slide-toggle-options.model.mjs +0 -2
- package/esm2022/lib/models/tab.model.mjs +0 -2
- package/esm2022/lib/models/table-actions.model.mjs +0 -2
- package/esm2022/lib/models/table-column-menu-info.model.mjs +0 -2
- package/esm2022/lib/models/table-schema.model.mjs +0 -20
- package/esm2022/lib/models/tile.model.mjs +0 -2
- package/esm2022/lib/pipes/safe.pipe.mjs +0 -44
- package/esm2022/lib/services/break-point-observer.service.mjs +0 -36
- package/esm2022/lib/services/file-upload.service.mjs +0 -378
- package/lib/components/accordion/accordion.component.d.ts +0 -30
- package/lib/components/add-form-group/add-form-group.component.d.ts +0 -19
- package/lib/components/breadcrumb/breadcrumb.component.d.ts +0 -61
- package/lib/components/card/card.component.d.ts +0 -39
- package/lib/components/chips/chips.component.d.ts +0 -374
- package/lib/components/color-picker/color-picker.component.d.ts +0 -88
- package/lib/components/data-table/data-table.component.d.ts +0 -326
- package/lib/components/export-format-popover/export-format-popover.component.d.ts +0 -45
- package/lib/components/export-success-dialog/export-success-dialog.component.d.ts +0 -24
- package/lib/components/file-download/file-download.component.d.ts +0 -383
- package/lib/components/file-upload/file-upload.component.d.ts +0 -522
- package/lib/components/filter/filter.component.d.ts +0 -113
- package/lib/components/filter-popover/filter-popover.component.d.ts +0 -84
- package/lib/components/footer/footer.component.d.ts +0 -37
- package/lib/components/form-support-text/form-support-text.component.d.ts +0 -32
- package/lib/components/header/header.component.d.ts +0 -86
- package/lib/components/icon-button/icon-button.component.d.ts +0 -21
- package/lib/components/image-preview/image-preview.component.d.ts +0 -11
- package/lib/components/inactive-tenant/inactive-tenant.component.d.ts +0 -21
- package/lib/components/legend/legend.component.d.ts +0 -13
- package/lib/components/list/list.component.d.ts +0 -95
- package/lib/components/loader/loader.component.d.ts +0 -7
- package/lib/components/menu/menu.component.d.ts +0 -36
- package/lib/components/modal/modal.component.d.ts +0 -75
- package/lib/components/modal-confirmation/modal-confirmation.component.d.ts +0 -24
- package/lib/components/modal-info/modal-info.component.d.ts +0 -23
- package/lib/components/multi-select-autocomplete/multi-select-autocomplete.component.d.ts +0 -130
- package/lib/components/navigation-menu/navigation-menu.component.d.ts +0 -45
- package/lib/components/policy-confirmation-dialog/policy-confirmation-dialog.component.d.ts +0 -46
- package/lib/components/rich-text-editor/rich-text-editor.component.d.ts +0 -75
- package/lib/components/slide-toggle/slide-toggle.component.d.ts +0 -45
- package/lib/components/stepper/stepper.component.d.ts +0 -46
- package/lib/components/tabs/tabs.component.d.ts +0 -86
- package/lib/components/tile/tile.component.d.ts +0 -39
- package/lib/components/time-picker/time-picker.component.d.ts +0 -20
- package/lib/components/toggle-button/toggle-button.component.d.ts +0 -51
- package/lib/components/welcome/welcome.component.d.ts +0 -41
- package/lib/directives/file-upload/file-upload.directive.d.ts +0 -42
- package/lib/directives/focus-invalid-form-field/focus-invalid-form-field.directive.d.ts +0 -18
- package/lib/directives/observe-dom-change/observe-dom-change.directive.d.ts +0 -23
- package/lib/directives/set-background/set-background.directive.d.ts +0 -28
- package/lib/directives/text-truncated/text-truncated.directive.d.ts +0 -30
- package/lib/models/accordion-info.model.d.ts +0 -12
- package/lib/models/align-browsed-files.model.d.ts +0 -4
- package/lib/models/allowed-file-types.model.d.ts +0 -5
- package/lib/models/app-config-info.model.d.ts +0 -16
- package/lib/models/breadcrumb.model.d.ts +0 -6
- package/lib/models/button-type.model.d.ts +0 -4
- package/lib/models/card-button.model.d.ts +0 -6
- package/lib/models/card-info.model.d.ts +0 -8
- package/lib/models/chip-option.model.d.ts +0 -25
- package/lib/models/color-format.model.d.ts +0 -13
- package/lib/models/custom-properties.model.d.ts +0 -11
- package/lib/models/download-file.model.d.ts +0 -4
- package/lib/models/event-emit-type.model.d.ts +0 -5
- package/lib/models/export-format-popover.model.d.ts +0 -15
- package/lib/models/export-success-dialog.model.d.ts +0 -8
- package/lib/models/file-download-config.model.d.ts +0 -9
- package/lib/models/file-info.model.d.ts +0 -12
- package/lib/models/file-upload-payload-model.d.ts +0 -10
- package/lib/models/file-upload-presigned-url-res.model.d.ts +0 -35
- package/lib/models/file-upload-response.model.d.ts +0 -13
- package/lib/models/file-upload-status.model.d.ts +0 -8
- package/lib/models/filter-popover.model.d.ts +0 -24
- package/lib/models/filters-options.model.d.ts +0 -4
- package/lib/models/inactive-tenant.model.d.ts +0 -5
- package/lib/models/input-field-type.model.d.ts +0 -5
- package/lib/models/legend.model.d.ts +0 -6
- package/lib/models/link-type.model.d.ts +0 -3
- package/lib/models/list-item.model.d.ts +0 -24
- package/lib/models/menu.model.d.ts +0 -9
- package/lib/models/paginator-config.model.d.ts +0 -5
- package/lib/models/policy-confirmation-dialog.model.d.ts +0 -13
- package/lib/models/profile-menu.model.d.ts +0 -4
- package/lib/models/select-opened-state.model.d.ts +0 -4
- package/lib/models/selected-date.model.d.ts +0 -4
- package/lib/models/selected-time.model.d.ts +0 -4
- package/lib/models/slide-toggle-options.model.d.ts +0 -6
- package/lib/models/tab.model.d.ts +0 -6
- package/lib/models/table-actions.model.d.ts +0 -8
- package/lib/models/table-column-menu-info.model.d.ts +0 -6
- package/lib/models/table-schema.model.d.ts +0 -32
- package/lib/models/tile.model.d.ts +0 -12
- package/lib/pipes/safe.pipe.d.ts +0 -16
- package/lib/services/break-point-observer.service.d.ts +0 -21
- package/lib/services/file-upload.service.d.ts +0 -462
|
@@ -1,378 +0,0 @@
|
|
|
1
|
-
import { HttpClient, HttpEventType, HttpHeaders, } from '@angular/common/http';
|
|
2
|
-
import { Injectable } from '@angular/core';
|
|
3
|
-
import { AlertType } from '@ieeesa-npm/models';
|
|
4
|
-
import { catchError, concatMap, from, last, map, Subject, take, takeUntil, tap, } from 'rxjs';
|
|
5
|
-
import * as constants from '../assets/constants.json';
|
|
6
|
-
import * as i0 from "@angular/core";
|
|
7
|
-
import * as i1 from "@ieeesa-npm/utility";
|
|
8
|
-
import * as i2 from "@angular/common/http";
|
|
9
|
-
/**
|
|
10
|
-
* This service interacts with the server to obtain pre-signed URLs for file upload and uploads files to Amazon S3.
|
|
11
|
-
* @class FileUploadService
|
|
12
|
-
*/
|
|
13
|
-
export class FileUploadService {
|
|
14
|
-
constructor(
|
|
15
|
-
// eslint-disable-next-line no-unused-vars
|
|
16
|
-
httpService, handler,
|
|
17
|
-
// eslint-disable-next-line no-unused-vars
|
|
18
|
-
alertService,
|
|
19
|
-
// eslint-disable-next-line no-unused-vars
|
|
20
|
-
loaderNotificationService) {
|
|
21
|
-
this.httpService = httpService;
|
|
22
|
-
this.alertService = alertService;
|
|
23
|
-
this.loaderNotificationService = loaderNotificationService;
|
|
24
|
-
this.destroy$ = new Subject();
|
|
25
|
-
this.constants = constants;
|
|
26
|
-
this.isFileUploading = false;
|
|
27
|
-
this.noOfFilesUploadedSuccessfully = 0;
|
|
28
|
-
this.uploadedFileName = '';
|
|
29
|
-
this.httpClient = new HttpClient(handler);
|
|
30
|
-
}
|
|
31
|
-
/**
|
|
32
|
-
* Sets the base URL for API requests.
|
|
33
|
-
* @param {string} apiBaseUrl -API base URL.
|
|
34
|
-
* @memberof FileUploadService
|
|
35
|
-
*/
|
|
36
|
-
setApiBaseUrl(apiBaseUrl) {
|
|
37
|
-
this.apiBaseUrl = apiBaseUrl;
|
|
38
|
-
}
|
|
39
|
-
/**
|
|
40
|
-
* Gets API base URL for API requests.
|
|
41
|
-
* @return {*} {string}
|
|
42
|
-
* @memberof FileUploadService
|
|
43
|
-
*/
|
|
44
|
-
getApiBaseUrl() {
|
|
45
|
-
return this.apiBaseUrl;
|
|
46
|
-
}
|
|
47
|
-
/**
|
|
48
|
-
* Retrieves presigned URL for uploading files to Amazon S3 bucket.
|
|
49
|
-
* @param {(File | FileList)} file
|
|
50
|
-
* @return {Observable<FileUploadPresignedUrl>}
|
|
51
|
-
* @memberof FileUploadService
|
|
52
|
-
*/
|
|
53
|
-
getFileUploadPresignedUrl(file, appId) {
|
|
54
|
-
let fileName = '';
|
|
55
|
-
if (Object.values(file).length)
|
|
56
|
-
fileName = Object.values(file)[0].name;
|
|
57
|
-
else
|
|
58
|
-
fileName = file.name;
|
|
59
|
-
const fileUploadPresignedUrlPayload = {
|
|
60
|
-
payload: {
|
|
61
|
-
fileName: fileName,
|
|
62
|
-
tenantAppId: appId,
|
|
63
|
-
},
|
|
64
|
-
};
|
|
65
|
-
return this.httpService
|
|
66
|
-
.postData(`${this.apiBaseUrl}/configurations/s3/uploadFileUrl`, fileUploadPresignedUrlPayload)
|
|
67
|
-
.pipe(map((response) => {
|
|
68
|
-
return response;
|
|
69
|
-
}), catchError((errorRes) => {
|
|
70
|
-
throw errorRes;
|
|
71
|
-
}));
|
|
72
|
-
}
|
|
73
|
-
/**
|
|
74
|
-
* Gets pre-signed URL for the files to be uploaded in S3 bucket
|
|
75
|
-
* @param {FileUploadPayload} fileUploadPayload
|
|
76
|
-
* @param {string} fileUploadAPIPath
|
|
77
|
-
* @return {Observable<GetFileUploadPresignedUrlsResponse>}
|
|
78
|
-
* @memberof FileUploadService
|
|
79
|
-
*/
|
|
80
|
-
getPreSignedURL(fileUploadPayload, fileUploadAPIPath) {
|
|
81
|
-
return this.httpService
|
|
82
|
-
.postData(`${this.apiBaseUrl}/${fileUploadAPIPath}`, fileUploadPayload)
|
|
83
|
-
.pipe(map((response) => {
|
|
84
|
-
return response;
|
|
85
|
-
}), catchError((errorRes) => {
|
|
86
|
-
throw errorRes;
|
|
87
|
-
}));
|
|
88
|
-
}
|
|
89
|
-
/**
|
|
90
|
-
* Uploads file to AWS S3 using a pre-signed URL.
|
|
91
|
-
* @param {string} preSignedUrl
|
|
92
|
-
* @param files
|
|
93
|
-
* @param isMultipleFileUpload
|
|
94
|
-
* @return {Observable<any>} -Returns an observable that emits the response after uploading the file to S3.
|
|
95
|
-
* @memberof FileUploadService
|
|
96
|
-
*/
|
|
97
|
-
uploadFileToS3(preSignedUrl, files, isMultipleFileUpload = false
|
|
98
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
99
|
-
) {
|
|
100
|
-
this.loaderNotificationService.show();
|
|
101
|
-
const filesArray = [];
|
|
102
|
-
this.filesNameOfUploadFailed = [];
|
|
103
|
-
this.uploadedFileName = '';
|
|
104
|
-
if (isMultipleFileUpload) {
|
|
105
|
-
Object.values(files).forEach((file) => {
|
|
106
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
107
|
-
filesArray.push({
|
|
108
|
-
preSignedUrl: preSignedUrl.find((fileInfo) => fileInfo.fileName === file.name &&
|
|
109
|
-
fileInfo.errorMessage === null)?.preSignedUrl,
|
|
110
|
-
fileObj: file,
|
|
111
|
-
fileType: file.type,
|
|
112
|
-
fileSize: file.size,
|
|
113
|
-
});
|
|
114
|
-
});
|
|
115
|
-
}
|
|
116
|
-
else {
|
|
117
|
-
filesArray.push({
|
|
118
|
-
preSignedUrl: preSignedUrl,
|
|
119
|
-
fileObj: files,
|
|
120
|
-
fileType: files.type,
|
|
121
|
-
fileSize: files.size,
|
|
122
|
-
});
|
|
123
|
-
}
|
|
124
|
-
return from(filesArray).pipe(concatMap((file) => this.httpCallToAWS(file.preSignedUrl, file.fileObj, file.fileType, file.fileSize)), take(filesArray.length));
|
|
125
|
-
}
|
|
126
|
-
/**
|
|
127
|
-
* Makes http call to AWS to upload file in S3 bucket
|
|
128
|
-
* @param {string} preSignedUrl
|
|
129
|
-
* @param {File} file
|
|
130
|
-
* @param {string} fileType
|
|
131
|
-
* @param {number} fileSize
|
|
132
|
-
* @return {*} {Observable<any>}
|
|
133
|
-
* @memberof FileUploadService
|
|
134
|
-
*/
|
|
135
|
-
httpCallToAWS(preSignedUrl, file, fileType, fileSize
|
|
136
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
137
|
-
) {
|
|
138
|
-
const headers = new HttpHeaders();
|
|
139
|
-
headers.append('Content-Type', fileType?.toString());
|
|
140
|
-
headers.append('Content-Length', fileSize?.toString());
|
|
141
|
-
return this.httpClient
|
|
142
|
-
.put(preSignedUrl, file, {
|
|
143
|
-
reportProgress: true,
|
|
144
|
-
observe: 'events',
|
|
145
|
-
headers: headers,
|
|
146
|
-
})
|
|
147
|
-
.pipe(takeUntil(this.destroy$), map((event) => this.getEventMessage(event, file)), tap((message) => this.showProgress(message)), last(), catchError((errorRes) => {
|
|
148
|
-
this.loaderNotificationService.hide();
|
|
149
|
-
throw errorRes;
|
|
150
|
-
}));
|
|
151
|
-
}
|
|
152
|
-
/**
|
|
153
|
-
* Gets file upload progress.
|
|
154
|
-
* @param {*} message
|
|
155
|
-
* @memberof FileUploadService
|
|
156
|
-
*/
|
|
157
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-unused-vars, no-unused-vars, no-empty-function, @typescript-eslint/no-empty-function
|
|
158
|
-
showProgress(message) { }
|
|
159
|
-
/**
|
|
160
|
-
* Return distinct message for sent, upload progress, & response events.
|
|
161
|
-
* @param {HttpEvent<any>} event
|
|
162
|
-
* @param {(File | FileList)} file
|
|
163
|
-
* @return {*}
|
|
164
|
-
* @memberof FileUploadService
|
|
165
|
-
*/
|
|
166
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
167
|
-
getEventMessage(event, file) {
|
|
168
|
-
let fileName = '';
|
|
169
|
-
let fileSize = 0;
|
|
170
|
-
fileName = file.name;
|
|
171
|
-
fileSize = file.size;
|
|
172
|
-
switch (event.type) {
|
|
173
|
-
case HttpEventType.Sent:
|
|
174
|
-
return `Uploading file "${fileName}" of size ${fileSize}.`;
|
|
175
|
-
case HttpEventType.UploadProgress:
|
|
176
|
-
// eslint-disable-next-line no-case-declarations
|
|
177
|
-
const percentDone = event?.total
|
|
178
|
-
? Math.round((100 * event.loaded) / event.total)
|
|
179
|
-
: 0;
|
|
180
|
-
return `File "${fileName}" is ${percentDone}% uploaded.`;
|
|
181
|
-
case HttpEventType.Response:
|
|
182
|
-
this.loaderNotificationService.hide();
|
|
183
|
-
if (event.status === 200) {
|
|
184
|
-
this.noOfFilesUploadedSuccessfully++;
|
|
185
|
-
this.uploadedFileName = fileName;
|
|
186
|
-
return true;
|
|
187
|
-
}
|
|
188
|
-
this.filesNameOfUploadFailed.push(fileName);
|
|
189
|
-
return false;
|
|
190
|
-
default:
|
|
191
|
-
return `File "${fileName}" surprising upload event: ${event.type}.`;
|
|
192
|
-
}
|
|
193
|
-
}
|
|
194
|
-
/**
|
|
195
|
-
* Converts file to byte array.
|
|
196
|
-
* @param {File} file
|
|
197
|
-
* @memberof FileUploadService
|
|
198
|
-
*/
|
|
199
|
-
convertFileToByteArray(file) {
|
|
200
|
-
const reader = new FileReader();
|
|
201
|
-
reader.onloadend = () => {
|
|
202
|
-
const arrayBuffer = reader?.result;
|
|
203
|
-
this.fileByteArray = new Uint8Array(arrayBuffer);
|
|
204
|
-
};
|
|
205
|
-
reader.onerror = () => {
|
|
206
|
-
this.alertService?.showMessage({
|
|
207
|
-
status: 'custom',
|
|
208
|
-
message: this.constants?.fileUpload?.message?.error?.ER1002,
|
|
209
|
-
alertType: AlertType?.ERROR,
|
|
210
|
-
isCloseNeeded: true,
|
|
211
|
-
});
|
|
212
|
-
};
|
|
213
|
-
reader.readAsArrayBuffer(file);
|
|
214
|
-
}
|
|
215
|
-
/**
|
|
216
|
-
* Resets file byte array format to undefined.
|
|
217
|
-
* @memberof FileUploadService
|
|
218
|
-
*/
|
|
219
|
-
clearFileByteArray() {
|
|
220
|
-
this.fileByteArray = undefined;
|
|
221
|
-
}
|
|
222
|
-
/**
|
|
223
|
-
* Sets file upload status.
|
|
224
|
-
* @param {boolean} status
|
|
225
|
-
* @memberof FileUploadService
|
|
226
|
-
*/
|
|
227
|
-
setFileUploadStatus(status) {
|
|
228
|
-
this.isFileUploading = status;
|
|
229
|
-
}
|
|
230
|
-
/**
|
|
231
|
-
* Returns file upload status.
|
|
232
|
-
* @return {boolean}
|
|
233
|
-
* @memberof FileUploadService
|
|
234
|
-
*/
|
|
235
|
-
getFileUploadStatus() {
|
|
236
|
-
return this.isFileUploading;
|
|
237
|
-
}
|
|
238
|
-
/**
|
|
239
|
-
* Retrieves presigned URL for downloading files to Amazon S3 bucket.
|
|
240
|
-
* @param {(File | FileList)} file
|
|
241
|
-
* @return {Observable<string>}
|
|
242
|
-
* @memberof FileUploadService
|
|
243
|
-
*/
|
|
244
|
-
getFileDownloadPresignedUrls(file, isPublicAPI, domainUrl, presignedApiUrl) {
|
|
245
|
-
let fileName = '';
|
|
246
|
-
if (typeof file === 'string')
|
|
247
|
-
fileName = file;
|
|
248
|
-
else if (Object?.values(file)?.length)
|
|
249
|
-
fileName = Object?.values(file)?.[0]?.name;
|
|
250
|
-
else
|
|
251
|
-
fileName = file.name;
|
|
252
|
-
let httpRequest;
|
|
253
|
-
if (isPublicAPI) {
|
|
254
|
-
const fileDownloadPresignedUrlPayload = {
|
|
255
|
-
payload: {
|
|
256
|
-
fileName: fileName,
|
|
257
|
-
domain: domainUrl,
|
|
258
|
-
},
|
|
259
|
-
};
|
|
260
|
-
httpRequest = this.httpService.postData(`${this.apiBaseUrl}/configurations/public/downloadFileUrl`, fileDownloadPresignedUrlPayload);
|
|
261
|
-
}
|
|
262
|
-
else if (presignedApiUrl) {
|
|
263
|
-
const fileDownloadPresignedUrlByAttachmentIdPayload = {
|
|
264
|
-
payload: {
|
|
265
|
-
attachmentId: file.attachmentId,
|
|
266
|
-
preSignedDuration: this.constants?.fileDownload?.preSignedDuration,
|
|
267
|
-
},
|
|
268
|
-
};
|
|
269
|
-
httpRequest = this.httpService.postData(`${this.apiBaseUrl}${presignedApiUrl}`, fileDownloadPresignedUrlByAttachmentIdPayload);
|
|
270
|
-
}
|
|
271
|
-
else {
|
|
272
|
-
httpRequest = this.httpService.getData(`${this.apiBaseUrl}/configurations/s3/downloadFileUrl/${fileName}`);
|
|
273
|
-
}
|
|
274
|
-
return httpRequest.pipe(map((response) => {
|
|
275
|
-
return response;
|
|
276
|
-
}), catchError((errorRes) => {
|
|
277
|
-
throw errorRes;
|
|
278
|
-
}));
|
|
279
|
-
}
|
|
280
|
-
/**
|
|
281
|
-
* Downloads file to AWS S3 using a presigned URL.
|
|
282
|
-
* @return {Observable<any>}
|
|
283
|
-
* @memberof FileUploadService
|
|
284
|
-
*/
|
|
285
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
286
|
-
downloadFile(fileDownloadPresignedUrl) {
|
|
287
|
-
return this.httpClient.get(fileDownloadPresignedUrl).pipe(map((response) => {
|
|
288
|
-
return response;
|
|
289
|
-
}), catchError((errorRes) => {
|
|
290
|
-
throw errorRes;
|
|
291
|
-
}));
|
|
292
|
-
}
|
|
293
|
-
/**
|
|
294
|
-
* Validates the total size of the files uploaded.
|
|
295
|
-
* @param {(File | FileList)} files -The files to be validated.
|
|
296
|
-
* @param {number} maxFileSize
|
|
297
|
-
* @param {boolean} isMultiFileUpload
|
|
298
|
-
* @return {boolean} -Returns true if the total size of files is within the specified limit, otherwise false.
|
|
299
|
-
* @memberof FileUploadService
|
|
300
|
-
*/
|
|
301
|
-
validateFileSize(files, maxFileSize, isMultiFileUpload) {
|
|
302
|
-
if (isMultiFileUpload) {
|
|
303
|
-
let totalSize = 0;
|
|
304
|
-
Object.values(files).forEach((file) => {
|
|
305
|
-
totalSize += file.size;
|
|
306
|
-
});
|
|
307
|
-
return totalSize / (1024 * 1024) <= maxFileSize;
|
|
308
|
-
}
|
|
309
|
-
return files.size / (1024 * 1024) <= maxFileSize;
|
|
310
|
-
}
|
|
311
|
-
/**
|
|
312
|
-
* Validates the file types of the uploaded files.
|
|
313
|
-
* @param {(File | FileList)} files
|
|
314
|
-
* @param {string[]} allowedFileTypes
|
|
315
|
-
* @param {boolean} isMultiFileUpload
|
|
316
|
-
* @return {boolean} -Returns true if all files have valid extensions, otherwise false.
|
|
317
|
-
* @memberof FileUploadService
|
|
318
|
-
*/
|
|
319
|
-
validateFileTypes(files, allowedFileTypes, isMultiFileUpload) {
|
|
320
|
-
const validateSingleFile = (file) => {
|
|
321
|
-
const fileExtension = this.getFileExtension(file.name);
|
|
322
|
-
return allowedFileTypes?.includes(fileExtension);
|
|
323
|
-
};
|
|
324
|
-
if (isMultiFileUpload) {
|
|
325
|
-
let allFilesValid = true;
|
|
326
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
327
|
-
Object.values(files)?.forEach((fileItem) => {
|
|
328
|
-
if (!validateSingleFile(fileItem)) {
|
|
329
|
-
allFilesValid = false;
|
|
330
|
-
}
|
|
331
|
-
});
|
|
332
|
-
return allFilesValid;
|
|
333
|
-
}
|
|
334
|
-
return validateSingleFile(files);
|
|
335
|
-
}
|
|
336
|
-
/**
|
|
337
|
-
* Extracts and returns the extension of a file from its name.
|
|
338
|
-
* @private
|
|
339
|
-
* @param {string} fileName
|
|
340
|
-
* @return {string} -The file extension in lowercase.
|
|
341
|
-
* @memberof FileUploadService
|
|
342
|
-
*/
|
|
343
|
-
getFileExtension(fileName) {
|
|
344
|
-
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
345
|
-
return fileName?.split('.').pop().toLowerCase();
|
|
346
|
-
}
|
|
347
|
-
/**
|
|
348
|
-
* Delete the file from AWS S3 based on the given fileId along with deleteFileApiPath.
|
|
349
|
-
* @return {Observable<DeleteFileResponse>}
|
|
350
|
-
* @memberof FileUploadService
|
|
351
|
-
*/
|
|
352
|
-
deleteFile(deleteFileApiPath) {
|
|
353
|
-
return this.httpService
|
|
354
|
-
.putData(`${this.apiBaseUrl}/${deleteFileApiPath}`, {})
|
|
355
|
-
.pipe(map((response) => {
|
|
356
|
-
return response;
|
|
357
|
-
}), catchError((error) => {
|
|
358
|
-
throw error;
|
|
359
|
-
}));
|
|
360
|
-
}
|
|
361
|
-
/**
|
|
362
|
-
* Implementation of ngOnDestroy lifecycle hook method to unsubscribe the open observable subscriptions.
|
|
363
|
-
* @memberof FileUploadService
|
|
364
|
-
*/
|
|
365
|
-
ngOnDestroy() {
|
|
366
|
-
this.destroy$.next(true);
|
|
367
|
-
this.destroy$.unsubscribe();
|
|
368
|
-
}
|
|
369
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: FileUploadService, deps: [{ token: i1.HttpService }, { token: i2.HttpBackend }, { token: i1.AlertsService }, { token: i1.LoaderNotificationService }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
370
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: FileUploadService, providedIn: 'root' }); }
|
|
371
|
-
}
|
|
372
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: FileUploadService, decorators: [{
|
|
373
|
-
type: Injectable,
|
|
374
|
-
args: [{
|
|
375
|
-
providedIn: 'root',
|
|
376
|
-
}]
|
|
377
|
-
}], ctorParameters: function () { return [{ type: i1.HttpService }, { type: i2.HttpBackend }, { type: i1.AlertsService }, { type: i1.LoaderNotificationService }]; } });
|
|
378
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS11cGxvYWQuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3ByZXNlbnRhdGlvbi9zcmMvbGliL3NlcnZpY2VzL2ZpbGUtdXBsb2FkLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLFVBQVUsRUFFVixhQUFhLEVBQ2IsV0FBVyxHQUNaLE1BQU0sc0JBQXNCLENBQUM7QUFDOUIsT0FBTyxFQUFFLFVBQVUsRUFBYSxNQUFNLGVBQWUsQ0FBQztBQU10RCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFRL0MsT0FBTyxFQUNMLFVBQVUsRUFDVixTQUFTLEVBQ1QsSUFBSSxFQUNKLElBQUksRUFDSixHQUFHLEVBRUgsT0FBTyxFQUNQLElBQUksRUFDSixTQUFTLEVBQ1QsR0FBRyxHQUNKLE1BQU0sTUFBTSxDQUFDO0FBQ2QsT0FBTyxLQUFLLFNBQVMsTUFBTSwwQkFBMEIsQ0FBQzs7OztBQVN0RDs7O0dBR0c7QUFJSCxNQUFNLE9BQU8saUJBQWlCO0lBVzVCO0lBQ0UsMENBQTBDO0lBQ25DLFdBQXdCLEVBQy9CLE9BQW9CO0lBQ3BCLDBDQUEwQztJQUNuQyxZQUEyQjtJQUNsQywwQ0FBMEM7SUFDbkMseUJBQW9EO1FBTHBELGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBR3hCLGlCQUFZLEdBQVosWUFBWSxDQUFlO1FBRTNCLDhCQUF5QixHQUF6Qix5QkFBeUIsQ0FBMkI7UUFqQjdELGFBQVEsR0FBcUIsSUFBSSxPQUFPLEVBQVcsQ0FBQztRQUNwRCxjQUFTLEdBQUcsU0FBUyxDQUFDO1FBSXRCLG9CQUFlLEdBQUcsS0FBSyxDQUFDO1FBRXhCLGtDQUE2QixHQUFHLENBQUMsQ0FBQztRQUNsQyxxQkFBZ0IsR0FBRyxFQUFFLENBQUM7UUFXcEIsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQztJ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RSxFQUFFLENBQUM7YUFDdEQsSUFBSSxDQUNILEdBQUcsQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFO1lBQ2YsT0FBTyxRQUFRLENBQUM7UUFDbEIsQ0FBQyxDQUFDLEVBQ0YsVUFBVSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDbkIsTUFBTSxLQUFLLENBQUM7UUFDZCxDQUFDLENBQUMsQ0FDSCxDQUFDO0lBQ04sQ0FBQztJQUVEOzs7T0FHRztJQUNILFdBQVc7UUFDVCxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN6QixJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQzlCLENBQUM7K0dBMWJVLGlCQUFpQjttSEFBakIsaUJBQWlCLGNBRmhCLE1BQU07OzRGQUVQLGlCQUFpQjtrQkFIN0IsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIEh0dHBCYWNrZW5kLFxyXG4gIEh0dHBDbGllbnQsXHJcbiAgSHR0cEV2ZW50LFxyXG4gIEh0dHBFdmVudFR5cGUsXHJcbiAgSHR0cEhlYWRlcnMsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQgeyBJbmplY3RhYmxlLCBPbkRlc3Ryb3kgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtcclxuICBBbGVydHNTZXJ2aWNlLFxyXG4gIEh0dHBTZXJ2aWNlLFxyXG4gIExvYWRlck5vdGlmaWNhdGlvblNlcnZpY2UsXHJcbn0gZnJvbSAnQGllZWVzYS1ucG0vdXRpbGl0eSc7XHJcbmltcG9ydCB7IEFsZXJ0VHlwZSB9IGZyb20gJ0BpZWVlc2EtbnBtL21vZGVscyc7XHJcbmltcG9ydCB7XHJcbiAgRmlsZVVwbG9hZFByZXNpZ25lZFVybCxcclxuICBHZXRGaWxlRG93bmxvYWRQcmVzaWduZWRVcmxCeUF0dGFjaG1lbnRJZFBheWxvYWQsXHJcbiAgR2V0RmlsZURvd25sb2FkUHJlc2lnbmVkVXJsQnlBdHRhY2htZW50SWRSZXNwb25zZSxcclxuICBHZXRGaWxlRG93bmxvYWRQcmVzaWduZWRVcmxQYXlsb2FkLFxyXG4gIEdldEZpbGVVcGxvYWRQcmVzaWduZWRVcmxQYXlsb2FkLFxyXG59IGZyb20gJy4uL21vZGVscy9maWxlLXVwbG9hZC1wcmVzaWduZWQtdXJsLXJlcy5tb2RlbCc7XHJcbmltcG9ydCB7XHJcbiAgY2F0Y2hFcnJvcixcclxuICBjb25jYXRNYXAsXHJcbiAgZnJvbSxcclxuICBsYXN0LFxyXG4gIG1hcCxcclxuICBPYnNlcnZhYmxlLFxyXG4gIFN1YmplY3QsXHJcbiAgdGFrZSxcclxuICB0YWtlVW50aWwsXHJcbiAgdGFwLFxyXG59IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgKiBhcyBjb25zdGFudHMgZnJvbSAnLi4vYXNzZXRzL2NvbnN0YW50cy5qc29uJztcclxuaW1wb3J0IHsgRmlsZVVwbG9hZFBheWxvYWQgfSBmcm9tICcuLi9tb2RlbHMvZmlsZS11cGxvYWQtcGF5bG9hZC1tb2RlbCc7XHJcbmltcG9ydCB7XHJcbiAgRmlsZUF0dGFjaG1lbnRJbmZvLFxyXG4gIEdldEZpbGVVcGxvYWRQcmVzaWduZWRVcmxzUmVzcG9uc2UsXHJcbn0gZnJvbSAnLi4vbW9kZWxzL2ZpbGUtdXBsb2FkLXJlc3BvbnNlLm1vZGVsJztcclxuaW1wb3J0IHsgRGVsZXRlRmlsZVJlc3BvbnNlIH0gZnJvbSAnLi4vbW9kZWxzL2ZpbGUtaW5mby5tb2RlbCc7XHJcbmltcG9ydCB7IERvd25sb2FkQXR0YWNobWVudCB9IGZyb20gJy4uL21vZGVscy9kb3dubG9hZC1maWxlLm1vZGVsJztcclxuXHJcbi8qKlxyXG4gKiBUaGlzIHNlcnZpY2UgaW50ZXJhY3RzIHdpdGggdGhlIHNlcnZlciB0byBvYnRhaW4gcHJlLXNpZ25lZCBVUkxzIGZvciBmaWxlIHVwbG9hZCBhbmQgdXBsb2FkcyBmaWxlcyB0byBBbWF6b24gUzMuXHJcbiAqIEBjbGFzcyBGaWxlVXBsb2FkU2VydmljZVxyXG4gKi9cclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46ICdyb290JyxcclxufSlcclxuZXhwb3J0IGNsYXNzIEZpbGVVcGxvYWRTZXJ2aWNlIGltcGxlbWVudHMgT25EZXN0cm95IHtcclxuICBkZXN0cm95JDogU3ViamVjdDxib29sZWFuPiA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KCk7XHJcbiAgY29uc3RhbnRzID0gY29uc3RhbnRzO1xyXG4gIGFwaUJhc2VVcmwhOiBzdHJpbmc7XHJcbiAgZmlsZUJ5dGVBcnJheTogVWludDhBcnJheSB8IHVuZGVmaW5lZDtcclxuICBodHRwQ2xpZW50OiBIdHRwQ2xpZW50O1xyXG4gIGlzRmlsZVVwbG9hZGluZyA9IGZhbHNlO1xyXG4gIGZpbGVzTmFtZU9mVXBsb2FkRmFpbGVkITogc3RyaW5nW107XHJcbiAgbm9PZkZpbGVzVXBsb2FkZWRTdWNjZXNzZnVsbHkgPSAwO1xyXG4gIHVwbG9hZGVkRmlsZU5hbWUgPSAnJztcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnNcclxuICAgIHB1YmxpYyBodHRwU2VydmljZTogSHR0cFNlcnZpY2UsXHJcbiAgICBoYW5kbGVyOiBIdHRwQmFja2VuZCxcclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xyXG4gICAgcHVibGljIGFsZXJ0U2VydmljZTogQWxlcnRzU2VydmljZSxcclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xyXG4gICAgcHVibGljIGxvYWRlck5vdGlmaWNhdGlvblNlcnZpY2U6IExvYWRlck5vdGlmaWNhdGlvblNlcnZpY2VcclxuICApIHtcclxuICAgIHRoaXMuaHR0cENsaWVudCA9IG5ldyBIdHRwQ2xpZW50KGhhbmRsZXIpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2V0cyB0aGUgYmFzZSBVUkwgZm9yIEFQSSByZXF1ZXN0cy5cclxuICAgKiBAcGFyYW0ge3N0cmluZ30gYXBpQmFzZVVybCAtQVBJIGJhc2UgVVJMLlxyXG4gICAqIEBtZW1iZXJvZiBGaWxlVXBsb2FkU2VydmljZVxyXG4gICAqL1xyXG4gIHNldEFwaUJhc2VVcmwoYXBpQmFzZVVybDogc3RyaW5nKSB7XHJcbiAgICB0aGlzLmFwaUJhc2VVcmwgPSBhcGlCYXNlVXJsO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBHZXRzIEFQSSBiYXNlIFVSTCBmb3IgQVBJIHJlcXVlc3RzLlxyXG4gICAqIEByZXR1cm4geyp9ICB7c3RyaW5nfVxyXG4gICAqIEBtZW1iZXJvZiBGaWxlVXBsb2FkU2VydmljZVxyXG4gICAqL1xyXG4gIGdldEFwaUJhc2VVcmwoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLmFwaUJhc2VVcmw7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIFJldHJpZXZlcyBwcmVzaWduZWQgVVJMIGZvciB1cGxvYWRpbmcgZmlsZXMgdG8gQW1hem9uIFMzIGJ1Y2tldC5cclxuICAgKiBAcGFyYW0geyhGaWxlIHwgRmlsZUxpc3QpfSBmaWxlXHJcbiAgICogQHJldHVybiB7T2JzZXJ2YWJsZTxGaWxlVXBsb2FkUHJlc2lnbmVkVXJsPn1cclxuICAgKiBAbWVtYmVyb2YgRmlsZVVwbG9hZFNlcnZpY2VcclxuICAgKi9cclxuICBnZXRGaWxlVXBsb2FkUHJlc2lnbmVkVXJsKFxyXG4gICAgZmlsZTogRmlsZSB8IEZpbGVMaXN0LFxyXG4gICAgYXBwSWQ6IHN0cmluZ1xyXG4gICk6IE9ic2VydmFibGU8RmlsZVVwbG9hZFByZXNpZ25lZFVybD4ge1xyXG4gICAgbGV0IGZpbGVOYW1lID0gJyc7XHJcbiAgICBpZiAoT2JqZWN0LnZhbHVlcyhmaWxlKS5sZW5ndGgpIGZpbGVOYW1lID0gT2JqZWN0LnZhbHVlcyhmaWxlKVswXS5uYW1lO1xyXG4gICAgZWxzZSBmaWxlTmFtZSA9IChmaWxlIGFzIEZpbGUpLm5hbWU7XHJcbiAgICBjb25zdCBmaWxlVXBsb2FkUHJlc2lnbmVkVXJsUGF5bG9hZDogR2V0RmlsZVVwbG9hZFByZXNpZ25lZFVybFBheWxvYWQgPSB7XHJcbiAgICAgIHBheWxvYWQ6IHtcclxuICAgICAgICBmaWxlTmFtZTogZmlsZU5hbWUsXHJcbiAgICAgICAgdGVuYW50QXBwSWQ6IGFwcElkIGFzIHN0cmluZyxcclxuICAgICAgfSxcclxuICAgIH07XHJcbiAgICByZXR1cm4gdGhpcy5odHRwU2VydmljZVxyXG4gICAgICAucG9zdERhdGEoXHJcbiAgICAgICAgYCR7dGhpcy5hcGlCYXNlVXJsfS9jb25maWd1cmF0aW9ucy9zMy91cGxvYWRGaWxlVXJsYCxcclxuICAgICAgICBmaWxlVXBsb2FkUHJlc2lnbmVkVXJsUGF5bG9hZFxyXG4gICAgICApXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIG1hcCgocmVzcG9uc2UpID0+IHtcclxuICAgICAgICAgIHJldHVybiByZXNwb25zZTtcclxuICAgICAgICB9KSxcclxuICAgICAgICBjYXRjaEVycm9yKChlcnJvclJlcykgPT4ge1xyXG4gICAgICAgICAgdGhyb3cgZXJyb3JSZXM7XHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogR2V0cyBwcmUtc2lnbmVkIFVSTCBmb3IgdGhlIGZpbGVzIHRvIGJlIHVwbG9hZGVkIGluIFMzIGJ1Y2tldFxyXG4gICAqIEBwYXJhbSB7RmlsZVVwbG9hZFBheWxvYWR9IGZpbGVVcGxvYWRQYXlsb2FkXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGZpbGVVcGxvYWRBUElQYXRoXHJcbiAgICogQHJldHVybiB7T2JzZXJ2YWJsZTxHZXRGaWxlVXBsb2FkUHJlc2lnbmVkVXJsc1Jlc3BvbnNlPn1cclxuICAgKiBAbWVtYmVyb2YgRmlsZVVwbG9hZFNlcnZpY2VcclxuICAgKi9cclxuICBnZXRQcmVTaWduZWRVUkwoXHJcbiAgICBmaWxlVXBsb2FkUGF5bG9hZDogRmlsZVVwbG9hZFBheWxvYWQsXHJcbiAgICBmaWxlVXBsb2FkQVBJUGF0aDogc3RyaW5nXHJcbiAgKTogT2JzZXJ2YWJsZTxHZXRGaWxlVXBsb2FkUHJlc2lnbmVkVXJsc1Jlc3BvbnNlPiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwU2VydmljZVxyXG4gICAgICAucG9zdERhdGEoYCR7dGhpcy5hcGlCYXNlVXJsfS8ke2ZpbGVVcGxvYWRBUElQYXRofWAsIGZpbGVVcGxvYWRQYXlsb2FkKVxyXG4gICAgICAucGlwZShcclxuICAgICAgICBtYXAoKHJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gcmVzcG9uc2U7XHJcbiAgICAgICAgfSksXHJcbiAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3JSZXMpID0+IHtcclxuICAgICAgICAgIHRocm93IGVycm9yUmVzO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBVcGxvYWRzIGZpbGUgdG8gQVdTIFMzIHVzaW5nIGEgcHJlLXNpZ25lZCBVUkwuXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IHByZVNpZ25lZFVybFxyXG4gICAqIEBwYXJhbSBmaWxlc1xyXG4gICAqIEBwYXJhbSBpc011bHRpcGxlRmlsZVVwbG9hZFxyXG4gICAqIEByZXR1cm4ge09ic2VydmFibGU8YW55Pn0gLVJldHVybnMgYW4gb2JzZXJ2YWJsZSB0aGF0IGVtaXRzIHRoZSByZXNwb25zZSBhZnRlciB1cGxvYWRpbmcgdGhlIGZpbGUgdG8gUzMuXHJcbiAgICogQG1lbWJlcm9mIEZpbGVVcGxvYWRTZXJ2aWNlXHJcbiAgICovXHJcbiAgdXBsb2FkRmlsZVRvUzMoXHJcbiAgICBwcmVTaWduZWRVcmw6IEZpbGVBdHRhY2htZW50SW5mb1tdIHwgc3RyaW5nLFxyXG4gICAgZmlsZXM6IEZpbGUgfCBGaWxlTGlzdCxcclxuICAgIGlzTXVsdGlwbGVGaWxlVXBsb2FkID0gZmFsc2VcclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XHJcbiAgKTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgIHRoaXMubG9hZGVyTm90aWZpY2F0aW9uU2VydmljZS5zaG93KCk7XHJcbiAgICBjb25zdCBmaWxlc0FycmF5ID0gW107XHJcbiAgICB0aGlzLmZpbGVzTmFtZU9mVXBsb2FkRmFpbGVkID0gW107XHJcbiAgICB0aGlzLnVwbG9hZGVkRmlsZU5hbWUgPSAnJztcclxuICAgIGlmIChpc011bHRpcGxlRmlsZVVwbG9hZCkge1xyXG4gICAgICBPYmplY3QudmFsdWVzKGZpbGVzKS5mb3JFYWNoKChmaWxlOiBGaWxlKSA9PiB7XHJcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcclxuICAgICAgICBmaWxlc0FycmF5LnB1c2goe1xyXG4gICAgICAgICAgcHJlU2lnbmVkVXJsOiAocHJlU2lnbmVkVXJsIGFzIEZpbGVBdHRhY2htZW50SW5mb1tdKS5maW5kKFxyXG4gICAgICAgICAgICAoZmlsZUluZm86IEZpbGVBdHRhY2htZW50SW5mbykgPT5cclxuICAgICAgICAgICAgICBmaWxlSW5mby5maWxlTmFtZSA9PT0gKGZpbGUgYXMgRmlsZSkubmFtZSAmJlxyXG4gICAgICAgICAgICAgIGZpbGVJbmZvLmVycm9yTWVzc2FnZSA9PT0gbnVsbFxyXG4gICAgICAgICAgKT8ucHJlU2lnbmVkVXJsLFxyXG4gICAgICAgICAgZmlsZU9iajogZmlsZSBhcyBGaWxlLFxyXG4gICAgICAgICAgZmlsZVR5cGU6IChmaWxlIGFzIEZpbGUpLnR5cGUsXHJcbiAgICAgICAgICBmaWxlU2l6ZTogKGZpbGUgYXMgRmlsZSkuc2l6ZSxcclxuICAgICAgICB9KTtcclxuICAgICAgfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBmaWxlc0FycmF5LnB1c2goe1xyXG4gICAgICAgIHByZVNpZ25lZFVybDogcHJlU2lnbmVkVXJsIGFzIHN0cmluZyxcclxuICAgICAgICBmaWxlT2JqOiBmaWxlcyBhcyBGaWxlLFxyXG4gICAgICAgIGZpbGVUeXBlOiAoZmlsZXMgYXMgRmlsZSkudHlwZSxcclxuICAgICAgICBmaWxlU2l6ZTogKGZpbGVzIGFzIEZpbGUpLnNpemUsXHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZyb20oZmlsZXNBcnJheSkucGlwZShcclxuICAgICAgY29uY2F0TWFwKChmaWxlKSA9PlxyXG4gICAgICAgIHRoaXMuaHR0cENhbGxUb0FXUyhcclxuICAgICAgICAgIGZpbGUucHJlU2lnbmVkVXJsLFxyXG4gICAgICAgICAgZmlsZS5maWxlT2JqLFxyXG4gICAgICAgICAgZmlsZS5maWxlVHlwZSxcclxuICAgICAgICAgIGZpbGUuZmlsZVNpemVcclxuICAgICAgICApXHJcbiAgICAgICksXHJcbiAgICAgIHRha2UoZmlsZXNBcnJheS5sZW5ndGgpXHJcbiAgICApO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBNYWtlcyBodHRwIGNhbGwgdG8gQVdTIHRvIHVwbG9hZCBmaWxlIGluIFMzIGJ1Y2tldFxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBwcmVTaWduZWRVcmxcclxuICAgKiBAcGFyYW0ge0ZpbGV9IGZpbGVcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gZmlsZVR5cGVcclxuICAgKiBAcGFyYW0ge251bWJlcn0gZmlsZVNpemVcclxuICAgKiBAcmV0dXJuIHsqfSAge09ic2VydmFibGU8YW55Pn1cclxuICAgKiBAbWVtYmVyb2YgRmlsZVVwbG9hZFNlcnZpY2VcclxuICAgKi9cclxuICBodHRwQ2FsbFRvQVdTKFxyXG4gICAgcHJlU2lnbmVkVXJsOiBzdHJpbmcsXHJcbiAgICBmaWxlOiBGaWxlLFxyXG4gICAgZmlsZVR5cGU6IHN0cmluZyxcclxuICAgIGZpbGVTaXplOiBudW1iZXJcclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XHJcbiAgKTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgIGNvbnN0IGhlYWRlcnMgPSBuZXcgSHR0cEhlYWRlcnMoKTtcclxuICAgIGhlYWRlcnMuYXBwZW5kKCdDb250ZW50LVR5cGUnLCBmaWxlVHlwZT8udG9TdHJpbmcoKSk7XHJcbiAgICBoZWFkZXJzLmFwcGVuZCgnQ29udGVudC1MZW5ndGgnLCBmaWxlU2l6ZT8udG9TdHJpbmcoKSk7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50XHJcbiAgICAgIC5wdXQocHJlU2lnbmVkVXJsLCBmaWxlLCB7XHJcbiAgICAgICAgcmVwb3J0UHJvZ3Jlc3M6IHRydWUsXHJcbiAgICAgICAgb2JzZXJ2ZTogJ2V2ZW50cycsXHJcbiAgICAgICAgaGVhZGVyczogaGVhZGVycyxcclxuICAgICAgfSlcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgdGFrZVVudGlsKHRoaXMuZGVzdHJveSQpLFxyXG4gICAgICAgIG1hcCgoZXZlbnQpID0+IHRoaXMuZ2V0RXZlbnRNZXNzYWdlKGV2ZW50LCBmaWxlKSksXHJcbiAgICAgICAgdGFwKChtZXNzYWdlKSA9PiB0aGlzLnNob3dQcm9ncmVzcyhtZXNzYWdlKSksXHJcbiAgICAgICAgbGFzdCgpLFxyXG4gICAgICAgIGNhdGNoRXJyb3IoKGVycm9yUmVzKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmxvYWRlck5vdGlmaWNhdGlvblNlcnZpY2UuaGlkZSgpO1xyXG4gICAgICAgICAgdGhyb3cgZXJyb3JSZXM7XHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldHMgZmlsZSB1cGxvYWQgcHJvZ3Jlc3MuXHJcbiAgICogQHBhcmFtIHsqfSBtZXNzYWdlXHJcbiAgICogQG1lbWJlcm9mIEZpbGVVcGxvYWRTZXJ2aWNlXHJcbiAgICovXHJcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnksIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFycywgbm8tdW51c2VkLXZhcnMsIG5vLWVtcHR5LWZ1bmN0aW9uLCBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZW1wdHktZnVuY3Rpb25cclxuICBzaG93UHJvZ3Jlc3MobWVzc2FnZTogYW55KSB7fVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm4gZGlzdGluY3QgbWVzc2FnZSBmb3Igc2VudCwgdXBsb2FkIHByb2dyZXNzLCAmIHJlc3BvbnNlIGV2ZW50cy5cclxuICAgKiBAcGFyYW0ge0h0dHBFdmVudDxhbnk+fSBldmVudFxyXG4gICAqIEBwYXJhbSB7KEZpbGUgfCBGaWxlTGlzdCl9IGZpbGVcclxuICAgKiBAcmV0dXJuIHsqfVxyXG4gICAqIEBtZW1iZXJvZiBGaWxlVXBsb2FkU2VydmljZVxyXG4gICAqL1xyXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XHJcbiAgZ2V0RXZlbnRNZXNzYWdlKGV2ZW50OiBIdHRwRXZlbnQ8YW55PiwgZmlsZTogRmlsZSkge1xyXG4gICAgbGV0IGZpbGVOYW1lID0gJyc7XHJcbiAgICBsZXQgZmlsZVNpemU6IG51bWJlciB8IHN0cmluZyA9IDA7XHJcbiAgICBmaWxlTmFtZSA9IChmaWxlIGFzIEZpbGUpLm5hbWU7XHJcbiAgICBmaWxlU2l6ZSA9IChmaWxlIGFzIEZpbGUpLnNpemU7XHJcbiAgICBzd2l0Y2ggKGV2ZW50LnR5cGUpIHtcclxuICAgICAgY2FzZSBIdHRwRXZlbnRUeXBlLlNlbnQ6XHJcbiAgICAgICAgcmV0dXJuIGBVcGxvYWRpbmcgZmlsZSBcIiR7ZmlsZU5hbWV9XCIgb2Ygc2l6ZSAke2ZpbGVTaXplfS5gO1xyXG4gICAgICBjYXNlIEh0dHBFdmVudFR5cGUuVXBsb2FkUHJvZ3Jlc3M6XHJcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNhc2UtZGVjbGFyYXRpb25zXHJcbiAgICAgICAgY29uc3QgcGVyY2VudERvbmUgPSBldmVudD8udG90YWxcclxuICAgICAgICAgID8gTWF0aC5yb3VuZCgoMTAwICogZXZlbnQubG9hZGVkKSAvIGV2ZW50LnRvdGFsKVxyXG4gICAgICAgICAgOiAwO1xyXG4gICAgICAgIHJldHVybiBgRmlsZSBcIiR7ZmlsZU5hbWV9XCIgaXMgJHtwZXJjZW50RG9uZX0lIHVwbG9hZGVkLmA7XHJcbiAgICAgIGNhc2UgSHR0cEV2ZW50VHlwZS5SZXNwb25zZTpcclxuICAgICAgICB0aGlzLmxvYWRlck5vdGlmaWNhdGlvblNlcnZpY2UuaGlkZSgpO1xyXG4gICAgICAgIGlmIChldmVudC5zdGF0dXMgPT09IDIwMCkge1xyXG4gICAgICAgICAgdGhpcy5ub09mRmlsZXNVcGxvYWRlZFN1Y2Nlc3NmdWxseSsrO1xyXG4gICAgICAgICAgdGhpcy51cGxvYWRlZEZpbGVOYW1lID0gZmlsZU5hbWU7XHJcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5maWxlc05hbWVPZlVwbG9hZEZhaWxlZC5wdXNoKGZpbGVOYW1lKTtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIHJldHVybiBgRmlsZSBcIiR7ZmlsZU5hbWV9XCIgc3VycHJpc2luZyB1cGxvYWQgZXZlbnQ6ICR7ZXZlbnQudHlwZX0uYDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENvbnZlcnRzIGZpbGUgdG8gYnl0ZSBhcnJheS5cclxuICAgKiBAcGFyYW0ge0ZpbGV9IGZpbGVcclxuICAgKiBAbWVtYmVyb2YgRmlsZVVwbG9hZFNlcnZpY2VcclxuICAgKi9cclxuICBjb252ZXJ0RmlsZVRvQnl0ZUFycmF5KGZpbGU6IEZpbGUpOiB2b2lkIHtcclxuICAgIGNvbnN0IHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XHJcbiAgICByZWFkZXIub25sb2FkZW5kID0gKCkgPT4ge1xyXG4gICAgICBjb25zdCBhcnJheUJ1ZmZlciA9IHJlYWRlcj8ucmVzdWx0IGFzIEFycmF5QnVmZmVyO1xyXG4gICAgICB0aGlzLmZpbGVCeXRlQXJyYXkgPSBuZXcgVWludDhBcnJheShhcnJheUJ1ZmZlcik7XHJcbiAgICB9O1xyXG4gICAgcmVhZGVyLm9uZXJyb3IgPSAoKSA9PiB7XHJcbiAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlPy5zaG93TWVzc2FnZSh7XHJcbiAgICAgICAgc3RhdHVzOiAnY3VzdG9tJyxcclxuICAgICAgICBtZXNzYWdlOiB0aGlzLmNvbnN0YW50cz8uZmlsZVVwbG9hZD8ubWVzc2FnZT8uZXJyb3I/LkVSMTAwMixcclxuICAgICAgICBhbGVydFR5cGU6IEFsZXJ0VHlwZT8uRVJST1IsXHJcbiAgICAgICAgaXNDbG9zZU5lZWRlZDogdHJ1ZSxcclxuICAgICAgfSk7XHJcbiAgICB9O1xyXG4gICAgcmVhZGVyLnJlYWRBc0FycmF5QnVmZmVyKGZpbGUpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmVzZXRzIGZpbGUgYnl0ZSBhcnJheSBmb3JtYXQgdG8gdW5kZWZpbmVkLlxyXG4gICAqIEBtZW1iZXJvZiBGaWxlVXBsb2FkU2VydmljZVxyXG4gICAqL1xyXG4gIGNsZWFyRmlsZUJ5dGVBcnJheSgpOiB2b2lkIHtcclxuICAgIHRoaXMuZmlsZUJ5dGVBcnJheSA9IHVuZGVmaW5lZDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNldHMgZmlsZSB1cGxvYWQgc3RhdHVzLlxyXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gc3RhdHVzXHJcbiAgICogQG1lbWJlcm9mIEZpbGVVcGxvYWRTZXJ2aWNlXHJcbiAgICovXHJcbiAgc2V0RmlsZVVwbG9hZFN0YXR1cyhzdGF0dXM6IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgIHRoaXMuaXNGaWxlVXBsb2FkaW5nID0gc3RhdHVzO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJucyBmaWxlIHVwbG9hZCBzdGF0dXMuXHJcbiAgICogQHJldHVybiB7Ym9vbGVhbn1cclxuICAgKiBAbWVtYmVyb2YgRmlsZVVwbG9hZFNlcnZpY2VcclxuICAgKi9cclxuICBnZXRGaWxlVXBsb2FkU3RhdHVzKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaXNGaWxlVXBsb2FkaW5nO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0cmlldmVzIHByZXNpZ25lZCBVUkwgZm9yIGRvd25sb2FkaW5nIGZpbGVzIHRvIEFtYXpvbiBTMyBidWNrZXQuXHJcbiAgICogQHBhcmFtIHsoRmlsZSB8IEZpbGVMaXN0KX0gZmlsZVxyXG4gICAqIEByZXR1cm4ge09ic2VydmFibGU8c3RyaW5nPn1cclxuICAgKiBAbWVtYmVyb2YgRmlsZVVwbG9hZFNlcnZpY2VcclxuICAgKi9cclxuICBnZXRGaWxlRG93bmxvYWRQcmVzaWduZWRVcmxzKFxyXG4gICAgZmlsZTogRmlsZSB8IEZpbGVMaXN0IHwgc3RyaW5nIHwgRG93bmxvYWRBdHRhY2htZW50LFxyXG4gICAgaXNQdWJsaWNBUEk/OiBib29sZWFuLFxyXG4gICAgZG9tYWluVXJsPzogc3RyaW5nLFxyXG4gICAgcHJlc2lnbmVkQXBpVXJsPzogc3RyaW5nXHJcbiAgKTogT2JzZXJ2YWJsZTxzdHJpbmcgfCBHZXRGaWxlRG93bmxvYWRQcmVzaWduZWRVcmxCeUF0dGFjaG1lbnRJZFJlc3BvbnNlPiB7XHJcbiAgICBsZXQgZmlsZU5hbWUgPSAnJztcclxuICAgIGlmICh0eXBlb2YgZmlsZSA9PT0gJ3N0cmluZycpIGZpbGVOYW1lID0gZmlsZTtcclxuICAgIGVsc2UgaWYgKE9iamVjdD8udmFsdWVzKGZpbGUpPy5sZW5ndGgpXHJcbiAgICAgIGZpbGVOYW1lID0gT2JqZWN0Py52YWx1ZXMoZmlsZSk/LlswXT8ubmFtZTtcclxuICAgIGVsc2UgZmlsZU5hbWUgPSAoZmlsZSBhcyBGaWxlKS5uYW1lO1xyXG4gICAgbGV0IGh0dHBSZXF1ZXN0ITogT2JzZXJ2YWJsZTxcclxuICAgICAgc3RyaW5nIHwgR2V0RmlsZURvd25sb2FkUHJlc2lnbmVkVXJsQnlBdHRhY2htZW50SWRSZXNwb25zZVxyXG4gICAgPjtcclxuICAgIGlmIChpc1B1YmxpY0FQSSkge1xyXG4gICAgICBjb25zdCBmaWxlRG93bmxvYWRQcmVzaWduZWRVcmxQYXlsb2FkOiBHZXRGaWxlRG93bmxvYWRQcmVzaWduZWRVcmxQYXlsb2FkID1cclxuICAgICAgICB7XHJcbiAgICAgICAgICBwYXlsb2FkOiB7XHJcbiAgICAgICAgICAgIGZpbGVOYW1lOiBmaWxlTmFtZSxcclxuICAgICAgICAgICAgZG9tYWluOiBkb21haW5VcmwgYXMgc3RyaW5nLFxyXG4gICAgICAgICAgfSxcclxuICAgICAgICB9O1xyXG4gICAgICBodHRwUmVxdWVzdCA9IHRoaXMuaHR0cFNlcnZpY2UucG9zdERhdGEoXHJcbiAgICAgICAgYCR7dGhpcy5hcGlCYXNlVXJsfS9jb25maWd1cmF0aW9ucy9wdWJsaWMvZG93bmxvYWRGaWxlVXJsYCxcclxuICAgICAgICBmaWxlRG93bmxvYWRQcmVzaWduZWRVcmxQYXlsb2FkXHJcbiAgICAgICk7XHJcbiAgICB9IGVsc2UgaWYgKHByZXNpZ25lZEFwaVVybCkge1xyXG4gICAgICBjb25zdCBmaWxlRG93bmxvYWRQcmVzaWduZWRVcmxCeUF0dGFjaG1lbnRJZFBheWxvYWQ6IEdldEZpbGVEb3dubG9hZFByZXNpZ25lZFVybEJ5QXR0YWNobWVudElkUGF5bG9hZCA9XHJcbiAgICAgICAge1xyXG4gICAgICAgICAgcGF5bG9hZDoge1xyXG4gICAgICAgICAgICBhdHRhY2htZW50SWQ6IChmaWxlIGFzIERvd25sb2FkQXR0YWNobWVudCkuYXR0YWNobWVudElkLFxyXG4gICAgICAgICAgICBwcmVTaWduZWREdXJhdGlvbjogdGhpcy5jb25zdGFudHM/LmZpbGVEb3dubG9hZD8ucHJlU2lnbmVkRHVyYXRpb24sXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgIH07XHJcbiAgICAgIGh0dHBSZXF1ZXN0ID0gdGhpcy5odHRwU2VydmljZS5wb3N0RGF0YShcclxuICAgICAgICBgJHt0aGlzLmFwaUJhc2VVcmx9JHtwcmVzaWduZWRBcGlVcmx9YCxcclxuICAgICAgICBmaWxlRG93bmxvYWRQcmVzaWduZWRVcmxCeUF0dGFjaG1lbnRJZFBheWxvYWRcclxuICAgICAgKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGh0dHBSZXF1ZXN0ID0gdGhpcy5odHRwU2VydmljZS5nZXREYXRhKFxyXG4gICAgICAgIGAke3RoaXMuYXBpQmFzZVVybH0vY29uZmlndXJhdGlvbnMvczMvZG93bmxvYWRGaWxlVXJsLyR7ZmlsZU5hbWV9YFxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGh0dHBSZXF1ZXN0LnBpcGUoXHJcbiAgICAgIG1hcCgocmVzcG9uc2UpID0+IHtcclxuICAgICAgICByZXR1cm4gcmVzcG9uc2U7XHJcbiAgICAgIH0pLFxyXG4gICAgICBjYXRjaEVycm9yKChlcnJvclJlcykgPT4ge1xyXG4gICAgICAgIHRocm93IGVycm9yUmVzO1xyXG4gICAgICB9KVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIERvd25sb2FkcyBmaWxlIHRvIEFXUyBTMyB1c2luZyBhIHByZXNpZ25lZCBVUkwuXHJcbiAgICogQHJldHVybiB7T2JzZXJ2YWJsZTxhbnk+fVxyXG4gICAqIEBtZW1iZXJvZiBGaWxlVXBsb2FkU2VydmljZVxyXG4gICAqL1xyXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XHJcbiAgZG93bmxvYWRGaWxlKGZpbGVEb3dubG9hZFByZXNpZ25lZFVybDogc3RyaW5nKTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQuZ2V0KGZpbGVEb3dubG9hZFByZXNpZ25lZFVybCkucGlwZShcclxuICAgICAgbWFwKChyZXNwb25zZSkgPT4ge1xyXG4gICAgICAgIHJldHVybiByZXNwb25zZTtcclxuICAgICAgfSksXHJcbiAgICAgIGNhdGNoRXJyb3IoKGVycm9yUmVzKSA9PiB7XHJcbiAgICAgICAgdGhyb3cgZXJyb3JSZXM7XHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVmFsaWRhdGVzIHRoZSB0b3RhbCBzaXplIG9mIHRoZSBmaWxlcyB1cGxvYWRlZC5cclxuICAgKiBAcGFyYW0geyhGaWxlIHwgRmlsZUxpc3QpfSBmaWxlcyAtVGhlIGZpbGVzIHRvIGJlIHZhbGlkYXRlZC5cclxuICAgKiBAcGFyYW0ge251bWJlcn0gbWF4RmlsZVNpemVcclxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IGlzTXVsdGlGaWxlVXBsb2FkXHJcbiAgICogQHJldHVybiB7Ym9vbGVhbn0gLVJldHVybnMgdHJ1ZSBpZiB0aGUgdG90YWwgc2l6ZSBvZiBmaWxlcyBpcyB3aXRoaW4gdGhlIHNwZWNpZmllZCBsaW1pdCwgb3RoZXJ3aXNlIGZhbHNlLlxyXG4gICAqIEBtZW1iZXJvZiBGaWxlVXBsb2FkU2VydmljZVxyXG4gICAqL1xyXG4gIHZhbGlkYXRlRmlsZVNpemUoXHJcbiAgICBmaWxlczogRmlsZSB8IEZpbGVMaXN0LFxyXG4gICAgbWF4RmlsZVNpemU6IG51bWJlcixcclxuICAgIGlzTXVsdGlGaWxlVXBsb2FkOiBib29sZWFuXHJcbiAgKTogYm9vbGVhbiB7XHJcbiAgICBpZiAoaXNNdWx0aUZpbGVVcGxvYWQpIHtcclxuICAgICAgbGV0IHRvdGFsU2l6ZSA9IDA7XHJcbiAgICAgIE9iamVjdC52YWx1ZXMoZmlsZXMpLmZvckVhY2goKGZpbGU6IEZpbGUpID0+IHtcclxuICAgICAgICB0b3RhbFNpemUgKz0gZmlsZS5zaXplO1xyXG4gICAgICB9KTtcclxuICAgICAgcmV0dXJuIHRvdGFsU2l6ZSAvICgxMDI0ICogMTAyNCkgPD0gbWF4RmlsZVNpemU7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gKGZpbGVzIGFzIEZpbGUpLnNpemUgLyAoMTAyNCAqIDEwMjQpIDw9IG1heEZpbGVTaXplO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVmFsaWRhdGVzIHRoZSBmaWxlIHR5cGVzIG9mIHRoZSB1cGxvYWRlZCBmaWxlcy5cclxuICAgKiBAcGFyYW0geyhGaWxlIHwgRmlsZUxpc3QpfSBmaWxlc1xyXG4gICAqIEBwYXJhbSB7c3RyaW5nW119IGFsbG93ZWRGaWxlVHlwZXNcclxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IGlzTXVsdGlGaWxlVXBsb2FkXHJcbiAgICogQHJldHVybiB7Ym9vbGVhbn0gLVJldHVybnMgdHJ1ZSBpZiBhbGwgZmlsZXMgaGF2ZSB2YWxpZCBleHRlbnNpb25zLCBvdGhlcndpc2UgZmFsc2UuXHJcbiAgICogQG1lbWJlcm9mIEZpbGVVcGxvYWRTZXJ2aWNlXHJcbiAgICovXHJcbiAgdmFsaWRhdGVGaWxlVHlwZXMoXHJcbiAgICBmaWxlczogRmlsZSB8IEZpbGVMaXN0LFxyXG4gICAgYWxsb3dlZEZpbGVUeXBlczogc3RyaW5nW10sXHJcbiAgICBpc011bHRpRmlsZVVwbG9hZDogYm9vbGVhblxyXG4gICk6IGJvb2xlYW4ge1xyXG4gICAgY29uc3QgdmFsaWRhdGVTaW5nbGVGaWxlID0gKGZpbGU6IEZpbGUpOiBib29sZWFuID0+IHtcclxuICAgICAgY29uc3QgZmlsZUV4dGVuc2lvbiA9IHRoaXMuZ2V0RmlsZUV4dGVuc2lvbihmaWxlLm5hbWUpO1xyXG4gICAgICByZXR1cm4gYWxsb3dlZEZpbGVUeXBlcz8uaW5jbHVkZXMoZmlsZUV4dGVuc2lvbik7XHJcbiAgICB9O1xyXG4gICAgaWYgKGlzTXVsdGlGaWxlVXBsb2FkKSB7XHJcbiAgICAgIGxldCBhbGxGaWxlc1ZhbGlkID0gdHJ1ZTtcclxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcclxuICAgICAgT2JqZWN0LnZhbHVlcyhmaWxlcyk/LmZvckVhY2goKGZpbGVJdGVtOiBhbnkpID0+IHtcclxuICAgICAgICBpZiAoIXZhbGlkYXRlU2luZ2xlRmlsZShmaWxlSXRlbSkpIHtcclxuICAgICAgICAgIGFsbEZpbGVzVmFsaWQgPSBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgICByZXR1cm4gYWxsRmlsZXNWYWxpZDtcclxuICAgIH1cclxuICAgIHJldHVybiB2YWxpZGF0ZVNpbmdsZUZpbGUoZmlsZXMgYXMgRmlsZSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBFeHRyYWN0cyBhbmQgcmV0dXJucyB0aGUgZXh0ZW5zaW9uIG9mIGEgZmlsZSBmcm9tIGl0cyBuYW1lLlxyXG4gICAqIEBwcml2YXRlXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGZpbGVOYW1lXHJcbiAgICogQHJldHVybiB7c3RyaW5nfSAtVGhlIGZpbGUgZXh0ZW5zaW9uIGluIGxvd2VyY2FzZS5cclxuICAgKiBAbWVtYmVyb2YgRmlsZVVwbG9hZFNlcnZpY2VcclxuICAgKi9cclxuICBwcml2YXRlIGdldEZpbGVFeHRlbnNpb24oZmlsZU5hbWU6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLW5vbi1udWxsLWFzc2VydGlvblxyXG4gICAgcmV0dXJuIGZpbGVOYW1lPy5zcGxpdCgnLicpLnBvcCgpIS50b0xvd2VyQ2FzZSgpO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBEZWxldGUgdGhlIGZpbGUgZnJvbSBBV1MgUzMgYmFzZWQgb24gdGhlIGdpdmVuIGZpbGVJZCBhbG9uZyB3aXRoIGRlbGV0ZUZpbGVBcGlQYXRoLlxyXG4gICAqIEByZXR1cm4ge09ic2VydmFibGU8RGVsZXRlRmlsZVJlc3BvbnNlPn1cclxuICAgKiBAbWVtYmVyb2YgRmlsZVVwbG9hZFNlcnZpY2VcclxuICAgKi9cclxuICBkZWxldGVGaWxlKGRlbGV0ZUZpbGVBcGlQYXRoOiBzdHJpbmcpOiBPYnNlcnZhYmxlPERlbGV0ZUZpbGVSZXNwb25zZT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cFNlcnZpY2VcclxuICAgICAgLnB1dERhdGEoYCR7dGhpcy5hcGlCYXNlVXJsfS8ke2RlbGV0ZUZpbGVBcGlQYXRofWAsIHt9KVxyXG4gICAgICAucGlwZShcclxuICAgICAgICBtYXAoKHJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gcmVzcG9uc2U7XHJcbiAgICAgICAgfSksXHJcbiAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3IpID0+IHtcclxuICAgICAgICAgIHRocm93IGVycm9yO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBJbXBsZW1lbnRhdGlvbiBvZiBuZ09uRGVzdHJveSBsaWZlY3ljbGUgaG9vayBtZXRob2QgdG8gdW5zdWJzY3JpYmUgdGhlIG9wZW4gb2JzZXJ2YWJsZSBzdWJzY3JpcHRpb25zLlxyXG4gICAqIEBtZW1iZXJvZiBGaWxlVXBsb2FkU2VydmljZVxyXG4gICAqL1xyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgdGhpcy5kZXN0cm95JC5uZXh0KHRydWUpO1xyXG4gICAgdGhpcy5kZXN0cm95JC51bnN1YnNjcmliZSgpO1xyXG4gIH1cclxufVxyXG4iXX0=
|
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
import { EventEmitter, OnDestroy } from '@angular/core';
|
|
2
|
-
import { MatAccordion } from '@angular/material/expansion';
|
|
3
|
-
import { AccordionInfo } from '../../models/accordion-info.model';
|
|
4
|
-
import { BreakpointObserverService } from '../../services/break-point-observer.service';
|
|
5
|
-
import { Subject } from 'rxjs';
|
|
6
|
-
import * as i0 from "@angular/core";
|
|
7
|
-
export declare class AccordionComponent implements OnDestroy {
|
|
8
|
-
private breakpointObserverService;
|
|
9
|
-
destroy$: Subject<boolean>;
|
|
10
|
-
accordion: MatAccordion;
|
|
11
|
-
isMobileView: boolean;
|
|
12
|
-
private accordionDetails;
|
|
13
|
-
set accordionInfo(value: AccordionInfo);
|
|
14
|
-
get accordionInfo(): AccordionInfo;
|
|
15
|
-
accordionOpened: EventEmitter<boolean>;
|
|
16
|
-
constructor(breakpointObserverService: BreakpointObserverService);
|
|
17
|
-
/**
|
|
18
|
-
* Emits accordionOpened event with true when accordion is expanded or false if accordion is collapsed.
|
|
19
|
-
* @param {boolean} isExpanded
|
|
20
|
-
* @memberof AccordionComponent
|
|
21
|
-
*/
|
|
22
|
-
setOpenedStatus(isExpanded: boolean): void;
|
|
23
|
-
/**
|
|
24
|
-
* Performs necessary cleanup tasks, such as unsubscribing from subscription when the component is being destroyed.
|
|
25
|
-
* @memberof AccordionComponent
|
|
26
|
-
*/
|
|
27
|
-
ngOnDestroy(): void;
|
|
28
|
-
static ɵfac: i0.ɵɵFactoryDeclaration<AccordionComponent, never>;
|
|
29
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<AccordionComponent, "ieeesa-accordion", never, { "accordionInfo": { "alias": "accordionInfo"; "required": false; }; }, { "accordionOpened": "accordionOpened"; }, never, ["[actions]", "[component]"], true, never>;
|
|
30
|
-
}
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
import { EventEmitter } from '@angular/core';
|
|
2
|
-
import { FormGroup } from '@angular/forms';
|
|
3
|
-
import { FormField } from '../../models/form-field.model';
|
|
4
|
-
import { FieldConfig } from '../../models/field-config.model';
|
|
5
|
-
import * as i0 from "@angular/core";
|
|
6
|
-
export declare class AddFormGroupComponent implements FormField {
|
|
7
|
-
config: FieldConfig;
|
|
8
|
-
group: FormGroup;
|
|
9
|
-
addFormGroup: EventEmitter<Event>;
|
|
10
|
-
buttonActionsInfo: any;
|
|
11
|
-
/**
|
|
12
|
-
* Emits the addFormGroup event on click of add form group button.
|
|
13
|
-
* @param {Event} event
|
|
14
|
-
* @memberof AddFormGroupComponent
|
|
15
|
-
*/
|
|
16
|
-
onAddFormGroup(event: Event): void;
|
|
17
|
-
static ɵfac: i0.ɵɵFactoryDeclaration<AddFormGroupComponent, never>;
|
|
18
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<AddFormGroupComponent, "ieeesa-add-form-group", never, {}, { "addFormGroup": "addFormGroup"; }, never, never, true, never>;
|
|
19
|
-
}
|
|
@@ -1,61 +0,0 @@
|
|
|
1
|
-
import { OnDestroy } from '@angular/core';
|
|
2
|
-
import { Subject } from 'rxjs';
|
|
3
|
-
import { ActivatedRoute, Router } from '@angular/router';
|
|
4
|
-
import { Breadcrumb } from '../../models/breadcrumb.model';
|
|
5
|
-
import * as i0 from "@angular/core";
|
|
6
|
-
/**
|
|
7
|
-
* Reusable breadcrumb component for displaying and navigating through a hierarchy of pages.
|
|
8
|
-
* @class BreadcrumbComponent
|
|
9
|
-
*/
|
|
10
|
-
export declare class BreadcrumbComponent implements OnDestroy {
|
|
11
|
-
activatedRoute: ActivatedRoute;
|
|
12
|
-
private router;
|
|
13
|
-
breadcrumbTexts: any;
|
|
14
|
-
/**
|
|
15
|
-
* Initial route for the breadcrumb component.
|
|
16
|
-
* @type {string}
|
|
17
|
-
* @default '/'
|
|
18
|
-
* @memberof BreadcrumbComponent
|
|
19
|
-
*/
|
|
20
|
-
breadcrumbInitialRoute: string;
|
|
21
|
-
/**
|
|
22
|
-
* Initial label for the breadcrumb component.
|
|
23
|
-
* @type {string}
|
|
24
|
-
* @default breadcrumbTexts?.breadcrumb?.label?.initial
|
|
25
|
-
* @memberof BreadcrumbComponent
|
|
26
|
-
*/
|
|
27
|
-
breadcrumbInitialRouteLabel: any;
|
|
28
|
-
breadcrumbs: Breadcrumb[];
|
|
29
|
-
destroy$: Subject<boolean>;
|
|
30
|
-
static readonly ROUTE_DATA_BREADCRUMB = "breadcrumb";
|
|
31
|
-
constructor(activatedRoute: ActivatedRoute, router: Router);
|
|
32
|
-
/**
|
|
33
|
-
* Sets up the subscription to router events to update breadcrumbs.
|
|
34
|
-
* @memberof BreadcrumbComponent
|
|
35
|
-
*/
|
|
36
|
-
setRouteData(): void;
|
|
37
|
-
/**
|
|
38
|
-
*
|
|
39
|
-
* Recursively gets the breadcrumb items for the given route.
|
|
40
|
-
* @param {ActivatedRoute} route - The activated route.
|
|
41
|
-
* @param {string} [url=''] - The current URL.
|
|
42
|
-
* @param {Breadcrumb[]} [breadcrumbs=[]] - The current breadcrumb items.
|
|
43
|
-
* @return {Breadcrumb[]} - The array of breadcrumb items.
|
|
44
|
-
* @memberof BreadcrumbComponent
|
|
45
|
-
*/
|
|
46
|
-
createBreadcrumbs(route: ActivatedRoute, url?: string, breadcrumbs?: Breadcrumb[]): any;
|
|
47
|
-
/**
|
|
48
|
-
* Takes the index and the current item as arguments and needs to return the unique identifier for this item.
|
|
49
|
-
* @param {number} index
|
|
50
|
-
* @return {number}
|
|
51
|
-
* @memberof BreadcrumbComponent
|
|
52
|
-
*/
|
|
53
|
-
trackByFn(index: number): number;
|
|
54
|
-
/**
|
|
55
|
-
* NgOnDestroy performs necessary cleanup tasks, such as unsubscribing from subscription when the component is being destroyed.
|
|
56
|
-
* @memberof BreadcrumbComponent
|
|
57
|
-
*/
|
|
58
|
-
ngOnDestroy(): void;
|
|
59
|
-
static ɵfac: i0.ɵɵFactoryDeclaration<BreadcrumbComponent, never>;
|
|
60
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<BreadcrumbComponent, "ieeesa-breadcrumb", never, { "breadcrumbInitialRoute": { "alias": "breadcrumbInitialRoute"; "required": false; }; "breadcrumbInitialRouteLabel": { "alias": "breadcrumbInitialRouteLabel"; "required": false; }; }, {}, never, never, true, never>;
|
|
61
|
-
}
|
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
import { EventEmitter, OnDestroy } from '@angular/core';
|
|
2
|
-
import { BreakpointObserverService } from '../../services/break-point-observer.service';
|
|
3
|
-
import { ButtonType } from '../../models/button-type.model';
|
|
4
|
-
import { CardButton } from '../../models/card-button.model';
|
|
5
|
-
import { CardInfo } from '../../models/card-info.model';
|
|
6
|
-
import { Subject } from 'rxjs';
|
|
7
|
-
import { AlignType } from '@ieeesa-npm/models';
|
|
8
|
-
import * as i0 from "@angular/core";
|
|
9
|
-
export declare class CardComponent implements OnDestroy {
|
|
10
|
-
private breakPointObserverService;
|
|
11
|
-
isMobileView: boolean;
|
|
12
|
-
destroy$: Subject<boolean>;
|
|
13
|
-
alignmentType: typeof AlignType;
|
|
14
|
-
buttonType: typeof ButtonType;
|
|
15
|
-
buttonAlignmentInfo: AlignType;
|
|
16
|
-
actionButtonClicked: EventEmitter<CardButton>;
|
|
17
|
-
private cardDetails;
|
|
18
|
-
set cardInfo(value: CardInfo);
|
|
19
|
-
get cardInfo(): CardInfo;
|
|
20
|
-
constructor(breakPointObserverService: BreakpointObserverService);
|
|
21
|
-
/**
|
|
22
|
-
* Emits the action button click event.
|
|
23
|
-
* @type {Button}
|
|
24
|
-
* @memberof CardComponent
|
|
25
|
-
*/
|
|
26
|
-
onActionButtonClicked(button: CardButton): void;
|
|
27
|
-
/**
|
|
28
|
-
* Keep tracks the button based on the ID in the DOM tree.
|
|
29
|
-
* @memberof CardComponent
|
|
30
|
-
*/
|
|
31
|
-
trackByButtonFn(index: number, item: CardButton): number;
|
|
32
|
-
/**
|
|
33
|
-
* Performs necessary cleanup tasks, such as unsubscribing from subscription when the component is being destroyed.
|
|
34
|
-
* @memberof CardComponent
|
|
35
|
-
*/
|
|
36
|
-
ngOnDestroy(): void;
|
|
37
|
-
static ɵfac: i0.ɵɵFactoryDeclaration<CardComponent, never>;
|
|
38
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<CardComponent, "ieeesa-card", never, { "buttonAlignmentInfo": { "alias": "buttonAlignmentInfo"; "required": false; }; "cardInfo": { "alias": "cardInfo"; "required": false; }; }, { "actionButtonClicked": "actionButtonClicked"; }, never, ["[component]", "[description]"], true, never>;
|
|
39
|
-
}
|