ngx-histaff-alpha 4.6.5 → 4.6.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/app/libraries/core-compare-db-pipeline/core-compare-db-pipeline.component.mjs +110 -17
- package/fesm2022/ngx-histaff-alpha.mjs +104 -15
- package/fesm2022/ngx-histaff-alpha.mjs.map +1 -1
- package/lib/app/libraries/core-compare-db-pipeline/core-compare-db-pipeline.component.d.ts +12 -1
- package/package.json +1 -1
package/esm2022/lib/app/libraries/core-compare-db-pipeline/core-compare-db-pipeline.component.mjs
CHANGED
|
@@ -1,13 +1,17 @@
|
|
|
1
|
-
import { Component } from '@angular/core';
|
|
1
|
+
import { Component, ViewChild } from '@angular/core';
|
|
2
2
|
import { BaseComponent } from '../base-component/base/base.component';
|
|
3
3
|
import { CoreTableComponent } from '../core-table/core-table.component';
|
|
4
4
|
import { CorePageHeaderComponent } from '../core-page-header/core-page-header/core-page-header.component';
|
|
5
5
|
import { BehaviorSubject, distinctUntilChanged, switchMap, tap } from 'rxjs';
|
|
6
6
|
import { CorePaginationComponent } from '../core-pagination/core-pagination/core-pagination.component';
|
|
7
7
|
import { CoreButtonGroupVnsComponent } from '../core-button-group-vns/core-button-group-vns/core-button-group-vns.component';
|
|
8
|
+
import { TooltipDirective } from '../tooltip/tooltip.directive';
|
|
9
|
+
import { CoreCheckboxComponent } from '../core-checkbox/core-checkbox/core-checkbox.component';
|
|
10
|
+
import { FormsModule } from '@angular/forms';
|
|
8
11
|
import * as i0 from "@angular/core";
|
|
9
12
|
import * as i1 from "../../services/multi-language.service";
|
|
10
13
|
import * as i2 from "../../services/app.service";
|
|
14
|
+
import * as i3 from "@angular/forms";
|
|
11
15
|
export class CoreCompareDbPipelineComponent extends BaseComponent {
|
|
12
16
|
constructor(mls, appService) {
|
|
13
17
|
super(mls);
|
|
@@ -24,20 +28,20 @@ export class CoreCompareDbPipelineComponent extends BaseComponent {
|
|
|
24
28
|
width: 0
|
|
25
29
|
},
|
|
26
30
|
{
|
|
27
|
-
field: '
|
|
31
|
+
field: 'sourceAlias',
|
|
28
32
|
type: 'string',
|
|
29
|
-
caption: '
|
|
33
|
+
caption: 'Nguồn',
|
|
30
34
|
align: 'left',
|
|
31
35
|
sortDisabled: true,
|
|
32
|
-
width:
|
|
36
|
+
width: 60
|
|
33
37
|
},
|
|
34
38
|
{
|
|
35
|
-
field: '
|
|
39
|
+
field: 'targetAlias',
|
|
36
40
|
type: 'string',
|
|
37
|
-
caption: '
|
|
41
|
+
caption: 'Đích',
|
|
38
42
|
align: 'left',
|
|
39
43
|
sortDisabled: true,
|
|
40
|
-
width:
|
|
44
|
+
width: 60
|
|
41
45
|
},
|
|
42
46
|
{
|
|
43
47
|
field: 'tableName',
|
|
@@ -64,12 +68,12 @@ export class CoreCompareDbPipelineComponent extends BaseComponent {
|
|
|
64
68
|
width: 100
|
|
65
69
|
},
|
|
66
70
|
{
|
|
67
|
-
field: '
|
|
68
|
-
type: '
|
|
69
|
-
caption: '
|
|
70
|
-
align: '
|
|
71
|
+
field: 'sourceAllowsNull',
|
|
72
|
+
type: 'boolean',
|
|
73
|
+
caption: 'Source nullablity',
|
|
74
|
+
align: 'center',
|
|
71
75
|
sortDisabled: true,
|
|
72
|
-
width:
|
|
76
|
+
width: 70
|
|
73
77
|
},
|
|
74
78
|
{
|
|
75
79
|
field: 'sourceSize',
|
|
@@ -79,6 +83,22 @@ export class CoreCompareDbPipelineComponent extends BaseComponent {
|
|
|
79
83
|
sortDisabled: true,
|
|
80
84
|
width: 100
|
|
81
85
|
},
|
|
86
|
+
{
|
|
87
|
+
field: 'targetType',
|
|
88
|
+
type: 'string',
|
|
89
|
+
caption: 'Kiểu đích',
|
|
90
|
+
align: 'left',
|
|
91
|
+
sortDisabled: true,
|
|
92
|
+
width: 100
|
|
93
|
+
},
|
|
94
|
+
{
|
|
95
|
+
field: 'targetAllowsNull',
|
|
96
|
+
type: 'boolean',
|
|
97
|
+
caption: 'Target nullablity',
|
|
98
|
+
align: 'center',
|
|
99
|
+
sortDisabled: true,
|
|
100
|
+
width: 70
|
|
101
|
+
},
|
|
82
102
|
{
|
|
83
103
|
field: 'targetSize',
|
|
84
104
|
type: 'string',
|
|
@@ -107,9 +127,36 @@ export class CoreCompareDbPipelineComponent extends BaseComponent {
|
|
|
107
127
|
this.pageSize$ = new BehaviorSubject(50);
|
|
108
128
|
this.pageCount = 0;
|
|
109
129
|
this.suspendCurrentPageSubscription$ = new BehaviorSubject(false);
|
|
130
|
+
this.sqlCommand = '';
|
|
131
|
+
this.resolverSessionId = '';
|
|
132
|
+
this.conflictTotal = 0;
|
|
133
|
+
}
|
|
134
|
+
refreshList() {
|
|
135
|
+
this.loading = true;
|
|
136
|
+
this.subscriptions.push(this.appService.post('/api/SqlServerPipeline/CompareDbStructure', this.request$.value).subscribe(x => {
|
|
137
|
+
this.loading = false;
|
|
138
|
+
if (x.ok && x.status === 200 && x.body?.statusCode === 200) {
|
|
139
|
+
this.data = x.body.innerBody.data;
|
|
140
|
+
this.pageCount = Math.ceil(x.body.innerBody.count / this.pageSize$.value);
|
|
141
|
+
this.currentPage$.next(x.body.innerBody.pageNumber);
|
|
142
|
+
this.conflictTotal = x.body.innerBody.count || 0;
|
|
143
|
+
}
|
|
144
|
+
}));
|
|
110
145
|
}
|
|
111
146
|
ngAfterViewInit() {
|
|
112
147
|
setTimeout(() => {
|
|
148
|
+
const tryFilterDifference = this.columns.filter(x => x.field === 'difference');
|
|
149
|
+
if (!!tryFilterDifference.length) {
|
|
150
|
+
tryFilterDifference[0].templateRef = this.toolBlock;
|
|
151
|
+
}
|
|
152
|
+
const tryFilterSourceAllowsNull = this.columns.filter(x => x.field === 'sourceAllowsNull');
|
|
153
|
+
if (!!tryFilterSourceAllowsNull.length) {
|
|
154
|
+
tryFilterSourceAllowsNull[0].templateRef = this.sourceAllowsNull;
|
|
155
|
+
}
|
|
156
|
+
const tryFilterTargetAllowsNull = this.columns.filter(x => x.field === 'targetAllowsNull');
|
|
157
|
+
if (!!tryFilterTargetAllowsNull.length) {
|
|
158
|
+
tryFilterTargetAllowsNull[0].templateRef = this.targetAllowsNull;
|
|
159
|
+
}
|
|
113
160
|
this.tableHeight = window.innerHeight - 60 - 50 - 46 - 30;
|
|
114
161
|
this.subscriptions.push(this.request$.pipe(distinctUntilChanged((pre, cur) => JSON.stringify(pre) === JSON.stringify(cur)), tap(() => this.loading = true), switchMap(x => this.appService.post('/api/SqlServerPipeline/CompareDbStructure', x))).subscribe(x => {
|
|
115
162
|
this.loading = false;
|
|
@@ -117,6 +164,7 @@ export class CoreCompareDbPipelineComponent extends BaseComponent {
|
|
|
117
164
|
this.data = x.body.innerBody.data;
|
|
118
165
|
this.pageCount = Math.ceil(x.body.innerBody.count / this.pageSize$.value);
|
|
119
166
|
this.currentPage$.next(x.body.innerBody.pageNumber);
|
|
167
|
+
this.conflictTotal = x.body.innerBody.count || 0;
|
|
120
168
|
}
|
|
121
169
|
}));
|
|
122
170
|
this.subscriptions.push(this.currentPage$.subscribe(x => {
|
|
@@ -129,9 +177,42 @@ export class CoreCompareDbPipelineComponent extends BaseComponent {
|
|
|
129
177
|
});
|
|
130
178
|
}
|
|
131
179
|
onSearching(e) {
|
|
180
|
+
const filtered = e.filter(x => !!x.searchFor.length);
|
|
181
|
+
this.request$.next({
|
|
182
|
+
...this.request$.value,
|
|
183
|
+
filter: filtered
|
|
184
|
+
});
|
|
185
|
+
}
|
|
186
|
+
openRowResolver(event, context) {
|
|
187
|
+
event.stopPropagation();
|
|
188
|
+
this.loading = true;
|
|
189
|
+
this.subscriptions.push(this.appService.post('/api/SqlServerPipeline/GenerateConflictResolverCommand', context).subscribe(x => {
|
|
190
|
+
this.loading = false;
|
|
191
|
+
if (x.ok && x.status === 200 && x.body?.statusCode === 200) {
|
|
192
|
+
this.showRowResolverWindow = true;
|
|
193
|
+
this.resolverSessionId = x.body.innerBody.resolverSessionId;
|
|
194
|
+
this.sqlCommand = x.body.innerBody.sqlCommand.trim();
|
|
195
|
+
}
|
|
196
|
+
}));
|
|
197
|
+
}
|
|
198
|
+
closeRowResolver(event) {
|
|
199
|
+
this.showRowResolverWindow = false;
|
|
200
|
+
}
|
|
201
|
+
resolve(event) {
|
|
202
|
+
this.loading = true;
|
|
203
|
+
this.subscriptions.push(this.appService.post('/api/SqlServerPipeline/RunConflictResolverCommand', {
|
|
204
|
+
resolverSessionId: this.resolverSessionId,
|
|
205
|
+
sqlCommand: this.sqlCommand
|
|
206
|
+
}).subscribe(x => {
|
|
207
|
+
this.loading = false;
|
|
208
|
+
if (x.ok && x.status === 200 && x.body?.statusCode === 200) {
|
|
209
|
+
this.showRowResolverWindow = false;
|
|
210
|
+
this.refreshList();
|
|
211
|
+
}
|
|
212
|
+
}));
|
|
132
213
|
}
|
|
133
214
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.1", ngImport: i0, type: CoreCompareDbPipelineComponent, deps: [{ token: i1.MultiLanguageService }, { token: i2.AppService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
134
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "
|
|
215
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.0.1", type: CoreCompareDbPipelineComponent, isStandalone: true, selector: "core-compare-db-pipeline", viewQueries: [{ propertyName: "toolBlock", first: true, predicate: ["toolBlock"], descendants: true }, { propertyName: "sourceAllowsNull", first: true, predicate: ["sourceAllowsNull"], descendants: true }, { propertyName: "targetAllowsNull", first: true, predicate: ["targetAllowsNull"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<div class=\"core-compare-db-pipeline-container\">\r\n <core-page-header [title]=\"'SO S\u00C1NH C\u1EA4U TR\u00DAC C\u00C1C DB TRONG M\u00D4I TR\u01AF\u1EDCNG PH\u00C1T TRI\u1EC2N'\"\r\n [hideButtonGroup]=\"true\"></core-page-header>\r\n <core-table [showCheckbox]=\"true\" [columns]=\"columns\" [height]=\"tableHeight\" [data]=\"data\" [loading]=\"loading\"\r\n [autoColumnFitAvailableSpace]=\"false\" [frozen]=\"2\" [lazyLoading]=\"true\"\r\n (onSearching)=\"onSearching($event)\"></core-table>\r\n <div class=\"h15\"></div>\r\n <div class=\"w-100 d-flex d-flex-between\">\r\n <div class=\"conflict-total\" [class.error]=\"!!conflictTotal\">\r\n {{ !!conflictTotal ? conflictTotal + ' conflicts found!' : 'No conflict found' }} \r\n </div>\r\n <core-pagination [$height]=\"46\" [$currentPage]=\"currentPage$\" [$pageCount]=\"pageCount\" [$loading]=\"loading\"\r\n [$background]=\"'#848484'\" [$fixedPageSize]=\"20\"\r\n [$suspendCurrentPageSubscription]=\"suspendCurrentPageSubscription$\"></core-pagination>\r\n </div>\r\n\r\n @if (showRowResolverWindow) {\r\n <div class=\"modal-container\">\r\n <div class=\"modal-content-root\">\r\n <div class=\"row-resolver-window\">\r\n <core-page-header [title]=\"'RESOLVER WINDOW'\" [hideButtonGroup]=\"true\"></core-page-header>\r\n <i class=\"close-icon pointer feather-x fs24\" (click)=\"closeRowResolver($event)\"></i>\r\n <textarea class=\"form-control\" [rows]=\"'10'\" style=\"height: 400px; padding: 15px;\" disabled>\r\n {{ sqlCommand }}\r\n </textarea>\r\n <button class=\"btn btn-primary\" (click)=\"resolve($event)\" style=\"margin-top: 15px;\">Resolve</button>\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n\r\n <ng-template #toolBlock let-context=\"context\">\r\n <div class=\"tools inter-font d-flex d-flex-start\">\r\n <div class=\"icon-wrapper\" [appTooltip]=\"'Resolve'\" [position]=\"'right'\" [showAnyway]=\"true\" (click)=\"openRowResolver($event, context)\">\r\n <i class=\"feather-play fs24\"></i>\r\n </div>\r\n <span>{{ context.difference }}</span>\r\n </div>\r\n </ng-template>\r\n <ng-template #sourceAllowsNull let-context=\"context\">\r\n <core-checkbox [ngModel]=\"context.sourceAllowsNull\" [disabled]=\"true\"></core-checkbox>\r\n </ng-template>\r\n <ng-template #targetAllowsNull let-context=\"context\">\r\n <core-checkbox [ngModel]=\"context.targetAllowsNull\" [disabled]=\"true\"></core-checkbox>\r\n </ng-template>\r\n</div>", styles: [".core-compare-db-pipeline-container .h15{height:15px}.core-compare-db-pipeline-container .tools{height:36px}.core-compare-db-pipeline-container .tools .icon-wrapper{color:#848484;opacity:.5;display:inline-flex;width:36px;height:36px;border-radius:50%}.core-compare-db-pipeline-container .tools .icon-wrapper:hover{opacity:1;color:#fff;background-color:#848484}.core-compare-db-pipeline-container .modal-content-root{padding-top:0}.core-compare-db-pipeline-container .close-icon{display:block;position:absolute;top:8px;right:8px;color:#848484}.core-compare-db-pipeline-container .close-icon:hover{color:inherit}.core-compare-db-pipeline-container .row-resolver-window{display:block;width:992px;max-width:100vw!important;height:500px}.core-compare-db-pipeline-container .conflict-total{height:50px;display:flex;align-items:center;justify-content:flex-start;color:#848484;font-size:24px;font-weight:700}.core-compare-db-pipeline-container .conflict-total.error{color:brown}\n"], dependencies: [{ kind: "component", type: CorePageHeaderComponent, selector: "core-page-header", inputs: ["instanceNumber", "shownItems", "title", "hideButtonGroup"], outputs: ["buttonClick"] }, { kind: "component", type: CoreTableComponent, selector: "core-table", inputs: ["id", "width", "height", "showCheckbox", "checkboxSize", "outerButtons", "showTools", "tools", "checkingResetFlag", "borderRadius", "headerColor", "headerBackgroundColor", "headerWrap", "headerFirstRowHeight", "headerSecondRowHeight", "wrap", "allowCellScrollY", "loading", "rowHeight", "frozen", "footer", "columns", "data", "selectedIds", "corePageListInstanceNumber", "disableHighlightOnClick", "freeMode", "searchSwitchDisabled", "disableSorting", "inlineToolItems", "columnSearchDefaultOpen", "lazyLoading", "primaryKey", "rowHoverBgColor", "noPaddingCell", "autoColumnFitAvailableSpace"], outputs: ["onSearching", "onToolClick", "onRowClick", "onRowDoubleClick", "onSelectedIdsChange", "onSelectedDataChange", "onColumnCaptionClick"] }, { kind: "component", type: CorePaginationComponent, selector: "core-pagination", inputs: ["$currentPage", "$height", "$pageCount", "$loading", "$suspendCurrentPageSubscription", "$showAdd", "$background", "$fixedPageSize"], outputs: ["$onClickAdd"] }, { kind: "directive", type: TooltipDirective, selector: "[appTooltip]", inputs: ["color", "backgroundColor", "appTooltip", "showAnyway", "position"] }, { kind: "component", type: CoreCheckboxComponent, selector: "core-checkbox", inputs: ["text", "tooltipPosition", "tooltip", "inputValue", "disabled"], outputs: ["onClick"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }] }); }
|
|
135
216
|
}
|
|
136
217
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.1", ngImport: i0, type: CoreCompareDbPipelineComponent, decorators: [{
|
|
137
218
|
type: Component,
|
|
@@ -139,7 +220,19 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.1", ngImpor
|
|
|
139
220
|
CoreButtonGroupVnsComponent,
|
|
140
221
|
CorePageHeaderComponent,
|
|
141
222
|
CoreTableComponent,
|
|
142
|
-
CorePaginationComponent
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29yZS1jb21wYXJlLWRiLXBpcGVsaW5lLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1oaXN0YWZmLWFscGhhL3NyYy9saWIvYXBwL2xpYnJhcmllcy9jb3JlLWNvbXBhcmUtZGItcGlwZWxpbmUvY29yZS1jb21wYXJlLWRiLXBpcGVsaW5lLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1oaXN0YWZmLWFscGhhL3NyYy9saWIvYXBwL2xpYnJhcmllcy9jb3JlLWNvbXBhcmUtZGItcGlwZWxpbmUvY29yZS1jb21wYXJlLWRiLXBpcGVsaW5lLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBaUIsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBR3pELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUN0RSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUV4RSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxpRUFBaUUsQ0FBQztBQUMxRyxPQUFPLEVBQUUsZUFBZSxFQUFFLG9CQUFvQixFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDN0UsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sOERBQThELENBQUM7QUFDdkcsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sZ0ZBQWdGLENBQUM7Ozs7QUF3QjdILE1BQU0sT0FBTyw4QkFBK0IsU0FBUSxhQUFhO0lBd0cvRCxZQUNrQixHQUF5QixFQUNqQyxVQUFzQjtRQUU5QixLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUFISyxRQUFHLEdBQUgsR0FBRyxDQUFzQjtRQUNqQyxlQUFVLEdBQVYsVUFBVSxDQUFZO1FBeEdoQyxTQUFJLEdBQVUsRUFBRSxDQUFDO1FB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QyxDQUNILENBQUE7WUFFRCxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FDckIsSUFBSSxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUU7Z0JBQzlCLE1BQU0sVUFBVSxHQUErQjtvQkFDN0MsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUs7b0JBQ3RCLFVBQVUsRUFBRSxDQUFDO2lCQUNkLENBQUE7Z0JBQ0QsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQTtZQUM1RCxDQUFDLENBQUMsQ0FDSCxDQUFBO1FBRUgsQ0FBQyxDQUFDLENBQUE7SUFDSixDQUFDO0lBRUQsV0FBVyxDQUFDLENBQU07SUFFbEIsQ0FBQzs4R0FsSlUsOEJBQThCO2tHQUE5Qiw4QkFBOEIsMkdDakMzQyx1M0JBYWMsMlBEYU4sdUJBQXVCLDZKQUN2QixrQkFBa0IscXlCQUNsQix1QkFBdUI7OzJGQUtsQiw4QkFBOEI7a0JBWDFDLFNBQVM7K0JBQ0ksMEJBQTBCLFdBQzNCO3dCQUNMLDJCQUEyQjt3QkFDM0IsdUJBQXVCO3dCQUN2QixrQkFBa0I7d0JBQ2xCLHVCQUF1QjtxQkFDMUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBZnRlclZpZXdJbml0LCBDb21wb25lbnQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQXBwU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2FwcC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgTXVsdGlMYW5ndWFnZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9tdWx0aS1sYW5ndWFnZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQmFzZUNvbXBvbmVudCB9IGZyb20gJy4uL2Jhc2UtY29tcG9uZW50L2Jhc2UvYmFzZS5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBDb3JlVGFibGVDb21wb25lbnQgfSBmcm9tICcuLi9jb3JlLXRhYmxlL2NvcmUtdGFibGUuY29tcG9uZW50JztcclxuaW1wb3J0IHsgSUNvcmVUYWJsZUNvbHVtbkl0ZW0gfSBmcm9tICcuLi9jb3JlLXRhYmxlL0lDb3JlVGFibGVDb2x1bW5JdGVtJztcclxuaW1wb3J0IHsgQ29yZVBhZ2VIZWFkZXJDb21wb25lbnQgfSBmcm9tICcuLi9jb3JlLXBhZ2UtaGVhZGVyL2NvcmUtcGFnZS1oZWFkZXIvY29yZS1wYWdlLWhlYWRlci5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBzd2l0Y2hNYXAsIHRhcCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBDb3JlUGFnaW5hdGlvbkNvbXBvbmVudCB9IGZyb20gJy4uL2NvcmUtcGFnaW5hdGlvbi9jb3JlLXBhZ2luYXRpb24vY29yZS1wYWdpbmF0aW9uLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IENvcmVCdXR0b25Hcm91cFZuc0NvbXBvbmVudCB9IGZyb20gJy4uL2NvcmUtYnV0dG9uLWdyb3VwLXZucy9jb3JlLWJ1dHRvbi1ncm91cC12bnMvY29yZS1idXR0b24tZ3JvdXAtdm5zLmNvbXBvbmVudCc7XHJcblxyXG5pbnRlcmZhY2UgSUNvbXBhcmVEYlN0cnVjdHVyZUZpbHRlckl0ZW0ge1xyXG4gIGZpZWxkOiBzdHJpbmc7XHJcbiAgc2VhcmNoRm9yOiBzdHJpbmc7XHJcbn1cclxuXHJcbmludGVyZmFjZSBJQ29tcGFyZURiU3RydWN0dXJlUmVxdWVzdCB7XHJcbiAgZmlsdGVyPzogSUNvbXBhcmVEYlN0cnVjdHVyZUZpbHRlckl0ZW1bXTtcclxuICBwYWdlTnVtYmVyOiBudW1iZXI7XHJcbiAgcGFnZVNpemU6IG51bWJlcjtcclxufVxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ2NvcmUtY29tcGFyZS1kYi1waXBlbGluZScsXHJcbiAgICBpbXBvcnRzOiBbXHJcbiAgICAgICAgQ29yZUJ1dHRvbkdyb3VwVm5zQ29tcG9uZW50LFxyXG4gICAgICAgIENvcmVQYWdlSGVhZGVyQ29tcG9uZW50LFxyXG4gICAgICAgIENvcmVUYWJsZUNvbXBvbmVudCxcclxuICAgICAgICBDb3JlUGFnaW5hdGlvbkNvbXBvbmVudFxyXG4gICAgXSxcclxuICAgIHRlbXBsYXRlVXJsOiAnLi9jb3JlLWNvbXBhcmUtZGItcGlwZWxpbmUuY29tcG9uZW50Lmh0bWwnLFxyXG4gICAgc3R5bGVVcmw6ICcuL2NvcmUtY29tcGFyZS1kYi1waXBlbGluZS5jb21wb25lbnQuc2NzcydcclxufSlcclxuZXhwb3J0IGNsYXNzIENvcmVDb21wYXJlRGJQaXBlbGluZUNvbXBvbmVudCBleHRlbmRzIEJhc2VDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0IHtcclxuXHJcbiAgZGF0YTogYW55W10gPSBbXTtcclxuXHJcbiAgY29sdW1uczogSUNvcmVUYWJsZUNvbHVtbkl0ZW1bXSA9IFtcclxuICAgIHtcclxuICAgICAgZmllbGQ6ICdpZCcsXHJcbiAgICAgIHR5cGU6ICdzdHJpbmcnLFxyXG4gICAgICBjYXB0aW9uOiAnaWQnLFxyXG4gICAgICBhbGlnbjogJ2xlZnQnLFxyXG4gICAgICBoaWRkZW46IHRydWUsXHJcbiAgICAgIHdpZHRoOiAwXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBmaWVsZDogJ3NvdXJjZURiJyxcclxuICAgICAgdHlwZTogJ3N0cmluZycsXHJcbiAgICAgIGNhcHRpb246ICdEQiBuZ3Xhu5NuJyxcclxuICAgICAgYWxpZ246ICdsZWZ0JyxcclxuICAgICAgc29ydERpc2FibGVkOiB0cnVlLFxyXG4gICAgICB3aWR0aDogMTYwXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBmaWVsZDogJ3RhcmdldERiJyxcclxuICAgICAgdHlwZTogJ3N0cmluZycsXHJcbiAgICAgIGNhcHRpb246ICdEQiDEkcOtY2gnLFxyXG4gICAgICBhbGlnbjogJ2xlZnQnLFxyXG4gICAgICBzb3J0RGlzYWJsZWQ6IHRydWUsXHJcbiAgICAgIHdpZHRoOiAxNjBcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIGZpZWxkOiAndGFibGVOYW1lJyxcclxuICAgICAgdHlwZTogJ3N0cmluZycsXHJcbiAgICAgIGNhcHRpb246ICdC4bqjbmcnLFxyXG4gICAgICBhbGlnbjogJ2xlZnQnLFxyXG4gICAgICBzb3J0RGlzYWJsZWQ6IHRydWUsXHJcbiAgICAgIHdpZHRoOiAyMDBcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIGZpZWxkOiAnY29sdW1uTmFtZScsXHJcbiAgICAgIHR5cGU6ICdzdHJpbmcnLFxyXG4gICAgICBjYXB0aW9uOiAnQ+G7mXQnLFxyXG4gICAgICBhbGlnbjogJ2xlZnQnLFxyXG4gICAgICBzb3J0RGlzYWJsZWQ6IHRydWUsXHJcbiAgICAgIHdpZHRoOiAyMDBcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIGZpZWxkOiAnc291cmNlVHlwZScsXHJcbiAgICAgIHR5cGU6ICdzdHJpbmcnLFxyXG4gICAgICBjYXB0aW9uOiAnS2nhu4N1IG5ndeG7k24nLFxyXG4gICAgICBhbGlnbjogJ2xlZnQnLFxyXG4gICAgICBzb3J0RGlzYWJsZWQ6IHRydWUsXHJcbiAgICAgIHdpZHRoOiAxMDBcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIGZpZWxkOiAndGFyZ2V0VHlwZScsXHJcbiAgICAgIHR5cGU6ICdzdHJpbmcnLFxyXG4gICAgICBjYXB0aW9uOiAnS2nhu4N1IMSRw61jaCcsXHJcbiAgICAgIGFsaWduOiAnbGVmdCcsXHJcbiAgICAgIHNvcnREaXNhYmxlZDogdHJ1ZSxcclxuICAgICAgd2lkdGg6IDEwMFxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgZmllbGQ6ICdzb3VyY2VTaXplJyxcclxuICAgICAgdHlwZTogJ3N0cmluZycsXHJcbiAgICAgIGNhcHRpb246ICdD4buhIG5ndeG7k24nLFxyXG4gICAgICBhbGlnbjogJ3JpZ2h0JyxcclxuICAgICAgc29ydERpc2FibGVkOiB0cnVlLFxyXG4gICAgICB3aWR0aDogMTAwXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBmaWVsZDogJ3RhcmdldFNpemUnLFxyXG4gICAgICB0eXBlOiAnc3RyaW5nJyxcclxuICAgICAgY2FwdGlvbjogJ0Phu6EgxJHDrWNoJyxcclxuICAgICAgYWxpZ246ICdyaWdodCcsXHJcbiAgICAgIHNvcnREaXNhYmxlZDogdHJ1ZSxcclxuICAgICAgd2lkdGg6IDEwMFxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgZmllbGQ6ICdkaWZmZXJlbmNlJyxcclxuICAgICAgdHlwZTogJ3N0cmluZycsXHJcbiAgICAgIGNhcHRpb246ICdLaMOhYyBiaeG7h3QnLFxyXG4gICAgICBhbGlnbjogJ2xlZnQnLFxyXG4gICAgICBzb3J0RGlzYWJsZWQ6IHRydWUsXHJcbiAgICAgIHdpZHRoOiA0MDBcclxuICAgIH0sXHJcbiAgXVxyXG5cclxuICB0YWJsZUhlaWdodDogbnVtYmVyID0gNTAwO1xyXG5cclxuICBsb2FkaW5nOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIGRlZmF1bHRSZXF1ZXN0OiBJQ29tcGFyZURiU3RydWN0dXJlUmVxdWVzdCA9IHtcclxuICAgIHBhZ2VOdW1iZXI6IDEsXHJcbiAgICBwYWdlU2l6ZTogNTBcclxuICB9XHJcblxyXG4gIHJlcXVlc3QkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxJQ29tcGFyZURiU3RydWN0dXJlUmVxdWVzdD4odGhpcy5kZWZhdWx0UmVxdWVzdCk7XHJcblxyXG4gIGN1cnJlbnRQYWdlJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPigxKTtcclxuICBwYWdlU2l6ZSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlcj4oNTApO1xyXG4gIHBhZ2VDb3VudDogbnVtYmVyID0gMDtcclxuXHJcbiAgc3VzcGVuZEN1cnJlbnRQYWdlU3Vic2NyaXB0aW9uJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHB1YmxpYyBvdmVycmlkZSBtbHM6IE11bHRpTGFuZ3VhZ2VTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBhcHBTZXJ2aWNlOiBBcHBTZXJ2aWNlXHJcbiAgKSB7XHJcbiAgICBzdXBlcihtbHMpO1xyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcblxyXG4gICAgICB0aGlzLnRhYmxlSGVpZ2h0ID0gd2luZG93LmlubmVySGVpZ2h0IC0gNjAgLSA1MCAtIDQ2IC0gMzA7XHJcblxyXG4gICAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcclxuICAgICAgICB0aGlzLnJlcXVlc3QkLnBpcGUoXHJcbiAgICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgocHJlLCBjdXIpID0+IEpTT04uc3RyaW5naWZ5KHByZSkgPT09IEpTT04uc3RyaW5naWZ5KGN1cikpLFxyXG4gICAgICAgICAgdGFwKCgpID0+IHRoaXMubG9hZGluZyA9IHRydWUpLFxyXG4gICAgICAgICAgc3dpdGNoTWFwKHggPT4gdGhpcy5hcHBTZXJ2aWNlLnBvc3QoJy9hcGkvU3FsU2VydmVyUGlwZWxpbmUvQ29tcGFyZURiU3RydWN0dXJlJywgeCkpXHJcbiAgICAgICAgKS5zdWJzY3JpYmUoeCA9PiB7XHJcbiAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgIGlmICh4Lm9rICYmIHguc3RhdHVzID09PSAyMDAgJiYgeC5ib2R5Py5zdGF0dXNDb2RlID09PSAyMDApIHtcclxuICAgICAgICAgICAgdGhpcy5kYXRhID0geC5ib2R5LmlubmVyQm9keS5kYXRhXHJcbiAgICAgICAgICAgIHRoaXMucGFnZUNvdW50ID0gTWF0aC5jZWlsKHguYm9keS5pbm5lckJvZHkuY291bnQgLyB0aGlzLnBhZ2VTaXplJC52YWx1ZSk7XHJcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFBhZ2UkLm5leHQoeC5ib2R5LmlubmVyQm9keS5wYWdlTnVtYmVyKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG4gICAgICApXHJcblxyXG4gICAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcclxuICAgICAgICB0aGlzLmN1cnJlbnRQYWdlJC5zdWJzY3JpYmUoeCA9PiB7XHJcbiAgICAgICAgICBjb25zdCBuZXdSZXF1ZXN0OiBJQ29tcGFyZURiU3RydWN0dXJlUmVxdWVzdCA9IHtcclxuICAgICAgICAgICAgLi4udGhpcy5yZXF1ZXN0JC52YWx1ZSxcclxuICAgICAgICAgICAgcGFnZU51bWJlcjogeFxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdGhpcy5yZXF1ZXN0JC5uZXh0KEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkobmV3UmVxdWVzdCkpKVxyXG4gICAgICAgIH0pXHJcbiAgICAgIClcclxuXHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgb25TZWFyY2hpbmcoZTogYW55KTogdm9pZCB7XHJcblxyXG4gIH1cclxuXHJcbn1cclxuIiwiPGNvcmUtcGFnZS1oZWFkZXIgW3RpdGxlXT1cIidTTyBTw4FOSCBD4bqkVSBUUsOaQyBDw4FDIERCIFRST05HIE3DlEkgVFLGr+G7nE5HIFBIw4FUIFRSSeG7gk4nXCJcclxuICAgIFtoaWRlQnV0dG9uR3JvdXBdPVwidHJ1ZVwiPjwvY29yZS1wYWdlLWhlYWRlcj5cclxuPGNvcmUtdGFibGUgW3Nob3dDaGVja2JveF09XCJ0cnVlXCIgW2NvbHVtbnNdPVwiY29sdW1uc1wiIFtoZWlnaHRdPVwidGFibGVIZWlnaHRcIiBbZGF0YV09XCJkYXRhXCIgW2xvYWRpbmddPVwibG9hZGluZ1wiXHJcbiAgICBbYXV0b0NvbHVtbkZpdEF2YWlsYWJsZVNwYWNlXT1cImZhbHNlXCIgW2Zyb3plbl09XCIyXCIgW2xhenlMb2FkaW5nXT1cInRydWVcIlxyXG4gICAgKG9uU2VhcmNoaW5nKT1cIm9uU2VhcmNoaW5nKCRldmVudClcIj48L2NvcmUtdGFibGU+XHJcbjxkaXYgY2xhc3M9XCJoMTVcIj48L2Rpdj5cclxuPGRpdiBjbGFzcz1cInctMTAwIGQtZmxleCBkLWZsZXgtZW5kXCI+XHJcbiAgICA8Y29yZS1wYWdpbmF0aW9uIFskaGVpZ2h0XT1cIjQ2XCIgWyRjdXJyZW50UGFnZV09XCJjdXJyZW50UGFnZSRcIiBbJHBhZ2VDb3VudF09XCJwYWdlQ291bnRcIiBbJGxvYWRpbmddPVwibG9hZGluZ1wiXHJcbiAgICAgICAgWyRiYWNrZ3JvdW5kXT1cIicjODQ4NDg0J1wiIFskZml4ZWRQYWdlU2l6ZV09XCIyMFwiIFskc3VzcGVuZEN1cnJlbnRQYWdlU3Vic2NyaXB0aW9uXT1cInN1c3BlbmRDdXJyZW50UGFnZVN1YnNjcmlwdGlvbiRcIj48L2NvcmUtcGFnaW5hdGlvbj5cclxuPC9kaXY+XHJcblxyXG48bmctdGVtcGxhdGUgI3Rvb2xzIGxldC1jb250ZXh0PVwiY29udGV4dFwiPlxyXG4gICAgXHJcbjwvbmctdGVtcGxhdGU+Il19
|
|
223
|
+
CorePaginationComponent,
|
|
224
|
+
TooltipDirective,
|
|
225
|
+
CoreCheckboxComponent,
|
|
226
|
+
FormsModule
|
|
227
|
+
], template: "<div class=\"core-compare-db-pipeline-container\">\r\n <core-page-header [title]=\"'SO S\u00C1NH C\u1EA4U TR\u00DAC C\u00C1C DB TRONG M\u00D4I TR\u01AF\u1EDCNG PH\u00C1T TRI\u1EC2N'\"\r\n [hideButtonGroup]=\"true\"></core-page-header>\r\n <core-table [showCheckbox]=\"true\" [columns]=\"columns\" [height]=\"tableHeight\" [data]=\"data\" [loading]=\"loading\"\r\n [autoColumnFitAvailableSpace]=\"false\" [frozen]=\"2\" [lazyLoading]=\"true\"\r\n (onSearching)=\"onSearching($event)\"></core-table>\r\n <div class=\"h15\"></div>\r\n <div class=\"w-100 d-flex d-flex-between\">\r\n <div class=\"conflict-total\" [class.error]=\"!!conflictTotal\">\r\n {{ !!conflictTotal ? conflictTotal + ' conflicts found!' : 'No conflict found' }} \r\n </div>\r\n <core-pagination [$height]=\"46\" [$currentPage]=\"currentPage$\" [$pageCount]=\"pageCount\" [$loading]=\"loading\"\r\n [$background]=\"'#848484'\" [$fixedPageSize]=\"20\"\r\n [$suspendCurrentPageSubscription]=\"suspendCurrentPageSubscription$\"></core-pagination>\r\n </div>\r\n\r\n @if (showRowResolverWindow) {\r\n <div class=\"modal-container\">\r\n <div class=\"modal-content-root\">\r\n <div class=\"row-resolver-window\">\r\n <core-page-header [title]=\"'RESOLVER WINDOW'\" [hideButtonGroup]=\"true\"></core-page-header>\r\n <i class=\"close-icon pointer feather-x fs24\" (click)=\"closeRowResolver($event)\"></i>\r\n <textarea class=\"form-control\" [rows]=\"'10'\" style=\"height: 400px; padding: 15px;\" disabled>\r\n {{ sqlCommand }}\r\n </textarea>\r\n <button class=\"btn btn-primary\" (click)=\"resolve($event)\" style=\"margin-top: 15px;\">Resolve</button>\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n\r\n <ng-template #toolBlock let-context=\"context\">\r\n <div class=\"tools inter-font d-flex d-flex-start\">\r\n <div class=\"icon-wrapper\" [appTooltip]=\"'Resolve'\" [position]=\"'right'\" [showAnyway]=\"true\" (click)=\"openRowResolver($event, context)\">\r\n <i class=\"feather-play fs24\"></i>\r\n </div>\r\n <span>{{ context.difference }}</span>\r\n </div>\r\n </ng-template>\r\n <ng-template #sourceAllowsNull let-context=\"context\">\r\n <core-checkbox [ngModel]=\"context.sourceAllowsNull\" [disabled]=\"true\"></core-checkbox>\r\n </ng-template>\r\n <ng-template #targetAllowsNull let-context=\"context\">\r\n <core-checkbox [ngModel]=\"context.targetAllowsNull\" [disabled]=\"true\"></core-checkbox>\r\n </ng-template>\r\n</div>", styles: [".core-compare-db-pipeline-container .h15{height:15px}.core-compare-db-pipeline-container .tools{height:36px}.core-compare-db-pipeline-container .tools .icon-wrapper{color:#848484;opacity:.5;display:inline-flex;width:36px;height:36px;border-radius:50%}.core-compare-db-pipeline-container .tools .icon-wrapper:hover{opacity:1;color:#fff;background-color:#848484}.core-compare-db-pipeline-container .modal-content-root{padding-top:0}.core-compare-db-pipeline-container .close-icon{display:block;position:absolute;top:8px;right:8px;color:#848484}.core-compare-db-pipeline-container .close-icon:hover{color:inherit}.core-compare-db-pipeline-container .row-resolver-window{display:block;width:992px;max-width:100vw!important;height:500px}.core-compare-db-pipeline-container .conflict-total{height:50px;display:flex;align-items:center;justify-content:flex-start;color:#848484;font-size:24px;font-weight:700}.core-compare-db-pipeline-container .conflict-total.error{color:brown}\n"] }]
|
|
228
|
+
}], ctorParameters: () => [{ type: i1.MultiLanguageService }, { type: i2.AppService }], propDecorators: { toolBlock: [{
|
|
229
|
+
type: ViewChild,
|
|
230
|
+
args: ['toolBlock']
|
|
231
|
+
}], sourceAllowsNull: [{
|
|
232
|
+
type: ViewChild,
|
|
233
|
+
args: ['sourceAllowsNull']
|
|
234
|
+
}], targetAllowsNull: [{
|
|
235
|
+
type: ViewChild,
|
|
236
|
+
args: ['targetAllowsNull']
|
|
237
|
+
}] } });
|
|
238
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29yZS1jb21wYXJlLWRiLXBpcGVsaW5lLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1oaXN0YWZmLWFscGhhL3NyYy9saWIvYXBwL2xpYnJhcmllcy9jb3JlLWNvbXBhcmUtZGItcGlwZWxpbmUvY29yZS1jb21wYXJlLWRiLXBpcGVsaW5lLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1oaXN0YWZmLWFscGhhL3NyYy9saWIvYXBwL2xpYnJhcmllcy9jb3JlLWNvbXBhcmUtZGItcGlwZWxpbmUvY29yZS1jb21wYXJlLWRiLXBpcGVsaW5lLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBaUIsU0FBUyxFQUFlLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUdqRixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDdEUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFFeEUsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0saUVBQWlFLENBQUM7QUFDMUcsT0FBTyxFQUFFLGVBQWUsRUFBRSxvQkFBb0IsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzdFLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDhEQUE4RCxDQUFDO0FBQ3ZHLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLGdGQUFnRixDQUFDO0FBQzdILE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHdEQUF3RCxDQUFDO0FBQy9GLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7Ozs7QUE2QzdDLE1BQU0sT0FBTyw4QkFBK0IsU0FBUSxhQUFh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QUFDLENBQUMsSUFBSSxFQUFFLFVBQVUsS0FBSyxHQUFHLEVBQUUsQ0FBQztnQkFDM0QsSUFBSSxDQUFDLHFCQUFxQixHQUFHLEtBQUssQ0FBQztnQkFDbkMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ3JCLENBQUM7UUFDSCxDQUFDLENBQUMsQ0FDSCxDQUFBO0lBQ0gsQ0FBQzs4R0FqUFUsOEJBQThCO2tHQUE5Qiw4QkFBOEIsaWFDekQzQywwdEZBNkNNLHNnQ0RFRSx1QkFBdUIsNkpBQ3ZCLGtCQUFrQixxeUJBQ2xCLHVCQUF1QixxT0FDdkIsZ0JBQWdCLHVJQUNoQixxQkFBcUIseUpBQ3JCLFdBQVc7OzJGQUtOLDhCQUE4QjtrQkFkMUMsU0FBUzsrQkFDSSwwQkFBMEIsV0FDM0I7d0JBQ0wsMkJBQTJCO3dCQUMzQix1QkFBdUI7d0JBQ3ZCLGtCQUFrQjt3QkFDbEIsdUJBQXVCO3dCQUN2QixnQkFBZ0I7d0JBQ2hCLHFCQUFxQjt3QkFDckIsV0FBVztxQkFDZDtrSEFNcUIsU0FBUztzQkFBaEMsU0FBUzt1QkFBQyxXQUFXO2dCQUNTLGdCQUFnQjtzQkFBOUMsU0FBUzt1QkFBQyxrQkFBa0I7Z0JBQ0UsZ0JBQWdCO3NCQUE5QyxTQUFTO3VCQUFDLGtCQUFrQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFmdGVyVmlld0luaXQsIENvbXBvbmVudCwgVGVtcGxhdGVSZWYsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBBcHBTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvYXBwLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBNdWx0aUxhbmd1YWdlU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL211bHRpLWxhbmd1YWdlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBCYXNlQ29tcG9uZW50IH0gZnJvbSAnLi4vYmFzZS1jb21wb25lbnQvYmFzZS9iYXNlLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IENvcmVUYWJsZUNvbXBvbmVudCB9IGZyb20gJy4uL2NvcmUtdGFibGUvY29yZS10YWJsZS5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBJQ29yZVRhYmxlQ29sdW1uSXRlbSB9IGZyb20gJy4uL2NvcmUtdGFibGUvSUNvcmVUYWJsZUNvbHVtbkl0ZW0nO1xyXG5pbXBvcnQgeyBDb3JlUGFnZUhlYWRlckNvbXBvbmVudCB9IGZyb20gJy4uL2NvcmUtcGFnZS1oZWFkZXIvY29yZS1wYWdlLWhlYWRlci9jb3JlLXBhZ2UtaGVhZGVyLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgZGlzdGluY3RVbnRpbENoYW5nZWQsIHN3aXRjaE1hcCwgdGFwIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IENvcmVQYWdpbmF0aW9uQ29tcG9uZW50IH0gZnJvbSAnLi4vY29yZS1wYWdpbmF0aW9uL2NvcmUtcGFnaW5hdGlvbi9jb3JlLXBhZ2luYXRpb24uY29tcG9uZW50JztcclxuaW1wb3J0IHsgQ29yZUJ1dHRvbkdyb3VwVm5zQ29tcG9uZW50IH0gZnJvbSAnLi4vY29yZS1idXR0b24tZ3JvdXAtdm5zL2NvcmUtYnV0dG9uLWdyb3VwLXZucy9jb3JlLWJ1dHRvbi1ncm91cC12bnMuY29tcG9uZW50JztcclxuaW1wb3J0IHsgVG9vbHRpcERpcmVjdGl2ZSB9IGZyb20gJy4uL3Rvb2x0aXAvdG9vbHRpcC5kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBDb3JlQ2hlY2tib3hDb21wb25lbnQgfSBmcm9tICcuLi9jb3JlLWNoZWNrYm94L2NvcmUtY2hlY2tib3gvY29yZS1jaGVja2JveC5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuXHJcbmludGVyZmFjZSBJQ29tcGFyZURiU3RydWN0dXJlRmlsdGVySXRlbSB7XHJcbiAgZmllbGQ6IHN0cmluZztcclxuICBzZWFyY2hGb3I6IHN0cmluZztcclxufVxyXG5cclxuaW50ZXJmYWNlIElDb21wYXJlRGJTdHJ1Y3R1cmVSZXF1ZXN0IHtcclxuICBmaWx0ZXI/OiBJQ29tcGFyZURiU3RydWN0dXJlRmlsdGVySXRlbVtdO1xyXG4gIHBhZ2VOdW1iZXI6IG51bWJlcjtcclxuICBwYWdlU2l6ZTogbnVtYmVyO1xyXG59XHJcblxyXG5pbnRlcmZhY2UgSURiU3RydWN0dXJlRGlmZmVyZW5jZVxyXG57XHJcbiAgICBpZDogc3RyaW5nO1xyXG4gICAgc291cmNlQWxpYXM6IHN0cmluZztcclxuICAgIHRhcmdldEFsaWFzOiBzdHJpbmc7XHJcbiAgICB0YWJsZU5hbWU6IHN0cmluZztcclxuICAgIGNvbHVtbk5hbWU6IHN0cmluZztcclxuICAgIGNvbmZsaWN0VHlwZTogc3RyaW5nO1xyXG4gICAgc291cmNlVHlwZT86IHN0cmluZztcclxuICAgIHNvdXJjZVNpemU/OiBudW1iZXI7XHJcbiAgICBzb3VyY2VBbGxvd3NOdWxsPzogYm9vbGVhbjtcclxuICAgIHRhcmdldFR5cGU/OiBzdHJpbmc7XHJcbiAgICB0YXJnZXRTaXplPzogbnVtYmVyO1xyXG4gICAgdGFyZ2V0QWxsb3dzTnVsbD86IGJvb2xlYW47XHJcbiAgICBkaWZmZXJlbmNlOiBzdHJpbmc7XHJcbiAgICByZXNvbHZlclNlc3Npb25JZD86IHN0cmluZztcclxufVxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ2NvcmUtY29tcGFyZS1kYi1waXBlbGluZScsXHJcbiAgICBpbXBvcnRzOiBbXHJcbiAgICAgICAgQ29yZUJ1dHRvbkdyb3VwVm5zQ29tcG9uZW50LFxyXG4gICAgICAgIENvcmVQYWdlSGVhZGVyQ29tcG9uZW50LFxyXG4gICAgICAgIENvcmVUYWJsZUNvbXBvbmVudCxcclxuICAgICAgICBDb3JlUGFnaW5hdGlvbkNvbXBvbmVudCxcclxuICAgICAgICBUb29sdGlwRGlyZWN0aXZlLFxyXG4gICAgICAgIENvcmVDaGVja2JveENvbXBvbmVudCxcclxuICAgICAgICBGb3Jtc01vZHVsZVxyXG4gICAgXSxcclxuICAgIHRlbXBsYXRlVXJsOiAnLi9jb3JlLWNvbXBhcmUtZGItcGlwZWxpbmUuY29tcG9uZW50Lmh0bWwnLFxyXG4gICAgc3R5bGVVcmw6ICcuL2NvcmUtY29tcGFyZS1kYi1waXBlbGluZS5jb21wb25lbnQuc2NzcydcclxufSlcclxuZXhwb3J0IGNsYXNzIENvcmVDb21wYXJlRGJQaXBlbGluZUNvbXBvbmVudCBleHRlbmRzIEJhc2VDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0IHtcclxuXHJcbiAgQFZpZXdDaGlsZCgndG9vbEJsb2NrJykgdG9vbEJsb2NrITogVGVtcGxhdGVSZWY8YW55PjtcclxuICBAVmlld0NoaWxkKCdzb3VyY2VBbGxvd3NOdWxsJykgc291cmNlQWxsb3dzTnVsbCE6IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgQFZpZXdDaGlsZCgndGFyZ2V0QWxsb3dzTnVsbCcpIHRhcmdldEFsbG93c051bGwhOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG5cclxuICBkYXRhOiBhbnlbXSA9IFtdO1xyXG5cclxuICBzaG93Um93UmVzb2x2ZXJXaW5kb3chOiBib29sZWFuO1xyXG5cclxuICBjb2x1bW5zOiBJQ29yZVRhYmxlQ29sdW1uSXRlbVtdID0gW1xyXG4gICAge1xyXG4gICAgICBmaWVsZDogJ2lkJyxcclxuICAgICAgdHlwZTogJ3N0cmluZycsXHJcbiAgICAgIGNhcHRpb246ICdpZCcsXHJcbiAgICAgIGFsaWduOiAnbGVmdCcsXHJcbiAgICAgIGhpZGRlbjogdHJ1ZSxcclxuICAgICAgd2lkdGg6IDBcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIGZpZWxkOiAnc291cmNlQWxpYXMnLFxyXG4gICAgICB0eXBlOiAnc3RyaW5nJyxcclxuICAgICAgY2FwdGlvbjogJ05ndeG7k24nLFxyXG4gICAgICBhbGlnbjogJ2xlZnQnLFxyXG4gICAgICBzb3J0RGlzYWJsZWQ6IHRydWUsXHJcbiAgICAgIHdpZHRoOiA2MFxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgZmllbGQ6ICd0YXJnZXRBbGlhcycsXHJcbiAgICAgIHR5cGU6ICdzdHJpbmcnLFxyXG4gICAgICBjYXB0aW9uOiAnxJDDrWNoJyxcclxuICAgICAgYWxpZ246ICdsZWZ0JyxcclxuICAgICAgc29ydERpc2FibGVkOiB0cnVlLFxyXG4gICAgICB3aWR0aDogNjBcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIGZpZWxkOiAndGFibGVOYW1lJyxcclxuICAgICAgdHlwZTogJ3N0cmluZycsXHJcbiAgICAgIGNhcHRpb246ICdC4bqjbmcnLFxyXG4gICAgICBhbGlnbjogJ2xlZnQnLFxyXG4gICAgICBzb3J0RGlzYWJsZWQ6IHRydWUsXHJcbiAgICAgIHdpZHRoOiAyMDBcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIGZpZWxkOiAnY29sdW1uTmFtZScsXHJcbiAgICAgIHR5cGU6ICdzdHJpbmcnLFxyXG4gICAgICBjYXB0aW9uOiAnQ+G7mXQnLFxyXG4gICAgICBhbGlnbjogJ2xlZnQnLFxyXG4gICAgICBzb3J0RGlzYWJsZWQ6IHRydWUsXHJcbiAgICAgIHdpZHRoOiAyMDBcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIGZpZWxkOiAnc291cmNlVHlwZScsXHJcbiAgICAgIHR5cGU6ICdzdHJpbmcnLFxyXG4gICAgICBjYXB0aW9uOiAnS2nhu4N1IG5ndeG7k24nLFxyXG4gICAgICBhbGlnbjogJ2xlZnQnLFxyXG4gICAgICBzb3J0RGlzYWJsZWQ6IHRydWUsXHJcbiAgICAgIHdpZHRoOiAxMDBcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIGZpZWxkOiAnc291cmNlQWxsb3dzTnVsbCcsXHJcbiAgICAgIHR5cGU6ICdib29sZWFuJyxcclxuICAgICAgY2FwdGlvbjogJ1NvdXJjZSBudWxsYWJsaXR5JyxcclxuICAgICAgYWxpZ246ICdjZW50ZXInLFxyXG4gICAgICBzb3J0RGlzYWJsZWQ6IHRydWUsXHJcbiAgICAgIHdpZHRoOiA3MFxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgZmllbGQ6ICdzb3VyY2VTaXplJyxcclxuICAgICAgdHlwZTogJ3N0cmluZycsXHJcbiAgICAgIGNhcHRpb246ICdD4buhIG5ndeG7k24nLFxyXG4gICAgICBhbGlnbjogJ3JpZ2h0JyxcclxuICAgICAgc29ydERpc2FibGVkOiB0cnVlLFxyXG4gICAgICB3aWR0aDogMTAwXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBmaWVsZDogJ3RhcmdldFR5cGUnLFxyXG4gICAgICB0eXBlOiAnc3RyaW5nJyxcclxuICAgICAgY2FwdGlvbjogJ0tp4buDdSDEkcOtY2gnLFxyXG4gICAgICBhbGlnbjogJ2xlZnQnLFxyXG4gICAgICBzb3J0RGlzYWJsZWQ6IHRydWUsXHJcbiAgICAgIHdpZHRoOiAxMDBcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIGZpZWxkOiAndGFyZ2V0QWxsb3dzTnVsbCcsXHJcbiAgICAgIHR5cGU6ICdib29sZWFuJyxcclxuICAgICAgY2FwdGlvbjogJ1RhcmdldCBudWxsYWJsaXR5JyxcclxuICAgICAgYWxpZ246ICdjZW50ZXInLFxyXG4gICAgICBzb3J0RGlzYWJsZWQ6IHRydWUsXHJcbiAgICAgIHdpZHRoOiA3MFxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgZmllbGQ6ICd0YXJnZXRTaXplJyxcclxuICAgICAgdHlwZTogJ3N0cmluZycsXHJcbiAgICAgIGNhcHRpb246ICdD4buhIMSRw61jaCcsXHJcbiAgICAgIGFsaWduOiAncmlnaHQnLFxyXG4gICAgICBzb3J0RGlzYWJsZWQ6IHRydWUsXHJcbiAgICAgIHdpZHRoOiAxMDBcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIGZpZWxkOiAnZGlmZmVyZW5jZScsXHJcbiAgICAgIHR5cGU6ICdzdHJpbmcnLFxyXG4gICAgICBjYXB0aW9uOiAnS2jDoWMgYmnhu4d0JyxcclxuICAgICAgYWxpZ246ICdsZWZ0JyxcclxuICAgICAgc29ydERpc2FibGVkOiB0cnVlLFxyXG4gICAgICB3aWR0aDogNDAwXHJcbiAgICB9LFxyXG4gIF1cclxuXHJcbiAgdGFibGVIZWlnaHQ6IG51bWJlciA9IDUwMDtcclxuXHJcbiAgbG9hZGluZzogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBkZWZhdWx0UmVxdWVzdDogSUNvbXBhcmVEYlN0cnVjdHVyZVJlcXVlc3QgPSB7XHJcbiAgICBwYWdlTnVtYmVyOiAxLFxyXG4gICAgcGFnZVNpemU6IDUwXHJcbiAgfVxyXG5cclxuICByZXF1ZXN0JCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8SUNvbXBhcmVEYlN0cnVjdHVyZVJlcXVlc3Q+KHRoaXMuZGVmYXVsdFJlcXVlc3QpO1xyXG5cclxuICBjdXJyZW50UGFnZSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlcj4oMSk7XHJcbiAgcGFnZVNpemUkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxudW1iZXI+KDUwKTtcclxuICBwYWdlQ291bnQ6IG51bWJlciA9IDA7XHJcblxyXG4gIHN1c3BlbmRDdXJyZW50UGFnZVN1YnNjcmlwdGlvbiQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcclxuXHJcbiAgc3FsQ29tbWFuZDogc3RyaW5nID0gJyc7XHJcbiAgcmVzb2x2ZXJTZXNzaW9uSWQ6IHN0cmluZyA9ICcnO1xyXG5cclxuICBjb25mbGljdFRvdGFsOiBudW1iZXIgPSAwO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHB1YmxpYyBvdmVycmlkZSBtbHM6IE11bHRpTGFuZ3VhZ2VTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBhcHBTZXJ2aWNlOiBBcHBTZXJ2aWNlXHJcbiAgKSB7XHJcbiAgICBzdXBlcihtbHMpO1xyXG4gIH1cclxuXHJcbiAgcmVmcmVzaExpc3QoKTogdm9pZCB7XHJcbiAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xyXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXHJcbiAgICAgIHRoaXMuYXBwU2VydmljZS5wb3N0KCcvYXBpL1NxbFNlcnZlclBpcGVsaW5lL0NvbXBhcmVEYlN0cnVjdHVyZScsIHRoaXMucmVxdWVzdCQudmFsdWUpLnN1YnNjcmliZSh4ID0+IHtcclxuICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICBpZiAoeC5vayAmJiB4LnN0YXR1cyA9PT0gMjAwICYmIHguYm9keT8uc3RhdHVzQ29kZSA9PT0gMjAwKSB7XHJcbiAgICAgICAgICB0aGlzLmRhdGEgPSB4LmJvZHkuaW5uZXJCb2R5LmRhdGFcclxuICAgICAgICAgIHRoaXMucGFnZUNvdW50ID0gTWF0aC5jZWlsKHguYm9keS5pbm5lckJvZHkuY291bnQgLyB0aGlzLnBhZ2VTaXplJC52YWx1ZSk7XHJcbiAgICAgICAgICB0aGlzLmN1cnJlbnRQYWdlJC5uZXh0KHguYm9keS5pbm5lckJvZHkucGFnZU51bWJlcik7XHJcbiAgICAgICAgICB0aGlzLmNvbmZsaWN0VG90YWwgPSB4LmJvZHkuaW5uZXJCb2R5LmNvdW50IHx8IDA7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgKVxyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcblxyXG4gICAgICBjb25zdCB0cnlGaWx0ZXJEaWZmZXJlbmNlICA9dGhpcy5jb2x1bW5zLmZpbHRlcih4ID0+IHguZmllbGQgPT09ICdkaWZmZXJlbmNlJyk7XHJcbiAgICAgIGlmICghIXRyeUZpbHRlckRpZmZlcmVuY2UubGVuZ3RoKSB7XHJcbiAgICAgICAgdHJ5RmlsdGVyRGlmZmVyZW5jZVswXS50ZW1wbGF0ZVJlZiA9IHRoaXMudG9vbEJsb2NrO1xyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IHRyeUZpbHRlclNvdXJjZUFsbG93c051bGwgID10aGlzLmNvbHVtbnMuZmlsdGVyKHggPT4geC5maWVsZCA9PT0gJ3NvdXJjZUFsbG93c051bGwnKTtcclxuICAgICAgaWYgKCEhdHJ5RmlsdGVyU291cmNlQWxsb3dzTnVsbC5sZW5ndGgpIHtcclxuICAgICAgICB0cnlGaWx0ZXJTb3VyY2VBbGxvd3NOdWxsWzBdLnRlbXBsYXRlUmVmID0gdGhpcy5zb3VyY2VBbGxvd3NOdWxsO1xyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IHRyeUZpbHRlclRhcmdldEFsbG93c051bGwgID10aGlzLmNvbHVtbnMuZmlsdGVyKHggPT4geC5maWVsZCA9PT0gJ3RhcmdldEFsbG93c051bGwnKTtcclxuICAgICAgaWYgKCEhdHJ5RmlsdGVyVGFyZ2V0QWxsb3dzTnVsbC5sZW5ndGgpIHtcclxuICAgICAgICB0cnlGaWx0ZXJUYXJnZXRBbGxvd3NOdWxsWzBdLnRlbXBsYXRlUmVmID0gdGhpcy50YXJnZXRBbGxvd3NOdWxsO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLnRhYmxlSGVpZ2h0ID0gd2luZG93LmlubmVySGVpZ2h0IC0gNjAgLSA1MCAtIDQ2IC0gMzA7XHJcblxyXG4gICAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcclxuICAgICAgICB0aGlzLnJlcXVlc3QkLnBpcGUoXHJcbiAgICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgocHJlLCBjdXIpID0+IEpTT04uc3RyaW5naWZ5KHByZSkgPT09IEpTT04uc3RyaW5naWZ5KGN1cikpLFxyXG4gICAgICAgICAgdGFwKCgpID0+IHRoaXMubG9hZGluZyA9IHRydWUpLFxyXG4gICAgICAgICAgc3dpdGNoTWFwKHggPT4gdGhpcy5hcHBTZXJ2aWNlLnBvc3QoJy9hcGkvU3FsU2VydmVyUGlwZWxpbmUvQ29tcGFyZURiU3RydWN0dXJlJywgeCkpXHJcbiAgICAgICAgKS5zdWJzY3JpYmUoeCA9PiB7XHJcbiAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgIGlmICh4Lm9rICYmIHguc3RhdHVzID09PSAyMDAgJiYgeC5ib2R5Py5zdGF0dXNDb2RlID09PSAyMDApIHtcclxuICAgICAgICAgICAgdGhpcy5kYXRhID0geC5ib2R5LmlubmVyQm9keS5kYXRhXHJcbiAgICAgICAgICAgIHRoaXMucGFnZUNvdW50ID0gTWF0aC5jZWlsKHguYm9keS5pbm5lckJvZHkuY291bnQgLyB0aGlzLnBhZ2VTaXplJC52YWx1ZSk7XHJcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFBhZ2UkLm5leHQoeC5ib2R5LmlubmVyQm9keS5wYWdlTnVtYmVyKTtcclxuICAgICAgICAgICAgdGhpcy5jb25mbGljdFRvdGFsID0geC5ib2R5LmlubmVyQm9keS5jb3VudCB8fCAwO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcbiAgICAgIClcclxuXHJcbiAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxyXG4gICAgICAgIHRoaXMuY3VycmVudFBhZ2UkLnN1YnNjcmliZSh4ID0+IHtcclxuICAgICAgICAgIGNvbnN0IG5ld1JlcXVlc3Q6IElDb21wYXJlRGJTdHJ1Y3R1cmVSZXF1ZXN0ID0ge1xyXG4gICAgICAgICAgICAuLi50aGlzLnJlcXVlc3QkLnZhbHVlLFxyXG4gICAgICAgICAgICBwYWdlTnVtYmVyOiB4XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLnJlcXVlc3QkLm5leHQoSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShuZXdSZXF1ZXN0KSkpXHJcbiAgICAgICAgfSlcclxuICAgICAgKVxyXG5cclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBvblNlYXJjaGluZyhlOiBhbnkpOiB2b2lkIHtcclxuICAgIGNvbnN0IGZpbHRlcmVkID0gZS5maWx0ZXIoeCA9PiAhIXguc2VhcmNoRm9yLmxlbmd0aClcclxuICAgIHRoaXMucmVxdWVzdCQubmV4dCh7XHJcbiAgICAgIC4uLnRoaXMucmVxdWVzdCQudmFsdWUsXHJcbiAgICAgIGZpbHRlcjogZmlsdGVyZWRcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBvcGVuUm93UmVzb2x2ZXIoZXZlbnQ6IGFueSwgY29udGV4dDogYW55KSB7XHJcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgIHRoaXMubG9hZGluZyA9IHRydWU7XHJcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcclxuICAgICAgdGhpcy5hcHBTZXJ2aWNlLnBvc3QoJy9hcGkvU3FsU2VydmVyUGlwZWxpbmUvR2VuZXJhdGVDb25mbGljdFJlc29sdmVyQ29tbWFuZCcsIGNvbnRleHQpLnN1YnNjcmliZSh4ID0+IHtcclxuICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICBpZiAoeC5vayAmJiB4LnN0YXR1cyA9PT0gMjAwICYmIHguYm9keT8uc3RhdHVzQ29kZSA9PT0gMjAwKSB7XHJcbiAgICAgICAgICB0aGlzLnNob3dSb3dSZXNvbHZlcldpbmRvdyA9IHRydWU7XHJcbiAgICAgICAgICB0aGlzLnJlc29sdmVyU2Vzc2lvbklkID0geC5ib2R5LmlubmVyQm9keS5yZXNvbHZlclNlc3Npb25JZFxyXG4gICAgICAgICAgdGhpcy5zcWxDb21tYW5kID0gKHguYm9keS5pbm5lckJvZHkuc3FsQ29tbWFuZCBhcyBzdHJpbmcpLnRyaW0oKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICApXHJcbiAgfVxyXG5cclxuICBjbG9zZVJvd1Jlc29sdmVyKGV2ZW50OiBhbnkpIHtcclxuICAgIHRoaXMuc2hvd1Jvd1Jlc29sdmVyV2luZG93ID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuICByZXNvbHZlKGV2ZW50OiBhbnkpOiB2b2lkIHtcclxuICAgIHRoaXMubG9hZGluZyA9IHRydWU7XHJcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcclxuICAgICAgdGhpcy5hcHBTZXJ2aWNlLnBvc3QoJy9hcGkvU3FsU2VydmVyUGlwZWxpbmUvUnVuQ29uZmxpY3RSZXNvbHZlckNvbW1hbmQnLCB7XHJcbiAgICAgICAgcmVzb2x2ZXJTZXNzaW9uSWQ6IHRoaXMucmVzb2x2ZXJTZXNzaW9uSWQsXHJcbiAgICAgICAgc3FsQ29tbWFuZDogdGhpcy5zcWxDb21tYW5kXHJcbiAgICAgIH0pLnN1YnNjcmliZSh4ID0+IHtcclxuICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICBpZiAoeC5vayAmJiB4LnN0YXR1cyA9PT0gMjAwICYmIHguYm9keT8uc3RhdHVzQ29kZSA9PT0gMjAwKSB7XHJcbiAgICAgICAgICB0aGlzLnNob3dSb3dSZXNvbHZlcldpbmRvdyA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy5yZWZyZXNoTGlzdCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICAgIClcclxuICB9XHJcblxyXG59XHJcbiIsIjxkaXYgY2xhc3M9XCJjb3JlLWNvbXBhcmUtZGItcGlwZWxpbmUtY29udGFpbmVyXCI+XHJcbiAgICA8Y29yZS1wYWdlLWhlYWRlciBbdGl0bGVdPVwiJ1NPIFPDgU5IIEPhuqRVIFRSw5pDIEPDgUMgREIgVFJPTkcgTcOUSSBUUsav4bucTkcgUEjDgVQgVFJJ4buCTidcIlxyXG4gICAgICAgIFtoaWRlQnV0dG9uR3JvdXBdPVwidHJ1ZVwiPjwvY29yZS1wYWdlLWhlYWRlcj5cclxuICAgIDxjb3JlLXRhYmxlIFtzaG93Q2hlY2tib3hdPVwidHJ1ZVwiIFtjb2x1bW5zXT1cImNvbHVtbnNcIiBbaGVpZ2h0XT1cInRhYmxlSGVpZ2h0XCIgW2RhdGFdPVwiZGF0YVwiIFtsb2FkaW5nXT1cImxvYWRpbmdcIlxyXG4gICAgICAgIFthdXRvQ29sdW1uRml0QXZhaWxhYmxlU3BhY2VdPVwiZmFsc2VcIiBbZnJvemVuXT1cIjJcIiBbbGF6eUxvYWRpbmddPVwidHJ1ZVwiXHJcbiAgICAgICAgKG9uU2VhcmNoaW5nKT1cIm9uU2VhcmNoaW5nKCRldmVudClcIj48L2NvcmUtdGFibGU+XHJcbiAgICA8ZGl2IGNsYXNzPVwiaDE1XCI+PC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwidy0xMDAgZC1mbGV4IGQtZmxleC1iZXR3ZWVuXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbmZsaWN0LXRvdGFsXCIgW2NsYXNzLmVycm9yXT1cIiEhY29uZmxpY3RUb3RhbFwiPlxyXG4gICAgICAgICAgICB7eyAhIWNvbmZsaWN0VG90YWwgPyBjb25mbGljdFRvdGFsICsgJyBjb25mbGljdHMgZm91bmQhJyA6ICdObyBjb25mbGljdCBmb3VuZCcgfX0gXHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGNvcmUtcGFnaW5hdGlvbiBbJGhlaWdodF09XCI0NlwiIFskY3VycmVudFBhZ2VdPVwiY3VycmVudFBhZ2UkXCIgWyRwYWdlQ291bnRdPVwicGFnZUNvdW50XCIgWyRsb2FkaW5nXT1cImxvYWRpbmdcIlxyXG4gICAgICAgICAgICBbJGJhY2tncm91bmRdPVwiJyM4NDg0ODQnXCIgWyRmaXhlZFBhZ2VTaXplXT1cIjIwXCJcclxuICAgICAgICAgICAgWyRzdXNwZW5kQ3VycmVudFBhZ2VTdWJzY3JpcHRpb25dPVwic3VzcGVuZEN1cnJlbnRQYWdlU3Vic2NyaXB0aW9uJFwiPjwvY29yZS1wYWdpbmF0aW9uPlxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgQGlmIChzaG93Um93UmVzb2x2ZXJXaW5kb3cpIHtcclxuICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtY29udGFpbmVyXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1jb250ZW50LXJvb3RcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3ctcmVzb2x2ZXItd2luZG93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGNvcmUtcGFnZS1oZWFkZXIgW3RpdGxlXT1cIidSRVNPTFZFUiBXSU5ET1cnXCIgW2hpZGVCdXR0b25Hcm91cF09XCJ0cnVlXCI+PC9jb3JlLXBhZ2UtaGVhZGVyPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiY2xvc2UtaWNvbiBwb2ludGVyIGZlYXRoZXIteCBmczI0XCIgKGNsaWNrKT1cImNsb3NlUm93UmVzb2x2ZXIoJGV2ZW50KVwiPjwvaT5cclxuICAgICAgICAgICAgICAgICAgICA8dGV4dGFyZWEgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBbcm93c109XCInMTAnXCIgc3R5bGU9XCJoZWlnaHQ6IDQwMHB4OyBwYWRkaW5nOiAxNXB4O1wiIGRpc2FibGVkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBzcWxDb21tYW5kIH19XHJcbiAgICAgICAgICAgICAgICAgICAgPC90ZXh0YXJlYT5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5XCIgKGNsaWNrKT1cInJlc29sdmUoJGV2ZW50KVwiIHN0eWxlPVwibWFyZ2luLXRvcDogMTVweDtcIj5SZXNvbHZlPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICB9XHJcblxyXG4gICAgPG5nLXRlbXBsYXRlICN0b29sQmxvY2sgbGV0LWNvbnRleHQ9XCJjb250ZXh0XCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInRvb2xzIGludGVyLWZvbnQgZC1mbGV4IGQtZmxleC1zdGFydFwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaWNvbi13cmFwcGVyXCIgW2FwcFRvb2x0aXBdPVwiJ1Jlc29sdmUnXCIgW3Bvc2l0aW9uXT1cIidyaWdodCdcIiBbc2hvd0FueXdheV09XCJ0cnVlXCIgKGNsaWNrKT1cIm9wZW5Sb3dSZXNvbHZlcigkZXZlbnQsIGNvbnRleHQpXCI+XHJcbiAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZlYXRoZXItcGxheSBmczI0XCI+PC9pPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPHNwYW4+e3sgY29udGV4dC5kaWZmZXJlbmNlIH19PC9zcGFuPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgIDxuZy10ZW1wbGF0ZSAjc291cmNlQWxsb3dzTnVsbCBsZXQtY29udGV4dD1cImNvbnRleHRcIj5cclxuICAgICAgICA8Y29yZS1jaGVja2JveCBbbmdNb2RlbF09XCJjb250ZXh0LnNvdXJjZUFsbG93c051bGxcIiBbZGlzYWJsZWRdPVwidHJ1ZVwiPjwvY29yZS1jaGVja2JveD5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICA8bmctdGVtcGxhdGUgI3RhcmdldEFsbG93c051bGwgbGV0LWNvbnRleHQ9XCJjb250ZXh0XCI+XHJcbiAgICAgICAgPGNvcmUtY2hlY2tib3ggW25nTW9kZWxdPVwiY29udGV4dC50YXJnZXRBbGxvd3NOdWxsXCIgW2Rpc2FibGVkXT1cInRydWVcIj48L2NvcmUtY2hlY2tib3g+XHJcbiAgICA8L25nLXRlbXBsYXRlPlxyXG48L2Rpdj4iXX0=
|
|
@@ -25456,20 +25456,20 @@ class CoreCompareDbPipelineComponent extends BaseComponent {
|
|
|
25456
25456
|
width: 0
|
|
25457
25457
|
},
|
|
25458
25458
|
{
|
|
25459
|
-
field: '
|
|
25459
|
+
field: 'sourceAlias',
|
|
25460
25460
|
type: 'string',
|
|
25461
|
-
caption: '
|
|
25461
|
+
caption: 'Nguồn',
|
|
25462
25462
|
align: 'left',
|
|
25463
25463
|
sortDisabled: true,
|
|
25464
|
-
width:
|
|
25464
|
+
width: 60
|
|
25465
25465
|
},
|
|
25466
25466
|
{
|
|
25467
|
-
field: '
|
|
25467
|
+
field: 'targetAlias',
|
|
25468
25468
|
type: 'string',
|
|
25469
|
-
caption: '
|
|
25469
|
+
caption: 'Đích',
|
|
25470
25470
|
align: 'left',
|
|
25471
25471
|
sortDisabled: true,
|
|
25472
|
-
width:
|
|
25472
|
+
width: 60
|
|
25473
25473
|
},
|
|
25474
25474
|
{
|
|
25475
25475
|
field: 'tableName',
|
|
@@ -25496,12 +25496,12 @@ class CoreCompareDbPipelineComponent extends BaseComponent {
|
|
|
25496
25496
|
width: 100
|
|
25497
25497
|
},
|
|
25498
25498
|
{
|
|
25499
|
-
field: '
|
|
25500
|
-
type: '
|
|
25501
|
-
caption: '
|
|
25502
|
-
align: '
|
|
25499
|
+
field: 'sourceAllowsNull',
|
|
25500
|
+
type: 'boolean',
|
|
25501
|
+
caption: 'Source nullablity',
|
|
25502
|
+
align: 'center',
|
|
25503
25503
|
sortDisabled: true,
|
|
25504
|
-
width:
|
|
25504
|
+
width: 70
|
|
25505
25505
|
},
|
|
25506
25506
|
{
|
|
25507
25507
|
field: 'sourceSize',
|
|
@@ -25511,6 +25511,22 @@ class CoreCompareDbPipelineComponent extends BaseComponent {
|
|
|
25511
25511
|
sortDisabled: true,
|
|
25512
25512
|
width: 100
|
|
25513
25513
|
},
|
|
25514
|
+
{
|
|
25515
|
+
field: 'targetType',
|
|
25516
|
+
type: 'string',
|
|
25517
|
+
caption: 'Kiểu đích',
|
|
25518
|
+
align: 'left',
|
|
25519
|
+
sortDisabled: true,
|
|
25520
|
+
width: 100
|
|
25521
|
+
},
|
|
25522
|
+
{
|
|
25523
|
+
field: 'targetAllowsNull',
|
|
25524
|
+
type: 'boolean',
|
|
25525
|
+
caption: 'Target nullablity',
|
|
25526
|
+
align: 'center',
|
|
25527
|
+
sortDisabled: true,
|
|
25528
|
+
width: 70
|
|
25529
|
+
},
|
|
25514
25530
|
{
|
|
25515
25531
|
field: 'targetSize',
|
|
25516
25532
|
type: 'string',
|
|
@@ -25539,9 +25555,36 @@ class CoreCompareDbPipelineComponent extends BaseComponent {
|
|
|
25539
25555
|
this.pageSize$ = new BehaviorSubject(50);
|
|
25540
25556
|
this.pageCount = 0;
|
|
25541
25557
|
this.suspendCurrentPageSubscription$ = new BehaviorSubject(false);
|
|
25558
|
+
this.sqlCommand = '';
|
|
25559
|
+
this.resolverSessionId = '';
|
|
25560
|
+
this.conflictTotal = 0;
|
|
25561
|
+
}
|
|
25562
|
+
refreshList() {
|
|
25563
|
+
this.loading = true;
|
|
25564
|
+
this.subscriptions.push(this.appService.post('/api/SqlServerPipeline/CompareDbStructure', this.request$.value).subscribe(x => {
|
|
25565
|
+
this.loading = false;
|
|
25566
|
+
if (x.ok && x.status === 200 && x.body?.statusCode === 200) {
|
|
25567
|
+
this.data = x.body.innerBody.data;
|
|
25568
|
+
this.pageCount = Math.ceil(x.body.innerBody.count / this.pageSize$.value);
|
|
25569
|
+
this.currentPage$.next(x.body.innerBody.pageNumber);
|
|
25570
|
+
this.conflictTotal = x.body.innerBody.count || 0;
|
|
25571
|
+
}
|
|
25572
|
+
}));
|
|
25542
25573
|
}
|
|
25543
25574
|
ngAfterViewInit() {
|
|
25544
25575
|
setTimeout(() => {
|
|
25576
|
+
const tryFilterDifference = this.columns.filter(x => x.field === 'difference');
|
|
25577
|
+
if (!!tryFilterDifference.length) {
|
|
25578
|
+
tryFilterDifference[0].templateRef = this.toolBlock;
|
|
25579
|
+
}
|
|
25580
|
+
const tryFilterSourceAllowsNull = this.columns.filter(x => x.field === 'sourceAllowsNull');
|
|
25581
|
+
if (!!tryFilterSourceAllowsNull.length) {
|
|
25582
|
+
tryFilterSourceAllowsNull[0].templateRef = this.sourceAllowsNull;
|
|
25583
|
+
}
|
|
25584
|
+
const tryFilterTargetAllowsNull = this.columns.filter(x => x.field === 'targetAllowsNull');
|
|
25585
|
+
if (!!tryFilterTargetAllowsNull.length) {
|
|
25586
|
+
tryFilterTargetAllowsNull[0].templateRef = this.targetAllowsNull;
|
|
25587
|
+
}
|
|
25545
25588
|
this.tableHeight = window.innerHeight - 60 - 50 - 46 - 30;
|
|
25546
25589
|
this.subscriptions.push(this.request$.pipe(distinctUntilChanged((pre, cur) => JSON.stringify(pre) === JSON.stringify(cur)), tap$1(() => this.loading = true), switchMap(x => this.appService.post('/api/SqlServerPipeline/CompareDbStructure', x))).subscribe(x => {
|
|
25547
25590
|
this.loading = false;
|
|
@@ -25549,6 +25592,7 @@ class CoreCompareDbPipelineComponent extends BaseComponent {
|
|
|
25549
25592
|
this.data = x.body.innerBody.data;
|
|
25550
25593
|
this.pageCount = Math.ceil(x.body.innerBody.count / this.pageSize$.value);
|
|
25551
25594
|
this.currentPage$.next(x.body.innerBody.pageNumber);
|
|
25595
|
+
this.conflictTotal = x.body.innerBody.count || 0;
|
|
25552
25596
|
}
|
|
25553
25597
|
}));
|
|
25554
25598
|
this.subscriptions.push(this.currentPage$.subscribe(x => {
|
|
@@ -25561,9 +25605,42 @@ class CoreCompareDbPipelineComponent extends BaseComponent {
|
|
|
25561
25605
|
});
|
|
25562
25606
|
}
|
|
25563
25607
|
onSearching(e) {
|
|
25608
|
+
const filtered = e.filter(x => !!x.searchFor.length);
|
|
25609
|
+
this.request$.next({
|
|
25610
|
+
...this.request$.value,
|
|
25611
|
+
filter: filtered
|
|
25612
|
+
});
|
|
25613
|
+
}
|
|
25614
|
+
openRowResolver(event, context) {
|
|
25615
|
+
event.stopPropagation();
|
|
25616
|
+
this.loading = true;
|
|
25617
|
+
this.subscriptions.push(this.appService.post('/api/SqlServerPipeline/GenerateConflictResolverCommand', context).subscribe(x => {
|
|
25618
|
+
this.loading = false;
|
|
25619
|
+
if (x.ok && x.status === 200 && x.body?.statusCode === 200) {
|
|
25620
|
+
this.showRowResolverWindow = true;
|
|
25621
|
+
this.resolverSessionId = x.body.innerBody.resolverSessionId;
|
|
25622
|
+
this.sqlCommand = x.body.innerBody.sqlCommand.trim();
|
|
25623
|
+
}
|
|
25624
|
+
}));
|
|
25625
|
+
}
|
|
25626
|
+
closeRowResolver(event) {
|
|
25627
|
+
this.showRowResolverWindow = false;
|
|
25628
|
+
}
|
|
25629
|
+
resolve(event) {
|
|
25630
|
+
this.loading = true;
|
|
25631
|
+
this.subscriptions.push(this.appService.post('/api/SqlServerPipeline/RunConflictResolverCommand', {
|
|
25632
|
+
resolverSessionId: this.resolverSessionId,
|
|
25633
|
+
sqlCommand: this.sqlCommand
|
|
25634
|
+
}).subscribe(x => {
|
|
25635
|
+
this.loading = false;
|
|
25636
|
+
if (x.ok && x.status === 200 && x.body?.statusCode === 200) {
|
|
25637
|
+
this.showRowResolverWindow = false;
|
|
25638
|
+
this.refreshList();
|
|
25639
|
+
}
|
|
25640
|
+
}));
|
|
25564
25641
|
}
|
|
25565
25642
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.1", ngImport: i0, type: CoreCompareDbPipelineComponent, deps: [{ token: MultiLanguageService }, { token: AppService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
25566
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "
|
|
25643
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.0.1", type: CoreCompareDbPipelineComponent, isStandalone: true, selector: "core-compare-db-pipeline", viewQueries: [{ propertyName: "toolBlock", first: true, predicate: ["toolBlock"], descendants: true }, { propertyName: "sourceAllowsNull", first: true, predicate: ["sourceAllowsNull"], descendants: true }, { propertyName: "targetAllowsNull", first: true, predicate: ["targetAllowsNull"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<div class=\"core-compare-db-pipeline-container\">\r\n <core-page-header [title]=\"'SO S\u00C1NH C\u1EA4U TR\u00DAC C\u00C1C DB TRONG M\u00D4I TR\u01AF\u1EDCNG PH\u00C1T TRI\u1EC2N'\"\r\n [hideButtonGroup]=\"true\"></core-page-header>\r\n <core-table [showCheckbox]=\"true\" [columns]=\"columns\" [height]=\"tableHeight\" [data]=\"data\" [loading]=\"loading\"\r\n [autoColumnFitAvailableSpace]=\"false\" [frozen]=\"2\" [lazyLoading]=\"true\"\r\n (onSearching)=\"onSearching($event)\"></core-table>\r\n <div class=\"h15\"></div>\r\n <div class=\"w-100 d-flex d-flex-between\">\r\n <div class=\"conflict-total\" [class.error]=\"!!conflictTotal\">\r\n {{ !!conflictTotal ? conflictTotal + ' conflicts found!' : 'No conflict found' }} \r\n </div>\r\n <core-pagination [$height]=\"46\" [$currentPage]=\"currentPage$\" [$pageCount]=\"pageCount\" [$loading]=\"loading\"\r\n [$background]=\"'#848484'\" [$fixedPageSize]=\"20\"\r\n [$suspendCurrentPageSubscription]=\"suspendCurrentPageSubscription$\"></core-pagination>\r\n </div>\r\n\r\n @if (showRowResolverWindow) {\r\n <div class=\"modal-container\">\r\n <div class=\"modal-content-root\">\r\n <div class=\"row-resolver-window\">\r\n <core-page-header [title]=\"'RESOLVER WINDOW'\" [hideButtonGroup]=\"true\"></core-page-header>\r\n <i class=\"close-icon pointer feather-x fs24\" (click)=\"closeRowResolver($event)\"></i>\r\n <textarea class=\"form-control\" [rows]=\"'10'\" style=\"height: 400px; padding: 15px;\" disabled>\r\n {{ sqlCommand }}\r\n </textarea>\r\n <button class=\"btn btn-primary\" (click)=\"resolve($event)\" style=\"margin-top: 15px;\">Resolve</button>\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n\r\n <ng-template #toolBlock let-context=\"context\">\r\n <div class=\"tools inter-font d-flex d-flex-start\">\r\n <div class=\"icon-wrapper\" [appTooltip]=\"'Resolve'\" [position]=\"'right'\" [showAnyway]=\"true\" (click)=\"openRowResolver($event, context)\">\r\n <i class=\"feather-play fs24\"></i>\r\n </div>\r\n <span>{{ context.difference }}</span>\r\n </div>\r\n </ng-template>\r\n <ng-template #sourceAllowsNull let-context=\"context\">\r\n <core-checkbox [ngModel]=\"context.sourceAllowsNull\" [disabled]=\"true\"></core-checkbox>\r\n </ng-template>\r\n <ng-template #targetAllowsNull let-context=\"context\">\r\n <core-checkbox [ngModel]=\"context.targetAllowsNull\" [disabled]=\"true\"></core-checkbox>\r\n </ng-template>\r\n</div>", styles: [".core-compare-db-pipeline-container .h15{height:15px}.core-compare-db-pipeline-container .tools{height:36px}.core-compare-db-pipeline-container .tools .icon-wrapper{color:#848484;opacity:.5;display:inline-flex;width:36px;height:36px;border-radius:50%}.core-compare-db-pipeline-container .tools .icon-wrapper:hover{opacity:1;color:#fff;background-color:#848484}.core-compare-db-pipeline-container .modal-content-root{padding-top:0}.core-compare-db-pipeline-container .close-icon{display:block;position:absolute;top:8px;right:8px;color:#848484}.core-compare-db-pipeline-container .close-icon:hover{color:inherit}.core-compare-db-pipeline-container .row-resolver-window{display:block;width:992px;max-width:100vw!important;height:500px}.core-compare-db-pipeline-container .conflict-total{height:50px;display:flex;align-items:center;justify-content:flex-start;color:#848484;font-size:24px;font-weight:700}.core-compare-db-pipeline-container .conflict-total.error{color:brown}\n"], dependencies: [{ kind: "component", type: CorePageHeaderComponent, selector: "core-page-header", inputs: ["instanceNumber", "shownItems", "title", "hideButtonGroup"], outputs: ["buttonClick"] }, { kind: "component", type: CoreTableComponent, selector: "core-table", inputs: ["id", "width", "height", "showCheckbox", "checkboxSize", "outerButtons", "showTools", "tools", "checkingResetFlag", "borderRadius", "headerColor", "headerBackgroundColor", "headerWrap", "headerFirstRowHeight", "headerSecondRowHeight", "wrap", "allowCellScrollY", "loading", "rowHeight", "frozen", "footer", "columns", "data", "selectedIds", "corePageListInstanceNumber", "disableHighlightOnClick", "freeMode", "searchSwitchDisabled", "disableSorting", "inlineToolItems", "columnSearchDefaultOpen", "lazyLoading", "primaryKey", "rowHoverBgColor", "noPaddingCell", "autoColumnFitAvailableSpace"], outputs: ["onSearching", "onToolClick", "onRowClick", "onRowDoubleClick", "onSelectedIdsChange", "onSelectedDataChange", "onColumnCaptionClick"] }, { kind: "component", type: CorePaginationComponent, selector: "core-pagination", inputs: ["$currentPage", "$height", "$pageCount", "$loading", "$suspendCurrentPageSubscription", "$showAdd", "$background", "$fixedPageSize"], outputs: ["$onClickAdd"] }, { kind: "directive", type: TooltipDirective, selector: "[appTooltip]", inputs: ["color", "backgroundColor", "appTooltip", "showAnyway", "position"] }, { kind: "component", type: CoreCheckboxComponent, selector: "core-checkbox", inputs: ["text", "tooltipPosition", "tooltip", "inputValue", "disabled"], outputs: ["onClick"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }] }); }
|
|
25567
25644
|
}
|
|
25568
25645
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.1", ngImport: i0, type: CoreCompareDbPipelineComponent, decorators: [{
|
|
25569
25646
|
type: Component,
|
|
@@ -25571,9 +25648,21 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.1", ngImpor
|
|
|
25571
25648
|
CoreButtonGroupVnsComponent,
|
|
25572
25649
|
CorePageHeaderComponent,
|
|
25573
25650
|
CoreTableComponent,
|
|
25574
|
-
CorePaginationComponent
|
|
25575
|
-
|
|
25576
|
-
|
|
25651
|
+
CorePaginationComponent,
|
|
25652
|
+
TooltipDirective,
|
|
25653
|
+
CoreCheckboxComponent,
|
|
25654
|
+
FormsModule
|
|
25655
|
+
], template: "<div class=\"core-compare-db-pipeline-container\">\r\n <core-page-header [title]=\"'SO S\u00C1NH C\u1EA4U TR\u00DAC C\u00C1C DB TRONG M\u00D4I TR\u01AF\u1EDCNG PH\u00C1T TRI\u1EC2N'\"\r\n [hideButtonGroup]=\"true\"></core-page-header>\r\n <core-table [showCheckbox]=\"true\" [columns]=\"columns\" [height]=\"tableHeight\" [data]=\"data\" [loading]=\"loading\"\r\n [autoColumnFitAvailableSpace]=\"false\" [frozen]=\"2\" [lazyLoading]=\"true\"\r\n (onSearching)=\"onSearching($event)\"></core-table>\r\n <div class=\"h15\"></div>\r\n <div class=\"w-100 d-flex d-flex-between\">\r\n <div class=\"conflict-total\" [class.error]=\"!!conflictTotal\">\r\n {{ !!conflictTotal ? conflictTotal + ' conflicts found!' : 'No conflict found' }} \r\n </div>\r\n <core-pagination [$height]=\"46\" [$currentPage]=\"currentPage$\" [$pageCount]=\"pageCount\" [$loading]=\"loading\"\r\n [$background]=\"'#848484'\" [$fixedPageSize]=\"20\"\r\n [$suspendCurrentPageSubscription]=\"suspendCurrentPageSubscription$\"></core-pagination>\r\n </div>\r\n\r\n @if (showRowResolverWindow) {\r\n <div class=\"modal-container\">\r\n <div class=\"modal-content-root\">\r\n <div class=\"row-resolver-window\">\r\n <core-page-header [title]=\"'RESOLVER WINDOW'\" [hideButtonGroup]=\"true\"></core-page-header>\r\n <i class=\"close-icon pointer feather-x fs24\" (click)=\"closeRowResolver($event)\"></i>\r\n <textarea class=\"form-control\" [rows]=\"'10'\" style=\"height: 400px; padding: 15px;\" disabled>\r\n {{ sqlCommand }}\r\n </textarea>\r\n <button class=\"btn btn-primary\" (click)=\"resolve($event)\" style=\"margin-top: 15px;\">Resolve</button>\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n\r\n <ng-template #toolBlock let-context=\"context\">\r\n <div class=\"tools inter-font d-flex d-flex-start\">\r\n <div class=\"icon-wrapper\" [appTooltip]=\"'Resolve'\" [position]=\"'right'\" [showAnyway]=\"true\" (click)=\"openRowResolver($event, context)\">\r\n <i class=\"feather-play fs24\"></i>\r\n </div>\r\n <span>{{ context.difference }}</span>\r\n </div>\r\n </ng-template>\r\n <ng-template #sourceAllowsNull let-context=\"context\">\r\n <core-checkbox [ngModel]=\"context.sourceAllowsNull\" [disabled]=\"true\"></core-checkbox>\r\n </ng-template>\r\n <ng-template #targetAllowsNull let-context=\"context\">\r\n <core-checkbox [ngModel]=\"context.targetAllowsNull\" [disabled]=\"true\"></core-checkbox>\r\n </ng-template>\r\n</div>", styles: [".core-compare-db-pipeline-container .h15{height:15px}.core-compare-db-pipeline-container .tools{height:36px}.core-compare-db-pipeline-container .tools .icon-wrapper{color:#848484;opacity:.5;display:inline-flex;width:36px;height:36px;border-radius:50%}.core-compare-db-pipeline-container .tools .icon-wrapper:hover{opacity:1;color:#fff;background-color:#848484}.core-compare-db-pipeline-container .modal-content-root{padding-top:0}.core-compare-db-pipeline-container .close-icon{display:block;position:absolute;top:8px;right:8px;color:#848484}.core-compare-db-pipeline-container .close-icon:hover{color:inherit}.core-compare-db-pipeline-container .row-resolver-window{display:block;width:992px;max-width:100vw!important;height:500px}.core-compare-db-pipeline-container .conflict-total{height:50px;display:flex;align-items:center;justify-content:flex-start;color:#848484;font-size:24px;font-weight:700}.core-compare-db-pipeline-container .conflict-total.error{color:brown}\n"] }]
|
|
25656
|
+
}], ctorParameters: () => [{ type: MultiLanguageService }, { type: AppService }], propDecorators: { toolBlock: [{
|
|
25657
|
+
type: ViewChild,
|
|
25658
|
+
args: ['toolBlock']
|
|
25659
|
+
}], sourceAllowsNull: [{
|
|
25660
|
+
type: ViewChild,
|
|
25661
|
+
args: ['sourceAllowsNull']
|
|
25662
|
+
}], targetAllowsNull: [{
|
|
25663
|
+
type: ViewChild,
|
|
25664
|
+
args: ['targetAllowsNull']
|
|
25665
|
+
}] } });
|
|
25577
25666
|
|
|
25578
25667
|
class CoreConfirmDialogComponent extends BaseComponent {
|
|
25579
25668
|
constructor(mls, dialogService, routingService) {
|