@abp/ng.feature-management 7.2.2 → 7.3.0-rc.2
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 +129 -2
- package/{esm2020 → esm2022}/abp-ng.feature-management.mjs +4 -4
- package/esm2022/lib/components/feature-management/feature-management.component.mjs +179 -0
- package/esm2022/lib/components/feature-management-tab/feature-management-tab.component.mjs +25 -0
- package/{esm2020 → esm2022}/lib/components/index.mjs +2 -2
- package/esm2022/lib/directives/free-text-input.directive.mjs +37 -0
- package/{esm2020 → esm2022}/lib/directives/index.mjs +1 -1
- package/{esm2020 → esm2022}/lib/enums/components.mjs +1 -1
- package/{esm2020 → esm2022}/lib/enums/feature-management-tab-names.mjs +1 -1
- package/esm2022/lib/feature-management.module.mjs +39 -0
- package/{esm2020 → esm2022}/lib/models/feature-management.mjs +1 -1
- package/{esm2020 → esm2022}/lib/models/index.mjs +1 -1
- package/{esm2020 → esm2022}/lib/providers/feature-management-settings.provider.mjs +23 -23
- package/{esm2020 → esm2022}/lib/providers/index.mjs +1 -1
- package/{esm2020 → esm2022}/proxy/abp-ng.feature-management-proxy.mjs +4 -4
- package/{esm2020 → esm2022}/proxy/lib/index.mjs +2 -2
- package/esm2022/proxy/lib/proxy/feature-management/features.service.mjs +36 -0
- package/{esm2020 → esm2022}/proxy/lib/proxy/feature-management/index.mjs +2 -2
- package/{esm2020 → esm2022}/proxy/lib/proxy/feature-management/models.mjs +1 -1
- package/{esm2020 → esm2022}/proxy/lib/proxy/validation/index.mjs +2 -2
- package/{esm2020 → esm2022}/proxy/lib/proxy/validation/string-values/index.mjs +1 -1
- package/{esm2020 → esm2022}/proxy/lib/proxy/validation/string-values/models.mjs +1 -1
- package/{esm2020 → esm2022}/proxy/public-api.mjs +1 -1
- package/{esm2020 → esm2022}/public-api.mjs +6 -6
- package/{fesm2015 → fesm2022}/abp-ng.feature-management-proxy.mjs +32 -32
- package/{fesm2015 → fesm2022}/abp-ng.feature-management-proxy.mjs.map +1 -1
- package/{fesm2020 → fesm2022}/abp-ng.feature-management.mjs +261 -261
- package/fesm2022/abp-ng.feature-management.mjs.map +1 -0
- package/index.d.ts +5 -5
- package/lib/components/feature-management/feature-management.component.d.ts +53 -53
- package/lib/components/feature-management-tab/feature-management-tab.component.d.ts +9 -9
- package/lib/components/index.d.ts +2 -2
- package/lib/directives/free-text-input.directive.d.ts +21 -21
- package/lib/directives/index.d.ts +1 -1
- package/lib/enums/components.d.ts +3 -3
- package/lib/enums/feature-management-tab-names.d.ts +3 -3
- package/lib/feature-management.module.d.ts +14 -14
- package/lib/models/feature-management.d.ts +11 -11
- package/lib/models/index.d.ts +1 -1
- package/lib/providers/feature-management-settings.provider.d.ts +8 -8
- package/lib/providers/index.d.ts +1 -1
- package/package.json +11 -19
- package/proxy/index.d.ts +5 -5
- package/proxy/lib/index.d.ts +2 -2
- package/proxy/lib/proxy/feature-management/features.service.d.ts +13 -13
- package/proxy/lib/proxy/feature-management/index.d.ts +2 -2
- package/proxy/lib/proxy/feature-management/models.d.ts +30 -30
- package/proxy/lib/proxy/validation/index.d.ts +2 -2
- package/proxy/lib/proxy/validation/string-values/index.d.ts +1 -1
- package/proxy/lib/proxy/validation/string-values/models.d.ts +11 -11
- package/proxy/public-api.d.ts +1 -1
- package/public-api.d.ts +6 -6
- package/esm2020/lib/components/feature-management/feature-management.component.mjs +0 -178
- package/esm2020/lib/components/feature-management-tab/feature-management-tab.component.mjs +0 -24
- package/esm2020/lib/directives/free-text-input.directive.mjs +0 -36
- package/esm2020/lib/feature-management.module.mjs +0 -38
- package/esm2020/proxy/lib/proxy/feature-management/features.service.mjs +0 -35
- package/fesm2015/abp-ng.feature-management.mjs +0 -285
- package/fesm2015/abp-ng.feature-management.mjs.map +0 -1
- package/fesm2020/abp-ng.feature-management-proxy.mjs +0 -45
- package/fesm2020/abp-ng.feature-management-proxy.mjs.map +0 -1
- package/fesm2020/abp-ng.feature-management.mjs.map +0 -1
- package/proxy/src/lib/proxy/README.md +0 -17
|
@@ -1,178 +0,0 @@
|
|
|
1
|
-
import { ConfigStateService, TrackByService } from '@abp/ng.core';
|
|
2
|
-
import { FeaturesService, } from '@abp/ng.feature-management/proxy';
|
|
3
|
-
import { Confirmation, ConfirmationService, ToasterService, } from '@abp/ng.theme.shared';
|
|
4
|
-
import { Component, EventEmitter, Input, Output } from '@angular/core';
|
|
5
|
-
import { finalize } from 'rxjs/operators';
|
|
6
|
-
import * as i0 from "@angular/core";
|
|
7
|
-
import * as i1 from "@abp/ng.core";
|
|
8
|
-
import * as i2 from "@abp/ng.theme.shared";
|
|
9
|
-
import * as i3 from "@abp/ng.feature-management/proxy";
|
|
10
|
-
import * as i4 from "@angular/common";
|
|
11
|
-
import * as i5 from "@angular/forms";
|
|
12
|
-
import * as i6 from "@ng-bootstrap/ng-bootstrap";
|
|
13
|
-
import * as i7 from "../../directives/free-text-input.directive";
|
|
14
|
-
var ValueTypes;
|
|
15
|
-
(function (ValueTypes) {
|
|
16
|
-
ValueTypes["ToggleStringValueType"] = "ToggleStringValueType";
|
|
17
|
-
ValueTypes["FreeTextStringValueType"] = "FreeTextStringValueType";
|
|
18
|
-
ValueTypes["SelectionStringValueType"] = "SelectionStringValueType";
|
|
19
|
-
})(ValueTypes || (ValueTypes = {}));
|
|
20
|
-
export class FeatureManagementComponent {
|
|
21
|
-
constructor(track, toasterService, service, configState, confirmationService) {
|
|
22
|
-
this.track = track;
|
|
23
|
-
this.toasterService = toasterService;
|
|
24
|
-
this.service = service;
|
|
25
|
-
this.configState = configState;
|
|
26
|
-
this.confirmationService = confirmationService;
|
|
27
|
-
this.groups = [];
|
|
28
|
-
this.valueTypes = ValueTypes;
|
|
29
|
-
this.visibleChange = new EventEmitter();
|
|
30
|
-
this.modalBusy = false;
|
|
31
|
-
}
|
|
32
|
-
get visible() {
|
|
33
|
-
return this._visible;
|
|
34
|
-
}
|
|
35
|
-
set visible(value) {
|
|
36
|
-
if (this._visible === value)
|
|
37
|
-
return;
|
|
38
|
-
this._visible = value;
|
|
39
|
-
this.visibleChange.emit(value);
|
|
40
|
-
if (value)
|
|
41
|
-
this.openModal();
|
|
42
|
-
}
|
|
43
|
-
openModal() {
|
|
44
|
-
if (!this.providerName) {
|
|
45
|
-
throw new Error('providerName is required.');
|
|
46
|
-
}
|
|
47
|
-
this.getFeatures();
|
|
48
|
-
}
|
|
49
|
-
getFeatures() {
|
|
50
|
-
this.service.get(this.providerName, this.providerKey).subscribe(res => {
|
|
51
|
-
if (!res.groups?.length)
|
|
52
|
-
return;
|
|
53
|
-
this.groups = res.groups.map(({ name, displayName }) => ({ name, displayName }));
|
|
54
|
-
this.selectedGroupDisplayName = this.groups[0].displayName;
|
|
55
|
-
this.features = res.groups.reduce((acc, val) => ({
|
|
56
|
-
...acc,
|
|
57
|
-
[val.name]: mapFeatures(val.features, document.body.dir),
|
|
58
|
-
}), {});
|
|
59
|
-
});
|
|
60
|
-
}
|
|
61
|
-
save() {
|
|
62
|
-
if (this.modalBusy)
|
|
63
|
-
return;
|
|
64
|
-
const changedFeatures = [];
|
|
65
|
-
Object.keys(this.features).forEach(key => {
|
|
66
|
-
this.features[key].forEach(feature => {
|
|
67
|
-
if (feature.value !== feature.initialValue)
|
|
68
|
-
changedFeatures.push({ name: feature.name, value: `${feature.value}` });
|
|
69
|
-
});
|
|
70
|
-
});
|
|
71
|
-
if (!changedFeatures.length) {
|
|
72
|
-
this.visible = false;
|
|
73
|
-
return;
|
|
74
|
-
}
|
|
75
|
-
this.modalBusy = true;
|
|
76
|
-
this.service
|
|
77
|
-
.update(this.providerName, this.providerKey, { features: changedFeatures })
|
|
78
|
-
.pipe(finalize(() => (this.modalBusy = false)))
|
|
79
|
-
.subscribe(() => {
|
|
80
|
-
this.visible = false;
|
|
81
|
-
if (!this.providerKey) {
|
|
82
|
-
// to refresh host's features
|
|
83
|
-
this.configState.refreshAppState().subscribe();
|
|
84
|
-
}
|
|
85
|
-
});
|
|
86
|
-
}
|
|
87
|
-
resetToDefault() {
|
|
88
|
-
this.confirmationService
|
|
89
|
-
.warn('AbpFeatureManagement::AreYouSureToResetToDefault', 'AbpFeatureManagement::AreYouSure')
|
|
90
|
-
.subscribe((status) => {
|
|
91
|
-
if (status === Confirmation.Status.confirm) {
|
|
92
|
-
this.service.delete(this.providerName, this.providerKey).subscribe(() => {
|
|
93
|
-
this.toasterService.success('AbpFeatureManagement::ResetedToDefault');
|
|
94
|
-
this.visible = false;
|
|
95
|
-
if (!this.providerKey) {
|
|
96
|
-
// to refresh host's features
|
|
97
|
-
this.configState.refreshAppState().subscribe();
|
|
98
|
-
}
|
|
99
|
-
});
|
|
100
|
-
}
|
|
101
|
-
});
|
|
102
|
-
}
|
|
103
|
-
onCheckboxClick(val, feature) {
|
|
104
|
-
if (val) {
|
|
105
|
-
this.checkToggleAncestors(feature);
|
|
106
|
-
}
|
|
107
|
-
else {
|
|
108
|
-
this.uncheckToggleDescendants(feature);
|
|
109
|
-
}
|
|
110
|
-
}
|
|
111
|
-
uncheckToggleDescendants(feature) {
|
|
112
|
-
this.findAllDescendantsOfByType(feature, ValueTypes.ToggleStringValueType).forEach(node => this.setFeatureValue(node, false));
|
|
113
|
-
}
|
|
114
|
-
checkToggleAncestors(feature) {
|
|
115
|
-
this.findAllAncestorsOfByType(feature, ValueTypes.ToggleStringValueType).forEach(node => this.setFeatureValue(node, true));
|
|
116
|
-
}
|
|
117
|
-
findAllAncestorsOfByType(feature, type) {
|
|
118
|
-
let parent = this.findParentByType(feature, type);
|
|
119
|
-
const ancestors = [];
|
|
120
|
-
while (parent) {
|
|
121
|
-
ancestors.push(parent);
|
|
122
|
-
parent = this.findParentByType(parent, type);
|
|
123
|
-
}
|
|
124
|
-
return ancestors;
|
|
125
|
-
}
|
|
126
|
-
findAllDescendantsOfByType(feature, type) {
|
|
127
|
-
const descendants = [];
|
|
128
|
-
const queue = [feature];
|
|
129
|
-
while (queue.length) {
|
|
130
|
-
const node = queue.pop();
|
|
131
|
-
const newDescendants = this.findChildrenByType(node, type);
|
|
132
|
-
descendants.push(...newDescendants);
|
|
133
|
-
queue.push(...newDescendants);
|
|
134
|
-
}
|
|
135
|
-
return descendants;
|
|
136
|
-
}
|
|
137
|
-
findParentByType(feature, type) {
|
|
138
|
-
return this.getCurrentGroup().find(f => f.valueType.name === type && f.name === feature.parentName);
|
|
139
|
-
}
|
|
140
|
-
findChildrenByType(feature, type) {
|
|
141
|
-
return this.getCurrentGroup().filter(f => f.valueType.name === type && f.parentName === feature.name);
|
|
142
|
-
}
|
|
143
|
-
getCurrentGroup() {
|
|
144
|
-
return this.features[this.selectedGroupDisplayName] ?? [];
|
|
145
|
-
}
|
|
146
|
-
setFeatureValue(feature, val) {
|
|
147
|
-
feature.value = val;
|
|
148
|
-
}
|
|
149
|
-
}
|
|
150
|
-
FeatureManagementComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: FeatureManagementComponent, deps: [{ token: i1.TrackByService }, { token: i2.ToasterService }, { token: i3.FeaturesService }, { token: i1.ConfigStateService }, { token: i2.ConfirmationService }], target: i0.ɵɵFactoryTarget.Component });
|
|
151
|
-
FeatureManagementComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.4", type: FeatureManagementComponent, selector: "abp-feature-management", inputs: { providerKey: "providerKey", providerName: "providerName", visible: "visible" }, outputs: { visibleChange: "visibleChange" }, exportAs: ["abpFeatureManagement"], ngImport: i0, template: "<abp-modal *ngIf=\"visible\" [(visible)]=\"visible\" [busy]=\"modalBusy\" [options]=\"{ size: 'lg' }\">\r\n <ng-template #abpHeader>\r\n <h3>{{ 'AbpFeatureManagement::Features' | abpLocalization }}</h3>\r\n </ng-template>\r\n\r\n <ng-template #abpBody>\r\n <div class=\"row\">\r\n <ng-container *ngIf=\"groups.length\">\r\n <div class=\"col-md-4\">\r\n <ul\r\n ngbNav\r\n #nav=\"ngbNav\"\r\n [(activeId)]=\"selectedGroupDisplayName\"\r\n class=\"nav-pills\"\r\n orientation=\"vertical\"\r\n >\r\n <li\r\n *ngFor=\"let group of groups; trackBy: track.by('name')\"\r\n [ngbNavItem]=\"group.displayName\"\r\n >\r\n <a ngbNavLink>{{ group.displayName }}</a>\r\n <ng-template ngbNavContent>\r\n <h4>{{ selectedGroupDisplayName }}</h4>\r\n <hr class=\"mt-2 mb-3\" />\r\n\r\n <div\r\n class=\"mt-2\"\r\n *ngFor=\"\r\n let feature of features[group.name];\r\n let i = index;\r\n trackBy: track.by('id')\r\n \"\r\n [ngStyle]=\"feature.style\"\r\n [ngSwitch]=\"feature.valueType?.name\"\r\n (keyup.enter)=\"save()\"\r\n >\r\n <ng-container *ngSwitchCase=\"valueTypes.ToggleStringValueType\">\r\n <div class=\"form-check\">\r\n <input\r\n class=\"form-check-input\"\r\n type=\"checkbox\"\r\n [id]=\"feature.name\"\r\n [(ngModel)]=\"feature.value\"\r\n (ngModelChange)=\"onCheckboxClick($event, feature)\"\r\n />\r\n\r\n <label class=\"form-check-label\" [htmlFor]=\"feature.name\">{{\r\n feature.displayName\r\n }}</label>\r\n <ng-container\r\n *ngTemplateOutlet=\"descTmp; context: { $implicit: feature.description }\"\r\n ></ng-container>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"valueTypes.FreeTextStringValueType\">\r\n <div class=\"mb-3 form-group\">\r\n <label [htmlFor]=\"feature.name\" class=\"form-label\">{{\r\n feature.displayName\r\n }}</label>\r\n <input\r\n class=\"form-control\"\r\n type=\"text\"\r\n [id]=\"feature.name\"\r\n [(ngModel)]=\"feature.value\"\r\n [abpFeatureManagementFreeText]=\"feature\"\r\n />\r\n\r\n <ng-container\r\n *ngTemplateOutlet=\"descTmp; context: { $implicit: feature.description }\"\r\n ></ng-container>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"valueTypes.SelectionStringValueType\">\r\n <ng-container *ngIf=\"feature.valueType.itemSource?.items?.length\">\r\n <div class=\"mb-3 form-group\">\r\n <label [htmlFor]=\"feature.name\" class=\"form-label\">{{\r\n feature.displayName\r\n }}</label>\r\n <select class=\"form-select\" [id]=\"feature.name\" [(ngModel)]=\"feature.value\">\r\n <option\r\n *ngFor=\"\r\n let item of feature.valueType.itemSource?.items;\r\n trackBy: track.by('value')\r\n \"\r\n [ngValue]=\"item.value\"\r\n >\r\n {{\r\n item.displayText?.resourceName + '::' + item.displayText?.name\r\n | abpLocalization\r\n }}\r\n </option>\r\n </select>\r\n <ng-container\r\n *ngTemplateOutlet=\"descTmp; context: { $implicit: feature.description }\"\r\n ></ng-container>\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n <ng-container *ngSwitchDefault>{{ feature.displayName }}</ng-container>\r\n </div>\r\n </ng-template>\r\n </li>\r\n </ul>\r\n </div>\r\n\r\n <ng-template #descTmp let-description>\r\n <small *ngIf=\"description\" class=\"d-block form-text text-muted\">{{ description }}</small>\r\n </ng-template>\r\n\r\n <div class=\"col-md-8\"><div [ngbNavOutlet]=\"nav\"></div></div>\r\n </ng-container>\r\n\r\n <div class=\"col\" *ngIf=\"!groups.length\">\r\n {{ 'AbpFeatureManagement::NoFeatureFoundMessage' | abpLocalization }}\r\n </div>\r\n </div>\r\n </ng-template>\r\n\r\n <ng-template #abpFooter>\r\n <abp-button\r\n *ngIf=\"groups.length\"\r\n iconClass=\"fa fa-refresh\"\r\n [disabled]=\"modalBusy\"\r\n (click)=\"resetToDefault()\"\r\n >\r\n {{ 'AbpFeatureManagement::ResetToDefault' | abpLocalization }}\r\n </abp-button>\r\n\r\n <button abpClose type=\"button\" class=\"btn btn-secondary\">\r\n {{ 'AbpFeatureManagement::Cancel' | abpLocalization }}\r\n </button>\r\n <abp-button\r\n *ngIf=\"groups.length\"\r\n iconClass=\"fa fa-check\"\r\n [disabled]=\"modalBusy\"\r\n (click)=\"save()\"\r\n >\r\n {{ 'AbpFeatureManagement::Save' | abpLocalization }}\r\n </abp-button>\r\n </ng-template>\r\n</abp-modal>\r\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: i4.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i4.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i4.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i4.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i4.NgSwitchDefault, selector: "[ngSwitchDefault]" }, { 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.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i2.ButtonComponent, selector: "abp-button", inputs: ["buttonId", "buttonClass", "buttonType", "formName", "iconClass", "loading", "disabled", "attributes"], outputs: ["click", "focus", "blur", "abpClick", "abpFocus", "abpBlur"] }, { kind: "component", type: i2.ModalComponent, selector: "abp-modal", inputs: ["visible", "busy", "options", "suppressUnsavedChangesWarning"], outputs: ["visibleChange", "init", "appear", "disappear"] }, { kind: "directive", type: i2.ModalCloseDirective, selector: "[abpClose]" }, { kind: "directive", type: i6.NgbNavContent, selector: "ng-template[ngbNavContent]" }, { kind: "directive", type: i6.NgbNav, selector: "[ngbNav]", inputs: ["activeId", "animation", "destroyOnHide", "orientation", "roles", "keyboard"], outputs: ["activeIdChange", "shown", "hidden", "navChange"], exportAs: ["ngbNav"] }, { kind: "directive", type: i6.NgbNavItem, selector: "[ngbNavItem]", inputs: ["destroyOnHide", "disabled", "domId", "ngbNavItem"], outputs: ["shown", "hidden"], exportAs: ["ngbNavItem"] }, { kind: "directive", type: i6.NgbNavItemRole, selector: "[ngbNavItem]:not(ng-container)" }, { kind: "directive", type: i6.NgbNavLink, selector: "a[ngbNavLink]" }, { kind: "directive", type: i6.NgbNavLinkBase, selector: "[ngbNavLink]" }, { kind: "component", type: i6.NgbNavOutlet, selector: "[ngbNavOutlet]", inputs: ["paneRole", "ngbNavOutlet"] }, { kind: "directive", type: i7.FreeTextInputDirective, selector: "input[abpFeatureManagementFreeText]", inputs: ["abpFeatureManagementFreeText"], exportAs: ["inputAbpFeatureManagementFreeText"] }, { kind: "pipe", type: i1.LocalizationPipe, name: "abpLocalization" }] });
|
|
152
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: FeatureManagementComponent, decorators: [{
|
|
153
|
-
type: Component,
|
|
154
|
-
args: [{ selector: 'abp-feature-management', exportAs: 'abpFeatureManagement', template: "<abp-modal *ngIf=\"visible\" [(visible)]=\"visible\" [busy]=\"modalBusy\" [options]=\"{ size: 'lg' }\">\r\n <ng-template #abpHeader>\r\n <h3>{{ 'AbpFeatureManagement::Features' | abpLocalization }}</h3>\r\n </ng-template>\r\n\r\n <ng-template #abpBody>\r\n <div class=\"row\">\r\n <ng-container *ngIf=\"groups.length\">\r\n <div class=\"col-md-4\">\r\n <ul\r\n ngbNav\r\n #nav=\"ngbNav\"\r\n [(activeId)]=\"selectedGroupDisplayName\"\r\n class=\"nav-pills\"\r\n orientation=\"vertical\"\r\n >\r\n <li\r\n *ngFor=\"let group of groups; trackBy: track.by('name')\"\r\n [ngbNavItem]=\"group.displayName\"\r\n >\r\n <a ngbNavLink>{{ group.displayName }}</a>\r\n <ng-template ngbNavContent>\r\n <h4>{{ selectedGroupDisplayName }}</h4>\r\n <hr class=\"mt-2 mb-3\" />\r\n\r\n <div\r\n class=\"mt-2\"\r\n *ngFor=\"\r\n let feature of features[group.name];\r\n let i = index;\r\n trackBy: track.by('id')\r\n \"\r\n [ngStyle]=\"feature.style\"\r\n [ngSwitch]=\"feature.valueType?.name\"\r\n (keyup.enter)=\"save()\"\r\n >\r\n <ng-container *ngSwitchCase=\"valueTypes.ToggleStringValueType\">\r\n <div class=\"form-check\">\r\n <input\r\n class=\"form-check-input\"\r\n type=\"checkbox\"\r\n [id]=\"feature.name\"\r\n [(ngModel)]=\"feature.value\"\r\n (ngModelChange)=\"onCheckboxClick($event, feature)\"\r\n />\r\n\r\n <label class=\"form-check-label\" [htmlFor]=\"feature.name\">{{\r\n feature.displayName\r\n }}</label>\r\n <ng-container\r\n *ngTemplateOutlet=\"descTmp; context: { $implicit: feature.description }\"\r\n ></ng-container>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"valueTypes.FreeTextStringValueType\">\r\n <div class=\"mb-3 form-group\">\r\n <label [htmlFor]=\"feature.name\" class=\"form-label\">{{\r\n feature.displayName\r\n }}</label>\r\n <input\r\n class=\"form-control\"\r\n type=\"text\"\r\n [id]=\"feature.name\"\r\n [(ngModel)]=\"feature.value\"\r\n [abpFeatureManagementFreeText]=\"feature\"\r\n />\r\n\r\n <ng-container\r\n *ngTemplateOutlet=\"descTmp; context: { $implicit: feature.description }\"\r\n ></ng-container>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"valueTypes.SelectionStringValueType\">\r\n <ng-container *ngIf=\"feature.valueType.itemSource?.items?.length\">\r\n <div class=\"mb-3 form-group\">\r\n <label [htmlFor]=\"feature.name\" class=\"form-label\">{{\r\n feature.displayName\r\n }}</label>\r\n <select class=\"form-select\" [id]=\"feature.name\" [(ngModel)]=\"feature.value\">\r\n <option\r\n *ngFor=\"\r\n let item of feature.valueType.itemSource?.items;\r\n trackBy: track.by('value')\r\n \"\r\n [ngValue]=\"item.value\"\r\n >\r\n {{\r\n item.displayText?.resourceName + '::' + item.displayText?.name\r\n | abpLocalization\r\n }}\r\n </option>\r\n </select>\r\n <ng-container\r\n *ngTemplateOutlet=\"descTmp; context: { $implicit: feature.description }\"\r\n ></ng-container>\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n <ng-container *ngSwitchDefault>{{ feature.displayName }}</ng-container>\r\n </div>\r\n </ng-template>\r\n </li>\r\n </ul>\r\n </div>\r\n\r\n <ng-template #descTmp let-description>\r\n <small *ngIf=\"description\" class=\"d-block form-text text-muted\">{{ description }}</small>\r\n </ng-template>\r\n\r\n <div class=\"col-md-8\"><div [ngbNavOutlet]=\"nav\"></div></div>\r\n </ng-container>\r\n\r\n <div class=\"col\" *ngIf=\"!groups.length\">\r\n {{ 'AbpFeatureManagement::NoFeatureFoundMessage' | abpLocalization }}\r\n </div>\r\n </div>\r\n </ng-template>\r\n\r\n <ng-template #abpFooter>\r\n <abp-button\r\n *ngIf=\"groups.length\"\r\n iconClass=\"fa fa-refresh\"\r\n [disabled]=\"modalBusy\"\r\n (click)=\"resetToDefault()\"\r\n >\r\n {{ 'AbpFeatureManagement::ResetToDefault' | abpLocalization }}\r\n </abp-button>\r\n\r\n <button abpClose type=\"button\" class=\"btn btn-secondary\">\r\n {{ 'AbpFeatureManagement::Cancel' | abpLocalization }}\r\n </button>\r\n <abp-button\r\n *ngIf=\"groups.length\"\r\n iconClass=\"fa fa-check\"\r\n [disabled]=\"modalBusy\"\r\n (click)=\"save()\"\r\n >\r\n {{ 'AbpFeatureManagement::Save' | abpLocalization }}\r\n </abp-button>\r\n </ng-template>\r\n</abp-modal>\r\n" }]
|
|
155
|
-
}], ctorParameters: function () { return [{ type: i1.TrackByService }, { type: i2.ToasterService }, { type: i3.FeaturesService }, { type: i1.ConfigStateService }, { type: i2.ConfirmationService }]; }, propDecorators: { providerKey: [{
|
|
156
|
-
type: Input
|
|
157
|
-
}], providerName: [{
|
|
158
|
-
type: Input
|
|
159
|
-
}], visible: [{
|
|
160
|
-
type: Input
|
|
161
|
-
}], visibleChange: [{
|
|
162
|
-
type: Output
|
|
163
|
-
}] } });
|
|
164
|
-
function mapFeatures(features, dir) {
|
|
165
|
-
const margin = `margin-${dir === 'rtl' ? 'right' : 'left'}.px`;
|
|
166
|
-
return features.map(feature => {
|
|
167
|
-
const value = feature.valueType?.name === ValueTypes.ToggleStringValueType
|
|
168
|
-
? (feature.value || '').toLowerCase() === 'true'
|
|
169
|
-
: feature.value;
|
|
170
|
-
return {
|
|
171
|
-
...feature,
|
|
172
|
-
value,
|
|
173
|
-
initialValue: value,
|
|
174
|
-
style: { [margin]: feature.depth * 20 },
|
|
175
|
-
};
|
|
176
|
-
});
|
|
177
|
-
}
|
|
178
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmVhdHVyZS1tYW5hZ2VtZW50LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2ZlYXR1cmUtbWFuYWdlbWVudC9zcmMvbGliL2NvbXBvbmVudHMvZmVhdHVyZS1tYW5hZ2VtZW50L2ZlYXR1cmUtbWFuYWdlbWVudC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9mZWF0dXJlLW1hbmFnZW1lbnQvc3JjL2xpYi9jb21wb25lbnRzL2ZlYXR1cmUtbWFuYWdlbWVudC9mZWF0dXJlLW1hbmFnZW1lbnQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGtCQUFrQixFQUFFLGNBQWMsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUNsRSxPQUFPLEVBR0wsZUFBZSxHQUVoQixNQUFNLGtDQUFrQyxDQUFDO0FBQzFDLE9BQU8sRUFDTCxZQUFZLEVBQ1osbUJBQW1CLEVBRW5CLGNBQWMsR0FDZixNQUFNLHNCQUFzQixDQUFDO0FBQzlCLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDdkUsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7Ozs7Ozs7QUFHMUMsSUFBSyxVQUlKO0FBSkQsV0FBSyxVQUFVO0lBQ2IsNkRBQStDLENBQUE7SUFDL0MsaUVBQW1ELENBQUE7SUFDbkQsbUVBQXFELENBQUE7QUFDdkQsQ0FBQyxFQUpJLFVBQVUsS0FBVixVQUFVLFFBSWQ7QUFPRCxNQUFNLE9BQU8sMEJBQTBCO0lBd0NyQyxZQUNrQixLQUFxQixFQUM3QixjQUE4QixFQUM1QixPQUF3QixFQUN4QixXQUErQixFQUMvQixtQkFBd0M7UUFKbEMsVUFBSyxHQUFMLEtBQUssQ0FBZ0I7UUFDN0IsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FB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TFUsMEJBQTBCOzJHQUExQiwwQkFBMEIseU9DNUJ2Qyx5N0xBNklBOzJGRGpIYSwwQkFBMEI7a0JBTHRDLFNBQVM7K0JBQ0Usd0JBQXdCLFlBRXhCLHNCQUFzQjttT0FRaEMsV0FBVztzQkFEVixLQUFLO2dCQUlOLFlBQVk7c0JBRFgsS0FBSztnQkFnQkYsT0FBTztzQkFEVixLQUFLO2dCQWFhLGFBQWE7c0JBQS9CLE1BQU07O0FBcUpULFNBQVMsV0FBVyxDQUFDLFFBQXNCLEVBQUUsR0FBb0I7SUFDL0QsTUFBTSxNQUFNLEdBQUcsVUFBVSxHQUFHLEtBQUssS0FBSyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLE1BQU0sS0FBSyxDQUFDO0lBRS9ELE9BQU8sUUFBUSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsRUFBRTtRQUM1QixNQUFNLEtBQUssR0FDVCxPQUFPLENBQUMsU0FBUyxFQUFFLElBQUksS0FBSyxVQUFVLENBQUMscUJBQXFCO1lBQzFELENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLElBQUksRUFBRSxDQUFDLENBQUMsV0FBVyxFQUFFLEtBQUssTUFBTTtZQUNoRCxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQztRQUVwQixPQUFPO1lBQ0wsR0FBRyxPQUFPO1lBQ1YsS0FBSztZQUNMLFlBQVksRUFBRSxLQUFLO1lBQ25CLEtBQUssRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLEVBQUUsT0FBTyxDQUFDLEtBQUssR0FBRyxFQUFFLEVBQUU7U0FDeEMsQ0FBQztJQUNKLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbmZpZ1N0YXRlU2VydmljZSwgVHJhY2tCeVNlcnZpY2UgfSBmcm9tICdAYWJwL25nLmNvcmUnO1xyXG5pbXBvcnQge1xyXG4gIEZlYXR1cmVEdG8sXHJcbiAgRmVhdHVyZUdyb3VwRHRvLFxyXG4gIEZlYXR1cmVzU2VydmljZSxcclxuICBVcGRhdGVGZWF0dXJlRHRvLFxyXG59IGZyb20gJ0BhYnAvbmcuZmVhdHVyZS1tYW5hZ2VtZW50L3Byb3h5JztcclxuaW1wb3J0IHtcclxuICBDb25maXJtYXRpb24sXHJcbiAgQ29uZmlybWF0aW9uU2VydmljZSxcclxuICBMb2NhbGVEaXJlY3Rpb24sXHJcbiAgVG9hc3RlclNlcnZpY2UsXHJcbn0gZnJvbSAnQGFicC9uZy50aGVtZS5zaGFyZWQnO1xyXG5pbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBmaW5hbGl6ZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgRmVhdHVyZU1hbmFnZW1lbnQgfSBmcm9tICcuLi8uLi9tb2RlbHMvZmVhdHVyZS1tYW5hZ2VtZW50JztcclxuXHJcbmVudW0gVmFsdWVUeXBlcyB7XHJcbiAgVG9nZ2xlU3RyaW5nVmFsdWVUeXBlID0gJ1RvZ2dsZVN0cmluZ1ZhbHVlVHlwZScsXHJcbiAgRnJlZVRleHRTdHJpbmdWYWx1ZVR5cGUgPSAnRnJlZVRleHRTdHJpbmdWYWx1ZVR5cGUnLFxyXG4gIFNlbGVjdGlvblN0cmluZ1ZhbHVlVHlwZSA9ICdTZWxlY3Rpb25TdHJpbmdWYWx1ZVR5cGUnLFxyXG59XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2FicC1mZWF0dXJlLW1hbmFnZW1lbnQnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9mZWF0dXJlLW1hbmFnZW1lbnQuY29tcG9uZW50Lmh0bWwnLFxyXG4gIGV4cG9ydEFzOiAnYWJwRmVhdHVyZU1hbmFnZW1lbnQnLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgRmVhdHVyZU1hbmFnZW1lbnRDb21wb25lbnRcclxuICBpbXBsZW1lbnRzXHJcbiAgICBGZWF0dXJlTWFuYWdlbWVudC5GZWF0dXJlTWFuYWdlbWVudENvbXBvbmVudElucHV0cyxcclxuICAgIEZlYXR1cmVNYW5hZ2VtZW50LkZlYXR1cmVNYW5hZ2VtZW50Q29tcG9uZW50T3V0cHV0c1xyXG57XHJcbiAgQElucHV0KClcclxuICBwcm92aWRlcktleTogc3RyaW5nO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIHByb3ZpZGVyTmFtZTogc3RyaW5nO1xyXG5cclxuICBzZWxlY3RlZEdyb3VwRGlzcGxheU5hbWU6IHN0cmluZztcclxuXHJcbiAgZ3JvdXBzOiBQaWNrPEZlYXR1cmVHcm91cER0bywgJ25hbWUnIHwgJ2Rpc3BsYXlOYW1lJz5bXSA9IFtdO1xyXG5cclxuICBmZWF0dXJlczoge1xyXG4gICAgW2dyb3VwOiBzdHJpbmddOiBBcnJheTxGZWF0dXJlRHRvICYgeyBzdHlsZT86IHsgW2tleTogc3RyaW5nXTogbnVtYmVyIH07IGluaXRpYWxWYWx1ZTogYW55IH0+O1xyXG4gIH07XHJcblxyXG4gIHZhbHVlVHlwZXMgPSBWYWx1ZVR5cGVzO1xyXG5cclxuICBwcm90ZWN0ZWQgX3Zpc2libGU7XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgZ2V0IHZpc2libGUoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5fdmlzaWJsZTtcclxuICB9XHJcblxyXG4gIHNldCB2aXNpYmxlKHZhbHVlOiBib29sZWFuKSB7XHJcbiAgICBpZiAodGhpcy5fdmlzaWJsZSA9PT0gdmFsdWUpIHJldHVybjtcclxuXHJcbiAgICB0aGlzLl92aXNpYmxlID0gdmFsdWU7XHJcbiAgICB0aGlzLnZpc2libGVDaGFuZ2UuZW1pdCh2YWx1ZSk7XHJcbiAgICBpZiAodmFsdWUpIHRoaXMub3Blbk1vZGFsKCk7XHJcbiAgfVxyXG5cclxuICBAT3V0cHV0KCkgcmVhZG9ubHkgdmlzaWJsZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcclxuXHJcbiAgbW9kYWxCdXN5ID0gZmFsc2U7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHVibGljIHJlYWRvbmx5IHRyYWNrOiBUcmFja0J5U2VydmljZSxcclxuICAgIHByaXZhdGUgdG9hc3RlclNlcnZpY2U6IFRvYXN0ZXJTZXJ2aWNlLFxyXG4gICAgcHJvdGVjdGVkIHNlcnZpY2U6IEZlYXR1cmVzU2VydmljZSxcclxuICAgIHByb3RlY3RlZCBjb25maWdTdGF0ZTogQ29uZmlnU3RhdGVTZXJ2aWNlLFxyXG4gICAgcHJvdGVjdGVkIGNvbmZpcm1hdGlvblNlcnZpY2U6IENvbmZpcm1hdGlvblNlcnZpY2UsXHJcbiAgKSB7fVxyXG5cclxuICBvcGVuTW9kYWwoKSB7XHJcbiAgICBpZiAoIXRoaXMucHJvdmlkZXJOYW1lKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcigncHJvdmlkZXJOYW1lIGlzIHJlcXVpcmVkLicpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuZ2V0RmVhdHVyZXMoKTtcclxuICB9XHJcblxyXG4gIGdldEZlYXR1cmVzKCkge1xyXG4gICAgdGhpcy5zZXJ2aWNlLmdldCh0aGlzLnByb3ZpZGVyTmFtZSwgdGhpcy5wcm92aWRlcktleSkuc3Vic2NyaWJlKHJlcyA9PiB7XHJcbiAgICAgIGlmICghcmVzLmdyb3Vwcz8ubGVuZ3RoKSByZXR1cm47XHJcbiAgICAgIHRoaXMuZ3JvdXBzID0gcmVzLmdyb3Vwcy5tYXAoKHsgbmFtZSwgZGlzcGxheU5hbWUgfSkgPT4gKHsgbmFtZSwgZGlzcGxheU5hbWUgfSkpO1xyXG4gICAgICB0aGlzLnNlbGVjdGVkR3JvdXBEaXNwbGF5TmFtZSA9IHRoaXMuZ3JvdXBzWzBdLmRpc3BsYXlOYW1lO1xyXG4gICAgICB0aGlzLmZlYXR1cmVzID0gcmVzLmdyb3Vwcy5yZWR1Y2UoXHJcbiAgICAgICAgKGFjYywgdmFsKSA9PiAoe1xyXG4gICAgICAgICAgLi4uYWNjLFxyXG4gICAgICAgICAgW3ZhbC5uYW1lXTogbWFwRmVhdHVyZXModmFsLmZlYXR1cmVzLCBkb2N1bWVudC5ib2R5LmRpciBhcyBMb2NhbGVEaXJlY3Rpb24pLFxyXG4gICAgICAgIH0pLFxyXG4gICAgICAgIHt9LFxyXG4gICAgICApO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBzYXZlKCkge1xyXG4gICAgaWYgKHRoaXMubW9kYWxCdXN5KSByZXR1cm47XHJcblxyXG4gICAgY29uc3QgY2hhbmdlZEZlYXR1cmVzID0gW10gYXMgVXBkYXRlRmVhdHVyZUR0b1tdO1xyXG5cclxuICAgIE9iamVjdC5rZXlzKHRoaXMuZmVhdHVyZXMpLmZvckVhY2goa2V5ID0+IHtcclxuICAgICAgdGhpcy5mZWF0dXJlc1trZXldLmZvckVhY2goZmVhdHVyZSA9PiB7XHJcbiAgICAgICAgaWYgKGZlYXR1cmUudmFsdWUgIT09IGZlYXR1cmUuaW5pdGlhbFZhbHVlKVxyXG4gICAgICAgICAgY2hhbmdlZEZlYXR1cmVzLnB1c2goeyBuYW1lOiBmZWF0dXJlLm5hbWUsIHZhbHVlOiBgJHtmZWF0dXJlLnZhbHVlfWAgfSk7XHJcbiAgICAgIH0pO1xyXG4gICAgfSk7XHJcblxyXG4gICAgaWYgKCFjaGFuZ2VkRmVhdHVyZXMubGVuZ3RoKSB7XHJcbiAgICAgIHRoaXMudmlzaWJsZSA9IGZhbHNlO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5tb2RhbEJ1c3kgPSB0cnVlO1xyXG4gICAgdGhpcy5zZXJ2aWNlXHJcbiAgICAgIC51cGRhdGUodGhpcy5wcm92aWRlck5hbWUsIHRoaXMucHJvdmlkZXJLZXksIHsgZmVhdHVyZXM6IGNoYW5nZWRGZWF0dXJlcyB9KVxyXG4gICAgICAucGlwZShmaW5hbGl6ZSgoKSA9PiAodGhpcy5tb2RhbEJ1c3kgPSBmYWxzZSkpKVxyXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICB0aGlzLnZpc2libGUgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLnByb3ZpZGVyS2V5KSB7XHJcbiAgICAgICAgICAvLyB0byByZWZyZXNoIGhvc3QncyBmZWF0dXJlc1xyXG4gICAgICAgICAgdGhpcy5jb25maWdTdGF0ZS5yZWZyZXNoQXBwU3RhdGUoKS5zdWJzY3JpYmUoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcmVzZXRUb0RlZmF1bHQoKSB7XHJcbiAgICB0aGlzLmNvbmZpcm1hdGlvblNlcnZpY2VcclxuICAgICAgLndhcm4oJ0FicEZlYXR1cmVNYW5hZ2VtZW50OjpBcmVZb3VTdXJlVG9SZXNldFRvRGVmYXVsdCcsICdBYnBGZWF0dXJlTWFuYWdlbWVudDo6QXJlWW91U3VyZScpXHJcbiAgICAgIC5zdWJzY3JpYmUoKHN0YXR1czogQ29uZmlybWF0aW9uLlN0YXR1cykgPT4ge1xyXG4gICAgICAgIGlmIChzdGF0dXMgPT09IENvbmZpcm1hdGlvbi5TdGF0dXMuY29uZmlybSkge1xyXG4gICAgICAgICAgdGhpcy5zZXJ2aWNlLmRlbGV0ZSh0aGlzLnByb3ZpZGVyTmFtZSwgdGhpcy5wcm92aWRlcktleSkuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy50b2FzdGVyU2VydmljZS5zdWNjZXNzKCdBYnBGZWF0dXJlTWFuYWdlbWVudDo6UmVzZXRlZFRvRGVmYXVsdCcpO1xyXG4gICAgICAgICAgICB0aGlzLnZpc2libGUgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgICAgIGlmICghdGhpcy5wcm92aWRlcktleSkge1xyXG4gICAgICAgICAgICAgIC8vIHRvIHJlZnJlc2ggaG9zdCdzIGZlYXR1cmVzXHJcbiAgICAgICAgICAgICAgdGhpcy5jb25maWdTdGF0ZS5yZWZyZXNoQXBwU3RhdGUoKS5zdWJzY3JpYmUoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIG9uQ2hlY2tib3hDbGljayh2YWw6IGJvb2xlYW4sIGZlYXR1cmU6IEZlYXR1cmVEdG8pIHtcclxuICAgIGlmICh2YWwpIHtcclxuICAgICAgdGhpcy5jaGVja1RvZ2dsZUFuY2VzdG9ycyhmZWF0dXJlKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMudW5jaGVja1RvZ2dsZURlc2NlbmRhbnRzKGZlYXR1cmUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB1bmNoZWNrVG9nZ2xlRGVzY2VuZGFudHMoZmVhdHVyZTogRmVhdHVyZUR0bykge1xyXG4gICAgdGhpcy5maW5kQWxsRGVzY2VuZGFudHNPZkJ5VHlwZShmZWF0dXJlLCBWYWx1ZVR5cGVzLlRvZ2dsZVN0cmluZ1ZhbHVlVHlwZSkuZm9yRWFjaChub2RlID0+XHJcbiAgICAgIHRoaXMuc2V0RmVhdHVyZVZhbHVlKG5vZGUsIGZhbHNlKSxcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNoZWNrVG9nZ2xlQW5jZXN0b3JzKGZlYXR1cmU6IEZlYXR1cmVEdG8pIHtcclxuICAgIHRoaXMuZmluZEFsbEFuY2VzdG9yc09mQnlUeXBlKGZlYXR1cmUsIFZhbHVlVHlwZXMuVG9nZ2xlU3RyaW5nVmFsdWVUeXBlKS5mb3JFYWNoKG5vZGUgPT5cclxuICAgICAgdGhpcy5zZXRGZWF0dXJlVmFsdWUobm9kZSwgdHJ1ZSksXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBmaW5kQWxsQW5jZXN0b3JzT2ZCeVR5cGUoZmVhdHVyZTogRmVhdHVyZUR0bywgdHlwZTogVmFsdWVUeXBlcykge1xyXG4gICAgbGV0IHBhcmVudCA9IHRoaXMuZmluZFBhcmVudEJ5VHlwZShmZWF0dXJlLCB0eXBlKTtcclxuICAgIGNvbnN0IGFuY2VzdG9ycyA9IFtdO1xyXG4gICAgd2hpbGUgKHBhcmVudCkge1xyXG4gICAgICBhbmNlc3RvcnMucHVzaChwYXJlbnQpO1xyXG4gICAgICBwYXJlbnQgPSB0aGlzLmZpbmRQYXJlbnRCeVR5cGUocGFyZW50LCB0eXBlKTtcclxuICAgIH1cclxuICAgIHJldHVybiBhbmNlc3RvcnM7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGZpbmRBbGxEZXNjZW5kYW50c09mQnlUeXBlKGZlYXR1cmU6IEZlYXR1cmVEdG8sIHR5cGU6IFZhbHVlVHlwZXMpIHtcclxuICAgIGNvbnN0IGRlc2NlbmRhbnRzID0gW107XHJcbiAgICBjb25zdCBxdWV1ZSA9IFtmZWF0dXJlXTtcclxuXHJcbiAgICB3aGlsZSAocXVldWUubGVuZ3RoKSB7XHJcbiAgICAgIGNvbnN0IG5vZGUgPSBxdWV1ZS5wb3AoKTtcclxuICAgICAgY29uc3QgbmV3RGVzY2VuZGFudHMgPSB0aGlzLmZpbmRDaGlsZHJlbkJ5VHlwZShub2RlLCB0eXBlKTtcclxuICAgICAgZGVzY2VuZGFudHMucHVzaCguLi5uZXdEZXNjZW5kYW50cyk7XHJcbiAgICAgIHF1ZXVlLnB1c2goLi4ubmV3RGVzY2VuZGFudHMpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBkZXNjZW5kYW50cztcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZmluZFBhcmVudEJ5VHlwZShmZWF0dXJlOiBGZWF0dXJlRHRvLCB0eXBlOiBWYWx1ZVR5cGVzKSB7XHJcbiAgICByZXR1cm4gdGhpcy5nZXRDdXJyZW50R3JvdXAoKS5maW5kKFxyXG4gICAgICBmID0+IGYudmFsdWVUeXBlLm5hbWUgPT09IHR5cGUgJiYgZi5uYW1lID09PSBmZWF0dXJlLnBhcmVudE5hbWUsXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBmaW5kQ2hpbGRyZW5CeVR5cGUoZmVhdHVyZTogRmVhdHVyZUR0bywgdHlwZTogVmFsdWVUeXBlcykge1xyXG4gICAgcmV0dXJuIHRoaXMuZ2V0Q3VycmVudEdyb3VwKCkuZmlsdGVyKFxyXG4gICAgICBmID0+IGYudmFsdWVUeXBlLm5hbWUgPT09IHR5cGUgJiYgZi5wYXJlbnROYW1lID09PSBmZWF0dXJlLm5hbWUsXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRDdXJyZW50R3JvdXAoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5mZWF0dXJlc1t0aGlzLnNlbGVjdGVkR3JvdXBEaXNwbGF5TmFtZV0gPz8gW107XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldEZlYXR1cmVWYWx1ZShmZWF0dXJlOiBGZWF0dXJlRHRvLCB2YWw6IGJvb2xlYW4pIHtcclxuICAgIGZlYXR1cmUudmFsdWUgPSB2YWwgYXMgYW55O1xyXG4gIH1cclxufVxyXG5cclxuZnVuY3Rpb24gbWFwRmVhdHVyZXMoZmVhdHVyZXM6IEZlYXR1cmVEdG9bXSwgZGlyOiBMb2NhbGVEaXJlY3Rpb24pIHtcclxuICBjb25zdCBtYXJnaW4gPSBgbWFyZ2luLSR7ZGlyID09PSAncnRsJyA/ICdyaWdodCcgOiAnbGVmdCd9LnB4YDtcclxuXHJcbiAgcmV0dXJuIGZlYXR1cmVzLm1hcChmZWF0dXJlID0+IHtcclxuICAgIGNvbnN0IHZhbHVlID1cclxuICAgICAgZmVhdHVyZS52YWx1ZVR5cGU/Lm5hbWUgPT09IFZhbHVlVHlwZXMuVG9nZ2xlU3RyaW5nVmFsdWVUeXBlXHJcbiAgICAgICAgPyAoZmVhdHVyZS52YWx1ZSB8fCAnJykudG9Mb3dlckNhc2UoKSA9PT0gJ3RydWUnXHJcbiAgICAgICAgOiBmZWF0dXJlLnZhbHVlO1xyXG5cclxuICAgIHJldHVybiB7XHJcbiAgICAgIC4uLmZlYXR1cmUsXHJcbiAgICAgIHZhbHVlLFxyXG4gICAgICBpbml0aWFsVmFsdWU6IHZhbHVlLFxyXG4gICAgICBzdHlsZTogeyBbbWFyZ2luXTogZmVhdHVyZS5kZXB0aCAqIDIwIH0sXHJcbiAgICB9O1xyXG4gIH0pO1xyXG59XHJcbiIsIjxhYnAtbW9kYWwgKm5nSWY9XCJ2aXNpYmxlXCIgWyh2aXNpYmxlKV09XCJ2aXNpYmxlXCIgW2J1c3ldPVwibW9kYWxCdXN5XCIgW29wdGlvbnNdPVwieyBzaXplOiAnbGcnIH1cIj5cclxuICA8bmctdGVtcGxhdGUgI2FicEhlYWRlcj5cclxuICAgIDxoMz57eyAnQWJwRmVhdHVyZU1hbmFnZW1lbnQ6OkZlYXR1cmVzJyB8IGFicExvY2FsaXphdGlvbiB9fTwvaDM+XHJcbiAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgPG5nLXRlbXBsYXRlICNhYnBCb2R5PlxyXG4gICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZ3JvdXBzLmxlbmd0aFwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNFwiPlxyXG4gICAgICAgICAgPHVsXHJcbiAgICAgICAgICAgIG5nYk5hdlxyXG4gICAgICAgICAgICAjbmF2PVwibmdiTmF2XCJcclxuICAgICAgICAgICAgWyhhY3RpdmVJZCldPVwic2VsZWN0ZWRHcm91cERpc3BsYXlOYW1lXCJcclxuICAgICAgICAgICAgY2xhc3M9XCJuYXYtcGlsbHNcIlxyXG4gICAgICAgICAgICBvcmllbnRhdGlvbj1cInZlcnRpY2FsXCJcclxuICAgICAgICAgID5cclxuICAgICAgICAgICAgPGxpXHJcbiAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGdyb3VwIG9mIGdyb3VwczsgdHJhY2tCeTogdHJhY2suYnkoJ25hbWUnKVwiXHJcbiAgICAgICAgICAgICAgW25nYk5hdkl0ZW1dPVwiZ3JvdXAuZGlzcGxheU5hbWVcIlxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgPGEgbmdiTmF2TGluaz57eyBncm91cC5kaXNwbGF5TmFtZSB9fTwvYT5cclxuICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgbmdiTmF2Q29udGVudD5cclxuICAgICAgICAgICAgICAgIDxoND57eyBzZWxlY3RlZEdyb3VwRGlzcGxheU5hbWUgfX08L2g0PlxyXG4gICAgICAgICAgICAgICAgPGhyIGNsYXNzPVwibXQtMiBtYi0zXCIgLz5cclxuXHJcbiAgICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwibXQtMlwiXHJcbiAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cIlxyXG4gICAgICAgICAgICAgICAgICAgIGxldCBmZWF0dXJlIG9mIGZlYXR1cmVzW2dyb3VwLm5hbWVdO1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBpID0gaW5kZXg7XHJcbiAgICAgICAgICAgICAgICAgICAgdHJhY2tCeTogdHJhY2suYnkoJ2lkJylcclxuICAgICAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICAgICAgW25nU3R5bGVdPVwiZmVhdHVyZS5zdHlsZVwiXHJcbiAgICAgICAgICAgICAgICAgIFtuZ1N3aXRjaF09XCJmZWF0dXJlLnZhbHVlVHlwZT8ubmFtZVwiXHJcbiAgICAgICAgICAgICAgICAgIChrZXl1cC5lbnRlcik9XCJzYXZlKClcIlxyXG4gICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCJ2YWx1ZVR5cGVzLlRvZ2dsZVN0cmluZ1ZhbHVlVHlwZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWNoZWNrXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8aW5wdXRcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNoZWNrLWlucHV0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2lkXT1cImZlYXR1cmUubmFtZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiZmVhdHVyZS52YWx1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cIm9uQ2hlY2tib3hDbGljaygkZXZlbnQsIGZlYXR1cmUpXCJcclxuICAgICAgICAgICAgICAgICAgICAgIC8+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1jaGVjay1sYWJlbFwiIFtodG1sRm9yXT1cImZlYXR1cmUubmFtZVwiPnt7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZlYXR1cmUuZGlzcGxheU5hbWVcclxuICAgICAgICAgICAgICAgICAgICAgIH19PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJkZXNjVG1wOyBjb250ZXh0OiB7ICRpbXBsaWNpdDogZmVhdHVyZS5kZXNjcmlwdGlvbiB9XCJcclxuICAgICAgICAgICAgICAgICAgICAgID48L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cInZhbHVlVHlwZXMuRnJlZVRleHRTdHJpbmdWYWx1ZVR5cGVcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItMyBmb3JtLWdyb3VwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgW2h0bWxGb3JdPVwiZmVhdHVyZS5uYW1lXCIgY2xhc3M9XCJmb3JtLWxhYmVsXCI+e3tcclxuICAgICAgICAgICAgICAgICAgICAgICAgZmVhdHVyZS5kaXNwbGF5TmFtZVxyXG4gICAgICAgICAgICAgICAgICAgICAgfX08L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGlucHV0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbaWRdPVwiZmVhdHVyZS5uYW1lXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJmZWF0dXJlLnZhbHVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2FicEZlYXR1cmVNYW5hZ2VtZW50RnJlZVRleHRdPVwiZmVhdHVyZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAvPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJkZXNjVG1wOyBjb250ZXh0OiB7ICRpbXBsaWNpdDogZmVhdHVyZS5kZXNjcmlwdGlvbiB9XCJcclxuICAgICAgICAgICAgICAgICAgICAgID48L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cInZhbHVlVHlwZXMuU2VsZWN0aW9uU3RyaW5nVmFsdWVUeXBlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImZlYXR1cmUudmFsdWVUeXBlLml0ZW1Tb3VyY2U/Lml0ZW1zPy5sZW5ndGhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi0zIGZvcm0tZ3JvdXBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIFtodG1sRm9yXT1cImZlYXR1cmUubmFtZVwiIGNsYXNzPVwiZm9ybS1sYWJlbFwiPnt7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZmVhdHVyZS5kaXNwbGF5TmFtZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9fTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzZWxlY3QgY2xhc3M9XCJmb3JtLXNlbGVjdFwiIFtpZF09XCJmZWF0dXJlLm5hbWVcIiBbKG5nTW9kZWwpXT1cImZlYXR1cmUudmFsdWVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGl0ZW0gb2YgZmVhdHVyZS52YWx1ZVR5cGUuaXRlbVNvdXJjZT8uaXRlbXM7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYWNrQnk6IHRyYWNrLmJ5KCd2YWx1ZScpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nVmFsdWVdPVwiaXRlbS52YWx1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3tcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS5kaXNwbGF5VGV4dD8ucmVzb3VyY2VOYW1lICsgJzo6JyArIGl0ZW0uZGlzcGxheVRleHQ/Lm5hbWVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGFicExvY2FsaXphdGlvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cImRlc2NUbXA7IGNvbnRleHQ6IHsgJGltcGxpY2l0OiBmZWF0dXJlLmRlc2NyaXB0aW9uIH1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA+PC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoRGVmYXVsdD57eyBmZWF0dXJlLmRpc3BsYXlOYW1lIH19PC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgPC91bD5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPG5nLXRlbXBsYXRlICNkZXNjVG1wIGxldC1kZXNjcmlwdGlvbj5cclxuICAgICAgICAgIDxzbWFsbCAqbmdJZj1cImRlc2NyaXB0aW9uXCIgY2xhc3M9XCJkLWJsb2NrIGZvcm0tdGV4dCB0ZXh0LW11dGVkXCI+e3sgZGVzY3JpcHRpb24gfX08L3NtYWxsPlxyXG4gICAgICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtOFwiPjxkaXYgW25nYk5hdk91dGxldF09XCJuYXZcIj48L2Rpdj48L2Rpdj5cclxuICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICA8ZGl2IGNsYXNzPVwiY29sXCIgKm5nSWY9XCIhZ3JvdXBzLmxlbmd0aFwiPlxyXG4gICAgICAgIHt7ICdBYnBGZWF0dXJlTWFuYWdlbWVudDo6Tm9GZWF0dXJlRm91bmRNZXNzYWdlJyB8IGFicExvY2FsaXphdGlvbiB9fVxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gIDxuZy10ZW1wbGF0ZSAjYWJwRm9vdGVyPlxyXG4gICAgPGFicC1idXR0b25cclxuICAgICAgKm5nSWY9XCJncm91cHMubGVuZ3RoXCJcclxuICAgICAgaWNvbkNsYXNzPVwiZmEgZmEtcmVmcmVzaFwiXHJcbiAgICAgIFtkaXNhYmxlZF09XCJtb2RhbEJ1c3lcIlxyXG4gICAgICAoY2xpY2spPVwicmVzZXRUb0RlZmF1bHQoKVwiXHJcbiAgICA+XHJcbiAgICAgIHt7ICdBYnBGZWF0dXJlTWFuYWdlbWVudDo6UmVzZXRUb0RlZmF1bHQnIHwgYWJwTG9jYWxpemF0aW9uIH19XHJcbiAgICA8L2FicC1idXR0b24+XHJcblxyXG4gICAgPGJ1dHRvbiBhYnBDbG9zZSB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXNlY29uZGFyeVwiPlxyXG4gICAgICB7eyAnQWJwRmVhdHVyZU1hbmFnZW1lbnQ6OkNhbmNlbCcgfCBhYnBMb2NhbGl6YXRpb24gfX1cclxuICAgIDwvYnV0dG9uPlxyXG4gICAgPGFicC1idXR0b25cclxuICAgICAgKm5nSWY9XCJncm91cHMubGVuZ3RoXCJcclxuICAgICAgaWNvbkNsYXNzPVwiZmEgZmEtY2hlY2tcIlxyXG4gICAgICBbZGlzYWJsZWRdPVwibW9kYWxCdXN5XCJcclxuICAgICAgKGNsaWNrKT1cInNhdmUoKVwiXHJcbiAgICA+XHJcbiAgICAgIHt7ICdBYnBGZWF0dXJlTWFuYWdlbWVudDo6U2F2ZScgfCBhYnBMb2NhbGl6YXRpb24gfX1cclxuICAgIDwvYWJwLWJ1dHRvbj5cclxuICA8L25nLXRlbXBsYXRlPlxyXG48L2FicC1tb2RhbD5cclxuIl19
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
import { Component } from '@angular/core';
|
|
2
|
-
import * as i0 from "@angular/core";
|
|
3
|
-
import * as i1 from "@abp/ng.core";
|
|
4
|
-
import * as i2 from "../feature-management/feature-management.component";
|
|
5
|
-
export class FeatureManagementTabComponent {
|
|
6
|
-
constructor() {
|
|
7
|
-
this.visibleFeatures = false;
|
|
8
|
-
this.onVisibleFeaturesChange = (value) => {
|
|
9
|
-
this.visibleFeatures = value;
|
|
10
|
-
};
|
|
11
|
-
}
|
|
12
|
-
openFeaturesModal() {
|
|
13
|
-
setTimeout(() => {
|
|
14
|
-
this.visibleFeatures = true;
|
|
15
|
-
}, 0);
|
|
16
|
-
}
|
|
17
|
-
}
|
|
18
|
-
FeatureManagementTabComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: FeatureManagementTabComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
19
|
-
FeatureManagementTabComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.4", type: FeatureManagementTabComponent, selector: "abp-feature-management-tab", ngImport: i0, template: "<p class=\"text-wrap\">{{ 'AbpFeatureManagement::ManageHostFeaturesText' | abpLocalization }}</p>\r\n\r\n<button class=\"btn btn-primary\" type=\"button\" (click)=\"openFeaturesModal()\">\r\n <i class=\"fa fa-cog\"></i>\r\n {{ 'AbpFeatureManagement::ManageHostFeatures' | abpLocalization }}\r\n</button>\r\n<abp-feature-management\r\n *abpReplaceableTemplate=\"{\r\n inputs: {\r\n providerName: { value: 'T' },\r\n providerKey: { value: providerKey },\r\n visible: { value: visibleFeatures, twoWay: true }\r\n },\r\n outputs: { visibleChange: onVisibleFeaturesChange },\r\n componentKey: 'FeatureManagement.FeatureManagementComponent'\r\n }\"\r\n [(visible)]=\"visibleFeatures\"\r\n providerName=\"T\"\r\n [providerKey]=\"providerKey\"\r\n>\r\n</abp-feature-management>\r\n", dependencies: [{ kind: "directive", type: i1.ReplaceableTemplateDirective, selector: "[abpReplaceableTemplate]", inputs: ["abpReplaceableTemplate"] }, { kind: "component", type: i2.FeatureManagementComponent, selector: "abp-feature-management", inputs: ["providerKey", "providerName", "visible"], outputs: ["visibleChange"], exportAs: ["abpFeatureManagement"] }, { kind: "pipe", type: i1.LocalizationPipe, name: "abpLocalization" }] });
|
|
20
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: FeatureManagementTabComponent, decorators: [{
|
|
21
|
-
type: Component,
|
|
22
|
-
args: [{ selector: 'abp-feature-management-tab', template: "<p class=\"text-wrap\">{{ 'AbpFeatureManagement::ManageHostFeaturesText' | abpLocalization }}</p>\r\n\r\n<button class=\"btn btn-primary\" type=\"button\" (click)=\"openFeaturesModal()\">\r\n <i class=\"fa fa-cog\"></i>\r\n {{ 'AbpFeatureManagement::ManageHostFeatures' | abpLocalization }}\r\n</button>\r\n<abp-feature-management\r\n *abpReplaceableTemplate=\"{\r\n inputs: {\r\n providerName: { value: 'T' },\r\n providerKey: { value: providerKey },\r\n visible: { value: visibleFeatures, twoWay: true }\r\n },\r\n outputs: { visibleChange: onVisibleFeaturesChange },\r\n componentKey: 'FeatureManagement.FeatureManagementComponent'\r\n }\"\r\n [(visible)]=\"visibleFeatures\"\r\n providerName=\"T\"\r\n [providerKey]=\"providerKey\"\r\n>\r\n</abp-feature-management>\r\n" }]
|
|
23
|
-
}] });
|
|
24
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmVhdHVyZS1tYW5hZ2VtZW50LXRhYi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9mZWF0dXJlLW1hbmFnZW1lbnQvc3JjL2xpYi9jb21wb25lbnRzL2ZlYXR1cmUtbWFuYWdlbWVudC10YWIvZmVhdHVyZS1tYW5hZ2VtZW50LXRhYi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9mZWF0dXJlLW1hbmFnZW1lbnQvc3JjL2xpYi9jb21wb25lbnRzL2ZlYXR1cmUtbWFuYWdlbWVudC10YWIvZmVhdHVyZS1tYW5hZ2VtZW50LXRhYi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDOzs7O0FBTTFDLE1BQU0sT0FBTyw2QkFBNkI7SUFKMUM7UUFLRSxvQkFBZSxHQUFHLEtBQUssQ0FBQztRQVN4Qiw0QkFBdUIsR0FBRyxDQUFDLEtBQWMsRUFBRSxFQUFFO1lBQzNDLElBQUksQ0FBQyxlQUFlLEdBQUcsS0FBSyxDQUFDO1FBQy9CLENBQUMsQ0FBQztLQUNIO0lBVEMsaUJBQWlCO1FBQ2YsVUFBVSxDQUFDLEdBQUcsRUFBRTtZQUNkLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDO1FBQzlCLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNSLENBQUM7OzBIQVJVLDZCQUE2Qjs4R0FBN0IsNkJBQTZCLGtFQ04xQyx5eUJBcUJBOzJGRGZhLDZCQUE2QjtrQkFKekMsU0FBUzsrQkFDRSw0QkFBNEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnYWJwLWZlYXR1cmUtbWFuYWdlbWVudC10YWInLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9mZWF0dXJlLW1hbmFnZW1lbnQtdGFiLmNvbXBvbmVudC5odG1sJyxcclxufSlcclxuZXhwb3J0IGNsYXNzIEZlYXR1cmVNYW5hZ2VtZW50VGFiQ29tcG9uZW50IHtcclxuICB2aXNpYmxlRmVhdHVyZXMgPSBmYWxzZTtcclxuICBwcm92aWRlcktleTogc3RyaW5nO1xyXG5cclxuICBvcGVuRmVhdHVyZXNNb2RhbCgpIHtcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICB0aGlzLnZpc2libGVGZWF0dXJlcyA9IHRydWU7XHJcbiAgICB9LCAwKTtcclxuICB9XHJcblxyXG4gIG9uVmlzaWJsZUZlYXR1cmVzQ2hhbmdlID0gKHZhbHVlOiBib29sZWFuKSA9PiB7XHJcbiAgICB0aGlzLnZpc2libGVGZWF0dXJlcyA9IHZhbHVlO1xyXG4gIH07XHJcbn1cclxuIiwiPHAgY2xhc3M9XCJ0ZXh0LXdyYXBcIj57eyAnQWJwRmVhdHVyZU1hbmFnZW1lbnQ6Ok1hbmFnZUhvc3RGZWF0dXJlc1RleHQnIHwgYWJwTG9jYWxpemF0aW9uIH19PC9wPlxyXG5cclxuPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeVwiIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwib3BlbkZlYXR1cmVzTW9kYWwoKVwiPlxyXG4gIDxpIGNsYXNzPVwiZmEgZmEtY29nXCI+PC9pPlxyXG4gIHt7ICdBYnBGZWF0dXJlTWFuYWdlbWVudDo6TWFuYWdlSG9zdEZlYXR1cmVzJyB8IGFicExvY2FsaXphdGlvbiB9fVxyXG48L2J1dHRvbj5cclxuPGFicC1mZWF0dXJlLW1hbmFnZW1lbnRcclxuICAqYWJwUmVwbGFjZWFibGVUZW1wbGF0ZT1cIntcclxuICAgIGlucHV0czoge1xyXG4gICAgICBwcm92aWRlck5hbWU6IHsgdmFsdWU6ICdUJyB9LFxyXG4gICAgICBwcm92aWRlcktleTogeyB2YWx1ZTogcHJvdmlkZXJLZXkgfSxcclxuICAgICAgdmlzaWJsZTogeyB2YWx1ZTogdmlzaWJsZUZlYXR1cmVzLCB0d29XYXk6IHRydWUgfVxyXG4gICAgfSxcclxuICAgIG91dHB1dHM6IHsgdmlzaWJsZUNoYW5nZTogb25WaXNpYmxlRmVhdHVyZXNDaGFuZ2UgfSxcclxuICAgIGNvbXBvbmVudEtleTogJ0ZlYXR1cmVNYW5hZ2VtZW50LkZlYXR1cmVNYW5hZ2VtZW50Q29tcG9uZW50J1xyXG4gIH1cIlxyXG4gIFsodmlzaWJsZSldPVwidmlzaWJsZUZlYXR1cmVzXCJcclxuICBwcm92aWRlck5hbWU9XCJUXCJcclxuICBbcHJvdmlkZXJLZXldPVwicHJvdmlkZXJLZXlcIlxyXG4+XHJcbjwvYWJwLWZlYXR1cmUtbWFuYWdlbWVudD5cclxuIl19
|
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
import { Directive, HostBinding, Input } from '@angular/core';
|
|
2
|
-
import * as i0 from "@angular/core";
|
|
3
|
-
export const INPUT_TYPES = {
|
|
4
|
-
numeric: 'number',
|
|
5
|
-
default: 'text',
|
|
6
|
-
};
|
|
7
|
-
export class FreeTextInputDirective {
|
|
8
|
-
// eslint-disable-next-line @angular-eslint/no-input-rename
|
|
9
|
-
set feature(val) {
|
|
10
|
-
this._feature = val;
|
|
11
|
-
this.setInputType();
|
|
12
|
-
}
|
|
13
|
-
get feature() {
|
|
14
|
-
return this._feature;
|
|
15
|
-
}
|
|
16
|
-
setInputType() {
|
|
17
|
-
const validatorType = this.feature?.valueType?.validator?.name.toLowerCase();
|
|
18
|
-
this.type = INPUT_TYPES[validatorType] ?? INPUT_TYPES.default;
|
|
19
|
-
}
|
|
20
|
-
}
|
|
21
|
-
FreeTextInputDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: FreeTextInputDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
22
|
-
FreeTextInputDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.0.4", type: FreeTextInputDirective, selector: "input[abpFeatureManagementFreeText]", inputs: { feature: ["abpFeatureManagementFreeText", "feature"] }, host: { properties: { "type": "this.type" } }, exportAs: ["inputAbpFeatureManagementFreeText"], ngImport: i0 });
|
|
23
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: FreeTextInputDirective, decorators: [{
|
|
24
|
-
type: Directive,
|
|
25
|
-
args: [{
|
|
26
|
-
selector: 'input[abpFeatureManagementFreeText]',
|
|
27
|
-
exportAs: 'inputAbpFeatureManagementFreeText',
|
|
28
|
-
}]
|
|
29
|
-
}], propDecorators: { feature: [{
|
|
30
|
-
type: Input,
|
|
31
|
-
args: ['abpFeatureManagementFreeText']
|
|
32
|
-
}], type: [{
|
|
33
|
-
type: HostBinding,
|
|
34
|
-
args: ['type']
|
|
35
|
-
}] } });
|
|
36
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnJlZS10ZXh0LWlucHV0LmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2ZlYXR1cmUtbWFuYWdlbWVudC9zcmMvbGliL2RpcmVjdGl2ZXMvZnJlZS10ZXh0LWlucHV0LmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBVzlELE1BQU0sQ0FBQyxNQUFNLFdBQVcsR0FBRztJQUN6QixPQUFPLEVBQUUsUUFBUTtJQUNqQixPQUFPLEVBQUUsTUFBTTtDQUNoQixDQUFDO0FBTUYsTUFBTSxPQUFPLHNCQUFzQjtJQUVqQywyREFBMkQ7SUFDM0QsSUFBMkMsT0FBTyxDQUFDLEdBQWlCO1FBQ2xFLElBQUksQ0FBQyxRQUFRLEdBQUcsR0FBRyxDQUFDO1FBQ3BCLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUN0QixDQUFDO0lBRUQsSUFBSSxPQUFPO1FBQ1QsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDO0lBQ3ZCLENBQUM7SUFJTyxZQUFZO1FBQ2xCLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxPQUFPLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDN0UsSUFBSSxDQUFDLElBQUksR0FBRyxXQUFXLENBQUMsYUFBYSxDQUFDLElBQUksV0FBVyxDQUFDLE9BQU8sQ0FBQztJQUNoRSxDQUFDOzttSEFqQlUsc0JBQXNCO3VHQUF0QixzQkFBc0I7MkZBQXRCLHNCQUFzQjtrQkFKbEMsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUscUNBQXFDO29CQUMvQyxRQUFRLEVBQUUsbUNBQW1DO2lCQUM5Qzs4QkFJNEMsT0FBTztzQkFBakQsS0FBSzt1QkFBQyw4QkFBOEI7Z0JBU2hCLElBQUk7c0JBQXhCLFdBQVc7dUJBQUMsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERpcmVjdGl2ZSwgSG9zdEJpbmRpbmcsIElucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcblxyXG4vLyBUT0RPOiBpbXByb3ZlIHRoaXMgdHlwZVxyXG5leHBvcnQgaW50ZXJmYWNlIEZyZWVUZXh0VHlwZSB7XHJcbiAgdmFsdWVUeXBlOiB7XHJcbiAgICB2YWxpZGF0b3I6IHtcclxuICAgICAgbmFtZTogc3RyaW5nO1xyXG4gICAgfTtcclxuICB9O1xyXG59XHJcblxyXG5leHBvcnQgY29uc3QgSU5QVVRfVFlQRVMgPSB7XHJcbiAgbnVtZXJpYzogJ251bWJlcicsXHJcbiAgZGVmYXVsdDogJ3RleHQnLFxyXG59O1xyXG5cclxuQERpcmVjdGl2ZSh7XHJcbiAgc2VsZWN0b3I6ICdpbnB1dFthYnBGZWF0dXJlTWFuYWdlbWVudEZyZWVUZXh0XScsXHJcbiAgZXhwb3J0QXM6ICdpbnB1dEFicEZlYXR1cmVNYW5hZ2VtZW50RnJlZVRleHQnLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgRnJlZVRleHRJbnB1dERpcmVjdGl2ZSB7XHJcbiAgX2ZlYXR1cmU6IEZyZWVUZXh0VHlwZTtcclxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L25vLWlucHV0LXJlbmFtZVxyXG4gIEBJbnB1dCgnYWJwRmVhdHVyZU1hbmFnZW1lbnRGcmVlVGV4dCcpIHNldCBmZWF0dXJlKHZhbDogRnJlZVRleHRUeXBlKSB7XHJcbiAgICB0aGlzLl9mZWF0dXJlID0gdmFsO1xyXG4gICAgdGhpcy5zZXRJbnB1dFR5cGUoKTtcclxuICB9XHJcblxyXG4gIGdldCBmZWF0dXJlKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX2ZlYXR1cmU7XHJcbiAgfVxyXG5cclxuICBASG9zdEJpbmRpbmcoJ3R5cGUnKSB0eXBlOiBzdHJpbmc7XHJcblxyXG4gIHByaXZhdGUgc2V0SW5wdXRUeXBlKCkge1xyXG4gICAgY29uc3QgdmFsaWRhdG9yVHlwZSA9IHRoaXMuZmVhdHVyZT8udmFsdWVUeXBlPy52YWxpZGF0b3I/Lm5hbWUudG9Mb3dlckNhc2UoKTtcclxuICAgIHRoaXMudHlwZSA9IElOUFVUX1RZUEVTW3ZhbGlkYXRvclR5cGVdID8/IElOUFVUX1RZUEVTLmRlZmF1bHQ7XHJcbiAgfVxyXG59XHJcbiJdfQ==
|
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
import { CoreModule } from '@abp/ng.core';
|
|
2
|
-
import { ThemeSharedModule } from '@abp/ng.theme.shared';
|
|
3
|
-
import { NgModule } from '@angular/core';
|
|
4
|
-
import { NgbNavModule } from '@ng-bootstrap/ng-bootstrap';
|
|
5
|
-
import { FeatureManagementComponent } from './components/feature-management/feature-management.component';
|
|
6
|
-
import { FreeTextInputDirective } from './directives/free-text-input.directive';
|
|
7
|
-
import { FEATURE_MANAGEMENT_SETTINGS_PROVIDERS } from './providers';
|
|
8
|
-
import { FeatureManagementTabComponent } from './components';
|
|
9
|
-
import * as i0 from "@angular/core";
|
|
10
|
-
const exported = [
|
|
11
|
-
FeatureManagementComponent,
|
|
12
|
-
FreeTextInputDirective,
|
|
13
|
-
FeatureManagementTabComponent,
|
|
14
|
-
];
|
|
15
|
-
export class FeatureManagementModule {
|
|
16
|
-
static forRoot() {
|
|
17
|
-
return {
|
|
18
|
-
ngModule: FeatureManagementModule,
|
|
19
|
-
providers: [FEATURE_MANAGEMENT_SETTINGS_PROVIDERS],
|
|
20
|
-
};
|
|
21
|
-
}
|
|
22
|
-
}
|
|
23
|
-
FeatureManagementModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: FeatureManagementModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
24
|
-
FeatureManagementModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.0.4", ngImport: i0, type: FeatureManagementModule, declarations: [FeatureManagementComponent,
|
|
25
|
-
FreeTextInputDirective,
|
|
26
|
-
FeatureManagementTabComponent], imports: [CoreModule, ThemeSharedModule, NgbNavModule], exports: [FeatureManagementComponent,
|
|
27
|
-
FreeTextInputDirective,
|
|
28
|
-
FeatureManagementTabComponent] });
|
|
29
|
-
FeatureManagementModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: FeatureManagementModule, imports: [CoreModule, ThemeSharedModule, NgbNavModule] });
|
|
30
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: FeatureManagementModule, decorators: [{
|
|
31
|
-
type: NgModule,
|
|
32
|
-
args: [{
|
|
33
|
-
declarations: [...exported],
|
|
34
|
-
imports: [CoreModule, ThemeSharedModule, NgbNavModule],
|
|
35
|
-
exports: [...exported],
|
|
36
|
-
}]
|
|
37
|
-
}] });
|
|
38
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmVhdHVyZS1tYW5hZ2VtZW50Lm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2ZlYXR1cmUtbWFuYWdlbWVudC9zcmMvbGliL2ZlYXR1cmUtbWFuYWdlbWVudC5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUMxQyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN6RCxPQUFPLEVBQXVCLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM5RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDMUQsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sOERBQThELENBQUM7QUFDMUcsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFDaEYsT0FBTyxFQUFFLHFDQUFxQyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3BFLE9BQU8sRUFBRSw2QkFBNkIsRUFBRSxNQUFNLGNBQWMsQ0FBQzs7QUFFN0QsTUFBTSxRQUFRLEdBQUc7SUFDZiwwQkFBMEI7SUFDMUIsc0JBQXNCO0lBQ3RCLDZCQUE2QjtDQUM5QixDQUFDO0FBT0YsTUFBTSxPQUFPLHVCQUF1QjtJQUNsQyxNQUFNLENBQUMsT0FBTztRQUNaLE9BQU87WUFDTCxRQUFRLEVBQUUsdUJBQXVCO1lBQ2pDLFNBQVMsRUFBRSxDQUFDLHFDQUFxQyxDQUFDO1NBQ25ELENBQUM7SUFDSixDQUFDOztvSEFOVSx1QkFBdUI7cUhBQXZCLHVCQUF1QixpQkFWbEMsMEJBQTBCO1FBQzFCLHNCQUFzQjtRQUN0Qiw2QkFBNkIsYUFLbkIsVUFBVSxFQUFFLGlCQUFpQixFQUFFLFlBQVksYUFQckQsMEJBQTBCO1FBQzFCLHNCQUFzQjtRQUN0Qiw2QkFBNkI7cUhBUWxCLHVCQUF1QixZQUh4QixVQUFVLEVBQUUsaUJBQWlCLEVBQUUsWUFBWTsyRkFHMUMsdUJBQXVCO2tCQUxuQyxRQUFRO21CQUFDO29CQUNSLFlBQVksRUFBRSxDQUFDLEdBQUcsUUFBUSxDQUFDO29CQUMzQixPQUFPLEVBQUUsQ0FBQyxVQUFVLEVBQUUsaUJBQWlCLEVBQUUsWUFBWSxDQUFDO29CQUN0RCxPQUFPLEVBQUUsQ0FBQyxHQUFHLFFBQVEsQ0FBQztpQkFDdkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb3JlTW9kdWxlIH0gZnJvbSAnQGFicC9uZy5jb3JlJztcclxuaW1wb3J0IHsgVGhlbWVTaGFyZWRNb2R1bGUgfSBmcm9tICdAYWJwL25nLnRoZW1lLnNoYXJlZCc7XHJcbmltcG9ydCB7IE1vZHVsZVdpdGhQcm92aWRlcnMsIE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE5nYk5hdk1vZHVsZSB9IGZyb20gJ0BuZy1ib290c3RyYXAvbmctYm9vdHN0cmFwJztcclxuaW1wb3J0IHsgRmVhdHVyZU1hbmFnZW1lbnRDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvZmVhdHVyZS1tYW5hZ2VtZW50L2ZlYXR1cmUtbWFuYWdlbWVudC5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBGcmVlVGV4dElucHV0RGlyZWN0aXZlIH0gZnJvbSAnLi9kaXJlY3RpdmVzL2ZyZWUtdGV4dC1pbnB1dC5kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBGRUFUVVJFX01BTkFHRU1FTlRfU0VUVElOR1NfUFJPVklERVJTIH0gZnJvbSAnLi9wcm92aWRlcnMnO1xyXG5pbXBvcnQgeyBGZWF0dXJlTWFuYWdlbWVudFRhYkNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cyc7XHJcblxyXG5jb25zdCBleHBvcnRlZCA9IFtcclxuICBGZWF0dXJlTWFuYWdlbWVudENvbXBvbmVudCxcclxuICBGcmVlVGV4dElucHV0RGlyZWN0aXZlLFxyXG4gIEZlYXR1cmVNYW5hZ2VtZW50VGFiQ29tcG9uZW50LFxyXG5dO1xyXG5cclxuQE5nTW9kdWxlKHtcclxuICBkZWNsYXJhdGlvbnM6IFsuLi5leHBvcnRlZF0sXHJcbiAgaW1wb3J0czogW0NvcmVNb2R1bGUsIFRoZW1lU2hhcmVkTW9kdWxlLCBOZ2JOYXZNb2R1bGVdLFxyXG4gIGV4cG9ydHM6IFsuLi5leHBvcnRlZF0sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBGZWF0dXJlTWFuYWdlbWVudE1vZHVsZSB7XHJcbiAgc3RhdGljIGZvclJvb3QoKTogTW9kdWxlV2l0aFByb3ZpZGVyczxGZWF0dXJlTWFuYWdlbWVudE1vZHVsZT4ge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgbmdNb2R1bGU6IEZlYXR1cmVNYW5hZ2VtZW50TW9kdWxlLFxyXG4gICAgICBwcm92aWRlcnM6IFtGRUFUVVJFX01BTkFHRU1FTlRfU0VUVElOR1NfUFJPVklERVJTXSxcclxuICAgIH07XHJcbiAgfVxyXG59XHJcbiJdfQ==
|
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
import { RestService } from '@abp/ng.core';
|
|
2
|
-
import { Injectable } from '@angular/core';
|
|
3
|
-
import * as i0 from "@angular/core";
|
|
4
|
-
import * as i1 from "@abp/ng.core";
|
|
5
|
-
export class FeaturesService {
|
|
6
|
-
constructor(restService) {
|
|
7
|
-
this.restService = restService;
|
|
8
|
-
this.apiName = 'AbpFeatureManagement';
|
|
9
|
-
this.delete = (providerName, providerKey) => this.restService.request({
|
|
10
|
-
method: 'DELETE',
|
|
11
|
-
url: '/api/feature-management/features',
|
|
12
|
-
params: { providerName, providerKey },
|
|
13
|
-
}, { apiName: this.apiName });
|
|
14
|
-
this.get = (providerName, providerKey) => this.restService.request({
|
|
15
|
-
method: 'GET',
|
|
16
|
-
url: '/api/feature-management/features',
|
|
17
|
-
params: { providerName, providerKey },
|
|
18
|
-
}, { apiName: this.apiName });
|
|
19
|
-
this.update = (providerName, providerKey, input) => this.restService.request({
|
|
20
|
-
method: 'PUT',
|
|
21
|
-
url: '/api/feature-management/features',
|
|
22
|
-
params: { providerName, providerKey },
|
|
23
|
-
body: input,
|
|
24
|
-
}, { apiName: this.apiName });
|
|
25
|
-
}
|
|
26
|
-
}
|
|
27
|
-
FeaturesService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: FeaturesService, deps: [{ token: i1.RestService }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
28
|
-
FeaturesService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: FeaturesService, providedIn: 'root' });
|
|
29
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: FeaturesService, decorators: [{
|
|
30
|
-
type: Injectable,
|
|
31
|
-
args: [{
|
|
32
|
-
providedIn: 'root',
|
|
33
|
-
}]
|
|
34
|
-
}], ctorParameters: function () { return [{ type: i1.RestService }]; } });
|
|
35
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmVhdHVyZXMuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2ZlYXR1cmUtbWFuYWdlbWVudC9wcm94eS9zcmMvbGliL3Byb3h5L2ZlYXR1cmUtbWFuYWdlbWVudC9mZWF0dXJlcy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDM0MsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7O0FBSzNDLE1BQU0sT0FBTyxlQUFlO0lBa0MxQixZQUFvQixXQUF3QjtRQUF4QixnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQWpDNUMsWUFBTyxHQUFHLHNCQUFzQixDQUFDO1FBRWpDLFdBQU0sR0FBRyxDQUFDLFlBQW9CLEVBQUUsV0FBbUIsRUFBRSxFQUFFLENBQ3JELElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUN0QjtZQUNFLE1BQU0sRUFBRSxRQUFRO1lBQ2hCLEdBQUcsRUFBRSxrQ0FBa0M7WUFDdkMsTUFBTSxFQUFFLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFBRTtTQUN0QyxFQUNELEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FDMUIsQ0FBQztRQUVKLFFBQUcsR0FBRyxDQUFDLFlBQW9CLEVBQUUsV0FBbUIsRUFBRSxFQUFFLENBQ2xELElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUN0QjtZQUNFLE1BQU0sRUFBRSxLQUFLO1lBQ2IsR0FBRyxFQUFFLGtDQUFrQztZQUN2QyxNQUFNLEVBQUUsRUFBRSxZQUFZLEVBQUUsV0FBVyxFQUFFO1NBQ3RDLEVBQ0QsRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUMxQixDQUFDO1FBRUosV0FBTSxHQUFHLENBQUMsWUFBb0IsRUFBRSxXQUFtQixFQUFFLEtBQXdCLEVBQUUsRUFBRSxDQUMvRSxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FDdEI7WUFDRSxNQUFNLEVBQUUsS0FBSztZQUNiLEdBQUcsRUFBRSxrQ0FBa0M7WUFDdkMsTUFBTSxFQUFFLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFBRTtZQUNyQyxJQUFJLEVBQUUsS0FBSztTQUNaLEVBQ0QsRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUMxQixDQUFDO0lBRTJDLENBQUM7OzRHQWxDckMsZUFBZTtnSEFBZixlQUFlLGNBRmQsTUFBTTsyRkFFUCxlQUFlO2tCQUgzQixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgR2V0RmVhdHVyZUxpc3RSZXN1bHREdG8sIFVwZGF0ZUZlYXR1cmVzRHRvIH0gZnJvbSAnLi9tb2RlbHMnO1xyXG5pbXBvcnQgeyBSZXN0U2VydmljZSB9IGZyb20gJ0BhYnAvbmcuY29yZSc7XHJcbmltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCcsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBGZWF0dXJlc1NlcnZpY2Uge1xyXG4gIGFwaU5hbWUgPSAnQWJwRmVhdHVyZU1hbmFnZW1lbnQnO1xyXG5cclxuICBkZWxldGUgPSAocHJvdmlkZXJOYW1lOiBzdHJpbmcsIHByb3ZpZGVyS2V5OiBzdHJpbmcpID0+XHJcbiAgICB0aGlzLnJlc3RTZXJ2aWNlLnJlcXVlc3Q8YW55LCB2b2lkPihcclxuICAgICAge1xyXG4gICAgICAgIG1ldGhvZDogJ0RFTEVURScsXHJcbiAgICAgICAgdXJsOiAnL2FwaS9mZWF0dXJlLW1hbmFnZW1lbnQvZmVhdHVyZXMnLFxyXG4gICAgICAgIHBhcmFtczogeyBwcm92aWRlck5hbWUsIHByb3ZpZGVyS2V5IH0sXHJcbiAgICAgIH0sXHJcbiAgICAgIHsgYXBpTmFtZTogdGhpcy5hcGlOYW1lIH0sXHJcbiAgICApO1xyXG5cclxuICBnZXQgPSAocHJvdmlkZXJOYW1lOiBzdHJpbmcsIHByb3ZpZGVyS2V5OiBzdHJpbmcpID0+XHJcbiAgICB0aGlzLnJlc3RTZXJ2aWNlLnJlcXVlc3Q8YW55LCBHZXRGZWF0dXJlTGlzdFJlc3VsdER0bz4oXHJcbiAgICAgIHtcclxuICAgICAgICBtZXRob2Q6ICdHRVQnLFxyXG4gICAgICAgIHVybDogJy9hcGkvZmVhdHVyZS1tYW5hZ2VtZW50L2ZlYXR1cmVzJyxcclxuICAgICAgICBwYXJhbXM6IHsgcHJvdmlkZXJOYW1lLCBwcm92aWRlcktleSB9LFxyXG4gICAgICB9LFxyXG4gICAgICB7IGFwaU5hbWU6IHRoaXMuYXBpTmFtZSB9LFxyXG4gICAgKTtcclxuXHJcbiAgdXBkYXRlID0gKHByb3ZpZGVyTmFtZTogc3RyaW5nLCBwcm92aWRlcktleTogc3RyaW5nLCBpbnB1dDogVXBkYXRlRmVhdHVyZXNEdG8pID0+XHJcbiAgICB0aGlzLnJlc3RTZXJ2aWNlLnJlcXVlc3Q8YW55LCB2b2lkPihcclxuICAgICAge1xyXG4gICAgICAgIG1ldGhvZDogJ1BVVCcsXHJcbiAgICAgICAgdXJsOiAnL2FwaS9mZWF0dXJlLW1hbmFnZW1lbnQvZmVhdHVyZXMnLFxyXG4gICAgICAgIHBhcmFtczogeyBwcm92aWRlck5hbWUsIHByb3ZpZGVyS2V5IH0sXHJcbiAgICAgICAgYm9keTogaW5wdXQsXHJcbiAgICAgIH0sXHJcbiAgICAgIHsgYXBpTmFtZTogdGhpcy5hcGlOYW1lIH0sXHJcbiAgICApO1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlc3RTZXJ2aWNlOiBSZXN0U2VydmljZSkge31cclxufVxyXG4iXX0=
|