@hitsoft/fbdocumentflow 0.0.1
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/README.md +24 -0
- package/config/enums/index.d.ts +1 -0
- package/config/enums/route-names.d.ts +3 -0
- package/config/fbdocumentflow-config.module.d.ts +8 -0
- package/config/index.d.ts +5 -0
- package/config/providers/document-scenario-route.provider.d.ts +9 -0
- package/config/providers/document-transfer-route.provider.d.ts +9 -0
- package/config/providers/index.d.ts +6 -0
- package/config/providers/partner-mapping-route.provider.d.ts +9 -0
- package/config/providers/project-parameter-route.provider.d.ts +9 -0
- package/config/providers/route.provider.d.ts +8 -0
- package/config/providers/sap-company-profile-route.provider.d.ts +9 -0
- package/config/public-api.d.ts +3 -0
- package/esm2020/config/enums/index.mjs +2 -0
- package/esm2020/config/enums/route-names.mjs +2 -0
- package/esm2020/config/fbdocumentflow-config.module.mjs +30 -0
- package/esm2020/config/hitsoft-fbdocumentflow-config.mjs +5 -0
- package/esm2020/config/providers/document-scenario-route.provider.mjs +20 -0
- package/esm2020/config/providers/document-transfer-route.provider.mjs +20 -0
- package/esm2020/config/providers/index.mjs +7 -0
- package/esm2020/config/providers/partner-mapping-route.provider.mjs +20 -0
- package/esm2020/config/providers/project-parameter-route.provider.mjs +20 -0
- package/esm2020/config/providers/route.provider.mjs +24 -0
- package/esm2020/config/providers/sap-company-profile-route.provider.mjs +20 -0
- package/esm2020/config/public-api.mjs +4 -0
- package/esm2020/hitsoft-fbdocumentflow.mjs +5 -0
- package/esm2020/lib/components/fbdocumentflow.component.mjs +42 -0
- package/esm2020/lib/components/hit-document-scenarios/components/hit-document-scenario.component.mjs +151 -0
- package/esm2020/lib/components/hit-document-scenarios/hit-document-scenario-routing.module.mjs +26 -0
- package/esm2020/lib/components/hit-document-scenarios/hit-document-scenario.module.mjs +24 -0
- package/esm2020/lib/components/hit-document-transfers/components/hit-document-transfer-detail.component.mjs +474 -0
- package/esm2020/lib/components/hit-document-transfers/components/hit-document-transfer.component.mjs +241 -0
- package/esm2020/lib/components/hit-document-transfers/hit-document-transfer-routing.module.mjs +33 -0
- package/esm2020/lib/components/hit-document-transfers/hit-document-transfer.module.mjs +25 -0
- package/esm2020/lib/components/hit-partner-mappings/components/hit-partner-mapping.component.mjs +115 -0
- package/esm2020/lib/components/hit-partner-mappings/hit-partner-mapping-routing.module.mjs +26 -0
- package/esm2020/lib/components/hit-partner-mappings/hit-partner-mapping.module.mjs +24 -0
- package/esm2020/lib/components/hit-project-parameters/components/hit-project-parameter.component.mjs +125 -0
- package/esm2020/lib/components/hit-project-parameters/hit-project-parameter-routing.module.mjs +26 -0
- package/esm2020/lib/components/hit-project-parameters/hit-project-parameter.module.mjs +24 -0
- package/esm2020/lib/components/hit-sap-company-profiles/components/hit-sap-company-profile.component.mjs +88 -0
- package/esm2020/lib/components/hit-sap-company-profiles/hit-sap-company-profile-routing.module.mjs +26 -0
- package/esm2020/lib/components/hit-sap-company-profiles/hit-sap-company-profile.module.mjs +24 -0
- package/esm2020/lib/fbdocumentflow-routing.module.mjs +35 -0
- package/esm2020/lib/fbdocumentflow.module.mjs +29 -0
- package/esm2020/lib/proxy/document-scenarios/document-scenario.service.mjs +27 -0
- package/esm2020/lib/proxy/document-scenarios/index.mjs +3 -0
- package/esm2020/lib/proxy/document-scenarios/models.mjs +6 -0
- package/esm2020/lib/proxy/document-transfers/document-transfer.service.mjs +54 -0
- package/esm2020/lib/proxy/document-transfers/index.mjs +3 -0
- package/esm2020/lib/proxy/document-transfers/models.mjs +32 -0
- package/esm2020/lib/proxy/partner-mappings/index.mjs +3 -0
- package/esm2020/lib/proxy/partner-mappings/models.mjs +2 -0
- package/esm2020/lib/proxy/partner-mappings/partner-mapping.service.mjs +27 -0
- package/esm2020/lib/proxy/project-parameters/index.mjs +3 -0
- package/esm2020/lib/proxy/project-parameters/models.mjs +2 -0
- package/esm2020/lib/proxy/project-parameters/sap-project-parameter.service.mjs +25 -0
- package/esm2020/lib/proxy/sap-company-profiles/index.mjs +3 -0
- package/esm2020/lib/proxy/sap-company-profiles/models.mjs +7 -0
- package/esm2020/lib/proxy/sap-company-profiles/sap-company-profile.service.mjs +27 -0
- package/esm2020/lib/services/fbdocumentflow.service.mjs +21 -0
- package/esm2020/public-api.mjs +7 -0
- package/fesm2015/hitsoft-fbdocumentflow-config.mjs +144 -0
- package/fesm2015/hitsoft-fbdocumentflow-config.mjs.map +1 -0
- package/fesm2015/hitsoft-fbdocumentflow.mjs +1647 -0
- package/fesm2015/hitsoft-fbdocumentflow.mjs.map +1 -0
- package/fesm2020/hitsoft-fbdocumentflow-config.mjs +144 -0
- package/fesm2020/hitsoft-fbdocumentflow-config.mjs.map +1 -0
- package/fesm2020/hitsoft-fbdocumentflow.mjs +1621 -0
- package/fesm2020/hitsoft-fbdocumentflow.mjs.map +1 -0
- package/index.d.ts +5 -0
- package/lib/components/fbdocumentflow.component.d.ts +13 -0
- package/lib/components/hit-document-scenarios/components/hit-document-scenario.component.d.ts +41 -0
- package/lib/components/hit-document-scenarios/hit-document-scenario-routing.module.d.ts +7 -0
- package/lib/components/hit-document-scenarios/hit-document-scenario.module.d.ts +13 -0
- package/lib/components/hit-document-transfers/components/hit-document-transfer-detail.component.d.ts +88 -0
- package/lib/components/hit-document-transfers/components/hit-document-transfer.component.d.ts +61 -0
- package/lib/components/hit-document-transfers/hit-document-transfer-routing.module.d.ts +7 -0
- package/lib/components/hit-document-transfers/hit-document-transfer.module.d.ts +14 -0
- package/lib/components/hit-partner-mappings/components/hit-partner-mapping.component.d.ts +29 -0
- package/lib/components/hit-partner-mappings/hit-partner-mapping-routing.module.d.ts +7 -0
- package/lib/components/hit-partner-mappings/hit-partner-mapping.module.d.ts +13 -0
- package/lib/components/hit-project-parameters/components/hit-project-parameter.component.d.ts +36 -0
- package/lib/components/hit-project-parameters/hit-project-parameter-routing.module.d.ts +7 -0
- package/lib/components/hit-project-parameters/hit-project-parameter.module.d.ts +13 -0
- package/lib/components/hit-sap-company-profiles/components/hit-sap-company-profile.component.d.ts +28 -0
- package/lib/components/hit-sap-company-profiles/hit-sap-company-profile-routing.module.d.ts +7 -0
- package/lib/components/hit-sap-company-profiles/hit-sap-company-profile.module.d.ts +13 -0
- package/lib/fbdocumentflow-routing.module.d.ts +7 -0
- package/lib/fbdocumentflow.module.d.ts +13 -0
- package/lib/proxy/document-scenarios/document-scenario.service.d.ts +16 -0
- package/lib/proxy/document-scenarios/index.d.ts +2 -0
- package/lib/proxy/document-scenarios/models.d.ts +38 -0
- package/lib/proxy/document-transfers/document-transfer.service.d.ts +26 -0
- package/lib/proxy/document-transfers/index.d.ts +2 -0
- package/lib/proxy/document-transfers/models.d.ts +119 -0
- package/lib/proxy/partner-mappings/index.d.ts +2 -0
- package/lib/proxy/partner-mappings/models.d.ts +23 -0
- package/lib/proxy/partner-mappings/partner-mapping.service.d.ts +16 -0
- package/lib/proxy/project-parameters/index.d.ts +2 -0
- package/lib/proxy/project-parameters/models.d.ts +25 -0
- package/lib/proxy/project-parameters/sap-project-parameter.service.d.ts +14 -0
- package/lib/proxy/sap-company-profiles/index.d.ts +2 -0
- package/lib/proxy/sap-company-profiles/models.d.ts +26 -0
- package/lib/proxy/sap-company-profiles/sap-company-profile.service.d.ts +16 -0
- package/lib/services/fbdocumentflow.service.d.ts +10 -0
- package/package.json +41 -0
- package/public-api.d.ts +3 -0
package/esm2020/lib/components/hit-document-scenarios/components/hit-document-scenario.component.mjs
ADDED
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
import { Component } from '@angular/core';
|
|
2
|
+
import { Confirmation } from '@abp/ng.theme.shared';
|
|
3
|
+
import { finalize, filter, switchMap } from 'rxjs/operators';
|
|
4
|
+
import { LegBehavior, } from '../../../proxy/document-scenarios';
|
|
5
|
+
import * as i0 from "@angular/core";
|
|
6
|
+
import * as i1 from "../../../proxy/document-scenarios";
|
|
7
|
+
import * as i2 from "../../../proxy/sap-company-profiles";
|
|
8
|
+
import * as i3 from "@abp/ng.theme.shared";
|
|
9
|
+
import * as i4 from "@angular/common";
|
|
10
|
+
import * as i5 from "@angular/forms";
|
|
11
|
+
import * as i6 from "devextreme-angular";
|
|
12
|
+
import * as i7 from "devextreme-angular/ui/nested";
|
|
13
|
+
import * as i8 from "devextreme-angular/core";
|
|
14
|
+
import * as i9 from "@abp/ng.core";
|
|
15
|
+
export class HitDocumentScenarioComponent {
|
|
16
|
+
constructor(service, companyService, confirmation) {
|
|
17
|
+
this.service = service;
|
|
18
|
+
this.companyService = companyService;
|
|
19
|
+
this.confirmation = confirmation;
|
|
20
|
+
this.data = [];
|
|
21
|
+
this.companies = [];
|
|
22
|
+
this.isLoading = false;
|
|
23
|
+
this.isModalOpen = false;
|
|
24
|
+
this.isSaving = false;
|
|
25
|
+
this.editingId = null;
|
|
26
|
+
this.selectedScenario = null;
|
|
27
|
+
this.selectedRowKeys = [];
|
|
28
|
+
this.legBehaviors = [
|
|
29
|
+
{ value: LegBehavior.IntermediateChain, label: 'Ara Şirket' },
|
|
30
|
+
{ value: LegBehavior.ConstructionChain, label: 'Construction' },
|
|
31
|
+
];
|
|
32
|
+
this.form = this.buildEmptyForm();
|
|
33
|
+
}
|
|
34
|
+
ngOnInit() {
|
|
35
|
+
this.companyService.getList({ maxResultCount: 1000, skipCount: 0, isActive: true }).subscribe(result => (this.companies = result.items));
|
|
36
|
+
this.loadData();
|
|
37
|
+
}
|
|
38
|
+
loadData() {
|
|
39
|
+
this.isLoading = true;
|
|
40
|
+
this.service
|
|
41
|
+
.getList({ maxResultCount: 1000, skipCount: 0, sorting: 'name asc' })
|
|
42
|
+
.pipe(finalize(() => (this.isLoading = false)))
|
|
43
|
+
.subscribe(result => (this.data = result.items));
|
|
44
|
+
}
|
|
45
|
+
companyName(id) {
|
|
46
|
+
return this.companies.find(c => c.id === id)?.companyName ?? id;
|
|
47
|
+
}
|
|
48
|
+
selectRow(row) {
|
|
49
|
+
if (!row) {
|
|
50
|
+
return;
|
|
51
|
+
}
|
|
52
|
+
this.selectedScenario = row;
|
|
53
|
+
this.selectedRowKeys = [row.id];
|
|
54
|
+
}
|
|
55
|
+
// "Başlangıç / Devam Akışı" sütunu için: zincirin kaynak → hedef → hedef ... şeklinde kısa özeti.
|
|
56
|
+
flowSummary(scenario) {
|
|
57
|
+
const legs = [...(scenario.legs ?? [])].sort((a, b) => a.sequenceNo - b.sequenceNo);
|
|
58
|
+
if (legs.length === 0) {
|
|
59
|
+
return '';
|
|
60
|
+
}
|
|
61
|
+
const chain = [legs[0].sourceCompanyName ?? this.companyName(legs[0].sourceCompanyId)];
|
|
62
|
+
for (const leg of legs) {
|
|
63
|
+
const targetName = leg.targetCompanyName ?? this.companyName(leg.targetCompanyId);
|
|
64
|
+
chain.push(leg.legBehavior === LegBehavior.ConstructionChain ? `${targetName} (Construction)` : targetName);
|
|
65
|
+
}
|
|
66
|
+
return chain.join(' → ');
|
|
67
|
+
}
|
|
68
|
+
legStepText(leg) {
|
|
69
|
+
const source = this.companyName(leg.sourceCompanyId);
|
|
70
|
+
const target = this.companyName(leg.targetCompanyId);
|
|
71
|
+
if (leg.legBehavior === LegBehavior.ConstructionChain) {
|
|
72
|
+
// Spec §7 - Construction bacağının tam belge zinciri: Satınalma Siparişi (OPOR) → Satınalma
|
|
73
|
+
// Siparişli Mal Girişi (OPDN) → Satıcı Faturası (OPCH). "Mal Girişi" kısaltması OPDN'nin tam
|
|
74
|
+
// adını yansıtmıyordu (kullanıcı geri bildirimiyle tespit edildi). SAP kısa tablo adları (OINV/OPCH
|
|
75
|
+
// dahil) tüm belge tiplerinde tutarlı şekilde gösterilir.
|
|
76
|
+
return `${source} Müşteri Faturası (OINV) → ${target} Satınalma Siparişi (OPOR) → Satınalma Siparişli Mal Girişi (OPDN) → Satıcı Faturası (OPCH)`;
|
|
77
|
+
}
|
|
78
|
+
return `${source} Müşteri Faturası (OINV) → ${target} Satıcı Faturası (OPCH) → ${target} Müşteri Faturası (OINV)`;
|
|
79
|
+
}
|
|
80
|
+
openCreate() {
|
|
81
|
+
this.editingId = null;
|
|
82
|
+
this.form = this.buildEmptyForm();
|
|
83
|
+
this.isModalOpen = true;
|
|
84
|
+
}
|
|
85
|
+
openEdit(row) {
|
|
86
|
+
this.editingId = row.id;
|
|
87
|
+
this.form = {
|
|
88
|
+
name: row.name ?? '',
|
|
89
|
+
description: row.description ?? '',
|
|
90
|
+
isActive: row.isActive,
|
|
91
|
+
legs: row.legs.map(l => ({
|
|
92
|
+
id: l.id,
|
|
93
|
+
sourceCompanyId: l.sourceCompanyId,
|
|
94
|
+
targetCompanyId: l.targetCompanyId,
|
|
95
|
+
legBehavior: l.legBehavior,
|
|
96
|
+
notes: l.notes,
|
|
97
|
+
})),
|
|
98
|
+
};
|
|
99
|
+
this.isModalOpen = true;
|
|
100
|
+
}
|
|
101
|
+
// İlk bacağın kaynağı senaryonun başlangıç noktası olduğu için serbestçe seçilir. Sonraki bacakların
|
|
102
|
+
// kaynağı ise DocumentTransfer çalışma kopyasındaki aynı kuralla (spec §4/§3) bir önceki bacağın
|
|
103
|
+
// hedefinden otomatik türetilir - aksi halde burada da (working copy'de düzeltilen hatanın aynısı)
|
|
104
|
+
// kaynak/hedef birbirinden bağımsız seçilip zincir tutarsız hale gelebilirdi.
|
|
105
|
+
addLeg() {
|
|
106
|
+
const lastLeg = this.form.legs[this.form.legs.length - 1];
|
|
107
|
+
this.form.legs.push({
|
|
108
|
+
sourceCompanyId: lastLeg?.targetCompanyId ?? '',
|
|
109
|
+
targetCompanyId: '',
|
|
110
|
+
legBehavior: LegBehavior.IntermediateChain,
|
|
111
|
+
notes: '',
|
|
112
|
+
});
|
|
113
|
+
}
|
|
114
|
+
removeLeg(leg) {
|
|
115
|
+
this.form.legs = this.form.legs.filter(l => l !== leg);
|
|
116
|
+
this.relinkLegSources();
|
|
117
|
+
}
|
|
118
|
+
updateLegTarget(index, targetCompanyId) {
|
|
119
|
+
this.form.legs[index].targetCompanyId = targetCompanyId;
|
|
120
|
+
this.relinkLegSources();
|
|
121
|
+
}
|
|
122
|
+
relinkLegSources() {
|
|
123
|
+
for (let i = 1; i < this.form.legs.length; i++) {
|
|
124
|
+
this.form.legs[i].sourceCompanyId = this.form.legs[i - 1].targetCompanyId;
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
save() {
|
|
128
|
+
this.isSaving = true;
|
|
129
|
+
const request$ = this.editingId ? this.service.update(this.editingId, this.form) : this.service.create(this.form);
|
|
130
|
+
request$.pipe(finalize(() => (this.isSaving = false))).subscribe(() => {
|
|
131
|
+
this.isModalOpen = false;
|
|
132
|
+
this.loadData();
|
|
133
|
+
});
|
|
134
|
+
}
|
|
135
|
+
delete(row) {
|
|
136
|
+
this.confirmation
|
|
137
|
+
.warn('FBDocumentFlow::DeleteConfirmationMessage', 'FBDocumentFlow::AreYouSure')
|
|
138
|
+
.pipe(filter(status => status === Confirmation.Status.confirm), switchMap(() => this.service.delete(row.id)))
|
|
139
|
+
.subscribe(() => this.loadData());
|
|
140
|
+
}
|
|
141
|
+
buildEmptyForm() {
|
|
142
|
+
return { name: '', description: '', isActive: true, legs: [] };
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
HitDocumentScenarioComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: HitDocumentScenarioComponent, deps: [{ token: i1.DocumentScenarioService }, { token: i2.SapCompanyProfileService }, { token: i3.ConfirmationService }], target: i0.ɵɵFactoryTarget.Component });
|
|
146
|
+
HitDocumentScenarioComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: HitDocumentScenarioComponent, selector: "hit-document-scenario", ngImport: i0, template: "<div class=\"card\">\n <div class=\"card-header py-3\">\n <div class=\"row align-items-center\">\n <div class=\"col\">\n <h5 class=\"card-title mb-0\">{{ 'FBDocumentFlow::Menu:DocumentScenarios' | abpLocalization }}</h5>\n </div>\n <div class=\"col-auto d-flex align-items-center gap-2\">\n <button class=\"btn btn-sm btn-primary\" (click)=\"openCreate()\">\n <i class=\"fa fa-plus me-1\"></i>Yeni Senaryo\n </button>\n <button class=\"btn btn-sm btn-outline-primary\" (click)=\"loadData()\" [disabled]=\"isLoading\">\n <i class=\"fa fa-refresh me-1\"></i>{{ 'AbpUi::Refresh' | abpLocalization }}\n </button>\n </div>\n </div>\n </div>\n <div class=\"card-body pt-3\">\n <div *ngIf=\"isLoading\" class=\"text-center py-5\">\n <div class=\"spinner-border text-primary\" role=\"status\"></div>\n <div class=\"mt-2 text-muted\">Y\u00FCkleniyor...</div>\n </div>\n\n <dx-data-grid\n *ngIf=\"!isLoading\"\n [dataSource]=\"data\"\n keyExpr=\"id\"\n [showBorders]=\"true\"\n [showRowLines]=\"true\"\n [columnAutoWidth]=\"true\"\n [(selectedRowKeys)]=\"selectedRowKeys\"\n [hoverStateEnabled]=\"true\"\n (onRowClick)=\"selectRow($event.data)\"\n (onSelectionChanged)=\"selectRow($event.selectedRowsData[0])\"\n >\n <dxo-paging [pageSize]=\"50\"></dxo-paging>\n <dxo-pager [visible]=\"true\" [showInfo]=\"true\" [showNavigationButtons]=\"true\"></dxo-pager>\n <dxo-filter-row [visible]=\"true\"></dxo-filter-row>\n <dxo-header-filter [visible]=\"true\"></dxo-header-filter>\n <dxo-sorting mode=\"multiple\"></dxo-sorting>\n <dxo-selection mode=\"single\"></dxo-selection>\n\n <dxi-column dataField=\"name\" caption=\"Senaryo Ad\u0131\"></dxi-column>\n <dxi-column caption=\"Ba\u015Flang\u0131\u00E7 / Devam Ak\u0131\u015F\u0131\" cellTemplate=\"flowTemplate\" [allowFiltering]=\"false\" [allowSorting]=\"false\"></dxi-column>\n <dxi-column dataField=\"description\" caption=\"A\u00E7\u0131klama\"></dxi-column>\n <dxi-column caption=\"Bacak Say\u0131s\u0131\" cellTemplate=\"legCountTemplate\" [width]=\"120\"></dxi-column>\n <dxi-column dataField=\"isActive\" caption=\"Aktif\" dataType=\"boolean\" [width]=\"80\"></dxi-column>\n <dxi-column caption=\"\u0130\u015Flemler\" cellTemplate=\"actionsTemplate\" [width]=\"140\" [allowFiltering]=\"false\" [allowSorting]=\"false\"></dxi-column>\n\n <div *dxTemplate=\"let cell of 'flowTemplate'\">{{ flowSummary(cell.data) }}</div>\n\n <div *dxTemplate=\"let cell of 'legCountTemplate'\">{{ cell.data.legs?.length || 0 }}</div>\n\n <div *dxTemplate=\"let cell of 'actionsTemplate'\">\n <button class=\"btn btn-sm btn-outline-secondary me-1\" (click)=\"openEdit(cell.data)\">\n <i class=\"fa fa-pencil\"></i>\n </button>\n <button class=\"btn btn-sm btn-outline-danger\" (click)=\"delete(cell.data)\">\n <i class=\"fa fa-trash\"></i>\n </button>\n </div>\n </dx-data-grid>\n\n <div class=\"card mt-3\" *ngIf=\"selectedScenario\">\n <div class=\"card-body\">\n <h6 class=\"mb-2\">Senaryo Detay\u0131 - {{ selectedScenario.name }}</h6>\n <p class=\"text-muted mb-2\" *ngIf=\"selectedScenario.description\">{{ selectedScenario.description }}</p>\n <ol class=\"mb-2\">\n <li *ngFor=\"let leg of selectedScenario.legs\">{{ legStepText(leg) }}</li>\n </ol>\n <small class=\"text-muted d-block\">\n Haz\u0131r senaryolar proje ba\u011F\u0131ms\u0131zd\u0131r. Kaynak belgenin header Project de\u011Feri her \u015Firkette ilgili OPRJ kayd\u0131 ile e\u015Fle\u015Ftirilir.\n </small>\n <small class=\"text-muted d-block\">\n Kullan\u0131c\u0131n\u0131n aktar\u0131m s\u0131ras\u0131nda yapt\u0131\u011F\u0131 manuel de\u011Fi\u015Fiklik yaln\u0131zca i\u015Flem \u00E7al\u0131\u015Fma kopyas\u0131n\u0131 etkiler; bu senaryo tan\u0131m\u0131 de\u011Fi\u015Fmez.\n </small>\n </div>\n </div>\n </div>\n</div>\n\n<abp-modal [(visible)]=\"isModalOpen\" [options]=\"{ size: 'lg' }\">\n <ng-template #abpHeader>\n <h3>{{ editingId ? 'Senaryo D\u00FCzenle' : 'Yeni Haz\u0131r Senaryo' }}</h3>\n </ng-template>\n\n <ng-template #abpBody>\n <form>\n <div class=\"row\">\n <div class=\"col-8 mb-3\">\n <label class=\"form-label\">Senaryo Ad\u0131</label>\n <input type=\"text\" class=\"form-control\" [(ngModel)]=\"form.name\" name=\"name\" required />\n </div>\n <div class=\"col-4 mb-3 d-flex align-items-end\">\n <div class=\"form-check\">\n <input type=\"checkbox\" class=\"form-check-input\" [(ngModel)]=\"form.isActive\" name=\"isActive\" id=\"scIsActive\" />\n <label class=\"form-check-label\" for=\"scIsActive\">Aktif</label>\n </div>\n </div>\n </div>\n <div class=\"mb-3\">\n <label class=\"form-label\">A\u00E7\u0131klama</label>\n <textarea class=\"form-control\" rows=\"2\" [(ngModel)]=\"form.description\" name=\"description\"></textarea>\n </div>\n\n <div class=\"d-flex justify-content-between align-items-center mb-2\">\n <label class=\"form-label mb-0\">Bacaklar</label>\n <button type=\"button\" class=\"btn btn-sm btn-outline-primary\" (click)=\"addLeg()\">\n <i class=\"fa fa-plus me-1\"></i>Bacak Ekle\n </button>\n </div>\n\n <table class=\"table table-sm align-middle\">\n <thead>\n <tr>\n <th>Kaynak \u015Eirket</th>\n <th>Hedef \u015Eirket</th>\n <th>Davran\u0131\u015F</th>\n <th>Not</th>\n <th></th>\n </tr>\n </thead>\n <tbody>\n <tr *ngFor=\"let leg of form.legs; let i = index\">\n <td>\n <select\n *ngIf=\"i === 0; else sourceText\"\n class=\"form-select form-select-sm\"\n [(ngModel)]=\"leg.sourceCompanyId\"\n [ngModelOptions]=\"{ standalone: true }\"\n >\n <option [ngValue]=\"''\" disabled>Se\u00E7iniz</option>\n <option *ngFor=\"let c of companies\" [ngValue]=\"c.id\">{{ c.companyName }}</option>\n </select>\n <ng-template #sourceText>\n <span class=\"form-control form-control-sm bg-light\">{{ companyName(leg.sourceCompanyId) }}</span>\n </ng-template>\n </td>\n <td>\n <select\n class=\"form-select form-select-sm\"\n [ngModel]=\"leg.targetCompanyId\"\n (ngModelChange)=\"updateLegTarget(i, $event)\"\n [ngModelOptions]=\"{ standalone: true }\"\n >\n <option [ngValue]=\"''\" disabled>Se\u00E7iniz</option>\n <option *ngFor=\"let c of companies\" [ngValue]=\"c.id\">{{ c.companyName }}</option>\n </select>\n </td>\n <td>\n <select class=\"form-select form-select-sm\" [(ngModel)]=\"leg.legBehavior\" [ngModelOptions]=\"{ standalone: true }\">\n <option *ngFor=\"let b of legBehaviors\" [ngValue]=\"b.value\">{{ b.label }}</option>\n </select>\n </td>\n <td>\n <input type=\"text\" class=\"form-control form-control-sm\" [(ngModel)]=\"leg.notes\" [ngModelOptions]=\"{ standalone: true }\" />\n </td>\n <td>\n <button type=\"button\" class=\"btn btn-sm btn-outline-danger\" (click)=\"removeLeg(leg)\">\n <i class=\"fa fa-trash\"></i>\n </button>\n </td>\n </tr>\n </tbody>\n </table>\n </form>\n </ng-template>\n\n <ng-template #abpFooter>\n <button type=\"button\" class=\"btn btn-secondary\" abpClose>{{ 'AbpUi::Cancel' | abpLocalization }}</button>\n <button type=\"button\" class=\"btn btn-primary\" (click)=\"save()\" [disabled]=\"isSaving\">\n <span *ngIf=\"isSaving\" class=\"spinner-border spinner-border-sm me-1\"></span>\n {{ 'AbpUi::Save' | abpLocalization }}\n </button>\n </ng-template>\n</abp-modal>\n", dependencies: [{ kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i5.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i5.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i5.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i5.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i5.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i5.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i5.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i5.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: i3.ModalComponent, selector: "abp-modal", inputs: ["visible", "busy", "options", "suppressUnsavedChangesWarning"], outputs: ["visibleChange", "init", "appear", "disappear"] }, { kind: "directive", type: i3.ModalCloseDirective, selector: "[abpClose]" }, { kind: "component", type: i6.DxDataGridComponent, selector: "dx-data-grid", inputs: ["accessKey", "activeStateEnabled", "allowColumnReordering", "allowColumnResizing", "autoNavigateToFocusedRow", "cacheEnabled", "cellHintEnabled", "columnAutoWidth", "columnChooser", "columnFixing", "columnHidingEnabled", "columnMinWidth", "columnResizingMode", "columns", "columnWidth", "customizeColumns", "customizeExportData", "dataRowTemplate", "dataSource", "dateSerializationFormat", "disabled", "editing", "elementAttr", "errorRowEnabled", "export", "filterBuilder", "filterBuilderPopup", "filterPanel", "filterRow", "filterSyncEnabled", "filterValue", "focusedColumnIndex", "focusedRowEnabled", "focusedRowIndex", "focusedRowKey", "focusStateEnabled", "grouping", "groupPanel", "headerFilter", "height", "highlightChanges", "hint", "hoverStateEnabled", "keyboardNavigation", "keyExpr", "loadPanel", "masterDetail", "noDataText", "pager", "paging", "remoteOperations", "renderAsync", "repaintChangesOnly", "rowAlternationEnabled", "rowDragging", "rowTemplate", "rtlEnabled", "scrolling", "searchPanel", "selectedRowKeys", "selection", "selectionFilter", "showBorders", "showColumnHeaders", "showColumnLines", "showRowLines", "sortByGroupSummaryInfo", "sorting", "stateStoring", "summary", "syncLookupFilterValues", "tabIndex", "toolbar", "twoWayBindingEnabled", "visible", "width", "wordWrapEnabled"], outputs: ["onAdaptiveDetailRowPreparing", "onCellClick", "onCellDblClick", "onCellHoverChanged", "onCellPrepared", "onContentReady", "onContextMenuPreparing", "onDataErrorOccurred", "onDisposing", "onEditCanceled", "onEditCanceling", "onEditingStart", "onEditorPrepared", "onEditorPreparing", "onExported", "onExporting", "onFileSaving", "onFocusedCellChanged", "onFocusedCellChanging", "onFocusedRowChanged", "onFocusedRowChanging", "onInitialized", "onInitNewRow", "onKeyDown", "onOptionChanged", "onRowClick", "onRowCollapsed", "onRowCollapsing", "onRowDblClick", "onRowExpanded", "onRowExpanding", "onRowInserted", "onRowInserting", "onRowPrepared", "onRowRemoved", "onRowRemoving", "onRowUpdated", "onRowUpdating", "onRowValidating", "onSaved", "onSaving", "onSelectionChanged", "onToolbarPreparing", "accessKeyChange", "activeStateEnabledChange", "allowColumnReorderingChange", "allowColumnResizingChange", "autoNavigateToFocusedRowChange", "cacheEnabledChange", "cellHintEnabledChange", "columnAutoWidthChange", "columnChooserChange", "columnFixingChange", "columnHidingEnabledChange", "columnMinWidthChange", "columnResizingModeChange", "columnsChange", "columnWidthChange", "customizeColumnsChange", "customizeExportDataChange", "dataRowTemplateChange", "dataSourceChange", "dateSerializationFormatChange", "disabledChange", "editingChange", "elementAttrChange", "errorRowEnabledChange", "exportChange", "filterBuilderChange", "filterBuilderPopupChange", "filterPanelChange", "filterRowChange", "filterSyncEnabledChange", "filterValueChange", "focusedColumnIndexChange", "focusedRowEnabledChange", "focusedRowIndexChange", "focusedRowKeyChange", "focusStateEnabledChange", "groupingChange", "groupPanelChange", "headerFilterChange", "heightChange", "highlightChangesChange", "hintChange", "hoverStateEnabledChange", "keyboardNavigationChange", "keyExprChange", "loadPanelChange", "masterDetailChange", "noDataTextChange", "pagerChange", "pagingChange", "remoteOperationsChange", "renderAsyncChange", "repaintChangesOnlyChange", "rowAlternationEnabledChange", "rowDraggingChange", "rowTemplateChange", "rtlEnabledChange", "scrollingChange", "searchPanelChange", "selectedRowKeysChange", "selectionChange", "selectionFilterChange", "showBordersChange", "showColumnHeadersChange", "showColumnLinesChange", "showRowLinesChange", "sortByGroupSummaryInfoChange", "sortingChange", "stateStoringChange", "summaryChange", "syncLookupFilterValuesChange", "tabIndexChange", "toolbarChange", "twoWayBindingEnabledChange", "visibleChange", "widthChange", "wordWrapEnabledChange"] }, { kind: "component", type: i7.DxiColumnComponent, selector: "dxi-column", inputs: ["alignment", "allowEditing", "allowExporting", "allowFiltering", "allowFixing", "allowGrouping", "allowHeaderFiltering", "allowHiding", "allowReordering", "allowResizing", "allowSearch", "allowSorting", "autoExpandGroup", "buttons", "calculateCellValue", "calculateDisplayValue", "calculateFilterExpression", "calculateGroupValue", "calculateSortValue", "caption", "cellTemplate", "columns", "cssClass", "customizeText", "dataField", "dataType", "editCellTemplate", "editorOptions", "encodeHtml", "falseText", "filterOperations", "filterType", "filterValue", "filterValues", "fixed", "fixedPosition", "format", "formItem", "groupCellTemplate", "groupIndex", "headerCellTemplate", "headerFilter", "hidingPriority", "isBand", "lookup", "minWidth", "name", "ownerBand", "renderAsync", "selectedFilterOperation", "setCellValue", "showEditorAlways", "showInColumnChooser", "showWhenGrouped", "sortIndex", "sortingMethod", "sortOrder", "trueText", "type", "validationRules", "visible", "visibleIndex", "width"], outputs: ["filterValueChange", "filterValuesChange", "groupIndexChange", "selectedFilterOperationChange", "sortIndexChange", "sortOrderChange", "visibleChange", "visibleIndexChange"] }, { kind: "component", type: i7.DxoHeaderFilterComponent, selector: "dxo-header-filter", inputs: ["allowSearch", "dataSource", "groupInterval", "height", "searchMode", "width", "searchTimeout", "texts", "visible", "showRelevantValues"] }, { kind: "component", type: i7.DxoFilterRowComponent, selector: "dxo-filter-row", inputs: ["applyFilter", "applyFilterText", "betweenEndText", "betweenStartText", "operationDescriptions", "resetOperationText", "showAllText", "showOperationChooser", "visible"] }, { kind: "component", type: i7.DxoPagerComponent, selector: "dxo-pager", inputs: ["allowedPageSizes", "displayMode", "infoText", "showInfo", "showNavigationButtons", "showPageSizeSelector", "visible"] }, { kind: "component", type: i7.DxoPagingComponent, selector: "dxo-paging", inputs: ["enabled", "pageIndex", "pageSize"], outputs: ["pageIndexChange", "pageSizeChange"] }, { kind: "component", type: i7.DxoSelectionComponent, selector: "dxo-selection", inputs: ["allowSelectAll", "deferred", "mode", "selectAllMode", "showCheckBoxesMode", "recursive"] }, { kind: "component", type: i7.DxoSortingComponent, selector: "dxo-sorting", inputs: ["ascendingText", "clearText", "descendingText", "mode", "showSortIndexes"] }, { kind: "directive", type: i8.DxTemplateDirective, selector: "[dxTemplate]", inputs: ["dxTemplateOf"] }, { kind: "pipe", type: i9.LocalizationPipe, name: "abpLocalization" }] });
|
|
147
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: HitDocumentScenarioComponent, decorators: [{
|
|
148
|
+
type: Component,
|
|
149
|
+
args: [{ selector: 'hit-document-scenario', template: "<div class=\"card\">\n <div class=\"card-header py-3\">\n <div class=\"row align-items-center\">\n <div class=\"col\">\n <h5 class=\"card-title mb-0\">{{ 'FBDocumentFlow::Menu:DocumentScenarios' | abpLocalization }}</h5>\n </div>\n <div class=\"col-auto d-flex align-items-center gap-2\">\n <button class=\"btn btn-sm btn-primary\" (click)=\"openCreate()\">\n <i class=\"fa fa-plus me-1\"></i>Yeni Senaryo\n </button>\n <button class=\"btn btn-sm btn-outline-primary\" (click)=\"loadData()\" [disabled]=\"isLoading\">\n <i class=\"fa fa-refresh me-1\"></i>{{ 'AbpUi::Refresh' | abpLocalization }}\n </button>\n </div>\n </div>\n </div>\n <div class=\"card-body pt-3\">\n <div *ngIf=\"isLoading\" class=\"text-center py-5\">\n <div class=\"spinner-border text-primary\" role=\"status\"></div>\n <div class=\"mt-2 text-muted\">Y\u00FCkleniyor...</div>\n </div>\n\n <dx-data-grid\n *ngIf=\"!isLoading\"\n [dataSource]=\"data\"\n keyExpr=\"id\"\n [showBorders]=\"true\"\n [showRowLines]=\"true\"\n [columnAutoWidth]=\"true\"\n [(selectedRowKeys)]=\"selectedRowKeys\"\n [hoverStateEnabled]=\"true\"\n (onRowClick)=\"selectRow($event.data)\"\n (onSelectionChanged)=\"selectRow($event.selectedRowsData[0])\"\n >\n <dxo-paging [pageSize]=\"50\"></dxo-paging>\n <dxo-pager [visible]=\"true\" [showInfo]=\"true\" [showNavigationButtons]=\"true\"></dxo-pager>\n <dxo-filter-row [visible]=\"true\"></dxo-filter-row>\n <dxo-header-filter [visible]=\"true\"></dxo-header-filter>\n <dxo-sorting mode=\"multiple\"></dxo-sorting>\n <dxo-selection mode=\"single\"></dxo-selection>\n\n <dxi-column dataField=\"name\" caption=\"Senaryo Ad\u0131\"></dxi-column>\n <dxi-column caption=\"Ba\u015Flang\u0131\u00E7 / Devam Ak\u0131\u015F\u0131\" cellTemplate=\"flowTemplate\" [allowFiltering]=\"false\" [allowSorting]=\"false\"></dxi-column>\n <dxi-column dataField=\"description\" caption=\"A\u00E7\u0131klama\"></dxi-column>\n <dxi-column caption=\"Bacak Say\u0131s\u0131\" cellTemplate=\"legCountTemplate\" [width]=\"120\"></dxi-column>\n <dxi-column dataField=\"isActive\" caption=\"Aktif\" dataType=\"boolean\" [width]=\"80\"></dxi-column>\n <dxi-column caption=\"\u0130\u015Flemler\" cellTemplate=\"actionsTemplate\" [width]=\"140\" [allowFiltering]=\"false\" [allowSorting]=\"false\"></dxi-column>\n\n <div *dxTemplate=\"let cell of 'flowTemplate'\">{{ flowSummary(cell.data) }}</div>\n\n <div *dxTemplate=\"let cell of 'legCountTemplate'\">{{ cell.data.legs?.length || 0 }}</div>\n\n <div *dxTemplate=\"let cell of 'actionsTemplate'\">\n <button class=\"btn btn-sm btn-outline-secondary me-1\" (click)=\"openEdit(cell.data)\">\n <i class=\"fa fa-pencil\"></i>\n </button>\n <button class=\"btn btn-sm btn-outline-danger\" (click)=\"delete(cell.data)\">\n <i class=\"fa fa-trash\"></i>\n </button>\n </div>\n </dx-data-grid>\n\n <div class=\"card mt-3\" *ngIf=\"selectedScenario\">\n <div class=\"card-body\">\n <h6 class=\"mb-2\">Senaryo Detay\u0131 - {{ selectedScenario.name }}</h6>\n <p class=\"text-muted mb-2\" *ngIf=\"selectedScenario.description\">{{ selectedScenario.description }}</p>\n <ol class=\"mb-2\">\n <li *ngFor=\"let leg of selectedScenario.legs\">{{ legStepText(leg) }}</li>\n </ol>\n <small class=\"text-muted d-block\">\n Haz\u0131r senaryolar proje ba\u011F\u0131ms\u0131zd\u0131r. Kaynak belgenin header Project de\u011Feri her \u015Firkette ilgili OPRJ kayd\u0131 ile e\u015Fle\u015Ftirilir.\n </small>\n <small class=\"text-muted d-block\">\n Kullan\u0131c\u0131n\u0131n aktar\u0131m s\u0131ras\u0131nda yapt\u0131\u011F\u0131 manuel de\u011Fi\u015Fiklik yaln\u0131zca i\u015Flem \u00E7al\u0131\u015Fma kopyas\u0131n\u0131 etkiler; bu senaryo tan\u0131m\u0131 de\u011Fi\u015Fmez.\n </small>\n </div>\n </div>\n </div>\n</div>\n\n<abp-modal [(visible)]=\"isModalOpen\" [options]=\"{ size: 'lg' }\">\n <ng-template #abpHeader>\n <h3>{{ editingId ? 'Senaryo D\u00FCzenle' : 'Yeni Haz\u0131r Senaryo' }}</h3>\n </ng-template>\n\n <ng-template #abpBody>\n <form>\n <div class=\"row\">\n <div class=\"col-8 mb-3\">\n <label class=\"form-label\">Senaryo Ad\u0131</label>\n <input type=\"text\" class=\"form-control\" [(ngModel)]=\"form.name\" name=\"name\" required />\n </div>\n <div class=\"col-4 mb-3 d-flex align-items-end\">\n <div class=\"form-check\">\n <input type=\"checkbox\" class=\"form-check-input\" [(ngModel)]=\"form.isActive\" name=\"isActive\" id=\"scIsActive\" />\n <label class=\"form-check-label\" for=\"scIsActive\">Aktif</label>\n </div>\n </div>\n </div>\n <div class=\"mb-3\">\n <label class=\"form-label\">A\u00E7\u0131klama</label>\n <textarea class=\"form-control\" rows=\"2\" [(ngModel)]=\"form.description\" name=\"description\"></textarea>\n </div>\n\n <div class=\"d-flex justify-content-between align-items-center mb-2\">\n <label class=\"form-label mb-0\">Bacaklar</label>\n <button type=\"button\" class=\"btn btn-sm btn-outline-primary\" (click)=\"addLeg()\">\n <i class=\"fa fa-plus me-1\"></i>Bacak Ekle\n </button>\n </div>\n\n <table class=\"table table-sm align-middle\">\n <thead>\n <tr>\n <th>Kaynak \u015Eirket</th>\n <th>Hedef \u015Eirket</th>\n <th>Davran\u0131\u015F</th>\n <th>Not</th>\n <th></th>\n </tr>\n </thead>\n <tbody>\n <tr *ngFor=\"let leg of form.legs; let i = index\">\n <td>\n <select\n *ngIf=\"i === 0; else sourceText\"\n class=\"form-select form-select-sm\"\n [(ngModel)]=\"leg.sourceCompanyId\"\n [ngModelOptions]=\"{ standalone: true }\"\n >\n <option [ngValue]=\"''\" disabled>Se\u00E7iniz</option>\n <option *ngFor=\"let c of companies\" [ngValue]=\"c.id\">{{ c.companyName }}</option>\n </select>\n <ng-template #sourceText>\n <span class=\"form-control form-control-sm bg-light\">{{ companyName(leg.sourceCompanyId) }}</span>\n </ng-template>\n </td>\n <td>\n <select\n class=\"form-select form-select-sm\"\n [ngModel]=\"leg.targetCompanyId\"\n (ngModelChange)=\"updateLegTarget(i, $event)\"\n [ngModelOptions]=\"{ standalone: true }\"\n >\n <option [ngValue]=\"''\" disabled>Se\u00E7iniz</option>\n <option *ngFor=\"let c of companies\" [ngValue]=\"c.id\">{{ c.companyName }}</option>\n </select>\n </td>\n <td>\n <select class=\"form-select form-select-sm\" [(ngModel)]=\"leg.legBehavior\" [ngModelOptions]=\"{ standalone: true }\">\n <option *ngFor=\"let b of legBehaviors\" [ngValue]=\"b.value\">{{ b.label }}</option>\n </select>\n </td>\n <td>\n <input type=\"text\" class=\"form-control form-control-sm\" [(ngModel)]=\"leg.notes\" [ngModelOptions]=\"{ standalone: true }\" />\n </td>\n <td>\n <button type=\"button\" class=\"btn btn-sm btn-outline-danger\" (click)=\"removeLeg(leg)\">\n <i class=\"fa fa-trash\"></i>\n </button>\n </td>\n </tr>\n </tbody>\n </table>\n </form>\n </ng-template>\n\n <ng-template #abpFooter>\n <button type=\"button\" class=\"btn btn-secondary\" abpClose>{{ 'AbpUi::Cancel' | abpLocalization }}</button>\n <button type=\"button\" class=\"btn btn-primary\" (click)=\"save()\" [disabled]=\"isSaving\">\n <span *ngIf=\"isSaving\" class=\"spinner-border spinner-border-sm me-1\"></span>\n {{ 'AbpUi::Save' | abpLocalization }}\n </button>\n </ng-template>\n</abp-modal>\n" }]
|
|
150
|
+
}], ctorParameters: function () { return [{ type: i1.DocumentScenarioService }, { type: i2.SapCompanyProfileService }, { type: i3.ConfirmationService }]; } });
|
|
151
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGl0LWRvY3VtZW50LXNjZW5hcmlvLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2ZiZG9jdW1lbnRmbG93L3NyYy9saWIvY29tcG9uZW50cy9oaXQtZG9jdW1lbnQtc2NlbmFyaW9zL2NvbXBvbmVudHMvaGl0LWRvY3VtZW50LXNjZW5hcmlvLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2ZiZG9jdW1lbnRmbG93L3NyYy9saWIvY29tcG9uZW50cy9oaXQtZG9jdW1lbnQtc2NlbmFyaW9zL2NvbXBvbmVudHMvaGl0LWRvY3VtZW50LXNjZW5hcmlvLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFDbEQsT0FBTyxFQUFFLFlBQVksRUFBdUIsTUFBTSxzQkFBc0IsQ0FBQztBQUN6RSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3RCxPQUFPLEVBTUwsV0FBVyxHQUNaLE1BQU0sbUNBQW1DLENBQUM7Ozs7Ozs7Ozs7O0FBTzNDLE1BQU0sT0FBTyw0QkFBNEI7SUFnQnZDLFlBQ1UsT0FBZ0MsRUFDaEMsY0FBd0MsRUFDeEMsWUFBaUM7UUFGakMsWUFBTyxHQUFQLE9BQU8sQ0FBeUI7UUFDaEMsbUJBQWMsR0FBZCxjQUFjLENBQTBCO1FBQ3hDLGlCQUFZLEdBQVosWUFBWSxDQUFxQjtRQWxCM0MsU0FBSSxHQUEwQixFQUFFLENBQUM7UUFDakMsY0FBUyxHQUEyQixFQUFFLENBQUM7UUFDdkMsY0FBUyxHQUFHLEtBQUssQ0FBQztRQUNsQixnQkFBVyxHQUFHLEtBQUssQ0FBQztRQUNwQixhQUFRLEdBQUcsS0FBSyxDQUFDO1FBQ2pCLGNBQVMsR0FBa0IsSUFBSSxDQUFDO1FBQ2hDLHFCQUFn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QUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQzdDO2FBQ0EsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO0lBQ3RDLENBQUM7SUFFTyxjQUFjO1FBQ3BCLE9BQU8sRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLFdBQVcsRUFBRSxFQUFFLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLENBQUM7SUFDakUsQ0FBQzs7eUhBdEpVLDRCQUE0Qjs2R0FBNUIsNEJBQTRCLDZEQ2pCekMsK2xRQStLQTsyRkQ5SmEsNEJBQTRCO2tCQUp4QyxTQUFTOytCQUNFLHVCQUF1QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb25maXJtYXRpb24sIENvbmZpcm1hdGlvblNlcnZpY2UgfSBmcm9tICdAYWJwL25nLnRoZW1lLnNoYXJlZCc7XG5pbXBvcnQgeyBmaW5hbGl6ZSwgZmlsdGVyLCBzd2l0Y2hNYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQge1xuICBDcmVhdGVVcGRhdGVEb2N1bWVudFNjZW5hcmlvRHRvLFxuICBDcmVhdGVVcGRhdGVEb2N1bWVudFNjZW5hcmlvTGVnRHRvLFxuICBEb2N1bWVudFNjZW5hcmlvRHRvLFxuICBEb2N1bWVudFNjZW5hcmlvTGVnRHRvLFxuICBEb2N1bWVudFNjZW5hcmlvU2VydmljZSxcbiAgTGVnQmVoYXZpb3IsXG59IGZyb20gJy4uLy4uLy4uL3Byb3h5L2RvY3VtZW50LXNjZW5hcmlvcyc7XG5pbXBvcnQgeyBTYXBDb21wYW55UHJvZmlsZUR0bywgU2FwQ29tcGFueVByb2ZpbGVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vcHJveHkvc2FwLWNvbXBhbnktcHJvZmlsZXMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdoaXQtZG9jdW1lbnQtc2NlbmFyaW8nLFxuICB0ZW1wbGF0ZVVybDogJy4vaGl0LWRvY3VtZW50LXNjZW5hcmlvLmNvbXBvbmVudC5odG1sJyxcbn0pXG5leHBvcnQgY2xhc3MgSGl0RG9jdW1lbnRTY2VuYXJpb0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIGRhdGE6IERvY3VtZW50U2NlbmFyaW9EdG9bXSA9IFtdO1xuICBjb21wYW5pZXM6IFNhcENvbXBhbnlQcm9maWxlRHRvW10gPSBbXTtcbiAgaXNMb2FkaW5nID0gZmFsc2U7XG4gIGlzTW9kYWxPcGVuID0gZmFsc2U7XG4gIGlzU2F2aW5nID0gZmFsc2U7XG4gIGVkaXRpbmdJZDogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gIHNlbGVjdGVkU2NlbmFyaW86IERvY3VtZW50U2NlbmFyaW9EdG8gfCBudWxsID0gbnVsbDtcbiAgc2VsZWN0ZWRSb3dLZXlzOiBzdHJpbmdbXSA9IFtdO1xuICBsZWdCZWhhdmlvcnMgPSBbXG4gICAgeyB2YWx1ZTogTGVnQmVoYXZpb3IuSW50ZXJtZWRpYXRlQ2hhaW4sIGxhYmVsOiAnQXJhIMWeaXJrZXQnIH0sXG4gICAgeyB2YWx1ZTogTGVnQmVoYXZpb3IuQ29uc3RydWN0aW9uQ2hhaW4sIGxhYmVsOiAnQ29uc3RydWN0aW9uJyB9LFxuICBdO1xuXG4gIGZvcm06IENyZWF0ZVVwZGF0ZURvY3VtZW50U2NlbmFyaW9EdG8gPSB0aGlzLmJ1aWxkRW1wdHlGb3JtKCk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBzZXJ2aWNlOiBEb2N1bWVudFNjZW5hcmlvU2VydmljZSxcbiAgICBwcml2YXRlIGNvbXBhbnlTZXJ2aWNlOiBTYXBDb21wYW55UHJvZmlsZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBjb25maXJtYXRpb246IENvbmZpcm1hdGlvblNlcnZpY2VcbiAgKSB7fVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMuY29tcGFueVNlcnZpY2UuZ2V0TGlzdCh7IG1heFJlc3VsdENvdW50OiAxMDAwLCBza2lwQ291bnQ6IDAsIGlzQWN0aXZlOiB0cnVlIH0pLnN1YnNjcmliZShyZXN1bHQgPT4gKHRoaXMuY29tcGFuaWVzID0gcmVzdWx0Lml0ZW1zKSk7XG4gICAgdGhpcy5sb2FkRGF0YSgpO1xuICB9XG5cbiAgbG9hZERhdGEoKSB7XG4gICAgdGhpcy5pc0xvYWRpbmcgPSB0cnVlO1xuICAgIHRoaXMuc2VydmljZVxuICAgICAgLmdldExpc3QoeyBtYXhSZXN1bHRDb3VudDogMTAwMCwgc2tpcENvdW50OiAwLCBzb3J0aW5nOiAnbmFtZSBhc2MnIH0pXG4gICAgICAucGlwZShmaW5hbGl6ZSgoKSA9PiAodGhpcy5pc0xvYWRpbmcgPSBmYWxzZSkpKVxuICAgICAgLnN1YnNjcmliZShyZXN1bHQgPT4gKHRoaXMuZGF0YSA9IHJlc3VsdC5pdGVtcykpO1xuICB9XG5cbiAgY29tcGFueU5hbWUoaWQ6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuY29tcGFuaWVzLmZpbmQoYyA9PiBjLmlkID09PSBpZCk/LmNvbXBhbnlOYW1lID8/IGlkO1xuICB9XG5cbiAgc2VsZWN0Um93KHJvdzogRG9jdW1lbnRTY2VuYXJpb0R0byB8IHVuZGVmaW5lZCkge1xuICAgIGlmICghcm93KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuc2VsZWN0ZWRTY2VuYXJpbyA9IHJvdztcbiAgICB0aGlzLnNlbGVjdGVkUm93S2V5cyA9IFtyb3cuaWRdO1xuICB9XG5cbiAgLy8gXCJCYcWfbGFuZ8Sxw6cgLyBEZXZhbSBBa8SxxZ/EsVwiIHPDvHR1bnUgacOnaW46IHppbmNpcmluIGtheW5hayDihpIgaGVkZWYg4oaSIGhlZGVmIC4uLiDFn2VrbGluZGUga8Sxc2Egw7Z6ZXRpLlxuICBmbG93U3VtbWFyeShzY2VuYXJpbzogRG9jdW1lbnRTY2VuYXJpb0R0byk6IHN0cmluZyB7XG4gICAgY29uc3QgbGVncyA9IFsuLi4oc2NlbmFyaW8ubGVncyA/PyBbXSldLnNvcnQoKGEsIGIpID0+IGEuc2VxdWVuY2VObyAtIGIuc2VxdWVuY2VObyk7XG4gICAgaWYgKGxlZ3MubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuXG4gICAgY29uc3QgY2hhaW4gPSBbbGVnc1swXS5zb3VyY2VDb21wYW55TmFtZSA/PyB0aGlzLmNvbXBhbnlOYW1lKGxlZ3NbMF0uc291cmNlQ29tcGFueUlkKV07XG4gICAgZm9yIChjb25zdCBsZWcgb2YgbGVncykge1xuICAgICAgY29uc3QgdGFyZ2V0TmFtZSA9IGxlZy50YXJnZXRDb21wYW55TmFtZSA/PyB0aGlzLmNvbXBhbnlOYW1lKGxlZy50YXJnZXRDb21wYW55SWQpO1xuICAgICAgY2hhaW4ucHVzaChsZWcubGVnQmVoYXZpb3IgPT09IExlZ0JlaGF2aW9yLkNvbnN0cnVjdGlvbkNoYWluID8gYCR7dGFyZ2V0TmFtZX0gKENvbnN0cnVjdGlvbilgIDogdGFyZ2V0TmFtZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNoYWluLmpvaW4oJyDihpIgJyk7XG4gIH1cblxuICBsZWdTdGVwVGV4dChsZWc6IERvY3VtZW50U2NlbmFyaW9MZWdEdG8pOiBzdHJpbmcge1xuICAgIGNvbnN0IHNvdXJjZSA9IHRoaXMuY29tcGFueU5hbWUobGVnLnNvdXJjZUNvbXBhbnlJZCk7XG4gICAgY29uc3QgdGFyZ2V0ID0gdGhpcy5jb21wYW55TmFtZShsZWcudGFyZ2V0Q29tcGFueUlkKTtcbiAgICBpZiAobGVnLmxlZ0JlaGF2aW9yID09PSBMZWdCZWhhdmlvci5Db25zdHJ1Y3Rpb25DaGFpbikge1xuICAgICAgLy8gU3BlYyDCpzcgLSBDb25zdHJ1Y3Rpb24gYmFjYcSfxLFuxLFuIHRhbSBiZWxnZSB6aW5jaXJpOiBTYXTEsW5hbG1hIFNpcGFyacWfaSAoT1BPUikg4oaSIFNhdMSxbmFsbWFcbiAgICAgIC8vIFNpcGFyacWfbGkgTWFsIEdpcmnFn2kgKE9QRE4pIOKGkiBTYXTEsWPEsSBGYXR1cmFzxLEgKE9QQ0gpLiBcIk1hbCBHaXJpxZ9pXCIga8Sxc2FsdG1hc8SxIE9QRE4nbmluIHRhbVxuICAgICAgLy8gYWTEsW7EsSB5YW5zxLF0bcSxeW9yZHUgKGt1bGxhbsSxY8SxIGdlcmkgYmlsZGlyaW1peWxlIHRlc3BpdCBlZGlsZGkpLiBTQVAga8Sxc2EgdGFibG8gYWRsYXLEsSAoT0lOVi9PUENIXG4gICAgICAvLyBkYWhpbCkgdMO8bSBiZWxnZSB0aXBsZXJpbmRlIHR1dGFybMSxIMWfZWtpbGRlIGfDtnN0ZXJpbGlyLlxuICAgICAgcmV0dXJuIGAke3NvdXJjZX0gTcO8xZ90ZXJpIEZhdHVyYXPEsSAoT0lOVikg4oaSICR7dGFyZ2V0fSBTYXTEsW5hbG1hIFNpcGFyacWfaSAoT1BPUikg4oaSIFNhdMSxbmFsbWEgU2lwYXJpxZ9saSBNYWwgR2lyacWfaSAoT1BETikg4oaSIFNhdMSxY8SxIEZhdHVyYXPEsSAoT1BDSClgO1xuICAgIH1cbiAgICByZXR1cm4gYCR7c291cmNlfSBNw7zFn3RlcmkgRmF0dXJhc8SxIChPSU5WKSDihpIgJHt0YXJnZXR9IFNhdMSxY8SxIEZhdHVyYXPEsSAoT1BDSCkg4oaSICR7dGFyZ2V0fSBNw7zFn3RlcmkgRmF0dXJhc8SxIChPSU5WKWA7XG4gIH1cblxuICBvcGVuQ3JlYXRlKCkge1xuICAgIHRoaXMuZWRpdGluZ0lkID0gbnVsbDtcbiAgICB0aGlzLmZvcm0gPSB0aGlzLmJ1aWxkRW1wdHlGb3JtKCk7XG4gICAgdGhpcy5pc01vZGFsT3BlbiA9IHRydWU7XG4gIH1cblxuICBvcGVuRWRpdChyb3c6IERvY3VtZW50U2NlbmFyaW9EdG8pIHtcbiAgICB0aGlzLmVkaXRpbmdJZCA9IHJvdy5pZDtcbiAgICB0aGlzLmZvcm0gPSB7XG4gICAgICBuYW1lOiByb3cubmFtZSA/PyAnJyxcbiAgICAgIGRlc2NyaXB0aW9uOiByb3cuZGVzY3JpcHRpb24gPz8gJycsXG4gICAgICBpc0FjdGl2ZTogcm93LmlzQWN0aXZlLFxuICAgICAgbGVnczogcm93LmxlZ3MubWFwKGwgPT4gKHtcbiAgICAgICAgaWQ6IGwuaWQsXG4gICAgICAgIHNvdXJjZUNvbXBhbnlJZDogbC5zb3VyY2VDb21wYW55SWQsXG4gICAgICAgIHRhcmdldENvbXBhbnlJZDogbC50YXJnZXRDb21wYW55SWQsXG4gICAgICAgIGxlZ0JlaGF2aW9yOiBsLmxlZ0JlaGF2aW9yLFxuICAgICAgICBub3RlczogbC5ub3RlcyxcbiAgICAgIH0pKSxcbiAgICB9O1xuICAgIHRoaXMuaXNNb2RhbE9wZW4gPSB0cnVlO1xuICB9XG5cbiAgLy8gxLBsayBiYWNhxJ/EsW4ga2F5bmHEn8SxIHNlbmFyeW9udW4gYmHFn2xhbmfEscOnIG5va3Rhc8SxIG9sZHXEn3UgacOnaW4gc2VyYmVzdMOnZSBzZcOnaWxpci4gU29ucmFraSBiYWNha2xhcsSxblxuICAvLyBrYXluYcSfxLEgaXNlIERvY3VtZW50VHJhbnNmZXIgw6dhbMSxxZ9tYSBrb3B5YXPEsW5kYWtpIGF5bsSxIGt1cmFsbGEgKHNwZWMgwqc0L8KnMykgYmlyIMO2bmNla2kgYmFjYcSfxLFuXG4gIC8vIGhlZGVmaW5kZW4gb3RvbWF0aWsgdMO8cmV0aWxpciAtIGFrc2kgaGFsZGUgYnVyYWRhIGRhICh3b3JraW5nIGNvcHknZGUgZMO8emVsdGlsZW4gaGF0YW7EsW4gYXluxLFzxLEpXG4gIC8vIGtheW5hay9oZWRlZiBiaXJiaXJpbmRlbiBiYcSfxLFtc8SxeiBzZcOnaWxpcCB6aW5jaXIgdHV0YXJzxLF6IGhhbGUgZ2VsZWJpbGlyZGkuXG4gIGFkZExlZygpIHtcbiAgICBjb25zdCBsYXN0TGVnID0gdGhpcy5mb3JtLmxlZ3NbdGhpcy5mb3JtLmxlZ3MubGVuZ3RoIC0gMV07XG4gICAgdGhpcy5mb3JtLmxlZ3MucHVzaCh7XG4gICAgICBzb3VyY2VDb21wYW55SWQ6IGxhc3RMZWc/LnRhcmdldENvbXBhbnlJZCA/PyAnJyxcbiAgICAgIHRhcmdldENvbXBhbnlJZDogJycsXG4gICAgICBsZWdCZWhhdmlvcjogTGVnQmVoYXZpb3IuSW50ZXJtZWRpYXRlQ2hhaW4sXG4gICAgICBub3RlczogJycsXG4gICAgfSk7XG4gIH1cblxuICByZW1vdmVMZWcobGVnOiBDcmVhdGVVcGRhdGVEb2N1bWVudFNjZW5hcmlvTGVnRHRvKSB7XG4gICAgdGhpcy5mb3JtLmxlZ3MgPSB0aGlzLmZvcm0ubGVncy5maWx0ZXIobCA9PiBsICE9PSBsZWcpO1xuICAgIHRoaXMucmVsaW5rTGVnU291cmNlcygpO1xuICB9XG5cbiAgdXBkYXRlTGVnVGFyZ2V0KGluZGV4OiBudW1iZXIsIHRhcmdldENvbXBhbnlJZDogc3RyaW5nKSB7XG4gICAgdGhpcy5mb3JtLmxlZ3NbaW5kZXhdLnRhcmdldENvbXBhbnlJZCA9IHRhcmdldENvbXBhbnlJZDtcbiAgICB0aGlzLnJlbGlua0xlZ1NvdXJjZXMoKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVsaW5rTGVnU291cmNlcygpIHtcbiAgICBmb3IgKGxldCBpID0gMTsgaSA8IHRoaXMuZm9ybS5sZWdzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB0aGlzLmZvcm0ubGVnc1tpXS5zb3VyY2VDb21wYW55SWQgPSB0aGlzLmZvcm0ubGVnc1tpIC0gMV0udGFyZ2V0Q29tcGFueUlkO1xuICAgIH1cbiAgfVxuXG4gIHNhdmUoKSB7XG4gICAgdGhpcy5pc1NhdmluZyA9IHRydWU7XG4gICAgY29uc3QgcmVxdWVzdCQgPSB0aGlzLmVkaXRpbmdJZCA/IHRoaXMuc2VydmljZS51cGRhdGUodGhpcy5lZGl0aW5nSWQsIHRoaXMuZm9ybSkgOiB0aGlzLnNlcnZpY2UuY3JlYXRlKHRoaXMuZm9ybSk7XG4gICAgcmVxdWVzdCQucGlwZShmaW5hbGl6ZSgoKSA9PiAodGhpcy5pc1NhdmluZyA9IGZhbHNlKSkpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICB0aGlzLmlzTW9kYWxPcGVuID0gZmFsc2U7XG4gICAgICB0aGlzLmxvYWREYXRhKCk7XG4gICAgfSk7XG4gIH1cblxuICBkZWxldGUocm93OiBEb2N1bWVudFNjZW5hcmlvRHRvKSB7XG4gICAgdGhpcy5jb25maXJtYXRpb25cbiAgICAgIC53YXJuKCdGQkRvY3VtZW50Rmxvdzo6RGVsZXRlQ29uZmlybWF0aW9uTWVzc2FnZScsICdGQkRvY3VtZW50Rmxvdzo6QXJlWW91U3VyZScpXG4gICAgICAucGlwZShcbiAgICAgICAgZmlsdGVyKHN0YXR1cyA9PiBzdGF0dXMgPT09IENvbmZpcm1hdGlvbi5TdGF0dXMuY29uZmlybSksXG4gICAgICAgIHN3aXRjaE1hcCgoKSA9PiB0aGlzLnNlcnZpY2UuZGVsZXRlKHJvdy5pZCkpXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHRoaXMubG9hZERhdGEoKSk7XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkRW1wdHlGb3JtKCk6IENyZWF0ZVVwZGF0ZURvY3VtZW50U2NlbmFyaW9EdG8ge1xuICAgIHJldHVybiB7IG5hbWU6ICcnLCBkZXNjcmlwdGlvbjogJycsIGlzQWN0aXZlOiB0cnVlLCBsZWdzOiBbXSB9O1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwiY2FyZFwiPlxuICA8ZGl2IGNsYXNzPVwiY2FyZC1oZWFkZXIgcHktM1wiPlxuICAgIDxkaXYgY2xhc3M9XCJyb3cgYWxpZ24taXRlbXMtY2VudGVyXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiY29sXCI+XG4gICAgICAgIDxoNSBjbGFzcz1cImNhcmQtdGl0bGUgbWItMFwiPnt7ICdGQkRvY3VtZW50Rmxvdzo6TWVudTpEb2N1bWVudFNjZW5hcmlvcycgfCBhYnBMb2NhbGl6YXRpb24gfX08L2g1PlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwiY29sLWF1dG8gZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBnYXAtMlwiPlxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4tcHJpbWFyeVwiIChjbGljayk9XCJvcGVuQ3JlYXRlKClcIj5cbiAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLXBsdXMgbWUtMVwiPjwvaT5ZZW5pIFNlbmFyeW9cbiAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1vdXRsaW5lLXByaW1hcnlcIiAoY2xpY2spPVwibG9hZERhdGEoKVwiIFtkaXNhYmxlZF09XCJpc0xvYWRpbmdcIj5cbiAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLXJlZnJlc2ggbWUtMVwiPjwvaT57eyAnQWJwVWk6OlJlZnJlc2gnIHwgYWJwTG9jYWxpemF0aW9uIH19XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPVwiY2FyZC1ib2R5IHB0LTNcIj5cbiAgICA8ZGl2ICpuZ0lmPVwiaXNMb2FkaW5nXCIgY2xhc3M9XCJ0ZXh0LWNlbnRlciBweS01XCI+XG4gICAgICA8ZGl2IGNsYXNzPVwic3Bpbm5lci1ib3JkZXIgdGV4dC1wcmltYXJ5XCIgcm9sZT1cInN0YXR1c1wiPjwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cIm10LTIgdGV4dC1tdXRlZFwiPlnDvGtsZW5peW9yLi4uPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8ZHgtZGF0YS1ncmlkXG4gICAgICAqbmdJZj1cIiFpc0xvYWRpbmdcIlxuICAgICAgW2RhdGFTb3VyY2VdPVwiZGF0YVwiXG4gICAgICBrZXlFeHByPVwiaWRcIlxuICAgICAgW3Nob3dCb3JkZXJzXT1cInRydWVcIlxuICAgICAgW3Nob3dSb3dMaW5lc109XCJ0cnVlXCJcbiAgICAgIFtjb2x1bW5BdXRvV2lkdGhdPVwidHJ1ZVwiXG4gICAgICBbKHNlbGVjdGVkUm93S2V5cyldPVwic2VsZWN0ZWRSb3dLZXlzXCJcbiAgICAgIFtob3ZlclN0YXRlRW5hYmxlZF09XCJ0cnVlXCJcbiAgICAgIChvblJvd0NsaWNrKT1cInNlbGVjdFJvdygkZXZlbnQuZGF0YSlcIlxuICAgICAgKG9uU2VsZWN0aW9uQ2hhbmdlZCk9XCJzZWxlY3RSb3coJGV2ZW50LnNlbGVjdGVkUm93c0RhdGFbMF0pXCJcbiAgICA+XG4gICAgICA8ZHhvLXBhZ2luZyBbcGFnZVNpemVdPVwiNTBcIj48L2R4by1wYWdpbmc+XG4gICAgICA8ZHhvLXBhZ2VyIFt2aXNpYmxlXT1cInRydWVcIiBbc2hvd0luZm9dPVwidHJ1ZVwiIFtzaG93TmF2aWdhdGlvbkJ1dHRvbnNdPVwidHJ1ZVwiPjwvZHhvLXBhZ2VyPlxuICAgICAgPGR4by1maWx0ZXItcm93IFt2aXNpYmxlXT1cInRydWVcIj48L2R4by1maWx0ZXItcm93PlxuICAgICAgPGR4by1oZWFkZXItZmlsdGVyIFt2aXNpYmxlXT1cInRydWVcIj48L2R4by1oZWFkZXItZmlsdGVyPlxuICAgICAgPGR4by1zb3J0aW5nIG1vZGU9XCJtdWx0aXBsZVwiPjwvZHhvLXNvcnRpbmc+XG4gICAgICA8ZHhvLXNlbGVjdGlvbiBtb2RlPVwic2luZ2xlXCI+PC9keG8tc2VsZWN0aW9uPlxuXG4gICAgICA8ZHhpLWNvbHVtbiBkYXRhRmllbGQ9XCJuYW1lXCIgY2FwdGlvbj1cIlNlbmFyeW8gQWTEsVwiPjwvZHhpLWNvbHVtbj5cbiAgICAgIDxkeGktY29sdW1uIGNhcHRpb249XCJCYcWfbGFuZ8Sxw6cgLyBEZXZhbSBBa8SxxZ/EsVwiIGNlbGxUZW1wbGF0ZT1cImZsb3dUZW1wbGF0ZVwiIFthbGxvd0ZpbHRlcmluZ109XCJmYWxzZVwiIFthbGxvd1NvcnRpbmddPVwiZmFsc2VcIj48L2R4aS1jb2x1bW4+XG4gICAgICA8ZHhpLWNvbHVtbiBkYXRhRmllbGQ9XCJkZXNjcmlwdGlvblwiIGNhcHRpb249XCJBw6fEsWtsYW1hXCI+PC9keGktY29sdW1uPlxuICAgICAgPGR4aS1jb2x1bW4gY2FwdGlvbj1cIkJhY2FrIFNhecSxc8SxXCIgY2VsbFRlbXBsYXRlPVwibGVnQ291bnRUZW1wbGF0ZVwiIFt3aWR0aF09XCIxMjBcIj48L2R4aS1jb2x1bW4+XG4gICAgICA8ZHhpLWNvbHVtbiBkYXRhRmllbGQ9XCJpc0FjdGl2ZVwiIGNhcHRpb249XCJBa3RpZlwiIGRhdGFUeXBlPVwiYm9vbGVhblwiIFt3aWR0aF09XCI4MFwiPjwvZHhpLWNvbHVtbj5cbiAgICAgIDxkeGktY29sdW1uIGNhcHRpb249XCLEsMWfbGVtbGVyXCIgY2VsbFRlbXBsYXRlPVwiYWN0aW9uc1RlbXBsYXRlXCIgW3dpZHRoXT1cIjE0MFwiIFthbGxvd0ZpbHRlcmluZ109XCJmYWxzZVwiIFthbGxvd1NvcnRpbmddPVwiZmFsc2VcIj48L2R4aS1jb2x1bW4+XG5cbiAgICAgIDxkaXYgKmR4VGVtcGxhdGU9XCJsZXQgY2VsbCBvZiAnZmxvd1RlbXBsYXRlJ1wiPnt7IGZsb3dTdW1tYXJ5KGNlbGwuZGF0YSkgfX08L2Rpdj5cblxuICAgICAgPGRpdiAqZHhUZW1wbGF0ZT1cImxldCBjZWxsIG9mICdsZWdDb3VudFRlbXBsYXRlJ1wiPnt7IGNlbGwuZGF0YS5sZWdzPy5sZW5ndGggfHwgMCB9fTwvZGl2PlxuXG4gICAgICA8ZGl2ICpkeFRlbXBsYXRlPVwibGV0IGNlbGwgb2YgJ2FjdGlvbnNUZW1wbGF0ZSdcIj5cbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tc20gYnRuLW91dGxpbmUtc2Vjb25kYXJ5IG1lLTFcIiAoY2xpY2spPVwib3BlbkVkaXQoY2VsbC5kYXRhKVwiPlxuICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtcGVuY2lsXCI+PC9pPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tc20gYnRuLW91dGxpbmUtZGFuZ2VyXCIgKGNsaWNrKT1cImRlbGV0ZShjZWxsLmRhdGEpXCI+XG4gICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS10cmFzaFwiPjwvaT5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICA8L2R4LWRhdGEtZ3JpZD5cblxuICAgIDxkaXYgY2xhc3M9XCJjYXJkIG10LTNcIiAqbmdJZj1cInNlbGVjdGVkU2NlbmFyaW9cIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWJvZHlcIj5cbiAgICAgICAgPGg2IGNsYXNzPVwibWItMlwiPlNlbmFyeW8gRGV0YXnEsSAtIHt7IHNlbGVjdGVkU2NlbmFyaW8ubmFtZSB9fTwvaDY+XG4gICAgICAgIDxwIGNsYXNzPVwidGV4dC1tdXRlZCBtYi0yXCIgKm5nSWY9XCJzZWxlY3RlZFNjZW5hcmlvLmRlc2NyaXB0aW9uXCI+e3sgc2VsZWN0ZWRTY2VuYXJpby5kZXNjcmlwdGlvbiB9fTwvcD5cbiAgICAgICAgPG9sIGNsYXNzPVwibWItMlwiPlxuICAgICAgICAgIDxsaSAqbmdGb3I9XCJsZXQgbGVnIG9mIHNlbGVjdGVkU2NlbmFyaW8ubGVnc1wiPnt7IGxlZ1N0ZXBUZXh0KGxlZykgfX08L2xpPlxuICAgICAgICA8L29sPlxuICAgICAgICA8c21hbGwgY2xhc3M9XCJ0ZXh0LW11dGVkIGQtYmxvY2tcIj5cbiAgICAgICAgICBIYXrEsXIgc2VuYXJ5b2xhciBwcm9qZSBiYcSfxLFtc8SxemTEsXIuIEtheW5hayBiZWxnZW5pbiBoZWFkZXIgUHJvamVjdCBkZcSfZXJpIGhlciDFn2lya2V0dGUgaWxnaWxpIE9QUkoga2F5ZMSxIGlsZSBlxZ9sZcWfdGlyaWxpci5cbiAgICAgICAgPC9zbWFsbD5cbiAgICAgICAgPHNtYWxsIGNsYXNzPVwidGV4dC1tdXRlZCBkLWJsb2NrXCI+XG4gICAgICAgICAgS3VsbGFuxLFjxLFuxLFuIGFrdGFyxLFtIHPEsXJhc8SxbmRhIHlhcHTEscSfxLEgbWFudWVsIGRlxJ9pxZ9pa2xpayB5YWxuxLF6Y2EgacWfbGVtIMOnYWzEscWfbWEga29weWFzxLFuxLEgZXRraWxlcjsgYnUgc2VuYXJ5byB0YW7EsW3EsSBkZcSfacWfbWV6LlxuICAgICAgICA8L3NtYWxsPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG5cbjxhYnAtbW9kYWwgWyh2aXNpYmxlKV09XCJpc01vZGFsT3BlblwiIFtvcHRpb25zXT1cInsgc2l6ZTogJ2xnJyB9XCI+XG4gIDxuZy10ZW1wbGF0ZSAjYWJwSGVhZGVyPlxuICAgIDxoMz57eyBlZGl0aW5nSWQgPyAnU2VuYXJ5byBEw7x6ZW5sZScgOiAnWWVuaSBIYXrEsXIgU2VuYXJ5bycgfX08L2gzPlxuICA8L25nLXRlbXBsYXRlPlxuXG4gIDxuZy10ZW1wbGF0ZSAjYWJwQm9keT5cbiAgICA8Zm9ybT5cbiAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC04IG1iLTNcIj5cbiAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWxhYmVsXCI+U2VuYXJ5byBBZMSxPC9sYWJlbD5cbiAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIFsobmdNb2RlbCldPVwiZm9ybS5uYW1lXCIgbmFtZT1cIm5hbWVcIiByZXF1aXJlZCAvPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC00IG1iLTMgZC1mbGV4IGFsaWduLWl0ZW1zLWVuZFwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWNoZWNrXCI+XG4gICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgY2xhc3M9XCJmb3JtLWNoZWNrLWlucHV0XCIgWyhuZ01vZGVsKV09XCJmb3JtLmlzQWN0aXZlXCIgbmFtZT1cImlzQWN0aXZlXCIgaWQ9XCJzY0lzQWN0aXZlXCIgLz5cbiAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tY2hlY2stbGFiZWxcIiBmb3I9XCJzY0lzQWN0aXZlXCI+QWt0aWY8L2xhYmVsPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cIm1iLTNcIj5cbiAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1sYWJlbFwiPkHDp8Sxa2xhbWE8L2xhYmVsPlxuICAgICAgICA8dGV4dGFyZWEgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiByb3dzPVwiMlwiIFsobmdNb2RlbCldPVwiZm9ybS5kZXNjcmlwdGlvblwiIG5hbWU9XCJkZXNjcmlwdGlvblwiPjwvdGV4dGFyZWE+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBhbGlnbi1pdGVtcy1jZW50ZXIgbWItMlwiPlxuICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWxhYmVsIG1iLTBcIj5CYWNha2xhcjwvbGFiZWw+XG4gICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4tb3V0bGluZS1wcmltYXJ5XCIgKGNsaWNrKT1cImFkZExlZygpXCI+XG4gICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1wbHVzIG1lLTFcIj48L2k+QmFjYWsgRWtsZVxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8dGFibGUgY2xhc3M9XCJ0YWJsZSB0YWJsZS1zbSBhbGlnbi1taWRkbGVcIj5cbiAgICAgICAgPHRoZWFkPlxuICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgIDx0aD5LYXluYWsgxZ5pcmtldDwvdGg+XG4gICAgICAgICAgICA8dGg+SGVkZWYgxZ5pcmtldDwvdGg+XG4gICAgICAgICAgICA8dGg+RGF2cmFuxLHFnzwvdGg+XG4gICAgICAgICAgICA8dGg+Tm90PC90aD5cbiAgICAgICAgICAgIDx0aD48L3RoPlxuICAgICAgICAgIDwvdHI+XG4gICAgICAgIDwvdGhlYWQ+XG4gICAgICAgIDx0Ym9keT5cbiAgICAgICAgICA8dHIgKm5nRm9yPVwibGV0IGxlZyBvZiBmb3JtLmxlZ3M7IGxldCBpID0gaW5kZXhcIj5cbiAgICAgICAgICAgIDx0ZD5cbiAgICAgICAgICAgICAgPHNlbGVjdFxuICAgICAgICAgICAgICAgICpuZ0lmPVwiaSA9PT0gMDsgZWxzZSBzb3VyY2VUZXh0XCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tc2VsZWN0IGZvcm0tc2VsZWN0LXNtXCJcbiAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImxlZy5zb3VyY2VDb21wYW55SWRcIlxuICAgICAgICAgICAgICAgIFtuZ01vZGVsT3B0aW9uc109XCJ7IHN0YW5kYWxvbmU6IHRydWUgfVwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8b3B0aW9uIFtuZ1ZhbHVlXT1cIicnXCIgZGlzYWJsZWQ+U2XDp2luaXo8L29wdGlvbj5cbiAgICAgICAgICAgICAgICA8b3B0aW9uICpuZ0Zvcj1cImxldCBjIG9mIGNvbXBhbmllc1wiIFtuZ1ZhbHVlXT1cImMuaWRcIj57eyBjLmNvbXBhbnlOYW1lIH19PC9vcHRpb24+XG4gICAgICAgICAgICAgIDwvc2VsZWN0PlxuICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI3NvdXJjZVRleHQ+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmb3JtLWNvbnRyb2wgZm9ybS1jb250cm9sLXNtIGJnLWxpZ2h0XCI+e3sgY29tcGFueU5hbWUobGVnLnNvdXJjZUNvbXBhbnlJZCkgfX08L3NwYW4+XG4gICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgPHRkPlxuICAgICAgICAgICAgICA8c2VsZWN0XG4gICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLXNlbGVjdCBmb3JtLXNlbGVjdC1zbVwiXG4gICAgICAgICAgICAgICAgW25nTW9kZWxdPVwibGVnLnRhcmdldENvbXBhbnlJZFwiXG4gICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwidXBkYXRlTGVnVGFyZ2V0KGksICRldmVudClcIlxuICAgICAgICAgICAgICAgIFtuZ01vZGVsT3B0aW9uc109XCJ7IHN0YW5kYWxvbmU6IHRydWUgfVwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8b3B0aW9uIFtuZ1ZhbHVlXT1cIicnXCIgZGlzYWJsZWQ+U2XDp2luaXo8L29wdGlvbj5cbiAgICAgICAgICAgICAgICA8b3B0aW9uICpuZ0Zvcj1cImxldCBjIG9mIGNvbXBhbmllc1wiIFtuZ1ZhbHVlXT1cImMuaWRcIj57eyBjLmNvbXBhbnlOYW1lIH19PC9vcHRpb24+XG4gICAgICAgICAgICAgIDwvc2VsZWN0PlxuICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgIDx0ZD5cbiAgICAgICAgICAgICAgPHNlbGVjdCBjbGFzcz1cImZvcm0tc2VsZWN0IGZvcm0tc2VsZWN0LXNtXCIgWyhuZ01vZGVsKV09XCJsZWcubGVnQmVoYXZpb3JcIiBbbmdNb2RlbE9wdGlvbnNdPVwieyBzdGFuZGFsb25lOiB0cnVlIH1cIj5cbiAgICAgICAgICAgICAgICA8b3B0aW9uICpuZ0Zvcj1cImxldCBiIG9mIGxlZ0JlaGF2aW9yc1wiIFtuZ1ZhbHVlXT1cImIudmFsdWVcIj57eyBiLmxhYmVsIH19PC9vcHRpb24+XG4gICAgICAgICAgICAgIDwvc2VsZWN0PlxuICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgIDx0ZD5cbiAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2wgZm9ybS1jb250cm9sLXNtXCIgWyhuZ01vZGVsKV09XCJsZWcubm90ZXNcIiBbbmdNb2RlbE9wdGlvbnNdPVwieyBzdGFuZGFsb25lOiB0cnVlIH1cIiAvPlxuICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgIDx0ZD5cbiAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1vdXRsaW5lLWRhbmdlclwiIChjbGljayk9XCJyZW1vdmVMZWcobGVnKVwiPlxuICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtdHJhc2hcIj48L2k+XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICA8L3RyPlxuICAgICAgICA8L3Rib2R5PlxuICAgICAgPC90YWJsZT5cbiAgICA8L2Zvcm0+XG4gIDwvbmctdGVtcGxhdGU+XG5cbiAgPG5nLXRlbXBsYXRlICNhYnBGb290ZXI+XG4gICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXNlY29uZGFyeVwiIGFicENsb3NlPnt7ICdBYnBVaTo6Q2FuY2VsJyB8IGFicExvY2FsaXphdGlvbiB9fTwvYnV0dG9uPlxuICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5XCIgKGNsaWNrKT1cInNhdmUoKVwiIFtkaXNhYmxlZF09XCJpc1NhdmluZ1wiPlxuICAgICAgPHNwYW4gKm5nSWY9XCJpc1NhdmluZ1wiIGNsYXNzPVwic3Bpbm5lci1ib3JkZXIgc3Bpbm5lci1ib3JkZXItc20gbWUtMVwiPjwvc3Bhbj5cbiAgICAgIHt7ICdBYnBVaTo6U2F2ZScgfCBhYnBMb2NhbGl6YXRpb24gfX1cbiAgICA8L2J1dHRvbj5cbiAgPC9uZy10ZW1wbGF0ZT5cbjwvYWJwLW1vZGFsPlxuIl19
|
package/esm2020/lib/components/hit-document-scenarios/hit-document-scenario-routing.module.mjs
ADDED
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { AuthGuard, PermissionGuard } from '@abp/ng.core';
|
|
2
|
+
import { NgModule } from '@angular/core';
|
|
3
|
+
import { RouterModule } from '@angular/router';
|
|
4
|
+
import { HitDocumentScenarioComponent } from './components/hit-document-scenario.component';
|
|
5
|
+
import * as i0 from "@angular/core";
|
|
6
|
+
import * as i1 from "@angular/router";
|
|
7
|
+
const routes = [
|
|
8
|
+
{
|
|
9
|
+
path: '',
|
|
10
|
+
component: HitDocumentScenarioComponent,
|
|
11
|
+
canActivate: [AuthGuard, PermissionGuard],
|
|
12
|
+
},
|
|
13
|
+
];
|
|
14
|
+
export class HitDocumentScenarioRoutingModule {
|
|
15
|
+
}
|
|
16
|
+
HitDocumentScenarioRoutingModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: HitDocumentScenarioRoutingModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
17
|
+
HitDocumentScenarioRoutingModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "14.3.0", ngImport: i0, type: HitDocumentScenarioRoutingModule, imports: [i1.RouterModule], exports: [RouterModule] });
|
|
18
|
+
HitDocumentScenarioRoutingModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: HitDocumentScenarioRoutingModule, imports: [RouterModule.forChild(routes), RouterModule] });
|
|
19
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: HitDocumentScenarioRoutingModule, decorators: [{
|
|
20
|
+
type: NgModule,
|
|
21
|
+
args: [{
|
|
22
|
+
imports: [RouterModule.forChild(routes)],
|
|
23
|
+
exports: [RouterModule],
|
|
24
|
+
}]
|
|
25
|
+
}] });
|
|
26
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGl0LWRvY3VtZW50LXNjZW5hcmlvLXJvdXRpbmcubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZmJkb2N1bWVudGZsb3cvc3JjL2xpYi9jb21wb25lbnRzL2hpdC1kb2N1bWVudC1zY2VuYXJpb3MvaGl0LWRvY3VtZW50LXNjZW5hcmlvLXJvdXRpbmcubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsZUFBZSxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQzFELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFFLFlBQVksRUFBVSxNQUFNLGlCQUFpQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLDhDQUE4QyxDQUFDOzs7QUFFNUYsTUFBTSxNQUFNLEdBQVc7SUFDckI7UUFDRSxJQUFJLEVBQUUsRUFBRTtRQUNSLFNBQVMsRUFBRSw0QkFBNEI7UUFDdkMsV0FBVyxFQUFFLENBQUMsU0FBUyxFQUFFLGVBQWUsQ0FBQztLQUMxQztDQUNGLENBQUM7QUFNRixNQUFNLE9BQU8sZ0NBQWdDOzs2SEFBaEMsZ0NBQWdDOzhIQUFoQyxnQ0FBZ0Msd0NBRmpDLFlBQVk7OEhBRVgsZ0NBQWdDLFlBSGpDLFlBQVksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLEVBQzdCLFlBQVk7MkZBRVgsZ0NBQWdDO2tCQUo1QyxRQUFRO21CQUFDO29CQUNSLE9BQU8sRUFBRSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7b0JBQ3hDLE9BQU8sRUFBRSxDQUFDLFlBQVksQ0FBQztpQkFDeEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBdXRoR3VhcmQsIFBlcm1pc3Npb25HdWFyZCB9IGZyb20gJ0BhYnAvbmcuY29yZSc7XG5pbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgUm91dGVyTW9kdWxlLCBSb3V0ZXMgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgSGl0RG9jdW1lbnRTY2VuYXJpb0NvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9oaXQtZG9jdW1lbnQtc2NlbmFyaW8uY29tcG9uZW50JztcblxuY29uc3Qgcm91dGVzOiBSb3V0ZXMgPSBbXG4gIHtcbiAgICBwYXRoOiAnJyxcbiAgICBjb21wb25lbnQ6IEhpdERvY3VtZW50U2NlbmFyaW9Db21wb25lbnQsXG4gICAgY2FuQWN0aXZhdGU6IFtBdXRoR3VhcmQsIFBlcm1pc3Npb25HdWFyZF0sXG4gIH0sXG5dO1xuXG5ATmdNb2R1bGUoe1xuICBpbXBvcnRzOiBbUm91dGVyTW9kdWxlLmZvckNoaWxkKHJvdXRlcyldLFxuICBleHBvcnRzOiBbUm91dGVyTW9kdWxlXSxcbn0pXG5leHBvcnQgY2xhc3MgSGl0RG9jdW1lbnRTY2VuYXJpb1JvdXRpbmdNb2R1bGUge31cbiJdfQ==
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { CoreModule } from '@abp/ng.core';
|
|
2
|
+
import { ThemeSharedModule } from '@abp/ng.theme.shared';
|
|
3
|
+
import { NgModule } from '@angular/core';
|
|
4
|
+
import { FormsModule } from '@angular/forms';
|
|
5
|
+
import { DxDataGridModule } from 'devextreme-angular';
|
|
6
|
+
import { HitDocumentScenarioComponent } from './components/hit-document-scenario.component';
|
|
7
|
+
import { HitDocumentScenarioRoutingModule } from './hit-document-scenario-routing.module';
|
|
8
|
+
import * as i0 from "@angular/core";
|
|
9
|
+
export class HitDocumentScenarioModule {
|
|
10
|
+
}
|
|
11
|
+
HitDocumentScenarioModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: HitDocumentScenarioModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
12
|
+
HitDocumentScenarioModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "14.3.0", ngImport: i0, type: HitDocumentScenarioModule, declarations: [HitDocumentScenarioComponent], imports: [HitDocumentScenarioRoutingModule, CoreModule, ThemeSharedModule, FormsModule, DxDataGridModule] });
|
|
13
|
+
HitDocumentScenarioModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: HitDocumentScenarioModule, imports: [HitDocumentScenarioRoutingModule, CoreModule, ThemeSharedModule, FormsModule, DxDataGridModule] });
|
|
14
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: HitDocumentScenarioModule, decorators: [{
|
|
15
|
+
type: NgModule,
|
|
16
|
+
args: [{
|
|
17
|
+
declarations: [HitDocumentScenarioComponent],
|
|
18
|
+
imports: [HitDocumentScenarioRoutingModule, CoreModule, ThemeSharedModule, FormsModule, DxDataGridModule],
|
|
19
|
+
}]
|
|
20
|
+
}] });
|
|
21
|
+
export function loadHitDocumentScenarioModuleAsChild() {
|
|
22
|
+
return Promise.resolve(HitDocumentScenarioModule);
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGl0LWRvY3VtZW50LXNjZW5hcmlvLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2ZiZG9jdW1lbnRmbG93L3NyYy9saWIvY29tcG9uZW50cy9oaXQtZG9jdW1lbnQtc2NlbmFyaW9zL2hpdC1kb2N1bWVudC1zY2VuYXJpby5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUMxQyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN6RCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUN0RCxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSw4Q0FBOEMsQ0FBQztBQUM1RixPQUFPLEVBQUUsZ0NBQWdDLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQzs7QUFNMUYsTUFBTSxPQUFPLHlCQUF5Qjs7c0hBQXpCLHlCQUF5Qjt1SEFBekIseUJBQXlCLGlCQUhyQiw0QkFBNEIsYUFDakMsZ0NBQWdDLEVBQUUsVUFBVSxFQUFFLGlCQUFpQixFQUFFLFdBQVcsRUFBRSxnQkFBZ0I7dUhBRTdGLHlCQUF5QixZQUYxQixnQ0FBZ0MsRUFBRSxVQUFVLEVBQUUsaUJBQWlCLEVBQUUsV0FBVyxFQUFFLGdCQUFnQjsyRkFFN0YseUJBQXlCO2tCQUpyQyxRQUFRO21CQUFDO29CQUNSLFlBQVksRUFBRSxDQUFDLDRCQUE0QixDQUFDO29CQUM1QyxPQUFPLEVBQUUsQ0FBQyxnQ0FBZ0MsRUFBRSxVQUFVLEVBQUUsaUJBQWlCLEVBQUUsV0FBVyxFQUFFLGdCQUFnQixDQUFDO2lCQUMxRzs7QUFHRCxNQUFNLFVBQVUsb0NBQW9DO0lBQ2xELE9BQU8sT0FBTyxDQUFDLE9BQU8sQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO0FBQ3BELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb3JlTW9kdWxlIH0gZnJvbSAnQGFicC9uZy5jb3JlJztcbmltcG9ydCB7IFRoZW1lU2hhcmVkTW9kdWxlIH0gZnJvbSAnQGFicC9uZy50aGVtZS5zaGFyZWQnO1xuaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgRHhEYXRhR3JpZE1vZHVsZSB9IGZyb20gJ2RldmV4dHJlbWUtYW5ndWxhcic7XG5pbXBvcnQgeyBIaXREb2N1bWVudFNjZW5hcmlvQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL2hpdC1kb2N1bWVudC1zY2VuYXJpby5jb21wb25lbnQnO1xuaW1wb3J0IHsgSGl0RG9jdW1lbnRTY2VuYXJpb1JvdXRpbmdNb2R1bGUgfSBmcm9tICcuL2hpdC1kb2N1bWVudC1zY2VuYXJpby1yb3V0aW5nLm1vZHVsZSc7XG5cbkBOZ01vZHVsZSh7XG4gIGRlY2xhcmF0aW9uczogW0hpdERvY3VtZW50U2NlbmFyaW9Db21wb25lbnRdLFxuICBpbXBvcnRzOiBbSGl0RG9jdW1lbnRTY2VuYXJpb1JvdXRpbmdNb2R1bGUsIENvcmVNb2R1bGUsIFRoZW1lU2hhcmVkTW9kdWxlLCBGb3Jtc01vZHVsZSwgRHhEYXRhR3JpZE1vZHVsZV0sXG59KVxuZXhwb3J0IGNsYXNzIEhpdERvY3VtZW50U2NlbmFyaW9Nb2R1bGUge31cblxuZXhwb3J0IGZ1bmN0aW9uIGxvYWRIaXREb2N1bWVudFNjZW5hcmlvTW9kdWxlQXNDaGlsZCgpIHtcbiAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShIaXREb2N1bWVudFNjZW5hcmlvTW9kdWxlKTtcbn1cbiJdfQ==
|