@senior-gestao-pessoas/payroll-core 9.4.0 → 9.5.0-01923a3e-20f4-4cb3-9565-a0584abd00d1
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/senior-gestao-pessoas-payroll-core.umd.js +964 -522
- package/bundles/senior-gestao-pessoas-payroll-core.umd.js.map +1 -1
- package/bundles/senior-gestao-pessoas-payroll-core.umd.min.js +16 -1
- package/bundles/senior-gestao-pessoas-payroll-core.umd.min.js.map +1 -1
- package/components/historical-pix-account/historical-pix-account-base.d.ts +27 -0
- package/components/historical-pix-account/historical-pix-account-form/historical-pix-account-form.component.d.ts +8 -40
- package/components/historical-pix-account/historical-pix-account.component.d.ts +36 -8
- package/components/historical-pix-account/historical-pix-account.service.d.ts +1 -0
- package/components/historical-pix-account-list/historical-pix-account-list.component.d.ts +11 -2
- package/components/shared/index.d.ts +1 -0
- package/components/shared/shared-state.service.d.ts +17 -0
- package/components/utils/format-utils/format-utils.service.d.ts +30 -3
- package/esm2015/components/historical-pix-account/historical-pix-account-base.js +173 -0
- package/esm2015/components/historical-pix-account/historical-pix-account-form/historical-pix-account-form.component.js +29 -187
- package/esm2015/components/historical-pix-account/historical-pix-account.component.js +245 -20
- package/esm2015/components/historical-pix-account/historical-pix-account.module.js +5 -1
- package/esm2015/components/historical-pix-account/historical-pix-account.service.js +8 -1
- package/esm2015/components/historical-pix-account-list/historical-pix-account-list.component.js +68 -34
- package/esm2015/components/shared/index.js +2 -0
- package/esm2015/components/shared/shared-state.service.js +41 -0
- package/esm2015/components/utils/format-utils/format-utils.service.js +88 -5
- package/esm2015/public_api.js +2 -1
- package/esm2015/senior-gestao-pessoas-payroll-core.js +3 -2
- package/esm5/components/historical-pix-account/historical-pix-account-base.js +186 -0
- package/esm5/components/historical-pix-account/historical-pix-account-form/historical-pix-account-form.component.js +53 -201
- package/esm5/components/historical-pix-account/historical-pix-account.component.js +287 -49
- package/esm5/components/historical-pix-account/historical-pix-account.module.js +5 -1
- package/esm5/components/historical-pix-account/historical-pix-account.service.js +8 -1
- package/esm5/components/historical-pix-account-list/historical-pix-account-list.component.js +77 -34
- package/esm5/components/shared/index.js +2 -0
- package/esm5/components/shared/shared-state.service.js +42 -0
- package/esm5/components/utils/format-utils/format-utils.service.js +88 -5
- package/esm5/public_api.js +2 -1
- package/esm5/senior-gestao-pessoas-payroll-core.js +3 -2
- package/fesm2015/senior-gestao-pessoas-payroll-core.js +882 -485
- package/fesm2015/senior-gestao-pessoas-payroll-core.js.map +1 -1
- package/fesm5/senior-gestao-pessoas-payroll-core.js +960 -519
- package/fesm5/senior-gestao-pessoas-payroll-core.js.map +1 -1
- package/locale/en-US.json +1 -1
- package/locale/es-ES.json +1 -1
- package/locale/pt-BR.json +1 -1
- package/package.json +2 -32
- package/public_api.d.ts +1 -0
- package/senior-gestao-pessoas-payroll-core.d.ts +2 -1
- package/senior-gestao-pessoas-payroll-core.metadata.json +1 -1
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { FormBuilder, FormGroup, ValidatorFn } from "@angular/forms";
|
|
2
|
+
export declare abstract class HistoricakPixAccountBase {
|
|
3
|
+
protected formBuilder: FormBuilder;
|
|
4
|
+
protected _paramsForm: FormGroup;
|
|
5
|
+
protected _defaultCpfNumber: string;
|
|
6
|
+
initialValidatorOfPercentage: ValidatorFn[];
|
|
7
|
+
pixAccountList: object[];
|
|
8
|
+
maxValuePercentage: number;
|
|
9
|
+
pixKeyType: string;
|
|
10
|
+
pixAccountFormGroup: FormGroup;
|
|
11
|
+
isShowPixKeyFieldValidatorMessage: boolean;
|
|
12
|
+
constructor(formBuilder: FormBuilder);
|
|
13
|
+
phoneMask(event: any): void;
|
|
14
|
+
cpfMask(event: any): void;
|
|
15
|
+
cnpjMask(event: any): void;
|
|
16
|
+
onChangePixKeyType(item: any, form?: FormGroup): void;
|
|
17
|
+
onClearPixKeyType(form?: FormGroup): void;
|
|
18
|
+
setDefaultCpfPixKey(form?: FormGroup): void;
|
|
19
|
+
protected createFormGroupBase(): void;
|
|
20
|
+
protected setValidatorsAccordingList(pixAccountList: object[], index?: number | null, isEditMode?: boolean, form?: FormGroup): void;
|
|
21
|
+
protected beforeSetPixKeyTypeValidator(form: FormGroup): void;
|
|
22
|
+
protected setPixKeyValidators(isEditMode: boolean, form: FormGroup): void;
|
|
23
|
+
protected validatePercentageValid(listValue: number[], form: FormGroup): void;
|
|
24
|
+
private validateDuplicatePixKeyTypeBankAccount;
|
|
25
|
+
paramsForm: FormGroup;
|
|
26
|
+
defaultCpfNumber: string;
|
|
27
|
+
}
|
|
@@ -1,39 +1,32 @@
|
|
|
1
1
|
import { OnInit, EventEmitter, ChangeDetectorRef, OnDestroy, AfterViewInit } from "@angular/core";
|
|
2
2
|
import { FormGroup, FormBuilder } from "@angular/forms";
|
|
3
3
|
import { NumberLocaleOptions, CustomFieldsComponent } from "@seniorsistemas/angular-components";
|
|
4
|
-
|
|
5
|
-
|
|
4
|
+
import { SharedStateService } from "../../shared/shared-state.service";
|
|
5
|
+
import { HistoricakPixAccountBase } from "../historical-pix-account-base";
|
|
6
|
+
export declare class HistoricalPixAccountFormComponent extends HistoricakPixAccountBase implements OnInit, OnDestroy, AfterViewInit {
|
|
6
7
|
private cd;
|
|
8
|
+
private sharedStateService;
|
|
7
9
|
customFields: CustomFieldsComponent;
|
|
8
10
|
currency: NumberLocaleOptions;
|
|
9
11
|
customEntity: string;
|
|
10
12
|
customService: string;
|
|
11
13
|
withSideBar: boolean;
|
|
12
14
|
isEditMode: boolean;
|
|
13
|
-
paramsForm: FormGroup;
|
|
14
|
-
defaultCpfNumber: string;
|
|
15
15
|
visibleChange: EventEmitter<boolean>;
|
|
16
16
|
pixAccountItemToList: EventEmitter<any>;
|
|
17
17
|
private _visible;
|
|
18
18
|
private ngUnsubscribe;
|
|
19
19
|
private employeeId;
|
|
20
|
-
private pixAccountList;
|
|
21
|
-
private initialValidatorOfPercentage;
|
|
22
20
|
labelBtnAdd: string;
|
|
23
|
-
pixAccountFormGroup: FormGroup;
|
|
24
|
-
maxValuePercentage: number;
|
|
25
21
|
visibleBtnSave: boolean;
|
|
26
22
|
isView: boolean;
|
|
27
|
-
pixKeyType: string;
|
|
28
23
|
isShowPixKeyFieldValidatorMessage: boolean;
|
|
29
|
-
|
|
24
|
+
hideFields: import("rxjs").Observable<boolean>;
|
|
25
|
+
constructor(formBuilder: FormBuilder, cd: ChangeDetectorRef, sharedStateService: SharedStateService);
|
|
30
26
|
ngOnInit(): void;
|
|
31
27
|
ngAfterViewInit(): void;
|
|
32
28
|
ngOnDestroy(): void;
|
|
33
29
|
private registerSubjects;
|
|
34
|
-
private createFormGroup;
|
|
35
|
-
onChangePixKeyType(item: any): void;
|
|
36
|
-
onClearPixKeyType(): void;
|
|
37
30
|
visible: boolean;
|
|
38
31
|
isEditAndViewValue: any;
|
|
39
32
|
private formatPixKeyTelephoneNumber;
|
|
@@ -45,33 +38,8 @@ export declare class HistoricalPixAccountFormComponent implements OnInit, OnDest
|
|
|
45
38
|
readonly percentagePlaceholder: string;
|
|
46
39
|
readonly optionsPercentage: object;
|
|
47
40
|
private getOptions;
|
|
48
|
-
/**
|
|
49
|
-
* O Input que recebe a lista do component pai e chama o método de validação passando a lista recebida.
|
|
50
|
-
* @param pixAccountList
|
|
51
|
-
*/
|
|
52
41
|
getListPixAccount: object[];
|
|
53
|
-
/**
|
|
54
|
-
* Recebe a lista de registros já inseridos na tabela adiciona em uma variável os valores que serão usados para
|
|
55
|
-
* a validação dos campos "percentage" e "pixAccount".
|
|
56
|
-
* Quando tem index significa que está em uma edição, os valores na posição do registro da edição (index) não serão adicionados
|
|
57
|
-
* no array de comparação dos validators.
|
|
58
|
-
* @param pixAccountList
|
|
59
|
-
* @param index
|
|
60
|
-
*/
|
|
61
|
-
private setValidatorsAccordingList;
|
|
62
|
-
/**
|
|
63
|
-
* Antes de setar o validator prepara as variáveis necessária para que seja feita a validação do campo.
|
|
64
|
-
*/
|
|
65
|
-
setPixKeyValidators(isEditMode: boolean): void;
|
|
66
|
-
/**
|
|
67
|
-
* Este método calcula as parcentagens que já foram inseridas, e seta a diferença para chegar em
|
|
68
|
-
* 100% na validação do campo "percentage" como um novo maxValue;
|
|
69
|
-
* @param listValue
|
|
70
|
-
*/
|
|
71
|
-
private validatePercentageValid;
|
|
72
42
|
isViewMode: boolean;
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
beforeSetPixKeyTypeValidator(): void;
|
|
76
|
-
private validateDuplicatePixKeyTypeBankAccount;
|
|
43
|
+
paramsForm: FormGroup;
|
|
44
|
+
defaultCpfNumber: string;
|
|
77
45
|
}
|
|
@@ -2,13 +2,16 @@ import { OnInit, ChangeDetectorRef, AfterViewInit, OnDestroy, EventEmitter, OnCh
|
|
|
2
2
|
import { FormGroup, FormBuilder } from "@angular/forms";
|
|
3
3
|
import { TranslateService } from "@ngx-translate/core";
|
|
4
4
|
import { CustomFieldsComponent, NumberLocaleOptions } from "@seniorsistemas/angular-components";
|
|
5
|
-
import {
|
|
6
|
-
|
|
5
|
+
import { SharedStateService } from "../shared/shared-state.service";
|
|
6
|
+
import { HistoricakPixAccountBase } from "./historical-pix-account-base";
|
|
7
|
+
import { HistoricalPixAccountService } from "./historical-pix-account.service";
|
|
8
|
+
export declare class HistoricalPixAccountComponent extends HistoricakPixAccountBase implements OnInit, OnDestroy, AfterViewInit, OnChanges {
|
|
7
9
|
private translateService;
|
|
8
10
|
private cd;
|
|
9
|
-
private
|
|
10
|
-
private
|
|
11
|
+
private sharedStateService;
|
|
12
|
+
private service;
|
|
11
13
|
customFields: CustomFieldsComponent;
|
|
14
|
+
dataListPix: any;
|
|
12
15
|
formGroup: FormGroup;
|
|
13
16
|
fieldFormGroup: string;
|
|
14
17
|
_dateChange: string;
|
|
@@ -22,13 +25,15 @@ export declare class HistoricalPixAccountComponent implements OnInit, OnDestroy,
|
|
|
22
25
|
customEntity: string;
|
|
23
26
|
customService: string;
|
|
24
27
|
withSideBar: boolean;
|
|
25
|
-
paramsForm: FormGroup;
|
|
26
|
-
defaultCpfNumber: string;
|
|
27
28
|
permission: object;
|
|
28
29
|
listDataReciever: any[];
|
|
30
|
+
addExistentHistoricData: any[];
|
|
31
|
+
getListPixAccount: object[];
|
|
32
|
+
isEditModeForSave: boolean;
|
|
29
33
|
isViewModeActive: EventEmitter<any>;
|
|
30
34
|
isEditModeActive: EventEmitter<any>;
|
|
31
35
|
isDeleteModeActive: EventEmitter<any>;
|
|
36
|
+
isValidChangeForm: EventEmitter<boolean>;
|
|
32
37
|
private listFromApp;
|
|
33
38
|
private visibleChange;
|
|
34
39
|
private ngUnsubscribe;
|
|
@@ -43,6 +48,14 @@ export declare class HistoricalPixAccountComponent implements OnInit, OnDestroy,
|
|
|
43
48
|
msgTotalLimitByPercentage: string;
|
|
44
49
|
listData: object[];
|
|
45
50
|
listDataNoPage: object[];
|
|
51
|
+
showButtonView: boolean;
|
|
52
|
+
showEditMode: boolean;
|
|
53
|
+
hasRecordsPix: boolean;
|
|
54
|
+
hideFields: import("rxjs").Observable<boolean>;
|
|
55
|
+
suggestions: any[];
|
|
56
|
+
formGroupByRow: {
|
|
57
|
+
[index: number]: FormGroup;
|
|
58
|
+
};
|
|
46
59
|
cols: {
|
|
47
60
|
label: any;
|
|
48
61
|
field: string;
|
|
@@ -52,24 +65,37 @@ export declare class HistoricalPixAccountComponent implements OnInit, OnDestroy,
|
|
|
52
65
|
label: any;
|
|
53
66
|
command: () => void;
|
|
54
67
|
}[];
|
|
55
|
-
constructor(translateService: TranslateService, cd: ChangeDetectorRef, formBuilder: FormBuilder,
|
|
68
|
+
constructor(translateService: TranslateService, cd: ChangeDetectorRef, formBuilder: FormBuilder, sharedStateService: SharedStateService, service: HistoricalPixAccountService);
|
|
56
69
|
ngOnInit(): void;
|
|
57
70
|
ngOnChanges(changes: SimpleChanges): void;
|
|
58
71
|
private createFormGroup;
|
|
59
72
|
ngOnDestroy(): void;
|
|
60
73
|
ngAfterViewInit(): void;
|
|
74
|
+
private emitFormValidity;
|
|
75
|
+
filterPixKeyType(event: any): void;
|
|
76
|
+
createPixRowFormGroup(): FormGroup;
|
|
77
|
+
onPixKeyInput(event: any, index: number): void;
|
|
78
|
+
onBlurPixCpfAndCnpj(index: number): void;
|
|
79
|
+
getFormattedPixKey(type: string, value: string): string;
|
|
80
|
+
syncPixDataToParentForm(): void;
|
|
81
|
+
syncResetPixFormToParent(): void;
|
|
61
82
|
onLazyLoad(event?: any): void;
|
|
62
83
|
/**
|
|
63
84
|
* Um Bug de CSS que acontece nas linhas da tabela, que resolve só atualizando qualquer parte do CSS da pagina.
|
|
64
85
|
*/
|
|
65
86
|
private refreshCssInIE11;
|
|
66
87
|
add(): void;
|
|
67
|
-
|
|
88
|
+
addPix(): void;
|
|
89
|
+
deletePix(index: number): void;
|
|
90
|
+
private rebuildFormGroupMap;
|
|
91
|
+
onPixKeyTypeChange(item: any, index: number): void;
|
|
92
|
+
onPixKeyTypeClear(index: number): void;
|
|
68
93
|
private deleteAnnuityItem;
|
|
69
94
|
getHistoricalPixAccountList(): object[];
|
|
70
95
|
addItemInList($event: any): void;
|
|
71
96
|
private getNumberPageByIndex;
|
|
72
97
|
private verifyTotalPercentage;
|
|
98
|
+
onSyncValue(field: string, index: number): void;
|
|
73
99
|
readonly scopedActions: any;
|
|
74
100
|
readonly recordsMessage: string;
|
|
75
101
|
readonly getTooltipAndDisableButtonAdd: string;
|
|
@@ -77,6 +103,8 @@ export declare class HistoricalPixAccountComponent implements OnInit, OnDestroy,
|
|
|
77
103
|
displayDateChange: string;
|
|
78
104
|
addListData: object[];
|
|
79
105
|
visible: boolean;
|
|
106
|
+
paramsForm: FormGroup;
|
|
107
|
+
defaultCpfNumber: string;
|
|
80
108
|
close(): void;
|
|
81
109
|
getFormattedTelephoneNumber(telephoneNumber: string): string;
|
|
82
110
|
getFormattedCpf(cpf: string): string;
|
|
@@ -3,7 +3,9 @@ import { ActivatedRoute, Router } from "@angular/router";
|
|
|
3
3
|
import { TranslateService } from "@ngx-translate/core";
|
|
4
4
|
import { CustomFieldsComponent } from "@seniorsistemas/angular-components";
|
|
5
5
|
import { ConfirmationService, MessageService } from "primeng/api";
|
|
6
|
+
import { Subject } from "rxjs";
|
|
6
7
|
import { HistoricalPixAccountListService } from "./historical-pix-account-list.service";
|
|
8
|
+
import { SharedStateService } from "../shared/shared-state.service";
|
|
7
9
|
export declare class HistoricalPixAccountListComponent implements OnInit, OnDestroy, AfterViewInit {
|
|
8
10
|
private confirmationService;
|
|
9
11
|
private translateService;
|
|
@@ -12,6 +14,7 @@ export declare class HistoricalPixAccountListComponent implements OnInit, OnDest
|
|
|
12
14
|
private router;
|
|
13
15
|
private messageService;
|
|
14
16
|
private historicalPixAccountListService;
|
|
17
|
+
private sharedStateService;
|
|
15
18
|
customFields: CustomFieldsComponent;
|
|
16
19
|
permission: object;
|
|
17
20
|
employeeId: string;
|
|
@@ -20,10 +23,14 @@ export declare class HistoricalPixAccountListComponent implements OnInit, OnDest
|
|
|
20
23
|
endPoint: string;
|
|
21
24
|
keyPayload: string;
|
|
22
25
|
withSidebar: boolean;
|
|
26
|
+
hideField: boolean;
|
|
23
27
|
isOnlyView: EventEmitter<any>;
|
|
28
|
+
isOnlyEdit: EventEmitter<any>;
|
|
24
29
|
enableView: EventEmitter<any>;
|
|
30
|
+
isEditJudicialDependentPix: EventEmitter<any>;
|
|
25
31
|
private lastRecord;
|
|
26
32
|
private ngUnsubscribe;
|
|
33
|
+
private _subscription;
|
|
27
34
|
initParameters: any;
|
|
28
35
|
loading: boolean;
|
|
29
36
|
parameters: any;
|
|
@@ -31,12 +38,11 @@ export declare class HistoricalPixAccountListComponent implements OnInit, OnDest
|
|
|
31
38
|
label: any;
|
|
32
39
|
field: string;
|
|
33
40
|
}[];
|
|
34
|
-
constructor(confirmationService: ConfirmationService, translateService: TranslateService, activatedRoute: ActivatedRoute, cd: ChangeDetectorRef, router: Router, messageService: MessageService, historicalPixAccountListService: HistoricalPixAccountListService);
|
|
41
|
+
constructor(confirmationService: ConfirmationService, translateService: TranslateService, activatedRoute: ActivatedRoute, cd: ChangeDetectorRef, router: Router, messageService: MessageService, historicalPixAccountListService: HistoricalPixAccountListService, sharedStateService: SharedStateService);
|
|
35
42
|
ngOnInit(): void;
|
|
36
43
|
ngOnDestroy(): void;
|
|
37
44
|
ngAfterViewInit(): void;
|
|
38
45
|
onLazyLoad(payload: any): void;
|
|
39
|
-
private formatPixKeyByType;
|
|
40
46
|
getMenuActions(rowData: any): {
|
|
41
47
|
label: any;
|
|
42
48
|
command: () => void;
|
|
@@ -45,9 +51,12 @@ export declare class HistoricalPixAccountListComponent implements OnInit, OnDest
|
|
|
45
51
|
add(): void;
|
|
46
52
|
private isNotAllowMessage;
|
|
47
53
|
private onGridLoad;
|
|
54
|
+
private unsubscribe;
|
|
55
|
+
hideFieldsOnAdd$: Subject<boolean>;
|
|
48
56
|
private readonly isAllowToAddHistorical;
|
|
49
57
|
private readonly isAllowToDeleteHistorical;
|
|
50
58
|
private readonly isAllowToViewHistorical;
|
|
59
|
+
private readonly isAllowToEditHistorical;
|
|
51
60
|
readonly scopedActions: any;
|
|
52
61
|
reloadList: boolean;
|
|
53
62
|
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './shared-state.service';
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
export declare class SharedStateService {
|
|
2
|
+
private hideFieldSubject;
|
|
3
|
+
hideField$: import("rxjs").Observable<boolean>;
|
|
4
|
+
private showButtonSubject;
|
|
5
|
+
showButton$: import("rxjs").Observable<boolean>;
|
|
6
|
+
private saveButtonSubject;
|
|
7
|
+
saveButton$: import("rxjs").Observable<boolean>;
|
|
8
|
+
private showEditMode;
|
|
9
|
+
showEditMode$: import("rxjs").Observable<boolean>;
|
|
10
|
+
private activeValidatorsOnEditModalOpen;
|
|
11
|
+
activeValidatorsOnEditModalOpen$: import("rxjs").Observable<void>;
|
|
12
|
+
setHideField(value: boolean): void;
|
|
13
|
+
setShowButton(value: boolean): void;
|
|
14
|
+
setSaveButton(value: boolean): void;
|
|
15
|
+
setShowEditMode(value: boolean): void;
|
|
16
|
+
triggerActiveValidatorsOnEditModalOpen(): void;
|
|
17
|
+
}
|
|
@@ -4,30 +4,57 @@ export declare class FormatUtilsService {
|
|
|
4
4
|
* @param cpf CPF
|
|
5
5
|
*/
|
|
6
6
|
static getFormattedCpf(cpf: string): string;
|
|
7
|
+
/**
|
|
8
|
+
* Retorna o CPF formatado
|
|
9
|
+
* @param cpf CPF
|
|
10
|
+
*/
|
|
11
|
+
static getFormattedCpfEdited(cpf: string): string;
|
|
7
12
|
/**
|
|
8
13
|
* Retorna o CNPJ formatado
|
|
9
14
|
* @param cnpj CNPJ
|
|
10
15
|
*/
|
|
11
16
|
static getFormattedCnpj(cnpj: string): string;
|
|
17
|
+
/**
|
|
18
|
+
* Retorna o CNPJ formatado
|
|
19
|
+
* @param cnpj CNPJ
|
|
20
|
+
*/
|
|
21
|
+
static getFormattedCnpjEdited(cnpj: string): string;
|
|
12
22
|
/**
|
|
13
23
|
* Retorna a mascara do CPF/CNPJ
|
|
14
24
|
* @param key Valores possíveis são CPF ou CNPJ
|
|
15
25
|
*/
|
|
16
26
|
static getCpfCnpjMask(key: string): "" | "999.999.999-99" | "99.999.999/9999-99";
|
|
27
|
+
/**
|
|
28
|
+
* Método para formatar o número de inscrição do cliente.
|
|
29
|
+
* @param subscriptionNumber
|
|
30
|
+
* @param pixKeyType
|
|
31
|
+
* @returns
|
|
32
|
+
*/
|
|
33
|
+
static getFormattedSubscriptionNumber(subscriptionNumber: string, pixKeyType: any): string;
|
|
17
34
|
/**
|
|
18
35
|
* Metódo para formatar o número de telefone.
|
|
19
36
|
* @param telephoneNumber String contendo o número de telefone.
|
|
20
37
|
* @returns String formatada com o número de telefone.
|
|
21
38
|
*/
|
|
22
39
|
static getFormattedTelephoneNumber(telephoneNumber: string): string;
|
|
40
|
+
/**
|
|
41
|
+
* Metódo para formatar a porcentagem para 2 casas decimais.
|
|
42
|
+
* @param value Número a ser formatado.
|
|
43
|
+
*/
|
|
44
|
+
static getFormattedPercentage(value: string): string;
|
|
23
45
|
/**
|
|
24
46
|
* Metódo para formatar o número de telefone de um campo Input.
|
|
25
47
|
* @param event Evento do Input do campo de telefone.
|
|
26
48
|
*/
|
|
27
49
|
static formatTelephoneInputEvent(event: any): void;
|
|
28
50
|
/**
|
|
29
|
-
*
|
|
30
|
-
* @param
|
|
51
|
+
* Formata o campo de input de CPF em tempo real.
|
|
52
|
+
* @param event Evento do input
|
|
31
53
|
*/
|
|
32
|
-
static
|
|
54
|
+
static formatCpfInputEvent(event: any): void;
|
|
55
|
+
/**
|
|
56
|
+
* Formata o campo de input de CNPJ em tempo real.
|
|
57
|
+
* @param event Evento do input
|
|
58
|
+
*/
|
|
59
|
+
static formatCnpjInputEvent(event: any): void;
|
|
33
60
|
}
|
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
import { FormGroup, Validators, } from "@angular/forms";
|
|
2
|
+
import { GenericValidator } from "../utils/generic-validators";
|
|
3
|
+
import { FormatUtilsService } from "../utils/format-utils/format-utils.service";
|
|
4
|
+
export class HistoricakPixAccountBase {
|
|
5
|
+
constructor(formBuilder) {
|
|
6
|
+
this._paramsForm = new FormGroup({});
|
|
7
|
+
this._defaultCpfNumber = null;
|
|
8
|
+
this.initialValidatorOfPercentage = [Validators.required, Validators.min(0.01)];
|
|
9
|
+
this.pixAccountList = [];
|
|
10
|
+
this.maxValuePercentage = 100.0;
|
|
11
|
+
this.isShowPixKeyFieldValidatorMessage = false;
|
|
12
|
+
this.formBuilder = formBuilder;
|
|
13
|
+
this.createFormGroupBase();
|
|
14
|
+
}
|
|
15
|
+
phoneMask(event) {
|
|
16
|
+
FormatUtilsService.formatTelephoneInputEvent(event);
|
|
17
|
+
}
|
|
18
|
+
cpfMask(event) {
|
|
19
|
+
FormatUtilsService.formatCpfInputEvent(event);
|
|
20
|
+
}
|
|
21
|
+
cnpjMask(event) {
|
|
22
|
+
FormatUtilsService.formatCnpjInputEvent(event);
|
|
23
|
+
}
|
|
24
|
+
onChangePixKeyType(item, form) {
|
|
25
|
+
if (!item || !item.key)
|
|
26
|
+
return;
|
|
27
|
+
this.pixKeyType = item.key;
|
|
28
|
+
const targetForm = (typeof form !== 'undefined' && form !== null)
|
|
29
|
+
? form
|
|
30
|
+
: this.pixAccountFormGroup;
|
|
31
|
+
this.isShowPixKeyFieldValidatorMessage = true;
|
|
32
|
+
const pixKeyControl = targetForm.get("pixKey");
|
|
33
|
+
if (pixKeyControl) {
|
|
34
|
+
pixKeyControl.reset();
|
|
35
|
+
}
|
|
36
|
+
this.setPixKeyValidators(true, targetForm);
|
|
37
|
+
if (item.key === "CPF") {
|
|
38
|
+
this.setDefaultCpfPixKey(targetForm);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
onClearPixKeyType(form) {
|
|
42
|
+
var targetForm = (typeof form !== 'undefined' && form !== null)
|
|
43
|
+
? form
|
|
44
|
+
: this.pixAccountFormGroup;
|
|
45
|
+
this.isShowPixKeyFieldValidatorMessage = false;
|
|
46
|
+
if (targetForm.get("pixKey")) {
|
|
47
|
+
targetForm.get("pixKey").reset();
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
setDefaultCpfPixKey(form) {
|
|
51
|
+
var targetForm = (typeof form !== 'undefined' && form !== null)
|
|
52
|
+
? form
|
|
53
|
+
: this.pixAccountFormGroup;
|
|
54
|
+
if (this._defaultCpfNumber) {
|
|
55
|
+
if (targetForm.get("pixKey")) {
|
|
56
|
+
targetForm.get("pixKey").setValue(this._defaultCpfNumber);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
else {
|
|
60
|
+
var sheetDocument = this._paramsForm.get("sheetDocument");
|
|
61
|
+
if (sheetDocument && sheetDocument.get("cpfNumber")) {
|
|
62
|
+
var cpf = sheetDocument.get("cpfNumber").value;
|
|
63
|
+
if (cpf && targetForm.get("pixKey")) {
|
|
64
|
+
targetForm.get("pixKey").setValue(cpf);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
createFormGroupBase() {
|
|
70
|
+
this.pixAccountFormGroup = this.formBuilder.group({
|
|
71
|
+
id: this.formBuilder.control(null),
|
|
72
|
+
index: this.formBuilder.control(null),
|
|
73
|
+
employee: this.formBuilder.control({ value: { tableId: null }, disabled: true }),
|
|
74
|
+
dateChange: this.formBuilder.control(null),
|
|
75
|
+
pixKeyType: this.formBuilder.control(null, Validators.required),
|
|
76
|
+
pixKey: this.formBuilder.control(null),
|
|
77
|
+
percentage: this.formBuilder.control(null, Validators.compose([
|
|
78
|
+
...this.initialValidatorOfPercentage,
|
|
79
|
+
Validators.max(this.maxValuePercentage),
|
|
80
|
+
])),
|
|
81
|
+
externalId: this.formBuilder.control(null),
|
|
82
|
+
customFields: this.formBuilder.control(null),
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
setValidatorsAccordingList(pixAccountList, index = null, isEditMode = true, form) {
|
|
86
|
+
var targetForm = (typeof form !== 'undefined' && form !== null)
|
|
87
|
+
? form
|
|
88
|
+
: this.pixAccountFormGroup;
|
|
89
|
+
this.pixAccountList = (pixAccountList && pixAccountList.length > 0)
|
|
90
|
+
? [].concat(pixAccountList)
|
|
91
|
+
: [];
|
|
92
|
+
var percentageIncluded = [];
|
|
93
|
+
for (var i = 0; i < this.pixAccountList.length; i++) {
|
|
94
|
+
var field = this.pixAccountList[i];
|
|
95
|
+
if (field && field.percentage && i !== index) {
|
|
96
|
+
percentageIncluded.push(field.percentage);
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
this.beforeSetPixKeyTypeValidator(targetForm);
|
|
100
|
+
this.setPixKeyValidators(isEditMode, targetForm);
|
|
101
|
+
this.validatePercentageValid(percentageIncluded, targetForm);
|
|
102
|
+
}
|
|
103
|
+
beforeSetPixKeyTypeValidator(form) {
|
|
104
|
+
const control = form.get("pixKeyType");
|
|
105
|
+
if (this.pixAccountList && this.pixAccountList.length) {
|
|
106
|
+
control.setValidators(Validators.compose([
|
|
107
|
+
Validators.required,
|
|
108
|
+
this.validateDuplicatePixKeyTypeBankAccount(this.pixAccountList),
|
|
109
|
+
]));
|
|
110
|
+
}
|
|
111
|
+
else {
|
|
112
|
+
control.setValidators(Validators.required);
|
|
113
|
+
}
|
|
114
|
+
control.updateValueAndValidity();
|
|
115
|
+
}
|
|
116
|
+
setPixKeyValidators(isEditMode, form) {
|
|
117
|
+
const pixKey = form.get("pixKey");
|
|
118
|
+
switch (this.pixKeyType) {
|
|
119
|
+
case "TELEPHONE":
|
|
120
|
+
pixKey.setValidators(Validators.compose([Validators.required, GenericValidator.isValidPhoneNumber]));
|
|
121
|
+
break;
|
|
122
|
+
case "EMAIL":
|
|
123
|
+
pixKey.setValidators(Validators.compose([Validators.required, GenericValidator.isValidEmail]));
|
|
124
|
+
break;
|
|
125
|
+
case "CPF":
|
|
126
|
+
pixKey.setValidators(Validators.compose([Validators.required, GenericValidator.isValidCpf]));
|
|
127
|
+
break;
|
|
128
|
+
case "CNPJ":
|
|
129
|
+
pixKey.setValidators(Validators.compose([Validators.required, GenericValidator.isValidCnpj]));
|
|
130
|
+
break;
|
|
131
|
+
case "RANDOM_KEY":
|
|
132
|
+
pixKey.setValidators(Validators.required);
|
|
133
|
+
break;
|
|
134
|
+
default:
|
|
135
|
+
pixKey.clearValidators();
|
|
136
|
+
}
|
|
137
|
+
if (isEditMode) {
|
|
138
|
+
pixKey.enable();
|
|
139
|
+
}
|
|
140
|
+
pixKey.updateValueAndValidity();
|
|
141
|
+
}
|
|
142
|
+
validatePercentageValid(listValue, form) {
|
|
143
|
+
const percentage = form.get("percentage");
|
|
144
|
+
this.maxValuePercentage = listValue.reduce((acc, val) => acc - val, 100.0);
|
|
145
|
+
percentage.setValidators(Validators.compose([
|
|
146
|
+
...this.initialValidatorOfPercentage,
|
|
147
|
+
Validators.max(this.maxValuePercentage),
|
|
148
|
+
]));
|
|
149
|
+
percentage.updateValueAndValidity();
|
|
150
|
+
}
|
|
151
|
+
validateDuplicatePixKeyTypeBankAccount(listCompare) {
|
|
152
|
+
return (control) => {
|
|
153
|
+
const value = control.value;
|
|
154
|
+
const isDuplicate = listCompare.some((field) => value &&
|
|
155
|
+
field.pixKeyType.key === "BANK_ACCOUNT" &&
|
|
156
|
+
value.key === "BANK_ACCOUNT");
|
|
157
|
+
return isDuplicate ? { pixKeyTypeBankAccountDuplicate: true } : null;
|
|
158
|
+
};
|
|
159
|
+
}
|
|
160
|
+
get paramsForm() {
|
|
161
|
+
return this._paramsForm;
|
|
162
|
+
}
|
|
163
|
+
set paramsForm(value) {
|
|
164
|
+
this._paramsForm = value;
|
|
165
|
+
}
|
|
166
|
+
get defaultCpfNumber() {
|
|
167
|
+
return this._defaultCpfNumber;
|
|
168
|
+
}
|
|
169
|
+
set defaultCpfNumber(value) {
|
|
170
|
+
this._defaultCpfNumber = value;
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGlzdG9yaWNhbC1waXgtYWNjb3VudC1iYXNlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQHNlbmlvci1nZXN0YW8tcGVzc29hcy9wYXlyb2xsLWNvcmUvIiwic291cmNlcyI6WyJjb21wb25lbnRzL2hpc3RvcmljYWwtcGl4LWFjY291bnQvaGlzdG9yaWNhbC1waXgtYWNjb3VudC1iYXNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFHSCxTQUFTLEVBRVQsVUFBVSxHQUNYLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEIsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDL0QsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNENBQTRDLENBQUM7QUFFaEYsTUFBTSxPQUFnQix3QkFBd0I7SUFZNUMsWUFBWSxXQUF3QjtRQVYxQixnQkFBVyxHQUFjLElBQUksU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQzNDLHNCQUFpQixHQUFXLElBQUksQ0FBQztRQUVwQyxpQ0FBNEIsR0FBa0IsQ0FBQyxVQUFVLENBQUMsUUFBUSxFQUFFLFVBQVUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUMxRixtQkFBYyxHQUFhLEVBQUUsQ0FBQztRQUM5Qix1QkFBa0IsR0FBRyxLQUFLLENBQUM7UUFHM0Isc0NBQWlDLEdBQUcsS0FBSyxDQUFDO1FBRy9DLElBQUksQ0FBQyxXQUFXLEdBQUcsV0FBVyxDQUFDO1FBQy9CLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO0lBQzdCLENBQUM7SUFFTSxTQUFTLENBQUMsS0FBVTtRQUN2QixrQkFBa0IsQ0FBQyx5QkFBeUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN4RCxDQUFDO0lBRU0sT0FBTyxDQUFDLEtBQVU7UUFDckIsa0JBQWtCLENBQUMsbUJBQW1CLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDbEQsQ0FBQztJQUVNLFFBQVEsQ0FBQyxLQUFVO1FBQ3RCLGtCQUFr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QztJQUVELElBQVcsZ0JBQWdCLENBQUMsS0FBYTtRQUN2QyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsS0FBSyxDQUFDO0lBQ2pDLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQWJzdHJhY3RDb250cm9sLFxuICAgIEZvcm1CdWlsZGVyLFxuICAgIEZvcm1Hcm91cCxcbiAgICBWYWxpZGF0b3JGbixcbiAgICBWYWxpZGF0b3JzLFxuICB9IGZyb20gXCJAYW5ndWxhci9mb3Jtc1wiO1xuICBpbXBvcnQgeyBHZW5lcmljVmFsaWRhdG9yIH0gZnJvbSBcIi4uL3V0aWxzL2dlbmVyaWMtdmFsaWRhdG9yc1wiO1xuICBpbXBvcnQgeyBGb3JtYXRVdGlsc1NlcnZpY2UgfSBmcm9tIFwiLi4vdXRpbHMvZm9ybWF0LXV0aWxzL2Zvcm1hdC11dGlscy5zZXJ2aWNlXCI7XG5cbiAgZXhwb3J0IGFic3RyYWN0IGNsYXNzIEhpc3RvcmljYWtQaXhBY2NvdW50QmFzZSB7XG4gICAgcHJvdGVjdGVkIGZvcm1CdWlsZGVyOiBGb3JtQnVpbGRlcjtcbiAgICBwcm90ZWN0ZWQgX3BhcmFtc0Zvcm06IEZvcm1Hcm91cCA9IG5ldyBGb3JtR3JvdXAoe30pO1xuICAgIHByb3RlY3RlZCBfZGVmYXVsdENwZk51bWJlcjogc3RyaW5nID0gbnVsbDtcblxuICAgIHB1YmxpYyBpbml0aWFsVmFsaWRhdG9yT2ZQZXJjZW50YWdlOiBWYWxpZGF0b3JGbltdID0gW1ZhbGlkYXRvcnMucmVxdWlyZWQsIFZhbGlkYXRvcnMubWluKDAuMDEpXTtcbiAgICBwdWJsaWMgcGl4QWNjb3VudExpc3Q6IG9iamVjdFtdID0gW107XG4gICAgcHVibGljIG1heFZhbHVlUGVyY2VudGFnZSA9IDEwMC4wO1xuICAgIHB1YmxpYyBwaXhLZXlUeXBlOiBzdHJpbmc7XG4gICAgcHVibGljIHBpeEFjY291bnRGb3JtR3JvdXA6IEZvcm1Hcm91cDtcbiAgICBwdWJsaWMgaXNTaG93UGl4S2V5RmllbGRWYWxpZGF0b3JNZXNzYWdlID0gZmFsc2U7XG5cbiAgICBjb25zdHJ1Y3Rvcihmb3JtQnVpbGRlcjogRm9ybUJ1aWxkZXIpIHtcbiAgICAgIHRoaXMuZm9ybUJ1aWxkZXIgPSBmb3JtQnVpbGRlcjtcbiAgICAgIHRoaXMuY3JlYXRlRm9ybUdyb3VwQmFzZSgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBwaG9uZU1hc2soZXZlbnQ6IGFueSk6IHZvaWQge1xuICAgICAgICBGb3JtYXRVdGlsc1NlcnZpY2UuZm9ybWF0VGVsZXBob25lSW5wdXRFdmVudChldmVudCk7XG4gICAgfVxuXG4gICAgcHVibGljIGNwZk1hc2soZXZlbnQ6IGFueSk6IHZvaWQge1xuICAgICAgICBGb3JtYXRVdGlsc1NlcnZpY2UuZm9ybWF0Q3BmSW5wdXRFdmVudChldmVudCk7XG4gICAgfVxuXG4gICAgcHVibGljIGNucGpNYXNrKGV2ZW50OiBhbnkpOiB2b2lkIHtcbiAgICAgICAgRm9ybWF0VXRpbHNTZXJ2aWNlLmZvcm1hdENucGpJbnB1dEV2ZW50KGV2ZW50KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25DaGFuZ2VQaXhLZXlUeXBlKGl0ZW06IGFueSwgZm9ybT86IEZvcm1Hcm91cCk6IHZvaWQge1xuICAgICAgICBpZiAoIWl0ZW0gfHwgIWl0ZW0ua2V5KSByZXR1cm47XG5cbiAgICAgICAgdGhpcy5waXhLZXlUeXBlID0gaXRlbS5rZXk7XG5cbiAgICAgICAgY29uc3QgdGFyZ2V0Rm9ybSA9ICh0eXBlb2YgZm9ybSAhPT0gJ3VuZGVmaW5lZCcgJiYgZm9ybSAhPT0gbnVsbClcbiAgICAgICAgICA/IGZvcm1cbiAgICAgICAgICA6IHRoaXMucGl4QWNjb3VudEZvcm1Hcm91cDtcblxuICAgICAgICB0aGlzLmlzU2hvd1BpeEtleUZpZWxkVmFsaWRhdG9yTWVzc2FnZSA9IHRydWU7XG5cbiAgICAgICAgY29uc3QgcGl4S2V5Q29udHJvbCA9IHRhcmdldEZvcm0uZ2V0KFwicGl4S2V5XCIpO1xuICAgICAgICBpZiAocGl4S2V5Q29udHJvbCkge1xuICAgICAgICAgICAgcGl4S2V5Q29udHJvbC5yZXNldCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5zZXRQaXhLZXlWYWxpZGF0b3JzKHRydWUsIHRhcmdldEZvcm0pO1xuXG4gICAgICAgIGlmIChpdGVtLmtleSA9PT0gXCJDUEZcIikge1xuICAgICAgICAgIHRoaXMuc2V0RGVmYXVsdENwZlBpeEtleSh0YXJnZXRGb3JtKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBvbkNsZWFyUGl4S2V5VHlwZShmb3JtPzogRm9ybUdyb3VwKTogdm9pZCB7XG4gICAgICAgIHZhciB0YXJnZXRGb3JtID0gKHR5cGVvZiBmb3JtICE9PSAndW5kZWZpbmVkJyAmJiBmb3JtICE9PSBudWxsKVxuICAgICAgICAgID8gZm9ybVxuICAgICAgICAgIDogdGhpcy5waXhBY2NvdW50Rm9ybUdyb3VwO1xuXG4gICAgICAgIHRoaXMuaXNTaG93UGl4S2V5RmllbGRWYWxpZGF0b3JNZXNzYWdlID0gZmFsc2U7XG5cbiAgICAgICAgaWYgKHRhcmdldEZvcm0uZ2V0KFwicGl4S2V5XCIpKSB7XG4gICAgICAgICAgdGFyZ2V0Rm9ybS5nZXQoXCJwaXhLZXlcIikucmVzZXQoKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBwdWJsaWMgc2V0RGVmYXVsdENwZlBpeEtleShmb3JtPzogRm9ybUdyb3VwKTogdm9pZCB7XG4gICAgICAgIHZhciB0YXJnZXRGb3JtID0gKHR5cGVvZiBmb3JtICE9PSAndW5kZWZpbmVkJyAmJiBmb3JtICE9PSBudWxsKVxuICAgICAgICAgID8gZm9ybVxuICAgICAgICAgIDogdGhpcy5waXhBY2NvdW50Rm9ybUdyb3VwO1xuXG4gICAgICAgIGlmICh0aGlzLl9kZWZhdWx0Q3BmTnVtYmVyKSB7XG4gICAgICAgICAgaWYgKHRhcmdldEZvcm0uZ2V0KFwicGl4S2V5XCIpKSB7XG4gICAgICAgICAgICB0YXJnZXRGb3JtLmdldChcInBpeEtleVwiKS5zZXRWYWx1ZSh0aGlzLl9kZWZhdWx0Q3BmTnVtYmVyKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdmFyIHNoZWV0RG9jdW1lbnQgPSB0aGlzLl9wYXJhbXNGb3JtLmdldChcInNoZWV0RG9jdW1lbnRcIik7XG4gICAgICAgICAgaWYgKHNoZWV0RG9jdW1lbnQgJiYgc2hlZXREb2N1bWVudC5nZXQoXCJjcGZOdW1iZXJcIikpIHtcbiAgICAgICAgICAgIHZhciBjcGYgPSBzaGVldERvY3VtZW50LmdldChcImNwZk51bWJlclwiKS52YWx1ZTtcbiAgICAgICAgICAgIGlmIChjcGYgJiYgdGFyZ2V0Rm9ybS5nZXQoXCJwaXhLZXlcIikpIHtcbiAgICAgICAgICAgICAgdGFyZ2V0Rm9ybS5nZXQoXCJwaXhLZXlcIikuc2V0VmFsdWUoY3BmKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgY3JlYXRlRm9ybUdyb3VwQmFzZSgpOiB2b2lkIHtcbiAgICAgIHRoaXMucGl4QWNjb3VudEZvcm1Hcm91cCA9IHRoaXMuZm9ybUJ1aWxkZXIuZ3JvdXAoe1xuICAgICAgICBpZDogdGhpcy5mb3JtQnVpbGRlci5jb250cm9sKG51bGwpLFxuICAgICAgICBpbmRleDogdGhpcy5mb3JtQnVpbGRlci5jb250cm9sKG51bGwpLFxuICAgICAgICBlbXBsb3llZTogdGhpcy5mb3JtQnVpbGRlci5jb250cm9sKHsgdmFsdWU6IHsgdGFibGVJZDogbnVsbCB9LCBkaXNhYmxlZDogdHJ1ZSB9KSxcbiAgICAgICAgZGF0ZUNoYW5nZTogdGhpcy5mb3JtQnVpbGRlci5jb250cm9sKG51bGwpLFxuICAgICAgICBwaXhLZXlUeXBlOiB0aGlzLmZvcm1CdWlsZGVyLmNvbnRyb2wobnVsbCwgVmFsaWRhdG9ycy5yZXF1aXJlZCksXG4gICAgICAgIHBpeEtleTogdGhpcy5mb3JtQnVpbGRlci5jb250cm9sKG51bGwpLFxuICAgICAgICBwZXJjZW50YWdlOiB0aGlzLmZvcm1CdWlsZGVyLmNvbnRyb2woXG4gICAgICAgICAgbnVsbCxcbiAgICAgICAgICBWYWxpZGF0b3JzLmNvbXBvc2UoW1xuICAgICAgICAgICAgLi4udGhpcy5pbml0aWFsVmFsaWRhdG9yT2ZQZXJjZW50YWdlLFxuICAgICAgICAgICAgVmFsaWRhdG9ycy5tYXgodGhpcy5tYXhWYWx1ZVBlcmNlbnRhZ2UpLFxuICAgICAgICAgIF0pXG4gICAgICAgICksXG4gICAgICAgIGV4dGVybmFsSWQ6IHRoaXMuZm9ybUJ1aWxkZXIuY29udHJvbChudWxsKSxcbiAgICAgICAgY3VzdG9tRmllbGRzOiB0aGlzLmZvcm1CdWlsZGVyLmNvbnRyb2wobnVsbCksXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgc2V0VmFsaWRhdG9yc0FjY29yZGluZ0xpc3QoXG4gICAgICAgIHBpeEFjY291bnRMaXN0OiBvYmplY3RbXSxcbiAgICAgICAgaW5kZXg6IG51bWJlciB8IG51bGwgPSBudWxsLFxuICAgICAgICBpc0VkaXRNb2RlOiBib29sZWFuID0gdHJ1ZSxcbiAgICAgICAgZm9ybT86IEZvcm1Hcm91cFxuICAgICAgKTogdm9pZCB7XG4gICAgICAgIHZhciB0YXJnZXRGb3JtID0gKHR5cGVvZiBmb3JtICE9PSAndW5kZWZpbmVkJyAmJiBmb3JtICE9PSBudWxsKVxuICAgICAgICAgID8gZm9ybVxuICAgICAgICAgIDogdGhpcy5waXhBY2NvdW50Rm9ybUdyb3VwO1xuXG4gICAgICAgIHRoaXMucGl4QWNjb3VudExpc3QgPSAocGl4QWNjb3VudExpc3QgJiYgcGl4QWNjb3VudExpc3QubGVuZ3RoID4gMClcbiAgICAgICAgICA/IFtdLmNvbmNhdChwaXhBY2NvdW50TGlzdClcbiAgICAgICAgICA6IFtdO1xuXG4gICAgICAgIHZhciBwZXJjZW50YWdlSW5jbHVkZWQ6IG51bWJlcltdID0gW107XG5cbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnBpeEFjY291bnRMaXN0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgdmFyIGZpZWxkOiBhbnkgPSB0aGlzLnBpeEFjY291bnRMaXN0W2ldO1xuICAgICAgICAgIGlmIChmaWVsZCAmJiBmaWVsZC5wZXJjZW50YWdlICYmIGkgIT09IGluZGV4KSB7XG4gICAgICAgICAgICBwZXJjZW50YWdlSW5jbHVkZWQucHVzaChmaWVsZC5wZXJjZW50YWdlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmJlZm9yZVNldFBpeEtleVR5cGVWYWxpZGF0b3IodGFyZ2V0Rm9ybSk7XG4gICAgICAgIHRoaXMuc2V0UGl4S2V5VmFsaWRhdG9ycyhpc0VkaXRNb2RlLCB0YXJnZXRGb3JtKTtcbiAgICAgICAgdGhpcy52YWxpZGF0ZVBlcmNlbnRhZ2VWYWxpZChwZXJjZW50YWdlSW5jbHVkZWQsIHRhcmdldEZvcm0pO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBiZWZvcmVTZXRQaXhLZXlUeXBlVmFsaWRhdG9yKGZvcm06IEZvcm1Hcm91cCk6IHZvaWQge1xuICAgICAgY29uc3QgY29udHJvbCA9IGZvcm0uZ2V0KFwicGl4S2V5VHlwZVwiKTtcblxuICAgICAgaWYgKHRoaXMucGl4QWNjb3VudExpc3QgJiYgdGhpcy5waXhBY2NvdW50TGlzdC5sZW5ndGgpIHtcbiAgICAgICAgY29udHJvbC5zZXRWYWxpZGF0b3JzKFxuICAgICAgICAgIFZhbGlkYXRvcnMuY29tcG9zZShbXG4gICAgICAgICAgICBWYWxpZGF0b3JzLnJlcXVpcmVkLFxuICAgICAgICAgICAgdGhpcy52YWxpZGF0ZUR1cGxpY2F0ZVBpeEtleVR5cGVCYW5rQWNjb3VudCh0aGlzLnBpeEFjY291bnRMaXN0KSxcbiAgICAgICAgICBdKVxuICAgICAgICApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29udHJvbC5zZXRWYWxpZGF0b3JzKFZhbGlkYXRvcnMucmVxdWlyZWQpO1xuICAgICAgfVxuICAgICAgY29udHJvbC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIHNldFBpeEtleVZhbGlkYXRvcnMoaXNFZGl0TW9kZTogYm9vbGVhbiwgZm9ybTogRm9ybUdyb3VwKTogdm9pZCB7XG4gICAgICBjb25zdCBwaXhLZXkgPSBmb3JtLmdldChcInBpeEtleVwiKTtcbiAgICAgIHN3aXRjaCAodGhpcy5waXhLZXlUeXBlKSB7XG4gICAgICAgIGNhc2UgXCJURUxFUEhPTkVcIjpcbiAgICAgICAgICBwaXhLZXkuc2V0VmFsaWRhdG9ycyhWYWxpZGF0b3JzLmNvbXBvc2UoW1ZhbGlkYXRvcnMucmVxdWlyZWQsIEdlbmVyaWNWYWxpZGF0b3IuaXNWYWxpZFBob25lTnVtYmVyXSkpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiRU1BSUxcIjpcbiAgICAgICAgICBwaXhLZXkuc2V0VmFsaWRhdG9ycyhWYWxpZGF0b3JzLmNvbXBvc2UoW1ZhbGlkYXRvcnMucmVxdWlyZWQsIEdlbmVyaWNWYWxpZGF0b3IuaXNWYWxpZEVtYWlsXSkpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiQ1BGXCI6XG4gICAgICAgICAgcGl4S2V5LnNldFZhbGlkYXRvcnMoVmFsaWRhdG9ycy5jb21wb3NlKFtWYWxpZGF0b3JzLnJlcXVpcmVkLCBHZW5lcmljVmFsaWRhdG9yLmlzVmFsaWRDcGZdKSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJDTlBKXCI6XG4gICAgICAgICAgcGl4S2V5LnNldFZhbGlkYXRvcnMoVmFsaWRhdG9ycy5jb21wb3NlKFtWYWxpZGF0b3JzLnJlcXVpcmVkLCBHZW5lcmljVmFsaWRhdG9yLmlzVmFsaWRDbnBqXSkpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiUkFORE9NX0tFWVwiOlxuICAgICAgICAgIHBpeEtleS5zZXRWYWxpZGF0b3JzKFZhbGlkYXRvcnMucmVxdWlyZWQpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHBpeEtleS5jbGVhclZhbGlkYXRvcnMoKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGlzRWRpdE1vZGUpIHtcbiAgICAgICAgcGl4S2V5LmVuYWJsZSgpO1xuICAgICAgfVxuXG4gICAgICBwaXhLZXkudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCB2YWxpZGF0ZVBlcmNlbnRhZ2VWYWxpZChsaXN0VmFsdWU6IG51bWJlcltdLCBmb3JtOiBGb3JtR3JvdXApOiB2b2lkIHtcbiAgICAgIGNvbnN0IHBlcmNlbnRhZ2UgPSBmb3JtLmdldChcInBlcmNlbnRhZ2VcIik7XG4gICAgICB0aGlzLm1heFZhbHVlUGVyY2VudGFnZSA9IGxpc3RWYWx1ZS5yZWR1Y2UoKGFjYywgdmFsKSA9PiBhY2MgLSB2YWwsIDEwMC4wKTtcblxuICAgICAgcGVyY2VudGFnZS5zZXRWYWxpZGF0b3JzKFxuICAgICAgICBWYWxpZGF0b3JzLmNvbXBvc2UoW1xuICAgICAgICAgIC4uLnRoaXMuaW5pdGlhbFZhbGlkYXRvck9mUGVyY2VudGFnZSxcbiAgICAgICAgICBWYWxpZGF0b3JzLm1heCh0aGlzLm1heFZhbHVlUGVyY2VudGFnZSksXG4gICAgICAgIF0pXG4gICAgICApO1xuXG4gICAgICBwZXJjZW50YWdlLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHZhbGlkYXRlRHVwbGljYXRlUGl4S2V5VHlwZUJhbmtBY2NvdW50KGxpc3RDb21wYXJlOiBvYmplY3RbXSkge1xuICAgICAgcmV0dXJuIChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiB7IFtrZXk6IHN0cmluZ106IGFueSB9IHwgbnVsbCA9PiB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gY29udHJvbC52YWx1ZTtcbiAgICAgICAgY29uc3QgaXNEdXBsaWNhdGUgPSBsaXN0Q29tcGFyZS5zb21lKFxuICAgICAgICAgIChmaWVsZDogYW55KSA9PlxuICAgICAgICAgICAgdmFsdWUgJiZcbiAgICAgICAgICAgIGZpZWxkLnBpeEtleVR5cGUua2V5ID09PSBcIkJBTktfQUNDT1VOVFwiICYmXG4gICAgICAgICAgICB2YWx1ZS5rZXkgPT09IFwiQkFOS19BQ0NPVU5UXCJcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIGlzRHVwbGljYXRlID8geyBwaXhLZXlUeXBlQmFua0FjY291bnREdXBsaWNhdGU6IHRydWUgfSA6IG51bGw7XG4gICAgICB9O1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgcGFyYW1zRm9ybSgpOiBGb3JtR3JvdXAge1xuICAgICAgcmV0dXJuIHRoaXMuX3BhcmFtc0Zvcm07XG4gICAgfVxuXG4gICAgcHVibGljIHNldCBwYXJhbXNGb3JtKHZhbHVlOiBGb3JtR3JvdXApIHtcbiAgICAgIHRoaXMuX3BhcmFtc0Zvcm0gPSB2YWx1ZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGRlZmF1bHRDcGZOdW1iZXIoKTogc3RyaW5nIHtcbiAgICAgIHJldHVybiB0aGlzLl9kZWZhdWx0Q3BmTnVtYmVyO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXQgZGVmYXVsdENwZk51bWJlcih2YWx1ZTogc3RyaW5nKSB7XG4gICAgICB0aGlzLl9kZWZhdWx0Q3BmTnVtYmVyID0gdmFsdWU7XG4gICAgfVxuICB9XG4iXX0=
|