tnx-shared 5.3.192 → 5.3.194
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/tnx-shared.umd.js +309 -702
- package/bundles/tnx-shared.umd.js.map +1 -1
- package/bundles/tnx-shared.umd.min.js +1 -1
- package/bundles/tnx-shared.umd.min.js.map +1 -1
- package/classes/form-schema.d.ts +1 -0
- package/classes/form-schema.d.ts.map +1 -1
- package/components/file-upload/file-upload.component.d.ts.map +1 -1
- package/esm2015/classes/form-schema.js +2 -1
- package/esm2015/components/dropdown/dropdown.component.js +2 -2
- package/esm2015/components/file-upload/file-upload.component.js +2 -2
- package/esm2015/models/file-type.js +2 -2
- package/esm2015/public-api.js +2 -2
- package/esm2015/tnx-shared.module.js +3 -3
- package/fesm2015/tnx-shared.js +234 -572
- package/fesm2015/tnx-shared.js.map +1 -1
- package/models/file-type.d.ts +1 -1
- package/models/file-type.d.ts.map +1 -1
- package/package.json +2 -2
- package/public-api.d.ts +0 -1
- package/public-api.d.ts.map +1 -1
- package/tnx-shared.metadata.json +1 -1
- package/tnx-shared.module.d.ts +1 -2
- package/tnx-shared.module.d.ts.map +1 -1
- package/tnx-shared.module.ngfactory.d.ts.map +1 -1
- package/components/report-queue/base-job/job-item.d.ts +0 -44
- package/components/report-queue/base-job/job-item.d.ts.map +0 -1
- package/components/report-queue/report-queue.component.d.ts +0 -67
- package/components/report-queue/report-queue.component.d.ts.map +0 -1
- package/components/report-queue/report-queue.component.ngfactory.d.ts.map +0 -1
- package/components/report-queue/report-queue.component.scss.shim.ngstyle.d.ts.map +0 -1
- package/esm2015/components/report-queue/base-job/job-item.js +0 -54
- package/esm2015/components/report-queue/report-queue.component.js +0 -301
package/tnx-shared.module.d.ts
CHANGED
|
@@ -57,7 +57,6 @@ import { PermissionUtilsComponent } from './components/permission-utils/permissi
|
|
|
57
57
|
import { QueryBuilderComponent } from './components/query-builders/query-builder/query-builder.component';
|
|
58
58
|
import { RadioButtonListComponent } from './components/radio-button-list/radio-button-list.component';
|
|
59
59
|
import { ReferenceTextBoxComponent } from './components/reference-textbox/reference-textbox.component';
|
|
60
|
-
import { ReportQueueComponent } from './components/report-queue/report-queue.component';
|
|
61
60
|
import { ServiceFileUploadComponent } from './components/service-file-upload/service-file-upload.component';
|
|
62
61
|
import { SettingsRowComponent } from './components/settings/settings-row/settings-row.component';
|
|
63
62
|
import { SettingsWorkflowNo1Component } from './components/settings/settings-workflow/settings-workflow-no1/settings-workflow-no1.component';
|
|
@@ -107,7 +106,7 @@ import { StringFormatPipe } from './pipes/string-format.pipe';
|
|
|
107
106
|
import { TnDatePipe } from './pipes/tn-date.pipe';
|
|
108
107
|
import { SplashComponentComponent } from './components/splash-component/splash-component.component';
|
|
109
108
|
import { CommonLibComponent } from './components/common-lib/common-lib.component';
|
|
110
|
-
export declare function coreDeclaration(): (typeof CrudFormComponent | typeof TnCustomScrollbarComponent | typeof ViewContainerRefDirective | typeof CommonSearchFormComponent | typeof CrudListComponent | typeof TreeTableComponent | typeof EntityPickerDataComponent | typeof EntityPickerSelectedComponent | typeof EntityPickerBoxComponent | typeof AutoCompletePickerComponent | typeof EntityPickerTreeDataComponent | typeof EntityPickerTreeSelectedComponent | typeof EntityPickerComponent | typeof SplashComponentComponent | typeof HtmlFormatPipe | typeof MasterDataPipe | typeof OrganizationFormatPipe | typeof OrganizationsFormatPipe | typeof SafeHtmlPipe | typeof AccessDeniedComponent | typeof CommonDashboardComponent | typeof NotFoundComponent | typeof UniversalLinkProcessorComponent | typeof AutocompleteDatasourceComponent | typeof AvatarUploaderComponent | typeof ChatBoxComponent | typeof FileUploadComponent | typeof ChatSendMessageBoxComponent | typeof CoCauToChucPickerComponent | typeof DropdownComponent | typeof FileKySoSimComponent | typeof FileManagerComponent | typeof FilePickerDialogComponent | typeof TaiLieuComponent | typeof PermissionUtilsComponent | typeof QueryBuilderComponent | typeof FileViewerComponent | typeof ServiceFileUploadComponent | typeof UserPickerDialogComponent | typeof CommonLibComponent | typeof
|
|
109
|
+
export declare function coreDeclaration(): (typeof CrudFormComponent | typeof TnCustomScrollbarComponent | typeof ViewContainerRefDirective | typeof CommonSearchFormComponent | typeof CrudListComponent | typeof TreeTableComponent | typeof EntityPickerDataComponent | typeof EntityPickerSelectedComponent | typeof EntityPickerBoxComponent | typeof AutoCompletePickerComponent | typeof EntityPickerTreeDataComponent | typeof EntityPickerTreeSelectedComponent | typeof EntityPickerComponent | typeof SplashComponentComponent | typeof HtmlFormatPipe | typeof MasterDataPipe | typeof OrganizationFormatPipe | typeof OrganizationsFormatPipe | typeof SafeHtmlPipe | typeof AccessDeniedComponent | typeof CommonDashboardComponent | typeof NotFoundComponent | typeof UniversalLinkProcessorComponent | typeof AutocompleteDatasourceComponent | typeof AvatarUploaderComponent | typeof ChatBoxComponent | typeof FileUploadComponent | typeof ChatSendMessageBoxComponent | typeof CoCauToChucPickerComponent | typeof DropdownComponent | typeof FileKySoSimComponent | typeof FileManagerComponent | typeof FilePickerDialogComponent | typeof TaiLieuComponent | typeof PermissionUtilsComponent | typeof QueryBuilderComponent | typeof FileViewerComponent | typeof ServiceFileUploadComponent | typeof UserPickerDialogComponent | typeof CommonLibComponent | typeof AfterViewCheckedComponent | typeof AuthorizeDirective | typeof TnReorderableColumnDirective | typeof TnReorderableRowDirective | typeof TnSortableColumnDirective | typeof TnSortIcon | typeof TnTreeTableToggler | typeof ApprovalPipe | typeof ConvertMoneyToWordPipe | typeof MultipleReferenceDataFormatPipe | typeof OrganizationNameFormatPipe | typeof SafeStylePipe | typeof SafeUrlPipe | typeof SecurePipe | typeof StringFormatPipe | typeof TnDatePipe | typeof AddressComponent | typeof AdvanceSearchComponent | typeof ImageUploaderComponent | typeof CheckBoxListComponent | typeof CoCauToChucPickerListComponent | typeof CoCauToChucPickerListNewComponent | typeof FormBuilderComponent | typeof DatetimePickerComponent | typeof EntityPickerSearchFormComponent | typeof EntityPickerDialogComponent | typeof EntityPermissionComponent | typeof EquationEditorComponent | typeof MaskComponent | typeof NumberPickerRangeComponent | typeof RadioButtonListComponent | typeof VanBanPickerComponent | typeof VanBanPickerDialogComponent | typeof VanbanDiPickerComponent | typeof VanbanDenPickerComponent | typeof CongViecPickerComponent | typeof SettingsComponent | typeof SettingsRowComponent | typeof ShareLinkByPermissionComponent | typeof TnCheckboxComponent | typeof TnDialogComponent | typeof TnColorPickerComponent | typeof TnTinymceComponent | typeof TnTabViewComponent | typeof TableDetailFormComponent | typeof QuickAddFormComponent | typeof PreventShiftTabDirective | typeof TnTemplateDirective | typeof UserPickerBoxComponent | typeof UserPickerComponent | typeof HelperCurrentPageComponent | typeof TnAppHelpComponent | typeof TnAppNotificationListComponent | typeof TnAppNotificationComponent | typeof FolderFormComponent | typeof FileFormComponent | typeof FileVersionListComponent | typeof ViewDetailComponent | typeof ReferenceTextBoxComponent | typeof AddNewsComponent | typeof SignatureDetailComponent | typeof KySoSimDanhSachChuKyComponent | typeof TaiLieuCuaToiComponent | typeof KhaiThacTaiLieuDungChungComponent | typeof TnTemplateComponent | typeof DropdownSettingFormComponent | typeof TnAccordionTabComponent | typeof SettingsWorkflowComponent | typeof SettingAuthorizeButtonComponent | typeof SettingsWorkflowNo1Component | typeof FileSizePipe)[];
|
|
111
110
|
export declare function coreModuleImport(): (typeof CommonModule)[];
|
|
112
111
|
export declare function coreProvider(): any[];
|
|
113
112
|
export declare class TnxSharedModule {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tnx-shared.module.d.ts","sourceRoot":"","sources":["../../projects/tnx-shared/src/lib/tnx-shared.module.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"tnx-shared.module.d.ts","sourceRoot":"","sources":["../../projects/tnx-shared/src/lib/tnx-shared.module.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tnx-shared.module.ngfactory.d.ts","sourceRoot":"","sources":["../../projects/tnx-shared/src/lib/tnx-shared.module.ngfactory.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,eAAe,CAAC;AACpC,OAAO,KAAK,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"tnx-shared.module.ngfactory.d.ts","sourceRoot":"","sources":["../../projects/tnx-shared/src/lib/tnx-shared.module.ngfactory.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,eAAe,CAAC;AACpC,OAAO,KAAK,EAAE,MAAM,qBAAqB,CAAC;AAsL1C,eAAO,MAAM,wBAAwB,EAAC,EAAE,CAAC,eAAe,CAAC,EAAE,CAAC,eAAe,CAAiB,CAAC"}
|
|
@@ -1,44 +0,0 @@
|
|
|
1
|
-
import { ResponseResult } from '../../../models/response-result';
|
|
2
|
-
import { SimpleDictionary } from '../../../utils/dictionary';
|
|
3
|
-
export declare class JobItem {
|
|
4
|
-
_code: string;
|
|
5
|
-
_fileName: string;
|
|
6
|
-
_data: any;
|
|
7
|
-
_type: JobTypes;
|
|
8
|
-
_uniqueKey: any;
|
|
9
|
-
_status: number;
|
|
10
|
-
_binaryFile: any;
|
|
11
|
-
_fileId: any;
|
|
12
|
-
_error: string;
|
|
13
|
-
constructor(code: string, data: any, fileName?: string, status?: number);
|
|
14
|
-
}
|
|
15
|
-
export declare class REPORT_QUEUE_CONSTANT {
|
|
16
|
-
static statuses: {
|
|
17
|
-
Waiting: number;
|
|
18
|
-
Exporting: number;
|
|
19
|
-
Success: number;
|
|
20
|
-
Error: number;
|
|
21
|
-
Downloaded: number;
|
|
22
|
-
};
|
|
23
|
-
static dicStatus: SimpleDictionary;
|
|
24
|
-
}
|
|
25
|
-
export declare enum JobTypes {
|
|
26
|
-
Normal = 1,
|
|
27
|
-
SingnalR = 2,
|
|
28
|
-
Many = 3
|
|
29
|
-
}
|
|
30
|
-
export declare class ExportJob {
|
|
31
|
-
templateCode: string;
|
|
32
|
-
dataPromise: Promise<ResponseResult>;
|
|
33
|
-
fileName: string;
|
|
34
|
-
rootName: string;
|
|
35
|
-
cb: Function;
|
|
36
|
-
type: JobTypes;
|
|
37
|
-
constructor(templateCode: string, // code template cấu hình bên quản trị
|
|
38
|
-
dataPromise: Promise<ResponseResult>, // promise dùng để lấy dữ liệu, trả về dạng ResponseResult
|
|
39
|
-
fileName: string, // tên của file được lưu
|
|
40
|
-
rootName?: string, // tên thuộc tính của lst dữ liệu ngoài cùng
|
|
41
|
-
cb?: Function, // dùng để xử lý dữ liệu sau khi lấy xong
|
|
42
|
-
type?: JobTypes);
|
|
43
|
-
}
|
|
44
|
-
//# sourceMappingURL=job-item.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"job-item.d.ts","sourceRoot":"","sources":["../../../../../projects/tnx-shared/src/lib/components/report-queue/base-job/job-item.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AAEjE,OAAO,EAAiB,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAE5E,qBAAa,OAAO;IAEhB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,GAAG,CAAC;IAGX,KAAK,EAAE,QAAQ,CAAqB;IACpC,UAAU,MAAC;IAGX,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,MAAC;IACZ,OAAO,MAAC;IACR,MAAM,EAAE,MAAM,CAAC;gBAEH,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,QAAQ,GAAE,MAAiB,EAAE,MAAM,SAAyC;CASpH;AAED,qBAAa,qBAAqB;IAC9B,MAAM,CAAC,QAAQ;;;;;;MAMd;IAED,MAAM,CAAC,SAAS,mBAMb;CACN;AAED,oBAAY,QAAQ;IAChB,MAAM,IAAI;IACV,QAAQ,IAAI;IACZ,IAAI,IAAI;CACX;AAED,qBAAa,SAAS;IAEP,YAAY,EAAE,MAAM;IACpB,WAAW,EAAE,OAAO,CAAC,cAAc,CAAC;IACpC,QAAQ,EAAE,MAAM;IAChB,QAAQ,EAAE,MAAM;IAChB,EAAE,EAAE,QAAQ;IACZ,IAAI,EAAE,QAAQ;gBALd,YAAY,EAAE,MAAM,EAAqB,sCAAsC;IAC/E,WAAW,EAAE,OAAO,CAAC,cAAc,CAAC,EAAK,0DAA0D;IACnG,QAAQ,EAAE,MAAM,EAAyB,wBAAwB;IACjE,QAAQ,GAAE,MAAW,EAAoB,4CAA4C;IACrF,EAAE,GAAE,QAAe,EAAsB,yCAAyC;IAClF,IAAI,GAAE,QAA0B;CAE9C"}
|
|
@@ -1,67 +0,0 @@
|
|
|
1
|
-
import { OnInit } from '@angular/core';
|
|
2
|
-
import { CommonService } from '../../services/common.service';
|
|
3
|
-
import { CrudService } from '../../services/crud.service';
|
|
4
|
-
import { HighPerformanceService } from '../../services/high-performance.service';
|
|
5
|
-
import { NotifierService } from '../../services/notifier.service';
|
|
6
|
-
import { SignalRService } from '../../services/signalr.service';
|
|
7
|
-
import { TemplateService } from '../../services/template.service';
|
|
8
|
-
import { FileExplorerService } from '../file-explorer/services/file-explorer.service';
|
|
9
|
-
import { ExportJob, JobItem } from './base-job/job-item';
|
|
10
|
-
import { TnCustomScrollbarComponent } from '../tn-custom-scrollbar/tn-custom-scrollbar.component';
|
|
11
|
-
export declare class ReportQueueComponent implements OnInit {
|
|
12
|
-
private _notifierService;
|
|
13
|
-
private _commonService;
|
|
14
|
-
private _fileService;
|
|
15
|
-
private _tempateService;
|
|
16
|
-
private _signalRService;
|
|
17
|
-
private _highPerformanceService;
|
|
18
|
-
private _crudService;
|
|
19
|
-
parentDataModel: any;
|
|
20
|
-
name: string;
|
|
21
|
-
header: string;
|
|
22
|
-
autoDownload: boolean;
|
|
23
|
-
scrollbar: TnCustomScrollbarComponent;
|
|
24
|
-
maxNameLength: number;
|
|
25
|
-
expand: boolean;
|
|
26
|
-
queueName: string;
|
|
27
|
-
hub: string;
|
|
28
|
-
dicStatus: import("../../public-api").SimpleDictionary;
|
|
29
|
-
statuses: {
|
|
30
|
-
Waiting: number;
|
|
31
|
-
Exporting: number;
|
|
32
|
-
Success: number;
|
|
33
|
-
Error: number;
|
|
34
|
-
Downloaded: number;
|
|
35
|
-
};
|
|
36
|
-
_queue: JobItem[];
|
|
37
|
-
maxHeight: number;
|
|
38
|
-
itemHeight: number;
|
|
39
|
-
popupHeight: number;
|
|
40
|
-
constructor(_notifierService: NotifierService, _commonService: CommonService, _fileService: FileExplorerService, _tempateService: TemplateService, _signalRService: SignalRService, _highPerformanceService: HighPerformanceService, _crudService: CrudService);
|
|
41
|
-
ngOnInit(): void;
|
|
42
|
-
toggleExpand(): void;
|
|
43
|
-
/**
|
|
44
|
-
* Thêm job vào để thực hiện
|
|
45
|
-
*/
|
|
46
|
-
addJob(exportJob: ExportJob): Promise<void>;
|
|
47
|
-
/**
|
|
48
|
-
* Thêm job vào để thực hiện
|
|
49
|
-
* - templateCode: code template cấu hình bên quản trị
|
|
50
|
-
* - data: dữ liệu export
|
|
51
|
-
* - fileName: tên của file được lưu
|
|
52
|
-
* - useSignalR: thay vì gọi request và chờ đến khi thực hiện xong
|
|
53
|
-
* trả về binaryFile thì tạo tiến trình riêng để export, và dùng signalR thông
|
|
54
|
-
* báo kết quả export, trả về fileId để tải.
|
|
55
|
-
*/
|
|
56
|
-
addJobWithData(templateCode: string, data: any, fileName: any, useSignalR?: boolean): Promise<void>;
|
|
57
|
-
Export(job: JobItem): Promise<void>;
|
|
58
|
-
ExportWithSignalR(job: JobItem): Promise<void>;
|
|
59
|
-
ExportCxExcelByCodeWithHPS(job: JobItem): Promise<void>;
|
|
60
|
-
download(job: any): void;
|
|
61
|
-
showQueue(): boolean;
|
|
62
|
-
getName(job: any): any;
|
|
63
|
-
cancelJob(job: any): void;
|
|
64
|
-
close(): void;
|
|
65
|
-
updatePopupHeight(): void;
|
|
66
|
-
}
|
|
67
|
-
//# sourceMappingURL=report-queue.component.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"report-queue.component.d.ts","sourceRoot":"","sources":["../../../../projects/tnx-shared/src/lib/components/report-queue/report-queue.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,MAAM,EAAoB,MAAM,eAAe,CAAC;AAEpE,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAC9D,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAC1D,OAAO,EAAE,sBAAsB,EAAE,MAAM,yCAAyC,CAAC;AACjF,OAAO,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAClE,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAChE,OAAO,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAClE,OAAO,EAAE,mBAAmB,EAAE,MAAM,iDAAiD,CAAC;AACtF,OAAO,EAAE,SAAS,EAAE,OAAO,EAAmC,MAAM,qBAAqB,CAAC;AAE1F,OAAO,EAAE,0BAA0B,EAAE,MAAM,sDAAsD,CAAC;AAElG,qBAKa,oBAAqB,YAAW,MAAM;IAmB3C,OAAO,CAAC,gBAAgB;IACxB,OAAO,CAAC,cAAc;IACtB,OAAO,CAAC,YAAY;IACpB,OAAO,CAAC,eAAe;IACvB,OAAO,CAAC,eAAe;IACvB,OAAO,CAAC,uBAAuB;IAC/B,OAAO,CAAC,YAAY;IAxBf,eAAe,EAAE,GAAG,CAAC;IACrB,IAAI,SAAiB;IACrB,MAAM,SAAkB;IACxB,YAAY,UAAS;IACN,SAAS,EAAE,0BAA0B,CAAC;IAC9D,aAAa,SAAM;IACnB,MAAM,UAAQ;IACd,SAAS,SAAkB;IAC3B,GAAG,SAAe;IAElB,SAAS,8CAAmC;IAC5C,QAAQ;;;;;;MAAkC;IAE1C,MAAM,EAAE,OAAO,EAAE,CAAM;IACvB,SAAS,SAAO;IAChB,UAAU,SAAM;IAChB,WAAW,SAAmB;gBAElB,gBAAgB,EAAE,eAAe,EACjC,cAAc,EAAE,aAAa,EAC7B,YAAY,EAAE,mBAAmB,EACjC,eAAe,EAAE,eAAe,EAChC,eAAe,EAAE,cAAc,EAC/B,uBAAuB,EAAE,sBAAsB,EAC/C,YAAY,EAAE,WAAW;IAIrC,QAAQ;IAMR,YAAY;IAIZ;;OAEG;IACG,MAAM,CAAC,SAAS,EAAE,SAAS;IAuCjC;;;;;;;;OAQG;IACG,cAAc,CAChB,YAAY,EAAE,MAAM,EACpB,IAAI,KAAA,EACJ,QAAQ,KAAA,EACR,UAAU,UAAQ;IAiBhB,MAAM,CAAC,GAAG,EAAE,OAAO;IAgBnB,iBAAiB,CAAC,GAAG,EAAE,OAAO;IA6B9B,0BAA0B,CAAC,GAAG,EAAE,OAAO;IAyC7C,QAAQ,CAAC,GAAG,KAAA;IAcZ,SAAS;IAMT,OAAO,CAAC,GAAG,KAAA;IAKX,SAAS,CAAC,GAAG,KAAA;IAyBb,KAAK;IAuBL,iBAAiB;CAIpB"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"report-queue.component.ngfactory.d.ts","sourceRoot":"","sources":["../../../../projects/tnx-shared/src/lib/components/report-queue/report-queue.component.ngfactory.ts"],"names":[],"mappings":""}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"report-queue.component.scss.shim.ngstyle.d.ts","sourceRoot":"","sources":["../../../../projects/tnx-shared/src/lib/components/report-queue/report-queue.component.scss.shim.ngstyle.ts"],"names":[],"mappings":""}
|
|
@@ -1,54 +0,0 @@
|
|
|
1
|
-
import { DatePipe } from '@angular/common';
|
|
2
|
-
import { TemplateConstant } from '../../../configs/component-contants';
|
|
3
|
-
import { SimpleDicItem, SimpleDictionary } from '../../../utils/dictionary';
|
|
4
|
-
export class JobItem {
|
|
5
|
-
constructor(code, data, fileName = 'BaoCao', status = REPORT_QUEUE_CONSTANT.statuses.Waiting) {
|
|
6
|
-
// Loại export.
|
|
7
|
-
this._type = JobTypes.SingnalR;
|
|
8
|
-
this._code = code;
|
|
9
|
-
const datepipe = new DatePipe('en-US');
|
|
10
|
-
let formattedDate = datepipe.transform(new Date(), 'ddMMyyyy_hhmmss');
|
|
11
|
-
this._fileName = `${fileName}_${formattedDate}${TemplateConstant.EXCEL_EXTENSION}`;
|
|
12
|
-
this._data = data || {};
|
|
13
|
-
this._status = status;
|
|
14
|
-
}
|
|
15
|
-
}
|
|
16
|
-
export class REPORT_QUEUE_CONSTANT {
|
|
17
|
-
}
|
|
18
|
-
REPORT_QUEUE_CONSTANT.statuses = {
|
|
19
|
-
Waiting: 1,
|
|
20
|
-
Exporting: 2,
|
|
21
|
-
Success: 3,
|
|
22
|
-
Error: 4,
|
|
23
|
-
Downloaded: 5
|
|
24
|
-
};
|
|
25
|
-
REPORT_QUEUE_CONSTANT.dicStatus = new SimpleDictionary([
|
|
26
|
-
new SimpleDicItem(REPORT_QUEUE_CONSTANT.statuses.Waiting, 'Chờ để xử lý'),
|
|
27
|
-
new SimpleDicItem(REPORT_QUEUE_CONSTANT.statuses.Exporting, 'Đang xử lý'),
|
|
28
|
-
new SimpleDicItem(REPORT_QUEUE_CONSTANT.statuses.Success, 'Tải xuống'),
|
|
29
|
-
new SimpleDicItem(REPORT_QUEUE_CONSTANT.statuses.Error, 'Xuất file chưa thành công'),
|
|
30
|
-
new SimpleDicItem(REPORT_QUEUE_CONSTANT.statuses.Downloaded, 'Đã tải'),
|
|
31
|
-
]);
|
|
32
|
-
export var JobTypes;
|
|
33
|
-
(function (JobTypes) {
|
|
34
|
-
JobTypes[JobTypes["Normal"] = 1] = "Normal";
|
|
35
|
-
JobTypes[JobTypes["SingnalR"] = 2] = "SingnalR";
|
|
36
|
-
JobTypes[JobTypes["Many"] = 3] = "Many"; // Export nhiều file cùng một lúc và nén vào file zip, mỗi file có thể là các loại biểu mẫu khác nhau.
|
|
37
|
-
})(JobTypes || (JobTypes = {}));
|
|
38
|
-
export class ExportJob {
|
|
39
|
-
constructor(templateCode, // code template cấu hình bên quản trị
|
|
40
|
-
dataPromise, // promise dùng để lấy dữ liệu, trả về dạng ResponseResult
|
|
41
|
-
fileName, // tên của file được lưu
|
|
42
|
-
rootName = '', // tên thuộc tính của lst dữ liệu ngoài cùng
|
|
43
|
-
cb = null, // dùng để xử lý dữ liệu sau khi lấy xong
|
|
44
|
-
type = JobTypes.Normal // Loại export.
|
|
45
|
-
) {
|
|
46
|
-
this.templateCode = templateCode;
|
|
47
|
-
this.dataPromise = dataPromise;
|
|
48
|
-
this.fileName = fileName;
|
|
49
|
-
this.rootName = rootName;
|
|
50
|
-
this.cb = cb;
|
|
51
|
-
this.type = type;
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiam9iLWl0ZW0uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90bngtc2hhcmVkL3NyYy9saWIvY29tcG9uZW50cy9yZXBvcnQtcXVldWUvYmFzZS1qb2Ivam9iLWl0ZW0udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRTNDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxhQUFhLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUU1RSxNQUFNLE9BQU8sT0FBTztJQWdCaEIsWUFBWSxJQUFZLEVBQUUsSUFBUyxFQUFFLFdBQW1CLFFBQVEsRUFBRSxNQUFNLEdBQUcscUJBQXFCLENBQUMsUUFBUSxDQUFDLE9BQU87UUFWakgsZUFBZTtRQUNmLFVBQUssR0FBYSxRQUFRLENBQUMsUUFBUSxDQUFDO1FBVWhDLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO1FBQ2xCLE1BQU0sUUFBUSxHQUFhLElBQUksUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFBO1FBQ2hELElBQUksYUFBYSxHQUFHLFFBQVEsQ0FBQyxTQUFTLENBQUMsSUFBSSxJQUFJLEVBQUUsRUFBRSxpQkFBaUIsQ0FBQyxDQUFBO1FBQ3JFLElBQUksQ0FBQyxTQUFTLEdBQUcsR0FBRyxRQUFRLElBQUksYUFBYSxHQUFHLGdCQUFnQixDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ25GLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUN4QixJQUFJLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQztJQUMxQixDQUFDO0NBRUo7QUFFRCxNQUFNLE9BQU8scUJBQXFCOztBQUN2Qiw4QkFBUSxHQUFHO0lBQ2QsT0FBTyxFQUFFLENBQUM7SUFDVixTQUFTLEVBQUUsQ0FBQztJQUNaLE9BQU8sRUFBRSxDQUFDO0lBQ1YsS0FBSyxFQUFFLENBQUM7SUFDUixVQUFVLEVBQUUsQ0FBQztDQUNoQixDQUFBO0FBRU0sK0JBQVMsR0FBRyxJQUFJLGdCQUFnQixDQUFDO0lBQ3BDLElBQUksYUFBYSxDQUFDLHFCQUFxQixDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUUsY0FBYyxDQUFDO0lBQ3pFLElBQUksYUFBYSxDQUFDLHFCQUFxQixDQUFDLFFBQVEsQ0FBQyxTQUFTLEVBQUUsWUFBWSxDQUFDO0lBQ3pFLElBQUksYUFBYSxDQUFDLHFCQUFxQixDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUUsV0FBVyxDQUFDO0lBQ3RFLElBQUksYUFBYSxDQUFDLHFCQUFxQixDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsMkJBQTJCLENBQUM7SUFDcEYsSUFBSSxhQUFhLENBQUMscUJBQXFCLENBQUMsUUFBUSxDQUFDLFVBQVUsRUFBRSxRQUFRLENBQUM7Q0FDekUsQ0FBQyxDQUFDO0FBR1AsTUFBTSxDQUFOLElBQVksUUFJWDtBQUpELFdBQVksUUFBUTtJQUNoQiwyQ0FBVSxDQUFBO0lBQ1YsK0NBQVksQ0FBQTtJQUNaLHVDQUFRLENBQUEsQ0FBUSxzR0FBc0c7QUFDMUgsQ0FBQyxFQUpXLFFBQVEsS0FBUixRQUFRLFFBSW5CO0FBRUQsTUFBTSxPQUFPLFNBQVM7SUFDbEIsWUFDVyxZQUFvQixFQUFxQixzQ0FBc0M7SUFDL0UsV0FBb0MsRUFBSywwREFBMEQ7SUFDbkcsUUFBZ0IsRUFBeUIsd0JBQXdCO0lBQ2pFLFdBQW1CLEVBQUUsRUFBb0IsNENBQTRDO0lBQ3JGLEtBQWUsSUFBSSxFQUFzQix5Q0FBeUM7SUFDbEYsT0FBaUIsUUFBUSxDQUFDLE1BQU0sQ0FBRSxlQUFlOztRQUxqRCxpQkFBWSxHQUFaLFlBQVksQ0FBUTtRQUNwQixnQkFBVyxHQUFYLFdBQVcsQ0FBeUI7UUFDcEMsYUFBUSxHQUFSLFFBQVEsQ0FBUTtRQUNoQixhQUFRLEdBQVIsUUFBUSxDQUFhO1FBQ3JCLE9BQUUsR0FBRixFQUFFLENBQWlCO1FBQ25CLFNBQUksR0FBSixJQUFJLENBQTRCO0lBQ3ZDLENBQUM7Q0FDUiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERhdGVQaXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IFJlc3BvbnNlUmVzdWx0IH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL3Jlc3BvbnNlLXJlc3VsdCc7XG5pbXBvcnQgeyBUZW1wbGF0ZUNvbnN0YW50IH0gZnJvbSAnLi4vLi4vLi4vY29uZmlncy9jb21wb25lbnQtY29udGFudHMnO1xuaW1wb3J0IHsgU2ltcGxlRGljSXRlbSwgU2ltcGxlRGljdGlvbmFyeSB9IGZyb20gJy4uLy4uLy4uL3V0aWxzL2RpY3Rpb25hcnknO1xuXG5leHBvcnQgY2xhc3MgSm9iSXRlbSB7XG4gICAgLy8gROG7ryBsaeG7h3UgZXhwb3J0XG4gICAgX2NvZGU6IHN0cmluZztcbiAgICBfZmlsZU5hbWU6IHN0cmluZztcbiAgICBfZGF0YTogYW55O1xuXG4gICAgLy8gTG/huqFpIGV4cG9ydC5cbiAgICBfdHlwZTogSm9iVHlwZXMgPSBKb2JUeXBlcy5TaW5nbmFsUjtcbiAgICBfdW5pcXVlS2V5O1xuXG4gICAgLy8gS+G6v3QgcXXhuqNcbiAgICBfc3RhdHVzOiBudW1iZXI7IC8vIFRy4bqhbmcgdGjDoWkgaGnhu4duIHThuqFpIGPhu6dhIGpvYlxuICAgIF9iaW5hcnlGaWxlOyAvLyBFeHBvcnQgdGjGsOG7nW5nIGLhurFuZyByZXF1ZXN0XG4gICAgX2ZpbGVJZDsgLy8gRXhwb3J0IGLhurFuZyBTaWduYWxSIGhv4bq3YyBIaWdoUGVyZm9ybWFuY2VTZXJ2aWNlXG4gICAgX2Vycm9yOiBzdHJpbmc7XG5cbiAgICBjb25zdHJ1Y3Rvcihjb2RlOiBzdHJpbmcsIGRhdGE6IGFueSwgZmlsZU5hbWU6IHN0cmluZyA9ICdCYW9DYW8nLCBzdGF0dXMgPSBSRVBPUlRfUVVFVUVfQ09OU1RBTlQuc3RhdHVzZXMuV2FpdGluZykge1xuICAgICAgICB0aGlzLl9jb2RlID0gY29kZTtcbiAgICAgICAgY29uc3QgZGF0ZXBpcGU6IERhdGVQaXBlID0gbmV3IERhdGVQaXBlKCdlbi1VUycpXG4gICAgICAgIGxldCBmb3JtYXR0ZWREYXRlID0gZGF0ZXBpcGUudHJhbnNmb3JtKG5ldyBEYXRlKCksICdkZE1NeXl5eV9oaG1tc3MnKVxuICAgICAgICB0aGlzLl9maWxlTmFtZSA9IGAke2ZpbGVOYW1lfV8ke2Zvcm1hdHRlZERhdGV9JHtUZW1wbGF0ZUNvbnN0YW50LkVYQ0VMX0VYVEVOU0lPTn1gO1xuICAgICAgICB0aGlzLl9kYXRhID0gZGF0YSB8fCB7fTtcbiAgICAgICAgdGhpcy5fc3RhdHVzID0gc3RhdHVzO1xuICAgIH1cblxufVxuXG5leHBvcnQgY2xhc3MgUkVQT1JUX1FVRVVFX0NPTlNUQU5UIHtcbiAgICBzdGF0aWMgc3RhdHVzZXMgPSB7XG4gICAgICAgIFdhaXRpbmc6IDEsXG4gICAgICAgIEV4cG9ydGluZzogMixcbiAgICAgICAgU3VjY2VzczogMyxcbiAgICAgICAgRXJyb3I6IDQsXG4gICAgICAgIERvd25sb2FkZWQ6IDVcbiAgICB9XG5cbiAgICBzdGF0aWMgZGljU3RhdHVzID0gbmV3IFNpbXBsZURpY3Rpb25hcnkoW1xuICAgICAgICBuZXcgU2ltcGxlRGljSXRlbShSRVBPUlRfUVVFVUVfQ09OU1RBTlQuc3RhdHVzZXMuV2FpdGluZywgJ0No4budIMSR4buDIHjhu60gbMO9JyksXG4gICAgICAgIG5ldyBTaW1wbGVEaWNJdGVtKFJFUE9SVF9RVUVVRV9DT05TVEFOVC5zdGF0dXNlcy5FeHBvcnRpbmcsICfEkGFuZyB44butIGzDvScpLFxuICAgICAgICBuZXcgU2ltcGxlRGljSXRlbShSRVBPUlRfUVVFVUVfQ09OU1RBTlQuc3RhdHVzZXMuU3VjY2VzcywgJ1ThuqNpIHh14buRbmcnKSxcbiAgICAgICAgbmV3IFNpbXBsZURpY0l0ZW0oUkVQT1JUX1FVRVVFX0NPTlNUQU5ULnN0YXR1c2VzLkVycm9yLCAnWHXhuqV0IGZpbGUgY2jGsGEgdGjDoG5oIGPDtG5nJyksXG4gICAgICAgIG5ldyBTaW1wbGVEaWNJdGVtKFJFUE9SVF9RVUVVRV9DT05TVEFOVC5zdGF0dXNlcy5Eb3dubG9hZGVkLCAnxJDDoyB04bqjaScpLFxuICAgIF0pO1xufVxuXG5leHBvcnQgZW51bSBKb2JUeXBlcyB7XG4gICAgTm9ybWFsID0gMSwgICAgIC8vIEV4cG9ydCB0aMaw4budbmcgcmVxdWVzdC9yZXNwb25zZTogZMO5bmcgduG7m2kgdGjhu51pIGdpYW4gbmjhu48gdHJvbmcgMSByZXF1ZXN0IHRpbWVvdXQuXG4gICAgU2luZ25hbFIgPSAyLCAgIC8vIEV4cG9ydCBzaWduYWxSLCBn4butaSB5w6p1IGPhuqd1IGV4cG9ydCB2w6Aga+G6v3QgdGjDumM6IGZpbGUgZOG7ryBsaeG7h3UgbOG7m24sIHRo4budaSBnaWFuID4gMSByZXF1ZXN0IHRpbWVvdXQuXG4gICAgTWFueSA9IDMgICAgICAgIC8vIEV4cG9ydCBuaGnhu4F1IGZpbGUgY8O5bmcgbeG7mXQgbMO6YyB2w6AgbsOpbiB2w6BvIGZpbGUgemlwLCBt4buXaSBmaWxlIGPDsyB0aOG7gyBsw6AgY8OhYyBsb+G6oWkgYmnhu4N1IG3huqt1IGtow6FjIG5oYXUuXG59XG5cbmV4cG9ydCBjbGFzcyBFeHBvcnRKb2Ige1xuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwdWJsaWMgdGVtcGxhdGVDb2RlOiBzdHJpbmcsICAgICAgICAgICAgICAgICAgICAvLyBjb2RlIHRlbXBsYXRlIGPhuqV1IGjDrG5oIGLDqm4gcXXhuqNuIHRy4buLXG4gICAgICAgIHB1YmxpYyBkYXRhUHJvbWlzZTogUHJvbWlzZTxSZXNwb25zZVJlc3VsdD4sICAgIC8vIHByb21pc2UgZMO5bmcgxJHhu4MgbOG6pXkgZOG7ryBsaeG7h3UsIHRy4bqjIHbhu4EgZOG6oW5nIFJlc3BvbnNlUmVzdWx0XG4gICAgICAgIHB1YmxpYyBmaWxlTmFtZTogc3RyaW5nLCAgICAgICAgICAgICAgICAgICAgICAgIC8vIHTDqm4gY+G7p2EgZmlsZSDEkcaw4bujYyBsxrB1XG4gICAgICAgIHB1YmxpYyByb290TmFtZTogc3RyaW5nID0gJycsICAgICAgICAgICAgICAgICAgIC8vIHTDqm4gdGh14buZYyB0w61uaCBj4bunYSBsc3QgZOG7ryBsaeG7h3Ugbmdvw6BpIGPDuW5nXG4gICAgICAgIHB1YmxpYyBjYjogRnVuY3Rpb24gPSBudWxsLCAgICAgICAgICAgICAgICAgICAgIC8vIGTDuW5nIMSR4buDIHjhu60gbMO9IGThu68gbGnhu4d1IHNhdSBraGkgbOG6pXkgeG9uZ1xuICAgICAgICBwdWJsaWMgdHlwZTogSm9iVHlwZXMgPSBKb2JUeXBlcy5Ob3JtYWwgIC8vIExv4bqhaSBleHBvcnQuXG4gICAgKSB7IH1cbn1cblxuXG4iXX0=
|
|
@@ -1,301 +0,0 @@
|
|
|
1
|
-
import { __awaiter } from "tslib";
|
|
2
|
-
import { Component, Input, ViewChild } from '@angular/core';
|
|
3
|
-
import { TemplateConstant } from '../../configs/component-contants';
|
|
4
|
-
import { CommonService } from '../../services/common.service';
|
|
5
|
-
import { CrudService } from '../../services/crud.service';
|
|
6
|
-
import { HighPerformanceService } from '../../services/high-performance.service';
|
|
7
|
-
import { NotifierService } from '../../services/notifier.service';
|
|
8
|
-
import { SignalRService } from '../../services/signalr.service';
|
|
9
|
-
import { TemplateService } from '../../services/template.service';
|
|
10
|
-
import { FileExplorerService } from '../file-explorer/services/file-explorer.service';
|
|
11
|
-
import { JobItem, JobTypes, REPORT_QUEUE_CONSTANT } from './base-job/job-item';
|
|
12
|
-
import * as FileSaver from 'file-saver';
|
|
13
|
-
import { TnCustomScrollbarComponent } from '../tn-custom-scrollbar/tn-custom-scrollbar.component';
|
|
14
|
-
export class ReportQueueComponent {
|
|
15
|
-
constructor(_notifierService, _commonService, _fileService, _tempateService, _signalRService, _highPerformanceService, _crudService) {
|
|
16
|
-
this._notifierService = _notifierService;
|
|
17
|
-
this._commonService = _commonService;
|
|
18
|
-
this._fileService = _fileService;
|
|
19
|
-
this._tempateService = _tempateService;
|
|
20
|
-
this._signalRService = _signalRService;
|
|
21
|
-
this._highPerformanceService = _highPerformanceService;
|
|
22
|
-
this._crudService = _crudService;
|
|
23
|
-
this.name = 'reportQueue';
|
|
24
|
-
this.header = 'Xuất báo cáo';
|
|
25
|
-
this.autoDownload = false;
|
|
26
|
-
this.maxNameLength = 40;
|
|
27
|
-
this.expand = true;
|
|
28
|
-
this.queueName = 'REPORT_QUEUE';
|
|
29
|
-
this.hub = 'CommonHub';
|
|
30
|
-
this.dicStatus = REPORT_QUEUE_CONSTANT.dicStatus;
|
|
31
|
-
this.statuses = REPORT_QUEUE_CONSTANT.statuses;
|
|
32
|
-
this._queue = [];
|
|
33
|
-
this.maxHeight = 200;
|
|
34
|
-
this.itemHeight = 50;
|
|
35
|
-
this.popupHeight = this.itemHeight;
|
|
36
|
-
}
|
|
37
|
-
ngOnInit() {
|
|
38
|
-
if (this.parentDataModel && this.name) {
|
|
39
|
-
this.parentDataModel[this.name] = this;
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
toggleExpand() {
|
|
43
|
-
this.expand = !this.expand;
|
|
44
|
-
}
|
|
45
|
-
/**
|
|
46
|
-
* Thêm job vào để thực hiện
|
|
47
|
-
*/
|
|
48
|
-
addJob(exportJob) {
|
|
49
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
50
|
-
var foundIndex = this._queue.findIndex(job => job._code == exportJob.templateCode && job._status == this.statuses.Exporting);
|
|
51
|
-
if (foundIndex !== -1) {
|
|
52
|
-
this._notifierService.showWarning("File cùng loại đang được xử lý, thử lại sau khi xử lý xong!");
|
|
53
|
-
return;
|
|
54
|
-
}
|
|
55
|
-
var job = new JobItem(exportJob.templateCode, {}, exportJob.fileName || exportJob.templateCode, this.statuses.Exporting);
|
|
56
|
-
this._queue.push(job);
|
|
57
|
-
this.updatePopupHeight();
|
|
58
|
-
setTimeout(() => {
|
|
59
|
-
this.scrollbar.scrollToBottom();
|
|
60
|
-
}, 100);
|
|
61
|
-
var rsData = yield exportJob.dataPromise;
|
|
62
|
-
if (rsData.data == null) {
|
|
63
|
-
job._status = this.statuses.Error;
|
|
64
|
-
return this._crudService.processErrorResponse(rsData);
|
|
65
|
-
}
|
|
66
|
-
if (exportJob.cb) {
|
|
67
|
-
job._data = exportJob.cb(rsData.data);
|
|
68
|
-
}
|
|
69
|
-
else if (exportJob.rootName) {
|
|
70
|
-
job._data[exportJob.rootName] = rsData.data;
|
|
71
|
-
}
|
|
72
|
-
else {
|
|
73
|
-
job._data = rsData.data;
|
|
74
|
-
}
|
|
75
|
-
switch (exportJob.type) {
|
|
76
|
-
case JobTypes.Normal:
|
|
77
|
-
this.Export(job);
|
|
78
|
-
break;
|
|
79
|
-
case JobTypes.SingnalR:
|
|
80
|
-
this.ExportWithSignalR(job);
|
|
81
|
-
break;
|
|
82
|
-
case JobTypes.Many:
|
|
83
|
-
break;
|
|
84
|
-
}
|
|
85
|
-
});
|
|
86
|
-
}
|
|
87
|
-
/**
|
|
88
|
-
* Thêm job vào để thực hiện
|
|
89
|
-
* - templateCode: code template cấu hình bên quản trị
|
|
90
|
-
* - data: dữ liệu export
|
|
91
|
-
* - fileName: tên của file được lưu
|
|
92
|
-
* - useSignalR: thay vì gọi request và chờ đến khi thực hiện xong
|
|
93
|
-
* trả về binaryFile thì tạo tiến trình riêng để export, và dùng signalR thông
|
|
94
|
-
* báo kết quả export, trả về fileId để tải.
|
|
95
|
-
*/
|
|
96
|
-
addJobWithData(templateCode, data, fileName, useSignalR = false) {
|
|
97
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
98
|
-
var foundIndex = this._queue.findIndex(job => job._code == templateCode && job._status == this.statuses.Exporting);
|
|
99
|
-
if (foundIndex !== -1) {
|
|
100
|
-
this._notifierService.showWarning("File cùng loại đang được xử lý, thử lại sau khi xử lý xong!");
|
|
101
|
-
return;
|
|
102
|
-
}
|
|
103
|
-
var job = new JobItem(templateCode, data, fileName || templateCode, this.statuses.Exporting);
|
|
104
|
-
this._queue.push(job);
|
|
105
|
-
if (useSignalR) {
|
|
106
|
-
this.ExportWithSignalR(job);
|
|
107
|
-
}
|
|
108
|
-
else {
|
|
109
|
-
this.Export(job);
|
|
110
|
-
}
|
|
111
|
-
});
|
|
112
|
-
}
|
|
113
|
-
Export(job) {
|
|
114
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
115
|
-
this._tempateService.exportCxExcelByCodePromise({ code: job._code, data: JSON.stringify(job._data), fileName: job._fileName })
|
|
116
|
-
.then(file => {
|
|
117
|
-
job._status = this.statuses.Success;
|
|
118
|
-
job._binaryFile = file;
|
|
119
|
-
if (this.autoDownload) {
|
|
120
|
-
this.download(job);
|
|
121
|
-
}
|
|
122
|
-
}).catch((err) => __awaiter(this, void 0, void 0, function* () {
|
|
123
|
-
job._status = this.statuses.Error;
|
|
124
|
-
const errorText = yield err.error.text();
|
|
125
|
-
this._crudService.processErrorResponse(JSON.parse(errorText || ''));
|
|
126
|
-
}));
|
|
127
|
-
});
|
|
128
|
-
}
|
|
129
|
-
ExportWithSignalR(job) {
|
|
130
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
131
|
-
const topic = this._commonService.guid();
|
|
132
|
-
job._uniqueKey = topic;
|
|
133
|
-
this._signalRService.start(this.hub, topic, (message) => {
|
|
134
|
-
var rs = JSON.parse(message);
|
|
135
|
-
if (rs.success) {
|
|
136
|
-
job._status = this.statuses.Success;
|
|
137
|
-
job._fileId = rs.data;
|
|
138
|
-
if (this.autoDownload) {
|
|
139
|
-
this.download(job);
|
|
140
|
-
}
|
|
141
|
-
}
|
|
142
|
-
else {
|
|
143
|
-
job._status = this.statuses.Error;
|
|
144
|
-
this._crudService.processErrorResponse(rs);
|
|
145
|
-
}
|
|
146
|
-
});
|
|
147
|
-
this._tempateService.ExportCxExcelByCodeWithSignalR({ code: job._code, data: JSON.stringify(job._data), fileName: job._fileName, topic: topic })
|
|
148
|
-
.then(rs => {
|
|
149
|
-
if (!rs.success) {
|
|
150
|
-
job._status = this.statuses.Error;
|
|
151
|
-
this._crudService.processErrorResponse(rs);
|
|
152
|
-
}
|
|
153
|
-
}).catch((err) => __awaiter(this, void 0, void 0, function* () {
|
|
154
|
-
job._status = this.statuses.Error;
|
|
155
|
-
this._crudService.processErrorResponse(err.error);
|
|
156
|
-
}));
|
|
157
|
-
;
|
|
158
|
-
});
|
|
159
|
-
}
|
|
160
|
-
ExportCxExcelByCodeWithHPS(job) {
|
|
161
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
162
|
-
this._highPerformanceService.createProcess(this.queueName, (arrMessage) => {
|
|
163
|
-
var message = arrMessage.pop();
|
|
164
|
-
var rs = JSON.parse(message);
|
|
165
|
-
if (rs.success) {
|
|
166
|
-
job._status = this.statuses.Success;
|
|
167
|
-
job._fileId = rs.data;
|
|
168
|
-
if (this.autoDownload) {
|
|
169
|
-
this._fileService.downloadFile(job._fileId);
|
|
170
|
-
job._status = this.statuses.Downloaded;
|
|
171
|
-
job._fileId = null;
|
|
172
|
-
}
|
|
173
|
-
}
|
|
174
|
-
else {
|
|
175
|
-
job._status = this.statuses.Error;
|
|
176
|
-
this._crudService.processErrorResponse(rs);
|
|
177
|
-
}
|
|
178
|
-
}).then(rs => {
|
|
179
|
-
job._uniqueKey = rs;
|
|
180
|
-
this._tempateService.ExportCxExcelByCodeWithHPS({
|
|
181
|
-
code: job._code,
|
|
182
|
-
data: JSON.stringify(job._data),
|
|
183
|
-
fileName: job._fileName,
|
|
184
|
-
topic: this.queueName,
|
|
185
|
-
uniqueKey: job._uniqueKey
|
|
186
|
-
}).then(rs => {
|
|
187
|
-
if (!rs.success) {
|
|
188
|
-
job._status = this.statuses.Error;
|
|
189
|
-
this._crudService.processErrorResponse(rs);
|
|
190
|
-
}
|
|
191
|
-
}, err => {
|
|
192
|
-
job._status = this.statuses.Error;
|
|
193
|
-
console.log("Lỗi gọi api server export");
|
|
194
|
-
});
|
|
195
|
-
}, err => {
|
|
196
|
-
job._status = this.statuses.Error;
|
|
197
|
-
console.log("Lỗi gọi HPS service :(");
|
|
198
|
-
});
|
|
199
|
-
});
|
|
200
|
-
}
|
|
201
|
-
download(job) {
|
|
202
|
-
if (job._status == this.statuses.Downloaded) {
|
|
203
|
-
return;
|
|
204
|
-
}
|
|
205
|
-
if (job._fileId) {
|
|
206
|
-
this._fileService.downloadFile(job._fileId, false, job._fileName);
|
|
207
|
-
}
|
|
208
|
-
else if (job._binaryFile) {
|
|
209
|
-
FileSaver.saveAs(job._binaryFile, job._fileName);
|
|
210
|
-
}
|
|
211
|
-
job._status = this.statuses.Downloaded;
|
|
212
|
-
job._binaryFile = null;
|
|
213
|
-
job._fileId = null;
|
|
214
|
-
}
|
|
215
|
-
showQueue() {
|
|
216
|
-
let show = this._queue && this._queue.length > 0;
|
|
217
|
-
return show;
|
|
218
|
-
}
|
|
219
|
-
getName(job) {
|
|
220
|
-
var name = job._fileName.length > this.maxNameLength ? `${job._fileName.substr(0, this.maxNameLength - 10)}[...]${TemplateConstant.EXCEL_EXTENSION}` : job._fileName;
|
|
221
|
-
return name;
|
|
222
|
-
}
|
|
223
|
-
cancelJob(job) {
|
|
224
|
-
let foundIndex = this._queue.findIndex(j => j._code == job._code);
|
|
225
|
-
if (foundIndex == -1) {
|
|
226
|
-
return;
|
|
227
|
-
}
|
|
228
|
-
let foundJob = this._queue[foundIndex];
|
|
229
|
-
if (foundJob._status == this.statuses.Exporting) {
|
|
230
|
-
this._notifierService
|
|
231
|
-
.showConfirm('File này đang được xử lý. Bạn có muốn dừng lại?', 'Hủy xuất file')
|
|
232
|
-
.then(rs => {
|
|
233
|
-
if (!rs) {
|
|
234
|
-
return;
|
|
235
|
-
}
|
|
236
|
-
let needUnsubscribe = foundJob._type == JobTypes.SingnalR && foundJob._uniqueKey;
|
|
237
|
-
if (needUnsubscribe) {
|
|
238
|
-
this._signalRService.unSubscribeViewCode(foundJob._uniqueKey, this.hub);
|
|
239
|
-
}
|
|
240
|
-
this._queue.splice(foundIndex, 1);
|
|
241
|
-
this.updatePopupHeight();
|
|
242
|
-
});
|
|
243
|
-
}
|
|
244
|
-
else if (foundJob._status != this.statuses.Exporting) {
|
|
245
|
-
this._queue.splice(foundIndex, 1);
|
|
246
|
-
this.updatePopupHeight();
|
|
247
|
-
}
|
|
248
|
-
}
|
|
249
|
-
close() {
|
|
250
|
-
var hasExporting = this._queue && this._queue.filter(item => item._status == this.statuses.Exporting).length > 0;
|
|
251
|
-
if (hasExporting) {
|
|
252
|
-
this._notifierService
|
|
253
|
-
.showConfirm('Có file đang được xử lý. Bạn có muốn dừng lại?', 'Hủy xuất file')
|
|
254
|
-
.then(rs => {
|
|
255
|
-
if (!rs) {
|
|
256
|
-
return;
|
|
257
|
-
}
|
|
258
|
-
let needUnsubscribe = false;
|
|
259
|
-
this._queue.forEach(job => {
|
|
260
|
-
needUnsubscribe = job._type == JobTypes.SingnalR && job._uniqueKey;
|
|
261
|
-
if (needUnsubscribe) {
|
|
262
|
-
this._signalRService.unSubscribeViewCode(job._uniqueKey, this.hub);
|
|
263
|
-
}
|
|
264
|
-
});
|
|
265
|
-
this._queue = [];
|
|
266
|
-
this.updatePopupHeight();
|
|
267
|
-
});
|
|
268
|
-
}
|
|
269
|
-
else {
|
|
270
|
-
this._queue = [];
|
|
271
|
-
}
|
|
272
|
-
}
|
|
273
|
-
updatePopupHeight() {
|
|
274
|
-
let height = (this._queue || []).length * this.itemHeight;
|
|
275
|
-
this.popupHeight = height > this.maxHeight ? this.maxHeight : height;
|
|
276
|
-
}
|
|
277
|
-
}
|
|
278
|
-
ReportQueueComponent.decorators = [
|
|
279
|
-
{ type: Component, args: [{
|
|
280
|
-
selector: 'report-queue',
|
|
281
|
-
template: "<div class=\"rq-container\" *ngIf=\"showQueue()\">\n <div class=\"rq-header\">\n <div>{{header | translate}}</div>\n <div>\n\n <p-checkbox [(ngModel)]=\"autoDownload\" binary=\"true\" pTooltip=\"T\u1EF1 \u0111\u1ED9ng t\u1EA3i\" tooltipPosition=\"left\">\n </p-checkbox>\n\n <a href=\"javascript:;\" (click)=\"toggleExpand()\" pTooltip=\"{{expand ? 'Thu g\u1ECDn' : 'M\u1EDF r\u1ED9ng'}}\"\n tooltipPosition=\"left\">\n <i class=\"fas\" [ngClass]=\"{'fa-compress' : expand, 'fa-expand': !expand}\"></i>\n </a>\n\n <a href=\"javascript:;\" (click)=\"close()\" pTooltip=\"\u0110\u00F3ng\">\n <i class=\"fas fa-times\"></i>\n </a>\n </div>\n </div>\n <div class=\"rq-body\" *ngIf=\"expand\">\n <tn-custom-scrollbar [style]=\"{'height.px': popupHeight}\" #scrollbar>\n <div class=\"re-job\" *ngFor=\"let job of _queue\">\n <div class=\"re-job-title\">\n <div>{{getName(job)}}</div>\n <div>\n <a href=\"javascript:;\" (click)=\"cancelJob(job)\">\n <i class=\"fas fa-times\"></i>\n </a>\n </div>\n </div>\n <div class=\"re-job-result\"\n [ngClass]=\"{'job-success': job._status == statuses.Success, 'job-error': job._status == statuses.Error, 'job-exporting' : job._status == statuses.Exporting, 'job-downloaded': job._status == statuses.Downloaded}\">\n <span *ngIf=\"job._status != statuses.Success && job._status != statuses.Exporting\">\n {{dicStatus.get(job._status) | translate}}\n </span>\n\n <span *ngIf=\"job._status == statuses.Exporting\">\n <div class=\"loader\"></div>\n {{dicStatus.get(job._status) | translate}}\n </span>\n\n <a href=\"javascript:;\" (click)=\"download(job)\" class=\"job-success\"\n *ngIf=\"job._status == statuses.Success\">\n <i class=\"fas fa-download\"></i> {{dicStatus.get(job._status) | translate}}\n </a>\n </div>\n </div>\n </tn-custom-scrollbar>\n </div>\n</div>\n",
|
|
282
|
-
styles: ["::ng-deep .rq-container{width:350px;border:1px solid #3192e1;border-radius:3px;background-color:#fff}::ng-deep .rq-container .rq-header{background-color:#3192e1;padding:5px 10px;display:flex;border-radius:3px 3px 0 0;color:#fff;font-weight:400;font-size:15px}::ng-deep .rq-container .rq-header>div:first-child{flex-grow:1}::ng-deep .rq-container .rq-header>div:last-child>a{font-weight:200;margin-left:10px;color:#fff}::ng-deep .rq-container .rq-header>div:last-child>a>i{font-size:13px}::ng-deep .rq-container .rq-header>div:last-child .ui-chkbox-box{width:14px;height:14px;margin-top:-2px}::ng-deep .rq-container .rq-header>div:last-child .ui-chkbox-icon{font-size:13px;line-height:13px}::ng-deep .rq-container .rq-body .re-job{padding:6px 10px;display:flex;flex-direction:column}::ng-deep .rq-container .rq-body .re-job:first-child{padding-top:6px}::ng-deep .rq-container .rq-body .re-job .re-job-title{display:flex;font-size:13px}::ng-deep .rq-container .rq-body .re-job .re-job-title>div:first-child{flex-grow:1;padding-bottom:3px}::ng-deep .rq-container .rq-body .re-job .re-job-title>div a{color:#3192e1}::ng-deep .rq-container .rq-body .re-job .re-job-result{font-size:11px}::ng-deep .rq-container .rq-body .re-job .re-job-result>span{display:flex;align-items:center;height:20px}::ng-deep .rq-container .rq-body .re-job .re-job-result.job-exporting{color:#3192e1}::ng-deep .rq-container .rq-body .re-job .re-job-result.job-exporting>span>div{margin-right:5px}::ng-deep .rq-container .rq-body .re-job .re-job-result.job-success{color:#1ab91a}::ng-deep .rq-container .rq-body .re-job .re-job-result.job-success>a>i{margin-right:2px}::ng-deep .rq-container .rq-body .re-job .re-job-result.job-error{color:#e95353}::ng-deep .rq-container .rq-body .re-job .re-job-result.job-downloaded{color:#b2b2b2}::ng-deep .loader{border-radius:50%;border:2px solid #bcdbf5;border-top-color:#3192e1;width:12px;height:12px;animation:spin 1s linear infinite;display:inline-block}@keyframes spin{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}:host{position:absolute;bottom:1px;right:2px;z-index:1000}"]
|
|
283
|
-
},] }
|
|
284
|
-
];
|
|
285
|
-
ReportQueueComponent.ctorParameters = () => [
|
|
286
|
-
{ type: NotifierService },
|
|
287
|
-
{ type: CommonService },
|
|
288
|
-
{ type: FileExplorerService },
|
|
289
|
-
{ type: TemplateService },
|
|
290
|
-
{ type: SignalRService },
|
|
291
|
-
{ type: HighPerformanceService },
|
|
292
|
-
{ type: CrudService }
|
|
293
|
-
];
|
|
294
|
-
ReportQueueComponent.propDecorators = {
|
|
295
|
-
parentDataModel: [{ type: Input }],
|
|
296
|
-
name: [{ type: Input }],
|
|
297
|
-
header: [{ type: Input }],
|
|
298
|
-
autoDownload: [{ type: Input }],
|
|
299
|
-
scrollbar: [{ type: ViewChild, args: ['scrollbar',] }]
|
|
300
|
-
};
|
|
301
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwb3J0LXF1ZXVlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RueC1zaGFyZWQvc3JjL2xpYi9jb21wb25lbnRzL3JlcG9ydC1xdWV1ZS9yZXBvcnQtcXVldWUuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFVLEtBQUssRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDcEUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDcEUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQzlELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUNqRixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDbEUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ2hFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNsRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxpREFBaUQsQ0FBQztBQUN0RixPQUFPLEVBQWEsT0FBTyxFQUFFLFFBQVEsRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQzFGLE9BQU8sS0FBSyxTQUFTLE1BQU0sWUFBWSxDQUFDO0FBQ3hDLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLHNEQUFzRCxDQUFDO0FBT2xHLE1BQU0sT0FBTyxvQkFBb0I7SUFrQjdCLFlBQ1ksZ0JBQWlDLEVBQ2pDLGNBQTZCLEVBQzdCLFlBQWlDLEVBQ2pDLGVBQWdDLEVBQ2hDLGVBQStCLEVBQy9CLHVCQUErQyxFQUMvQyxZQUF5QjtRQU56QixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWlCO1FB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USxlQUFlO1lBSGYsYUFBYTtZQU1iLG1CQUFtQjtZQURuQixlQUFlO1lBRGYsY0FBYztZQUZkLHNCQUFzQjtZQUR0QixXQUFXOzs7OEJBZ0JmLEtBQUs7bUJBQ0wsS0FBSztxQkFDTCxLQUFLOzJCQUNMLEtBQUs7d0JBQ0wsU0FBUyxTQUFDLFdBQVciLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgSW5wdXQsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgVGVtcGxhdGVDb25zdGFudCB9IGZyb20gJy4uLy4uL2NvbmZpZ3MvY29tcG9uZW50LWNvbnRhbnRzJztcbmltcG9ydCB7IENvbW1vblNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9jb21tb24uc2VydmljZSc7XG5pbXBvcnQgeyBDcnVkU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2NydWQuc2VydmljZSc7XG5pbXBvcnQgeyBIaWdoUGVyZm9ybWFuY2VTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvaGlnaC1wZXJmb3JtYW5jZS5zZXJ2aWNlJztcbmltcG9ydCB7IE5vdGlmaWVyU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL25vdGlmaWVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgU2lnbmFsUlNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9zaWduYWxyLnNlcnZpY2UnO1xuaW1wb3J0IHsgVGVtcGxhdGVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvdGVtcGxhdGUuc2VydmljZSc7XG5pbXBvcnQgeyBGaWxlRXhwbG9yZXJTZXJ2aWNlIH0gZnJvbSAnLi4vZmlsZS1leHBsb3Jlci9zZXJ2aWNlcy9maWxlLWV4cGxvcmVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgRXhwb3J0Sm9iLCBKb2JJdGVtLCBKb2JUeXBlcywgUkVQT1JUX1FVRVVFX0NPTlNUQU5UIH0gZnJvbSAnLi9iYXNlLWpvYi9qb2ItaXRlbSc7XG5pbXBvcnQgKiBhcyBGaWxlU2F2ZXIgZnJvbSAnZmlsZS1zYXZlcic7XG5pbXBvcnQgeyBUbkN1c3RvbVNjcm9sbGJhckNvbXBvbmVudCB9IGZyb20gJy4uL3RuLWN1c3RvbS1zY3JvbGxiYXIvdG4tY3VzdG9tLXNjcm9sbGJhci5jb21wb25lbnQnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ3JlcG9ydC1xdWV1ZScsXG4gICAgdGVtcGxhdGVVcmw6ICcuL3JlcG9ydC1xdWV1ZS5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vcmVwb3J0LXF1ZXVlLmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgUmVwb3J0UXVldWVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICAgIEBJbnB1dCgpIHBhcmVudERhdGFNb2RlbDogYW55O1xuICAgIEBJbnB1dCgpIG5hbWUgPSAncmVwb3J0UXVldWUnO1xuICAgIEBJbnB1dCgpIGhlYWRlciA9ICdYdeG6pXQgYsOhbyBjw6FvJztcbiAgICBASW5wdXQoKSBhdXRvRG93bmxvYWQgPSBmYWxzZTtcbiAgICBAVmlld0NoaWxkKCdzY3JvbGxiYXInKSBzY3JvbGxiYXI6IFRuQ3VzdG9tU2Nyb2xsYmFyQ29tcG9uZW50O1xuICAgIG1heE5hbWVMZW5ndGggPSA0MDtcbiAgICBleHBhbmQgPSB0cnVlO1xuICAgIHF1ZXVlTmFtZSA9ICdSRVBPUlRfUVVFVUUnO1xuICAgIGh1YiA9ICdDb21tb25IdWInO1xuXG4gICAgZGljU3RhdHVzID0gUkVQT1JUX1FVRVVFX0NPTlNUQU5ULmRpY1N0YXR1cztcbiAgICBzdGF0dXNlcyA9IFJFUE9SVF9RVUVVRV9DT05TVEFOVC5zdGF0dXNlcztcblxuICAgIF9xdWV1ZTogSm9iSXRlbVtdID0gW107XG4gICAgbWF4SGVpZ2h0ID0gMjAwO1xuICAgIGl0ZW1IZWlnaHQgPSA1MDtcbiAgICBwb3B1cEhlaWdodCA9IHRoaXMuaXRlbUhlaWdodDtcbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSBfbm90aWZpZXJTZXJ2aWNlOiBOb3RpZmllclNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgX2NvbW1vblNlcnZpY2U6IENvbW1vblNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgX2ZpbGVTZXJ2aWNlOiBGaWxlRXhwbG9yZXJTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIF90ZW1wYXRlU2VydmljZTogVGVtcGxhdGVTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIF9zaWduYWxSU2VydmljZTogU2lnbmFsUlNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgX2hpZ2hQZXJmb3JtYW5jZVNlcnZpY2U6IEhpZ2hQZXJmb3JtYW5jZVNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgX2NydWRTZXJ2aWNlOiBDcnVkU2VydmljZVxuICAgICkge1xuICAgIH1cblxuICAgIG5nT25Jbml0KCkge1xuICAgICAgICBpZiAodGhpcy5wYXJlbnREYXRhTW9kZWwgJiYgdGhpcy5uYW1lKSB7XG4gICAgICAgICAgICB0aGlzLnBhcmVudERhdGFNb2RlbFt0aGlzLm5hbWVdID0gdGhpcztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHRvZ2dsZUV4cGFuZCgpIHtcbiAgICAgICAgdGhpcy5leHBhbmQgPSAhdGhpcy5leHBhbmQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGjDqm0gam9iIHbDoG8gxJHhu4MgdGjhu7FjIGhp4buHblxuICAgICAqL1xuICAgIGFzeW5jIGFkZEpvYihleHBvcnRKb2I6IEV4cG9ydEpvYikge1xuICAgICAgICB2YXIgZm91bmRJbmRleCA9IHRoaXMuX3F1ZXVlLmZpbmRJbmRleChqb2IgPT4gam9iLl9jb2RlID09IGV4cG9ydEpvYi50ZW1wbGF0ZUNvZGUgJiYgam9iLl9zdGF0dXMgPT0gdGhpcy5zdGF0dXNlcy5FeHBvcnRpbmcpO1xuICAgICAgICBpZiAoZm91bmRJbmRleCAhPT0gLTEpIHtcbiAgICAgICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93V2FybmluZyhcIkZpbGUgY8O5bmcgbG/huqFpIMSRYW5nIMSRxrDhu6NjIHjhu60gbMO9LCB0aOG7rSBs4bqhaSBzYXUga2hpIHjhu60gbMO9IHhvbmchXCIpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGpvYiA9IG5ldyBKb2JJdGVtKGV4cG9ydEpvYi50ZW1wbGF0ZUNvZGUsIHt9LCBleHBvcnRKb2IuZmlsZU5hbWUgfHwgZXhwb3J0Sm9iLnRlbXBsYXRlQ29kZSwgdGhpcy5zdGF0dXNlcy5FeHBvcnRpbmcpO1xuICAgICAgICB0aGlzLl9xdWV1ZS5wdXNoKGpvYik7XG4gICAgICAgIHRoaXMudXBkYXRlUG9wdXBIZWlnaHQoKTtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnNjcm9sbGJhci5zY3JvbGxUb0JvdHRvbSgpO1xuICAgICAgICB9LCAxMDApO1xuICAgICAgICB2YXIgcnNEYXRhID0gYXdhaXQgZXhwb3J0Sm9iLmRhdGFQcm9taXNlO1xuICAgICAgICBpZiAocnNEYXRhLmRhdGEgPT0gbnVsbCkge1xuICAgICAgICAgICAgam9iLl9zdGF0dXMgPSB0aGlzLnN0YXR1c2VzLkVycm9yO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2NydWRTZXJ2aWNlLnByb2Nlc3NFcnJvclJlc3BvbnNlKHJzRGF0YSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZXhwb3J0Sm9iLmNiKSB7XG4gICAgICAgICAgICBqb2IuX2RhdGEgPSAoPEZ1bmN0aW9uPmV4cG9ydEpvYi5jYikocnNEYXRhLmRhdGEpO1xuICAgICAgICB9IGVsc2UgaWYgKGV4cG9ydEpvYi5yb290TmFtZSkge1xuICAgICAgICAgICAgam9iLl9kYXRhW2V4cG9ydEpvYi5yb290TmFtZV0gPSByc0RhdGEuZGF0YTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGpvYi5fZGF0YSA9IHJzRGF0YS5kYXRhO1xuICAgICAgICB9XG5cbiAgICAgICAgc3dpdGNoIChleHBvcnRKb2IudHlwZSkge1xuICAgICAgICAgICAgY2FzZSBKb2JUeXBlcy5Ob3JtYWw6XG4gICAgICAgICAgICAgICAgdGhpcy5FeHBvcnQoam9iKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgSm9iVHlwZXMuU2luZ25hbFI6XG4gICAgICAgICAgICAgICAgdGhpcy5FeHBvcnRXaXRoU2lnbmFsUihqb2IpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBKb2JUeXBlcy5NYW55OlxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGjDqm0gam9iIHbDoG8gxJHhu4MgdGjhu7FjIGhp4buHblxuICAgICAqICAtIHRlbXBsYXRlQ29kZTogY29kZSB0ZW1wbGF0ZSBj4bqldSBow6xuaCBiw6puIHF14bqjbiB0cuG7i1xuICAgICAqICAtIGRhdGE6IGThu68gbGnhu4d1IGV4cG9ydFxuICAgICAqICAtIGZpbGVOYW1lOiB0w6puIGPhu6dhIGZpbGUgxJHGsOG7o2MgbMawdVxuICAgICAqICAtIHVzZVNpZ25hbFI6IHRoYXkgdsOsIGfhu41pIHJlcXVlc3QgdsOgIGNo4budIMSR4bq/biBraGkgdGjhu7FjIGhp4buHbiB4b25nXG4gICAgICogICAgICB0cuG6oyB24buBIGJpbmFyeUZpbGUgdGjDrCB04bqhbyB0aeG6v24gdHLDrG5oIHJpw6puZyDEkeG7gyBleHBvcnQsIHbDoCBkw7luZyBzaWduYWxSIHRow7RuZ1xuICAgICAqICAgICAgYsOhbyBr4bq/dCBxdeG6oyBleHBvcnQsIHRy4bqjIHbhu4EgZmlsZUlkIMSR4buDIHThuqNpLlxuICAgICAqL1xuICAgIGFzeW5jIGFkZEpvYldpdGhEYXRhKFxuICAgICAgICB0ZW1wbGF0ZUNvZGU6IHN0cmluZyxcbiAgICAgICAgZGF0YSxcbiAgICAgICAgZmlsZU5hbWUsXG4gICAgICAgIHVzZVNpZ25hbFIgPSBmYWxzZVxuICAgICkge1xuICAgICAgICB2YXIgZm91bmRJbmRleCA9IHRoaXMuX3F1ZXVlLmZpbmRJbmRleChqb2IgPT4gam9iLl9jb2RlID09IHRlbXBsYXRlQ29kZSAmJiBqb2IuX3N0YXR1cyA9PSB0aGlzLnN0YXR1c2VzLkV4cG9ydGluZyk7XG4gICAgICAgIGlmIChmb3VuZEluZGV4ICE9PSAtMSkge1xuICAgICAgICAgICAgdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dXYXJuaW5nKFwiRmlsZSBjw7luZyBsb+G6oWkgxJFhbmcgxJHGsOG7o2MgeOG7rSBsw70sIHRo4butIGzhuqFpIHNhdSBraGkgeOG7rSBsw70geG9uZyFcIik7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgam9iID0gbmV3IEpvYkl0ZW0odGVtcGxhdGVDb2RlLCBkYXRhLCBmaWxlTmFtZSB8fCB0ZW1wbGF0ZUNvZGUsIHRoaXMuc3RhdHVzZXMuRXhwb3J0aW5nKTtcbiAgICAgICAgdGhpcy5fcXVldWUucHVzaChqb2IpO1xuICAgICAgICBpZiAodXNlU2lnbmFsUikge1xuICAgICAgICAgICAgdGhpcy5FeHBvcnRXaXRoU2lnbmFsUihqb2IpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5FeHBvcnQoam9iKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGFzeW5jIEV4cG9ydChqb2I6IEpvYkl0ZW0pIHtcbiAgICAgICAgdGhpcy5fdGVtcGF0ZVNlcnZpY2UuZXhwb3J0Q3hFeGNlbEJ5Q29kZVByb21pc2UoeyBjb2RlOiBqb2IuX2NvZGUsIGRhdGE6IEpTT04uc3RyaW5naWZ5KGpvYi5fZGF0YSksIGZpbGVOYW1lOiBqb2IuX2ZpbGVOYW1lIH0pXG4gICAgICAgICAgICAudGhlbihmaWxlID0+IHtcbiAgICAgICAgICAgICAgICBqb2IuX3N0YXR1cyA9IHRoaXMuc3RhdHVzZXMuU3VjY2VzcztcbiAgICAgICAgICAgICAgICBqb2IuX2JpbmFyeUZpbGUgPSBmaWxlO1xuXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuYXV0b0Rvd25sb2FkKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZG93bmxvYWQoam9iKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KS5jYXRjaChhc3luYyBlcnIgPT4ge1xuICAgICAgICAgICAgICAgIGpvYi5fc3RhdHVzID0gdGhpcy5zdGF0dXNlcy5FcnJvcjtcbiAgICAgICAgICAgICAgICBjb25zdCBlcnJvclRleHQgPSBhd2FpdCBlcnIuZXJyb3IudGV4dCgpO1xuICAgICAgICAgICAgICAgIHRoaXMuX2NydWRTZXJ2aWNlLnByb2Nlc3NFcnJvclJlc3BvbnNlKEpTT04ucGFyc2UoZXJyb3JUZXh0IHx8ICcnKSk7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBhc3luYyBFeHBvcnRXaXRoU2lnbmFsUihqb2I6IEpvYkl0ZW0pIHtcbiAgICAgICAgY29uc3QgdG9waWMgPSB0aGlzLl9jb21tb25TZXJ2aWNlLmd1aWQoKTtcbiAgICAgICAgam9iLl91bmlxdWVLZXkgPSB0b3BpYztcbiAgICAgICAgdGhpcy5fc2lnbmFsUlNlcnZpY2Uuc3RhcnQodGhpcy5odWIsIHRvcGljLCAobWVzc2FnZSkgPT4ge1xuICAgICAgICAgICAgdmFyIHJzID0gSlNPTi5wYXJzZShtZXNzYWdlKTtcbiAgICAgICAgICAgIGlmIChycy5zdWNjZXNzKSB7XG4gICAgICAgICAgICAgICAgam9iLl9zdGF0dXMgPSB0aGlzLnN0YXR1c2VzLlN1Y2Nlc3M7XG4gICAgICAgICAgICAgICAgam9iLl9maWxlSWQgPSBycy5kYXRhO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmF1dG9Eb3dubG9hZCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRvd25sb2FkKGpvYik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBqb2IuX3N0YXR1cyA9IHRoaXMuc3RhdHVzZXMuRXJyb3I7XG4gICAgICAgICAgICAgICAgdGhpcy5fY3J1ZFNlcnZpY2UucHJvY2Vzc0Vycm9yUmVzcG9uc2UocnMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLl90ZW1wYXRlU2VydmljZS5FeHBvcnRDeEV4Y2VsQnlDb2RlV2l0aFNpZ25hbFIoeyBjb2RlOiBqb2IuX2NvZGUsIGRhdGE6IEpTT04uc3RyaW5naWZ5KGpvYi5fZGF0YSksIGZpbGVOYW1lOiBqb2IuX2ZpbGVOYW1lLCB0b3BpYzogdG9waWMgfSlcbiAgICAgICAgICAgIC50aGVuKHJzID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIXJzLnN1Y2Nlc3MpIHtcbiAgICAgICAgICAgICAgICAgICAgam9iLl9zdGF0dXMgPSB0aGlzLnN0YXR1c2VzLkVycm9yO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jcnVkU2VydmljZS5wcm9jZXNzRXJyb3JSZXNwb25zZShycyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSkuY2F0Y2goYXN5bmMgZXJyID0+IHtcbiAgICAgICAgICAgICAgICBqb2IuX3N0YXR1cyA9IHRoaXMuc3RhdHVzZXMuRXJyb3I7XG4gICAgICAgICAgICAgICAgdGhpcy5fY3J1ZFNlcnZpY2UucHJvY2Vzc0Vycm9yUmVzcG9uc2UoZXJyLmVycm9yKTtcbiAgICAgICAgICAgIH0pOztcbiAgICB9XG5cbiAgICBhc3luYyBFeHBvcnRDeEV4Y2VsQnlDb2RlV2l0aEhQUyhqb2I6IEpvYkl0ZW0pIHtcbiAgICAgICAgdGhpcy5faGlnaFBlcmZvcm1hbmNlU2VydmljZS5jcmVhdGVQcm9jZXNzKHRoaXMucXVldWVOYW1lLCAoYXJyTWVzc2FnZSkgPT4ge1xuICAgICAgICAgICAgdmFyIG1lc3NhZ2UgPSBhcnJNZXNzYWdlLnBvcCgpO1xuICAgICAgICAgICAgdmFyIHJzID0gSlNPTi5wYXJzZShtZXNzYWdlKTtcbiAgICAgICAgICAgIGlmIChycy5zdWNjZXNzKSB7XG4gICAgICAgICAgICAgICAgam9iLl9zdGF0dXMgPSB0aGlzLnN0YXR1c2VzLlN1Y2Nlc3M7XG4gICAgICAgICAgICAgICAgam9iLl9maWxlSWQgPSBycy5kYXRhO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmF1dG9Eb3dubG9hZCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9maWxlU2VydmljZS5kb3dubG9hZEZpbGUoam9iLl9maWxlSWQpO1xuICAgICAgICAgICAgICAgICAgICBqb2IuX3N0YXR1cyA9IHRoaXMuc3RhdHVzZXMuRG93bmxvYWRlZDtcbiAgICAgICAgICAgICAgICAgICAgam9iLl9maWxlSWQgPSBudWxsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgam9iLl9zdGF0dXMgPSB0aGlzLnN0YXR1c2VzLkVycm9yO1xuICAgICAgICAgICAgICAgIHRoaXMuX2NydWRTZXJ2aWNlLnByb2Nlc3NFcnJvclJlc3BvbnNlKHJzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSkudGhlbihycyA9PiB7XG4gICAgICAgICAgICBqb2IuX3VuaXF1ZUtleSA9IHJzO1xuXG4gICAgICAgICAgICB0aGlzLl90ZW1wYXRlU2VydmljZS5FeHBvcnRDeEV4Y2VsQnlDb2RlV2l0aEhQUyh7XG4gICAgICAgICAgICAgICAgY29kZTogam9iLl9jb2RlLFxuICAgICAgICAgICAgICAgIGRhdGE6IEpTT04uc3RyaW5naWZ5KGpvYi5fZGF0YSksXG4gICAgICAgICAgICAgICAgZmlsZU5hbWU6IGpvYi5fZmlsZU5hbWUsXG4gICAgICAgICAgICAgICAgdG9waWM6IHRoaXMucXVldWVOYW1lLFxuICAgICAgICAgICAgICAgIHVuaXF1ZUtleTogam9iLl91bmlxdWVLZXlcbiAgICAgICAgICAgIH0pLnRoZW4ocnMgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghcnMuc3VjY2Vzcykge1xuICAgICAgICAgICAgICAgICAgICBqb2IuX3N0YXR1cyA9IHRoaXMuc3RhdHVzZXMuRXJyb3I7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NydWRTZXJ2aWNlLnByb2Nlc3NFcnJvclJlc3BvbnNlKHJzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCBlcnIgPT4ge1xuICAgICAgICAgICAgICAgIGpvYi5fc3RhdHVzID0gdGhpcy5zdGF0dXNlcy5FcnJvcjtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIkzhu5dpIGfhu41pIGFwaSBzZXJ2ZXIgZXhwb3J0XCIpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgICAgICBlcnIgPT4ge1xuICAgICAgICAgICAgICAgIGpvYi5fc3RhdHVzID0gdGhpcy5zdGF0dXNlcy5FcnJvcjtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIkzhu5dpIGfhu41pIEhQUyBzZXJ2aWNlIDooXCIpO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgZG93bmxvYWQoam9iKSB7XG4gICAgICAgIGlmIChqb2IuX3N0YXR1cyA9PSB0aGlzLnN0YXR1c2VzLkRvd25sb2FkZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoam9iLl9maWxlSWQpIHtcbiAgICAgICAgICAgIHRoaXMuX2ZpbGVTZXJ2aWNlLmRvd25sb2FkRmlsZShqb2IuX2ZpbGVJZCwgZmFsc2UsIGpvYi5fZmlsZU5hbWUpO1xuICAgICAgICB9IGVsc2UgaWYgKGpvYi5fYmluYXJ5RmlsZSkge1xuICAgICAgICAgICAgRmlsZVNhdmVyLnNhdmVBcyhqb2IuX2JpbmFyeUZpbGUsIGpvYi5fZmlsZU5hbWUpO1xuICAgICAgICB9XG4gICAgICAgIGpvYi5fc3RhdHVzID0gdGhpcy5zdGF0dXNlcy5Eb3dubG9hZGVkO1xuICAgICAgICBqb2IuX2JpbmFyeUZpbGUgPSBudWxsO1xuICAgICAgICBqb2IuX2ZpbGVJZCA9IG51bGw7XG4gICAgfVxuXG4gICAgc2hvd1F1ZXVlKCkge1xuICAgICAgICBsZXQgc2hvdyA9IHRoaXMuX3F1ZXVlICYmIHRoaXMuX3F1ZXVlLmxlbmd0aCA+IDA7XG5cbiAgICAgICAgcmV0dXJuIHNob3c7XG4gICAgfVxuXG4gICAgZ2V0TmFtZShqb2IpIHtcbiAgICAgICAgdmFyIG5hbWUgPSBqb2IuX2ZpbGVOYW1lLmxlbmd0aCA+IHRoaXMubWF4TmFtZUxlbmd0aCA/IGAke2pvYi5fZmlsZU5hbWUuc3Vic3RyKDAsIHRoaXMubWF4TmFtZUxlbmd0aCAtIDEwKX1bLi4uXSR7VGVtcGxhdGVDb25zdGFudC5FWENFTF9FWFRFTlNJT059YCA6IGpvYi5fZmlsZU5hbWU7XG4gICAgICAgIHJldHVybiBuYW1lO1xuICAgIH1cblxuICAgIGNhbmNlbEpvYihqb2IpIHtcbiAgICAgICAgbGV0IGZvdW5kSW5kZXggPSB0aGlzLl9xdWV1ZS5maW5kSW5kZXgoaiA9PiBqLl9jb2RlID09IGpvYi5fY29kZSk7XG4gICAgICAgIGlmIChmb3VuZEluZGV4ID09IC0xKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgZm91bmRKb2IgPSB0aGlzLl9xdWV1ZVtmb3VuZEluZGV4XTtcbiAgICAgICAgaWYgKGZvdW5kSm9iLl9zdGF0dXMgPT0gdGhpcy5zdGF0dXNlcy5FeHBvcnRpbmcpIHtcbiAgICAgICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZVxuICAgICAgICAgICAgICAgIC5zaG93Q29uZmlybSgnRmlsZSBuw6B5IMSRYW5nIMSRxrDhu6NjIHjhu60gbMO9LiBC4bqhbiBjw7MgbXXhu5FuIGThu6tuZyBs4bqhaT8nLCAnSOG7p3kgeHXhuqV0IGZpbGUnKVxuICAgICAgICAgICAgICAgIC50aGVuKHJzID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFycykgeyByZXR1cm47IH1cbiAgICAgICAgICAgICAgICAgICAgbGV0IG5lZWRVbnN1YnNjcmliZSA9IGZvdW5kSm9iLl90eXBlID09IEpvYlR5cGVzLlNpbmduYWxSICYmIGZvdW5kSm9iLl91bmlxdWVLZXk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChuZWVkVW5zdWJzY3JpYmUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3NpZ25hbFJTZXJ2aWNlLnVuU3Vic2NyaWJlVmlld0NvZGUoZm91bmRKb2IuX3VuaXF1ZUtleSwgdGhpcy5odWIpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3F1ZXVlLnNwbGljZShmb3VuZEluZGV4LCAxKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51cGRhdGVQb3B1cEhlaWdodCgpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2UgaWYgKGZvdW5kSm9iLl9zdGF0dXMgIT0gdGhpcy5zdGF0dXNlcy5FeHBvcnRpbmcpIHtcbiAgICAgICAgICAgIHRoaXMuX3F1ZXVlLnNwbGljZShmb3VuZEluZGV4LCAxKTtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlUG9wdXBIZWlnaHQoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNsb3NlKCkge1xuICAgICAgICB2YXIgaGFzRXhwb3J0aW5nID0gdGhpcy5fcXVldWUgJiYgdGhpcy5fcXVldWUuZmlsdGVyKGl0ZW0gPT4gaXRlbS5fc3RhdHVzID09IHRoaXMuc3RhdHVzZXMuRXhwb3J0aW5nKS5sZW5ndGggPiAwO1xuXG4gICAgICAgIGlmIChoYXNFeHBvcnRpbmcpIHtcbiAgICAgICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZVxuICAgICAgICAgICAgICAgIC5zaG93Q29uZmlybSgnQ8OzIGZpbGUgxJFhbmcgxJHGsOG7o2MgeOG7rSBsw70uIELhuqFuIGPDsyBtdeG7kW4gZOG7q25nIGzhuqFpPycsICdI4buneSB4deG6pXQgZmlsZScpXG4gICAgICAgICAgICAgICAgLnRoZW4ocnMgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIXJzKSB7IHJldHVybjsgfVxuICAgICAgICAgICAgICAgICAgICBsZXQgbmVlZFVuc3Vic2NyaWJlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3F1ZXVlLmZvckVhY2goam9iID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5lZWRVbnN1YnNjcmliZSA9IGpvYi5fdHlwZSA9PSBKb2JUeXBlcy5TaW5nbmFsUiAmJiBqb2IuX3VuaXF1ZUtleTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuZWVkVW5zdWJzY3JpYmUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9zaWduYWxSU2VydmljZS51blN1YnNjcmliZVZpZXdDb2RlKGpvYi5fdW5pcXVlS2V5LCB0aGlzLmh1Yik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9xdWV1ZSA9IFtdO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVBvcHVwSGVpZ2h0KCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9xdWV1ZSA9IFtdO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdXBkYXRlUG9wdXBIZWlnaHQoKSB7XG4gICAgICAgIGxldCBoZWlnaHQgPSAodGhpcy5fcXVldWUgfHwgW10pLmxlbmd0aCAqIHRoaXMuaXRlbUhlaWdodDtcbiAgICAgICAgdGhpcy5wb3B1cEhlaWdodCA9IGhlaWdodCA+IHRoaXMubWF4SGVpZ2h0ID8gdGhpcy5tYXhIZWlnaHQgOiBoZWlnaHQ7XG4gICAgfVxufVxuXG4iXX0=
|