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.
Files changed (32) hide show
  1. package/bundles/tnx-shared.umd.js +309 -702
  2. package/bundles/tnx-shared.umd.js.map +1 -1
  3. package/bundles/tnx-shared.umd.min.js +1 -1
  4. package/bundles/tnx-shared.umd.min.js.map +1 -1
  5. package/classes/form-schema.d.ts +1 -0
  6. package/classes/form-schema.d.ts.map +1 -1
  7. package/components/file-upload/file-upload.component.d.ts.map +1 -1
  8. package/esm2015/classes/form-schema.js +2 -1
  9. package/esm2015/components/dropdown/dropdown.component.js +2 -2
  10. package/esm2015/components/file-upload/file-upload.component.js +2 -2
  11. package/esm2015/models/file-type.js +2 -2
  12. package/esm2015/public-api.js +2 -2
  13. package/esm2015/tnx-shared.module.js +3 -3
  14. package/fesm2015/tnx-shared.js +234 -572
  15. package/fesm2015/tnx-shared.js.map +1 -1
  16. package/models/file-type.d.ts +1 -1
  17. package/models/file-type.d.ts.map +1 -1
  18. package/package.json +2 -2
  19. package/public-api.d.ts +0 -1
  20. package/public-api.d.ts.map +1 -1
  21. package/tnx-shared.metadata.json +1 -1
  22. package/tnx-shared.module.d.ts +1 -2
  23. package/tnx-shared.module.d.ts.map +1 -1
  24. package/tnx-shared.module.ngfactory.d.ts.map +1 -1
  25. package/components/report-queue/base-job/job-item.d.ts +0 -44
  26. package/components/report-queue/base-job/job-item.d.ts.map +0 -1
  27. package/components/report-queue/report-queue.component.d.ts +0 -67
  28. package/components/report-queue/report-queue.component.d.ts.map +0 -1
  29. package/components/report-queue/report-queue.component.ngfactory.d.ts.map +0 -1
  30. package/components/report-queue/report-queue.component.scss.shim.ngstyle.d.ts.map +0 -1
  31. package/esm2015/components/report-queue/base-job/job-item.js +0 -54
  32. package/esm2015/components/report-queue/report-queue.component.js +0 -301
@@ -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 ReportQueueComponent | 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)[];
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;AAuL1C,eAAO,MAAM,wBAAwB,EAAC,EAAE,CAAC,eAAe,CAAC,EAAE,CAAC,eAAe,CAAiB,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=