@gravitee/ui-policy-studio-angular 7.11.0 → 7.12.0-policy-studio-step-7-33cd621
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/esm2020/lib/components/flow-details/gio-ps-flow-details.component.mjs +16 -3
- package/esm2020/lib/components/flow-details-phase/gio-ps-flow-details-phase.component.mjs +58 -16
- package/esm2020/lib/components/flow-details-phase-step/gio-ps-flow-details-phase-step.component.mjs +77 -0
- package/esm2020/lib/components/policies-catalog-dialog/gio-ps-policies-catalog-dialog.component.mjs +67 -0
- package/esm2020/lib/components/step-edit-dialog/gio-ps-step-edit-dialog.component.mjs +46 -0
- package/esm2020/lib/components/step-form/gio-ps-step-form.component.mjs +78 -0
- package/esm2020/lib/gio-policy-studio.component.mjs +47 -12
- package/esm2020/lib/gio-policy-studio.module.mjs +17 -6
- package/esm2020/lib/gio-policy-studio.service.mjs +66 -0
- package/esm2020/lib/models/PolicySchemaFetcher.mjs +2 -0
- package/esm2020/lib/models/index.mjs +3 -1
- package/esm2020/lib/models/policy/Policy.mjs +2 -0
- package/esm2020/lib/models/policy/index.mjs +17 -0
- package/esm2020/testing/lib/components/flow-details-phase/gio-ps-flow-details-phase.harness.mjs +19 -5
- package/esm2020/testing/lib/components/flow-details-phase-step/gio-ps-flow-details-phase-step.harness.mjs +38 -0
- package/esm2020/testing/lib/components/policies-catalog-dialog/gio-ps-policies-catalog-dialog.harness.mjs +55 -0
- package/esm2020/testing/lib/components/step-edit-dialog/gio-ps-step-edit-dialog.harness.mjs +30 -0
- package/esm2020/testing/lib/components/step-form/gio-ps-step-form.harness.mjs +37 -0
- package/esm2020/testing/lib/gio-policy-studio.harness.mjs +43 -5
- package/esm2020/testing/lib/models/PolicySchemaFetcher.mjs +2 -0
- package/esm2020/testing/lib/models/flow/Step.fixture.mjs +10 -9
- package/esm2020/testing/lib/models/index-testing.mjs +2 -1
- package/esm2020/testing/lib/models/index.mjs +3 -1
- package/esm2020/testing/lib/models/policy/Policy.fixture.mjs +133 -0
- package/esm2020/testing/lib/models/policy/Policy.mjs +2 -0
- package/esm2020/testing/lib/models/policy/index-testing.mjs +17 -0
- package/esm2020/testing/lib/models/policy/index.mjs +17 -0
- package/fesm2015/gravitee-ui-policy-studio-angular-testing.mjs +316 -20
- package/fesm2015/gravitee-ui-policy-studio-angular-testing.mjs.map +1 -1
- package/fesm2015/gravitee-ui-policy-studio-angular.mjs +397 -32
- package/fesm2015/gravitee-ui-policy-studio-angular.mjs.map +1 -1
- package/fesm2020/gravitee-ui-policy-studio-angular-testing.mjs +336 -20
- package/fesm2020/gravitee-ui-policy-studio-angular-testing.mjs.map +1 -1
- package/fesm2020/gravitee-ui-policy-studio-angular.mjs +403 -32
- package/fesm2020/gravitee-ui-policy-studio-angular.mjs.map +1 -1
- package/lib/components/flow-details/gio-ps-flow-details.component.d.ts +4 -2
- package/lib/components/flow-details-phase/gio-ps-flow-details-phase.component.d.ts +15 -5
- package/lib/components/flow-details-phase-step/gio-ps-flow-details-phase-step.component.d.ts +18 -0
- package/lib/components/policies-catalog-dialog/gio-ps-policies-catalog-dialog.component.d.ts +23 -0
- package/lib/components/step-edit-dialog/gio-ps-step-edit-dialog.component.d.ts +18 -0
- package/lib/components/step-form/gio-ps-step-form.component.d.ts +23 -0
- package/lib/gio-policy-studio.component.d.ts +31 -2
- package/lib/gio-policy-studio.module.d.ts +17 -14
- package/lib/gio-policy-studio.service.d.ts +26 -0
- package/lib/models/PolicySchemaFetcher.d.ts +4 -0
- package/lib/models/index.d.ts +2 -0
- package/lib/models/policy/Policy.d.ts +11 -0
- package/lib/models/policy/index.d.ts +1 -0
- package/package.json +1 -1
- package/testing/lib/components/flow-details-phase/gio-ps-flow-details-phase.harness.d.ts +11 -4
- package/testing/lib/components/{flow-details-phase-policy/gio-ps-flow-details-phase-policy.harness.d.ts → flow-details-phase-step/gio-ps-flow-details-phase-step.harness.d.ts} +4 -3
- package/testing/lib/components/policies-catalog-dialog/gio-ps-policies-catalog-dialog.harness.d.ts +12 -0
- package/testing/lib/components/step-edit-dialog/gio-ps-step-edit-dialog.harness.d.ts +8 -0
- package/testing/lib/components/step-form/gio-ps-step-form.harness.d.ts +11 -0
- package/testing/lib/gio-policy-studio.harness.d.ts +22 -6
- package/testing/lib/models/PolicySchemaFetcher.d.ts +4 -0
- package/testing/lib/models/flow/Step.fixture.d.ts +2 -2
- package/testing/lib/models/index-testing.d.ts +1 -0
- package/testing/lib/models/index.d.ts +2 -0
- package/testing/lib/models/policy/Policy.d.ts +11 -0
- package/testing/lib/models/policy/Policy.fixture.d.ts +4 -0
- package/testing/lib/models/policy/index-testing.d.ts +1 -0
- package/testing/lib/models/policy/index.d.ts +1 -0
- package/esm2020/lib/components/flow-details-phase-policy/gio-ps-flow-details-phase-policy.component.mjs +0 -41
- package/esm2020/testing/lib/components/flow-details-phase-policy/gio-ps-flow-details-phase-policy.harness.mjs +0 -33
- package/lib/components/flow-details-phase-policy/gio-ps-flow-details-phase-policy.component.d.ts +0 -10
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
|
-
import { Component, Inject, Input,
|
|
2
|
+
import { Component, Inject, Input, EventEmitter, Output, Pipe, NgModule } from '@angular/core';
|
|
3
3
|
import * as i2 from '@angular/material/button';
|
|
4
4
|
import { MatButtonModule } from '@angular/material/button';
|
|
5
5
|
import * as i4$1 from '@gravitee/ui-particles-angular';
|
|
6
6
|
import { GioIconsModule, GioFormSlideToggleModule, GioFormTagsInputModule, GioBannerModule } from '@gravitee/ui-particles-angular';
|
|
7
7
|
import * as i5$1 from '@angular/common';
|
|
8
8
|
import { CommonModule } from '@angular/common';
|
|
9
|
-
import * as
|
|
9
|
+
import * as i7 from '@angular/material/tooltip';
|
|
10
10
|
import { MatTooltipModule } from '@angular/material/tooltip';
|
|
11
11
|
import * as i1 from '@angular/material/dialog';
|
|
12
12
|
import { MAT_DIALOG_DATA, MatDialogModule } from '@angular/material/dialog';
|
|
@@ -18,16 +18,18 @@ import * as i5 from '@angular/material/select';
|
|
|
18
18
|
import { MatSelectModule } from '@angular/material/select';
|
|
19
19
|
import * as i8 from '@angular/forms';
|
|
20
20
|
import { FormGroup, FormControl, ReactiveFormsModule } from '@angular/forms';
|
|
21
|
-
import * as i6$
|
|
21
|
+
import * as i6$1 from '@angular/material/tabs';
|
|
22
22
|
import { MatTabsModule } from '@angular/material/tabs';
|
|
23
23
|
import * as i8$1 from '@angular/material/slide-toggle';
|
|
24
24
|
import { MatSlideToggleModule } from '@angular/material/slide-toggle';
|
|
25
|
-
import * as
|
|
25
|
+
import * as i4$2 from '@angular/material/menu';
|
|
26
26
|
import { MatMenuModule } from '@angular/material/menu';
|
|
27
27
|
import { cloneDeep, uniqueId, isEmpty, filter, isEqual, flatten, differenceBy, omit, unionBy } from 'lodash';
|
|
28
28
|
import * as i3 from '@angular/material/icon';
|
|
29
29
|
import * as i6 from '@angular/material/core';
|
|
30
|
-
import { tap } from 'rxjs/operators';
|
|
30
|
+
import { shareReplay, takeUntil, startWith, tap } from 'rxjs/operators';
|
|
31
|
+
import { of, Subject, EMPTY } from 'rxjs';
|
|
32
|
+
import { __decorate } from 'tslib';
|
|
31
33
|
|
|
32
34
|
/*
|
|
33
35
|
* Copyright (C) 2015 The Gravitee team (http://gravitee.io)
|
|
@@ -104,6 +106,22 @@ const toHttpMethod = (value) => {
|
|
|
104
106
|
* limitations under the License.
|
|
105
107
|
*/
|
|
106
108
|
|
|
109
|
+
/*
|
|
110
|
+
* Copyright (C) 2023 The Gravitee team (http://gravitee.io)
|
|
111
|
+
*
|
|
112
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
113
|
+
* you may not use this file except in compliance with the License.
|
|
114
|
+
* You may obtain a copy of the License at
|
|
115
|
+
*
|
|
116
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
117
|
+
*
|
|
118
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
119
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
120
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
121
|
+
* See the License for the specific language governing permissions and
|
|
122
|
+
* limitations under the License.
|
|
123
|
+
*/
|
|
124
|
+
|
|
107
125
|
/*
|
|
108
126
|
* Copyright (C) 2022 The Gravitee team (http://gravitee.io)
|
|
109
127
|
*
|
|
@@ -398,9 +416,263 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
|
|
|
398
416
|
* See the License for the specific language governing permissions and
|
|
399
417
|
* limitations under the License.
|
|
400
418
|
*/
|
|
401
|
-
class
|
|
419
|
+
let GioPolicyStudioService = class GioPolicyStudioService {
|
|
420
|
+
constructor() {
|
|
421
|
+
this.schemasCache = {};
|
|
422
|
+
this.documentationsCache = {};
|
|
423
|
+
}
|
|
424
|
+
setPolicySchemaFetcher(policySchemaFetcher) {
|
|
425
|
+
this.policySchemaFetcher = policySchemaFetcher;
|
|
426
|
+
}
|
|
427
|
+
setPolicyDocumentationFetcher(policyDocumentationFetcher) {
|
|
428
|
+
this.policyDocumentationFetcher = policyDocumentationFetcher;
|
|
429
|
+
}
|
|
430
|
+
/**
|
|
431
|
+
* Call the policy schema fetcher to get the schema for the given policy. If the
|
|
432
|
+
* schema has already been fetched, it will be returned from the cache.
|
|
433
|
+
*
|
|
434
|
+
* @param policy to get the schema for
|
|
435
|
+
* @returns the schema for the policy
|
|
436
|
+
*/
|
|
437
|
+
getPolicySchema(policy) {
|
|
438
|
+
if (!this.policySchemaFetcher)
|
|
439
|
+
throw new Error('PolicySchemaFetcher not defined!');
|
|
440
|
+
if (this.schemasCache[policy.id]) {
|
|
441
|
+
return of(this.schemasCache[policy.id]).pipe(shareReplay(1));
|
|
442
|
+
}
|
|
443
|
+
return this.policySchemaFetcher(policy);
|
|
444
|
+
}
|
|
445
|
+
/**
|
|
446
|
+
* Call the policy documentation fetcher to get the documentation for the given policy. If the
|
|
447
|
+
* documentation has already been fetched, it will be returned from the cache.
|
|
448
|
+
*
|
|
449
|
+
* @param policy to get the documentation for
|
|
450
|
+
* @returns the documentation for the policy
|
|
451
|
+
*/
|
|
452
|
+
getPolicyDocumentation(policy) {
|
|
453
|
+
if (!this.policyDocumentationFetcher)
|
|
454
|
+
throw new Error('PolicyDocumentationFetcher not defined!');
|
|
455
|
+
if (this.documentationsCache[policy.id]) {
|
|
456
|
+
return of(this.documentationsCache[policy.id]).pipe(shareReplay(1));
|
|
457
|
+
}
|
|
458
|
+
return this.policyDocumentationFetcher(policy);
|
|
459
|
+
}
|
|
460
|
+
};
|
|
461
|
+
GioPolicyStudioService = __decorate([
|
|
462
|
+
Inject({})
|
|
463
|
+
], GioPolicyStudioService);
|
|
464
|
+
|
|
465
|
+
/*
|
|
466
|
+
* Copyright (C) 2022 The Gravitee team (http://gravitee.io)
|
|
467
|
+
*
|
|
468
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
469
|
+
* you may not use this file except in compliance with the License.
|
|
470
|
+
* You may obtain a copy of the License at
|
|
471
|
+
*
|
|
472
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
473
|
+
*
|
|
474
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
475
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
476
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
477
|
+
* See the License for the specific language governing permissions and
|
|
478
|
+
* limitations under the License.
|
|
479
|
+
*/
|
|
480
|
+
class GioPolicyStudioStepFormComponent {
|
|
481
|
+
constructor(policyStudioService) {
|
|
482
|
+
this.policyStudioService = policyStudioService;
|
|
483
|
+
this.stepChange = new EventEmitter();
|
|
484
|
+
this.isValid = new EventEmitter();
|
|
485
|
+
this.unsubscribe$ = new Subject();
|
|
486
|
+
}
|
|
487
|
+
ngOnChanges(changes) {
|
|
488
|
+
if (changes.policy) {
|
|
489
|
+
this.policySchema$ = this.policyStudioService.getPolicySchema(this.policy);
|
|
490
|
+
this.policyDocumentation$ = this.policyStudioService.getPolicyDocumentation(this.policy);
|
|
491
|
+
}
|
|
492
|
+
if (changes.step && !changes.step.firstChange) {
|
|
493
|
+
this.initStepForm();
|
|
494
|
+
}
|
|
495
|
+
}
|
|
496
|
+
ngOnInit() {
|
|
497
|
+
this.initStepForm();
|
|
498
|
+
}
|
|
499
|
+
ngOnDestroy() {
|
|
500
|
+
this.unsubscribe$.next();
|
|
501
|
+
this.unsubscribe$.complete();
|
|
502
|
+
}
|
|
503
|
+
initStepForm() {
|
|
504
|
+
var _a;
|
|
505
|
+
this.stepForm = new FormGroup({
|
|
506
|
+
description: new FormControl((_a = this.step) === null || _a === void 0 ? void 0 : _a.description, []),
|
|
507
|
+
});
|
|
508
|
+
this.stepForm.valueChanges.pipe(takeUntil(this.unsubscribe$)).subscribe(() => {
|
|
509
|
+
var _a, _b;
|
|
510
|
+
this.stepChange.emit(Object.assign(Object.assign({}, this.step), { description: (_b = (_a = this.stepForm) === null || _a === void 0 ? void 0 : _a.get('description')) === null || _b === void 0 ? void 0 : _b.value }));
|
|
511
|
+
});
|
|
512
|
+
this.stepForm.statusChanges.pipe(takeUntil(this.unsubscribe$), startWith(this.stepForm.status)).subscribe(valid => {
|
|
513
|
+
this.isValid.emit(valid === 'VALID');
|
|
514
|
+
});
|
|
515
|
+
}
|
|
516
|
+
}
|
|
517
|
+
GioPolicyStudioStepFormComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: GioPolicyStudioStepFormComponent, deps: [{ token: GioPolicyStudioService }], target: i0.ɵɵFactoryTarget.Component });
|
|
518
|
+
GioPolicyStudioStepFormComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.12", type: GioPolicyStudioStepFormComponent, selector: "gio-ps-step-form", inputs: { step: "step", policy: "policy" }, outputs: { stepChange: "stepChange", isValid: "isValid" }, usesOnChanges: true, ngImport: i0, template: "<!--\n\n Copyright (C) 2023 The Gravitee team (http://gravitee.io)\n \n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n \n http://www.apache.org/licenses/LICENSE-2.0\n \n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n\n-->\n\n<div class=\"settings\">\n <div class=\"settings__header\">Settings</div>\n\n <div *ngIf=\"stepForm\" class=\"settings__content\" [formGroup]=\"stepForm\">\n <mat-form-field>\n <mat-label>Description</mat-label>\n <input matInput formControlName=\"description\" cdkFocusInitial />\n <mat-hint>Describe how your policy works.</mat-hint>\n </mat-form-field>\n\n <ng-container *ngIf=\"policySchema$\">\n {{ $any(policySchema$) | async | json }}\n </ng-container>\n </div>\n</div>\n\n<div class=\"documentation\">\n <div class=\"documentation__header\">Documentation</div>\n\n <div class=\"documentation__content\">\n <ng-container *ngIf=\"policyDocumentation$\">\n {{ $any(policyDocumentation$) | async }}\n </ng-container>\n </div>\n</div>\n", styles: [":host{display:flex;flex-direction:row;border:1px solid #d3d5dc;border-radius:8px}.settings{display:flex;flex:1 1 50%;flex-direction:column}.settings__header{border-right:1px solid #d3d5dc}.settings__content{display:flex;flex-direction:column;padding:16px;border-right:1px solid #d3d5dc}.documentation{display:flex;flex:1 1 50%;flex-direction:column}.documentation__content{padding:16px}.settings__header,.documentation__header{padding:16px;border-bottom:1px solid #d3d5dc;font:600 14px/20px Golos UI,Roboto,Helvetica Neue,sans-serif;letter-spacing:.4px}\n"], components: [{ type: i4.MatFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }], directives: [{ type: i5$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i8.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i8.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i4.MatLabel, selector: "mat-label" }, { type: i9.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { type: i8.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i8.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i8.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { type: i4.MatHint, selector: "mat-hint", inputs: ["align", "id"] }], pipes: { "json": i5$1.JsonPipe, "async": i5$1.AsyncPipe } });
|
|
519
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: GioPolicyStudioStepFormComponent, decorators: [{
|
|
520
|
+
type: Component,
|
|
521
|
+
args: [{ selector: 'gio-ps-step-form', template: "<!--\n\n Copyright (C) 2023 The Gravitee team (http://gravitee.io)\n \n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n \n http://www.apache.org/licenses/LICENSE-2.0\n \n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n\n-->\n\n<div class=\"settings\">\n <div class=\"settings__header\">Settings</div>\n\n <div *ngIf=\"stepForm\" class=\"settings__content\" [formGroup]=\"stepForm\">\n <mat-form-field>\n <mat-label>Description</mat-label>\n <input matInput formControlName=\"description\" cdkFocusInitial />\n <mat-hint>Describe how your policy works.</mat-hint>\n </mat-form-field>\n\n <ng-container *ngIf=\"policySchema$\">\n {{ $any(policySchema$) | async | json }}\n </ng-container>\n </div>\n</div>\n\n<div class=\"documentation\">\n <div class=\"documentation__header\">Documentation</div>\n\n <div class=\"documentation__content\">\n <ng-container *ngIf=\"policyDocumentation$\">\n {{ $any(policyDocumentation$) | async }}\n </ng-container>\n </div>\n</div>\n", styles: [":host{display:flex;flex-direction:row;border:1px solid #d3d5dc;border-radius:8px}.settings{display:flex;flex:1 1 50%;flex-direction:column}.settings__header{border-right:1px solid #d3d5dc}.settings__content{display:flex;flex-direction:column;padding:16px;border-right:1px solid #d3d5dc}.documentation{display:flex;flex:1 1 50%;flex-direction:column}.documentation__content{padding:16px}.settings__header,.documentation__header{padding:16px;border-bottom:1px solid #d3d5dc;font:600 14px/20px Golos UI,Roboto,Helvetica Neue,sans-serif;letter-spacing:.4px}\n"] }]
|
|
522
|
+
}], ctorParameters: function () { return [{ type: GioPolicyStudioService }]; }, propDecorators: { step: [{
|
|
523
|
+
type: Input
|
|
524
|
+
}], policy: [{
|
|
525
|
+
type: Input
|
|
526
|
+
}], stepChange: [{
|
|
527
|
+
type: Output
|
|
528
|
+
}], isValid: [{
|
|
529
|
+
type: Output
|
|
530
|
+
}] } });
|
|
531
|
+
|
|
532
|
+
/*
|
|
533
|
+
* Copyright (C) 2015 The Gravitee team (http://gravitee.io)
|
|
534
|
+
*
|
|
535
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
536
|
+
* you may not use this file except in compliance with the License.
|
|
537
|
+
* You may obtain a copy of the License at
|
|
538
|
+
*
|
|
539
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
540
|
+
*
|
|
541
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
542
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
543
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
544
|
+
* See the License for the specific language governing permissions and
|
|
545
|
+
* limitations under the License.
|
|
546
|
+
*/
|
|
547
|
+
const executionPhaseLabels = {
|
|
548
|
+
REQUEST: 'Request',
|
|
549
|
+
RESPONSE: 'Response',
|
|
550
|
+
MESSAGE_REQUEST: 'Publish',
|
|
551
|
+
MESSAGE_RESPONSE: 'Subscribe',
|
|
552
|
+
};
|
|
553
|
+
class GioPolicyStudioPoliciesCatalogDialogComponent {
|
|
554
|
+
constructor(dialogRef, flowDialogData) {
|
|
555
|
+
this.dialogRef = dialogRef;
|
|
556
|
+
this.policies = [];
|
|
557
|
+
this.isValid = false;
|
|
558
|
+
this.policies = flowDialogData.policies.filter(policy => {
|
|
559
|
+
var _a, _b;
|
|
560
|
+
if (flowDialogData.apiType === 'PROXY') {
|
|
561
|
+
return (_a = policy.proxy) === null || _a === void 0 ? void 0 : _a.includes(flowDialogData.executionPhase);
|
|
562
|
+
}
|
|
563
|
+
return (_b = policy.message) === null || _b === void 0 ? void 0 : _b.includes(flowDialogData.executionPhase);
|
|
564
|
+
});
|
|
565
|
+
this.executionPhaseLabel = executionPhaseLabels[flowDialogData.executionPhase];
|
|
566
|
+
}
|
|
567
|
+
onSelectPolicy(policy) {
|
|
568
|
+
this.selectedPolicy = policy;
|
|
569
|
+
}
|
|
570
|
+
onAddPolicy() {
|
|
571
|
+
var _a, _b;
|
|
572
|
+
this.dialogRef.close(Object.assign(Object.assign({}, this.stepToAdd), { name: (_a = this.selectedPolicy) === null || _a === void 0 ? void 0 : _a.name, enabled: true, policy: (_b = this.selectedPolicy) === null || _b === void 0 ? void 0 : _b.id }));
|
|
573
|
+
}
|
|
574
|
+
onGoBack() {
|
|
575
|
+
this.selectedPolicy = undefined;
|
|
576
|
+
}
|
|
577
|
+
}
|
|
578
|
+
GioPolicyStudioPoliciesCatalogDialogComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: GioPolicyStudioPoliciesCatalogDialogComponent, deps: [{ token: i1.MatDialogRef }, { token: MAT_DIALOG_DATA }], target: i0.ɵɵFactoryTarget.Component });
|
|
579
|
+
GioPolicyStudioPoliciesCatalogDialogComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.12", type: GioPolicyStudioPoliciesCatalogDialogComponent, selector: "gio-ps-policies-catalog-dialog", ngImport: i0, template: "<!--\n\n Copyright (C) 2015 The Gravitee team (http://gravitee.io)\n\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n\n-->\n<h2 mat-dialog-title class=\"title\">\n Policies for <span class=\"title__phase\">{{ executionPhaseLabel }}</span> phase\n\n <button class=\"title__closeBtn\" mat-icon-button aria-label=\"Close dialog\" [mat-dialog-close]=\"\">\n <mat-icon svgIcon=\"gio:cancel\"></mat-icon>\n </button>\n</h2>\n\n<mat-dialog-content *ngIf=\"!selectedPolicy\" class=\"policiesCatalog\">\n <div *ngFor=\"let policy of policies\" class=\"policiesCatalog__policy\">\n <div class=\"policiesCatalog__policy__head\">\n <mat-icon class=\"policiesCatalog__policy__head__icon\" [svgIcon]=\"policy.icon ?? 'gio:puzzle'\"></mat-icon>\n\n <span *ngIf=\"policy.name\" class=\"policiesCatalog__policy__head__name\">{{ policy.name }}</span>\n </div>\n\n <div *ngIf=\"policy.description\" class=\"policiesCatalog__policy__description\">{{ policy.description }}</div>\n\n <button class=\"policiesCatalog__policy__selectBtn\" mat-stroked-button role=\"dialog\" (click)=\"onSelectPolicy(policy)\">Select</button>\n </div>\n</mat-dialog-content>\n\n<mat-dialog-content *ngIf=\"selectedPolicy\" class=\"policyForm\">\n <button class=\"policyForm__goBackBtn\" mat-stroked-button (click)=\"onGoBack()\">\n <mat-icon svgIcon=\"gio:arrow-left\"></mat-icon>\n Go back\n </button>\n\n <div class=\"policyForm__info\">\n <div class=\"policyForm__info__head\">\n <mat-icon class=\"policyForm__info__head__icon\" [svgIcon]=\"selectedPolicy.icon ?? 'gio:puzzle'\"></mat-icon>\n\n <span *ngIf=\"selectedPolicy.name\" class=\"policyForm__info__head__name\">{{ selectedPolicy.name }}</span>\n </div>\n\n <div *ngIf=\"selectedPolicy.description\" class=\"policyForm__info__description\">{{ selectedPolicy.description }}</div>\n </div>\n\n <gio-ps-step-form [policy]=\"selectedPolicy\" [(step)]=\"stepToAdd\" (isValid)=\"isValid = $event\"></gio-ps-step-form>\n</mat-dialog-content>\n\n<mat-dialog-actions class=\"actions\">\n <button class=\"actions__cancelBtn\" mat-flat-button [mat-dialog-close]=\"\">Cancel</button>\n <button\n *ngIf=\"selectedPolicy\"\n class=\"actions__addBtn\"\n color=\"primary\"\n mat-stroked-button\n role=\"dialog\"\n [disabled]=\"!isValid\"\n (click)=\"onAddPolicy()\"\n >\n Add policy\n </button>\n</mat-dialog-actions>\n", styles: [".title__closeBtn{top:-20px;right:-20px;float:right}.policiesCatalog{--grid-layout-gap: 16px;--grid-column-count: 4;--grid-item-min-width: 200px;--gap-count: calc(var(--grid-column-count) - 1);--total-gap-width: calc(var(--gap-count) * var(--grid-layout-gap));--grid-item-max-width: calc((100% - var(--total-gap-width)) / var(--grid-column-count));display:grid;grid-gap:var(--grid-layout-gap);grid-template-columns:repeat(auto-fill,minmax(max(var(--grid-item-min-width),var(--grid-item-max-width)),1fr))}.policiesCatalog__policy{display:flex;flex-direction:column;align-items:flex-start;justify-content:space-between;padding:16px;border:1px solid #d3d5dc;border-radius:8px;gap:4px}.policiesCatalog__policy__head{display:flex;max-width:100%;align-items:center}.policiesCatalog__policy__head__icon{min-width:24px;flex:1 1 24px;margin-right:8px}.policiesCatalog__policy__head__name{overflow:hidden;flex:1 1 auto;text-overflow:ellipsis;white-space:nowrap}.policiesCatalog__policy__description{font:400 12px/16px Golos UI,Roboto,Helvetica Neue,sans-serif;letter-spacing:normal;display:-webkit-box;overflow:hidden;-webkit-box-orient:vertical;color:#606274;-webkit-line-clamp:2}.policiesCatalog__policy__description:empty{display:none}.policiesCatalog__policy__selectBtn{margin-top:8px}.policyForm__goBackBtn{margin:16px 0}.policyForm__info{display:flex;max-width:100%;flex-direction:column;align-items:flex-start;padding-bottom:16px;gap:4px}.policyForm__info__head{display:flex;align-items:center}.policyForm__info__head__icon{min-width:24px;flex:1 1 24px;margin-right:8px}.policyForm__info__head__name{flex:1 1 auto}.policyForm__info__description{font:400 12px/16px Golos UI,Roboto,Helvetica Neue,sans-serif;letter-spacing:normal;color:#606274}\n"], components: [{ type: i2.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { type: i3.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { type: GioPolicyStudioStepFormComponent, selector: "gio-ps-step-form", inputs: ["step", "policy"], outputs: ["stepChange", "isValid"] }], directives: [{ type: i1.MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { type: i1.MatDialogClose, selector: "[mat-dialog-close], [matDialogClose]", inputs: ["aria-label", "type", "mat-dialog-close", "matDialogClose"], exportAs: ["matDialogClose"] }, { type: i5$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i1.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { type: i5$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i1.MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]" }] });
|
|
580
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: GioPolicyStudioPoliciesCatalogDialogComponent, decorators: [{
|
|
581
|
+
type: Component,
|
|
582
|
+
args: [{ selector: 'gio-ps-policies-catalog-dialog', template: "<!--\n\n Copyright (C) 2015 The Gravitee team (http://gravitee.io)\n\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n\n-->\n<h2 mat-dialog-title class=\"title\">\n Policies for <span class=\"title__phase\">{{ executionPhaseLabel }}</span> phase\n\n <button class=\"title__closeBtn\" mat-icon-button aria-label=\"Close dialog\" [mat-dialog-close]=\"\">\n <mat-icon svgIcon=\"gio:cancel\"></mat-icon>\n </button>\n</h2>\n\n<mat-dialog-content *ngIf=\"!selectedPolicy\" class=\"policiesCatalog\">\n <div *ngFor=\"let policy of policies\" class=\"policiesCatalog__policy\">\n <div class=\"policiesCatalog__policy__head\">\n <mat-icon class=\"policiesCatalog__policy__head__icon\" [svgIcon]=\"policy.icon ?? 'gio:puzzle'\"></mat-icon>\n\n <span *ngIf=\"policy.name\" class=\"policiesCatalog__policy__head__name\">{{ policy.name }}</span>\n </div>\n\n <div *ngIf=\"policy.description\" class=\"policiesCatalog__policy__description\">{{ policy.description }}</div>\n\n <button class=\"policiesCatalog__policy__selectBtn\" mat-stroked-button role=\"dialog\" (click)=\"onSelectPolicy(policy)\">Select</button>\n </div>\n</mat-dialog-content>\n\n<mat-dialog-content *ngIf=\"selectedPolicy\" class=\"policyForm\">\n <button class=\"policyForm__goBackBtn\" mat-stroked-button (click)=\"onGoBack()\">\n <mat-icon svgIcon=\"gio:arrow-left\"></mat-icon>\n Go back\n </button>\n\n <div class=\"policyForm__info\">\n <div class=\"policyForm__info__head\">\n <mat-icon class=\"policyForm__info__head__icon\" [svgIcon]=\"selectedPolicy.icon ?? 'gio:puzzle'\"></mat-icon>\n\n <span *ngIf=\"selectedPolicy.name\" class=\"policyForm__info__head__name\">{{ selectedPolicy.name }}</span>\n </div>\n\n <div *ngIf=\"selectedPolicy.description\" class=\"policyForm__info__description\">{{ selectedPolicy.description }}</div>\n </div>\n\n <gio-ps-step-form [policy]=\"selectedPolicy\" [(step)]=\"stepToAdd\" (isValid)=\"isValid = $event\"></gio-ps-step-form>\n</mat-dialog-content>\n\n<mat-dialog-actions class=\"actions\">\n <button class=\"actions__cancelBtn\" mat-flat-button [mat-dialog-close]=\"\">Cancel</button>\n <button\n *ngIf=\"selectedPolicy\"\n class=\"actions__addBtn\"\n color=\"primary\"\n mat-stroked-button\n role=\"dialog\"\n [disabled]=\"!isValid\"\n (click)=\"onAddPolicy()\"\n >\n Add policy\n </button>\n</mat-dialog-actions>\n", styles: [".title__closeBtn{top:-20px;right:-20px;float:right}.policiesCatalog{--grid-layout-gap: 16px;--grid-column-count: 4;--grid-item-min-width: 200px;--gap-count: calc(var(--grid-column-count) - 1);--total-gap-width: calc(var(--gap-count) * var(--grid-layout-gap));--grid-item-max-width: calc((100% - var(--total-gap-width)) / var(--grid-column-count));display:grid;grid-gap:var(--grid-layout-gap);grid-template-columns:repeat(auto-fill,minmax(max(var(--grid-item-min-width),var(--grid-item-max-width)),1fr))}.policiesCatalog__policy{display:flex;flex-direction:column;align-items:flex-start;justify-content:space-between;padding:16px;border:1px solid #d3d5dc;border-radius:8px;gap:4px}.policiesCatalog__policy__head{display:flex;max-width:100%;align-items:center}.policiesCatalog__policy__head__icon{min-width:24px;flex:1 1 24px;margin-right:8px}.policiesCatalog__policy__head__name{overflow:hidden;flex:1 1 auto;text-overflow:ellipsis;white-space:nowrap}.policiesCatalog__policy__description{font:400 12px/16px Golos UI,Roboto,Helvetica Neue,sans-serif;letter-spacing:normal;display:-webkit-box;overflow:hidden;-webkit-box-orient:vertical;color:#606274;-webkit-line-clamp:2}.policiesCatalog__policy__description:empty{display:none}.policiesCatalog__policy__selectBtn{margin-top:8px}.policyForm__goBackBtn{margin:16px 0}.policyForm__info{display:flex;max-width:100%;flex-direction:column;align-items:flex-start;padding-bottom:16px;gap:4px}.policyForm__info__head{display:flex;align-items:center}.policyForm__info__head__icon{min-width:24px;flex:1 1 24px;margin-right:8px}.policyForm__info__head__name{flex:1 1 auto}.policyForm__info__description{font:400 12px/16px Golos UI,Roboto,Helvetica Neue,sans-serif;letter-spacing:normal;color:#606274}\n"] }]
|
|
583
|
+
}], ctorParameters: function () {
|
|
584
|
+
return [{ type: i1.MatDialogRef }, { type: undefined, decorators: [{
|
|
585
|
+
type: Inject,
|
|
586
|
+
args: [MAT_DIALOG_DATA]
|
|
587
|
+
}] }];
|
|
588
|
+
} });
|
|
589
|
+
|
|
590
|
+
/*
|
|
591
|
+
* Copyright (C) 2015 The Gravitee team (http://gravitee.io)
|
|
592
|
+
*
|
|
593
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
594
|
+
* you may not use this file except in compliance with the License.
|
|
595
|
+
* You may obtain a copy of the License at
|
|
596
|
+
*
|
|
597
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
598
|
+
*
|
|
599
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
600
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
601
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
602
|
+
* See the License for the specific language governing permissions and
|
|
603
|
+
* limitations under the License.
|
|
604
|
+
*/
|
|
605
|
+
class GioPolicyStudioStepEditDialogComponent {
|
|
606
|
+
constructor(dialogRef, flowDialogData) {
|
|
607
|
+
this.dialogRef = dialogRef;
|
|
608
|
+
this.isValid = false;
|
|
609
|
+
this.policy = flowDialogData.policy;
|
|
610
|
+
this.step = flowDialogData.step;
|
|
611
|
+
}
|
|
612
|
+
onSave() {
|
|
613
|
+
this.dialogRef.close(Object.assign({}, this.step));
|
|
614
|
+
}
|
|
615
|
+
}
|
|
616
|
+
GioPolicyStudioStepEditDialogComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: GioPolicyStudioStepEditDialogComponent, deps: [{ token: i1.MatDialogRef }, { token: MAT_DIALOG_DATA }], target: i0.ɵɵFactoryTarget.Component });
|
|
617
|
+
GioPolicyStudioStepEditDialogComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.12", type: GioPolicyStudioStepEditDialogComponent, selector: "gio-ps-step-edit-dialog", ngImport: i0, template: "<!--\n\n Copyright (C) 2015 The Gravitee team (http://gravitee.io)\n\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n\n-->\n<h2 mat-dialog-title class=\"title\">\n <mat-icon class=\"title__icon\" [svgIcon]=\"policy.icon ?? 'gio:puzzle'\"></mat-icon>\n\n <span *ngIf=\"step.name\" class=\"title__name\">{{ step.name }}</span>\n\n <button class=\"title__closeBtn\" mat-icon-button aria-label=\"Close dialog\" [mat-dialog-close]=\"\">\n <mat-icon svgIcon=\"gio:cancel\"></mat-icon>\n </button>\n\n <div class=\"title__description\">\n {{ policy.description }}\n </div>\n</h2>\n\n<mat-dialog-content class=\"content\">\n <gio-ps-step-form [policy]=\"policy\" [(step)]=\"step\" (isValid)=\"isValid = $event\"></gio-ps-step-form>\n</mat-dialog-content>\n\n<mat-dialog-actions class=\"actions\">\n <button class=\"actions__cancelBtn\" mat-flat-button [mat-dialog-close]=\"\">Cancel</button>\n <button class=\"actions__saveBtn\" color=\"primary\" mat-stroked-button role=\"dialog\" (click)=\"onSave()\" [disabled]=\"!isValid\">Save</button>\n</mat-dialog-actions>\n", styles: [".title__icon{margin-right:8px}.title__closeBtn{top:-20px;right:-20px;float:right}.title__description{font:400 12px/16px Golos UI,Roboto,Helvetica Neue,sans-serif;letter-spacing:normal;color:#606274}\n"], components: [{ type: i3.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { type: i2.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { type: GioPolicyStudioStepFormComponent, selector: "gio-ps-step-form", inputs: ["step", "policy"], outputs: ["stepChange", "isValid"] }], directives: [{ type: i1.MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { type: i5$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i1.MatDialogClose, selector: "[mat-dialog-close], [matDialogClose]", inputs: ["aria-label", "type", "mat-dialog-close", "matDialogClose"], exportAs: ["matDialogClose"] }, { type: i1.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { type: i1.MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]" }] });
|
|
618
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: GioPolicyStudioStepEditDialogComponent, decorators: [{
|
|
619
|
+
type: Component,
|
|
620
|
+
args: [{ selector: 'gio-ps-step-edit-dialog', template: "<!--\n\n Copyright (C) 2015 The Gravitee team (http://gravitee.io)\n\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n\n-->\n<h2 mat-dialog-title class=\"title\">\n <mat-icon class=\"title__icon\" [svgIcon]=\"policy.icon ?? 'gio:puzzle'\"></mat-icon>\n\n <span *ngIf=\"step.name\" class=\"title__name\">{{ step.name }}</span>\n\n <button class=\"title__closeBtn\" mat-icon-button aria-label=\"Close dialog\" [mat-dialog-close]=\"\">\n <mat-icon svgIcon=\"gio:cancel\"></mat-icon>\n </button>\n\n <div class=\"title__description\">\n {{ policy.description }}\n </div>\n</h2>\n\n<mat-dialog-content class=\"content\">\n <gio-ps-step-form [policy]=\"policy\" [(step)]=\"step\" (isValid)=\"isValid = $event\"></gio-ps-step-form>\n</mat-dialog-content>\n\n<mat-dialog-actions class=\"actions\">\n <button class=\"actions__cancelBtn\" mat-flat-button [mat-dialog-close]=\"\">Cancel</button>\n <button class=\"actions__saveBtn\" color=\"primary\" mat-stroked-button role=\"dialog\" (click)=\"onSave()\" [disabled]=\"!isValid\">Save</button>\n</mat-dialog-actions>\n", styles: [".title__icon{margin-right:8px}.title__closeBtn{top:-20px;right:-20px;float:right}.title__description{font:400 12px/16px Golos UI,Roboto,Helvetica Neue,sans-serif;letter-spacing:normal;color:#606274}\n"] }]
|
|
621
|
+
}], ctorParameters: function () {
|
|
622
|
+
return [{ type: i1.MatDialogRef }, { type: undefined, decorators: [{
|
|
623
|
+
type: Inject,
|
|
624
|
+
args: [MAT_DIALOG_DATA]
|
|
625
|
+
}] }];
|
|
626
|
+
} });
|
|
627
|
+
|
|
628
|
+
/*
|
|
629
|
+
* Copyright (C) 2022 The Gravitee team (http://gravitee.io)
|
|
630
|
+
*
|
|
631
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
632
|
+
* you may not use this file except in compliance with the License.
|
|
633
|
+
* You may obtain a copy of the License at
|
|
634
|
+
*
|
|
635
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
636
|
+
*
|
|
637
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
638
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
639
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
640
|
+
* See the License for the specific language governing permissions and
|
|
641
|
+
* limitations under the License.
|
|
642
|
+
*/
|
|
643
|
+
class GioPolicyStudioDetailsPhaseStepComponent {
|
|
644
|
+
constructor(matDialog) {
|
|
645
|
+
this.matDialog = matDialog;
|
|
646
|
+
this.policies = [];
|
|
647
|
+
this.stepChange = new EventEmitter();
|
|
648
|
+
}
|
|
649
|
+
ngOnChanges(changes) {
|
|
650
|
+
if (changes.policies || changes.step) {
|
|
651
|
+
this.policy = this.policies.find(policy => policy.id === this.step.policy);
|
|
652
|
+
}
|
|
653
|
+
}
|
|
402
654
|
onEdit() {
|
|
403
|
-
|
|
655
|
+
if (!this.policy) {
|
|
656
|
+
// TODO: Handle UseCase when policy is not found. (Like if the plugin is removed from the BackEnd)
|
|
657
|
+
return;
|
|
658
|
+
}
|
|
659
|
+
this.matDialog
|
|
660
|
+
.open(GioPolicyStudioStepEditDialogComponent, {
|
|
661
|
+
data: {
|
|
662
|
+
policy: this.policy,
|
|
663
|
+
step: this.step,
|
|
664
|
+
},
|
|
665
|
+
role: 'alertdialog',
|
|
666
|
+
id: 'gioPolicyStudioPolicyFormDialog',
|
|
667
|
+
width: '1000px',
|
|
668
|
+
})
|
|
669
|
+
.afterClosed()
|
|
670
|
+
.subscribe(stepToEdit => {
|
|
671
|
+
if (!stepToEdit) {
|
|
672
|
+
return;
|
|
673
|
+
}
|
|
674
|
+
this.stepChange.emit(stepToEdit);
|
|
675
|
+
});
|
|
404
676
|
}
|
|
405
677
|
onDisable() {
|
|
406
678
|
throw new Error('Wip');
|
|
@@ -409,13 +681,17 @@ class GioPolicyStudioDetailsPhasePolicyComponent {
|
|
|
409
681
|
throw new Error('Wip');
|
|
410
682
|
}
|
|
411
683
|
}
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type:
|
|
684
|
+
GioPolicyStudioDetailsPhaseStepComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: GioPolicyStudioDetailsPhaseStepComponent, deps: [{ token: i1.MatDialog }], target: i0.ɵɵFactoryTarget.Component });
|
|
685
|
+
GioPolicyStudioDetailsPhaseStepComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.12", type: GioPolicyStudioDetailsPhaseStepComponent, selector: "gio-ps-flow-details-phase-step", inputs: { step: "step", policies: "policies" }, outputs: { stepChange: "stepChange" }, usesOnChanges: true, ngImport: i0, template: "<!--\n\n Copyright (C) 2023 The Gravitee team (http://gravitee.io)\n \n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n \n http://www.apache.org/licenses/LICENSE-2.0\n \n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n\n-->\n\n<div class=\"info\">\n <div class=\"info__head\">\n <mat-icon class=\"info__head__icon\" [svgIcon]=\"policy?.icon ?? 'gio:puzzle'\"></mat-icon>\n\n <span *ngIf=\"step.name\" class=\"info__head__name\">{{ step.name }}</span>\n </div>\n\n <div *ngIf=\"step.description\" class=\"info__description\">{{ step.description }}</div>\n</div>\n\n<button class=\"menuBtn\" mat-icon-button [matMenuTriggerFor]=\"policyMenu\"><mat-icon svgIcon=\"gio:more-vertical\"></mat-icon></button>\n\n<mat-menu #policyMenu=\"matMenu\">\n <button mat-menu-item (click)=\"onEdit()\">\n <mat-icon svgIcon=\"gio:edit-pencil\"></mat-icon>\n <span>Edit</span>\n </button>\n\n <button disabled mat-menu-item (click)=\"onDisable()\">\n <mat-icon svgIcon=\"gio:prohibition\"></mat-icon>\n <span>Disable \uD83D\uDEA7</span>\n </button>\n\n <button disabled mat-menu-item (click)=\"onDelete()\">\n <mat-icon svgIcon=\"gio:trash\"></mat-icon>\n <span>Delete \uD83D\uDEA7</span>\n </button>\n</mat-menu>\n", styles: [":host{display:flex;align-items:center;padding:8px;border:1px solid #d3d5dc;border-radius:8px}.info{display:flex;max-width:300px;flex-direction:column;margin-left:4px;gap:4px}.info__head{display:flex;align-items:center}.info__head__icon{min-width:24px;flex:1 1 24px;margin-right:8px}.info__head__name{overflow:hidden;flex:1 1 auto;text-overflow:ellipsis;white-space:nowrap}.info__description{font:400 12px/16px Golos UI,Roboto,Helvetica Neue,sans-serif;letter-spacing:normal;display:-webkit-box;overflow:hidden;-webkit-box-orient:vertical;color:#606274;-webkit-line-clamp:2}.info__description:empty{display:none}\n"], components: [{ type: i3.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { type: i2.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { type: i4$2.MatMenu, selector: "mat-menu", exportAs: ["matMenu"] }, { type: i4$2.MatMenuItem, selector: "[mat-menu-item]", inputs: ["disabled", "disableRipple", "role"], exportAs: ["matMenuItem"] }], directives: [{ type: i5$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i4$2.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", exportAs: ["matMenuTrigger"] }] });
|
|
686
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: GioPolicyStudioDetailsPhaseStepComponent, decorators: [{
|
|
415
687
|
type: Component,
|
|
416
|
-
args: [{ selector: 'gio-ps-flow-details-phase-
|
|
417
|
-
}], propDecorators: { step: [{
|
|
688
|
+
args: [{ selector: 'gio-ps-flow-details-phase-step', template: "<!--\n\n Copyright (C) 2023 The Gravitee team (http://gravitee.io)\n \n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n \n http://www.apache.org/licenses/LICENSE-2.0\n \n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n\n-->\n\n<div class=\"info\">\n <div class=\"info__head\">\n <mat-icon class=\"info__head__icon\" [svgIcon]=\"policy?.icon ?? 'gio:puzzle'\"></mat-icon>\n\n <span *ngIf=\"step.name\" class=\"info__head__name\">{{ step.name }}</span>\n </div>\n\n <div *ngIf=\"step.description\" class=\"info__description\">{{ step.description }}</div>\n</div>\n\n<button class=\"menuBtn\" mat-icon-button [matMenuTriggerFor]=\"policyMenu\"><mat-icon svgIcon=\"gio:more-vertical\"></mat-icon></button>\n\n<mat-menu #policyMenu=\"matMenu\">\n <button mat-menu-item (click)=\"onEdit()\">\n <mat-icon svgIcon=\"gio:edit-pencil\"></mat-icon>\n <span>Edit</span>\n </button>\n\n <button disabled mat-menu-item (click)=\"onDisable()\">\n <mat-icon svgIcon=\"gio:prohibition\"></mat-icon>\n <span>Disable \uD83D\uDEA7</span>\n </button>\n\n <button disabled mat-menu-item (click)=\"onDelete()\">\n <mat-icon svgIcon=\"gio:trash\"></mat-icon>\n <span>Delete \uD83D\uDEA7</span>\n </button>\n</mat-menu>\n", styles: [":host{display:flex;align-items:center;padding:8px;border:1px solid #d3d5dc;border-radius:8px}.info{display:flex;max-width:300px;flex-direction:column;margin-left:4px;gap:4px}.info__head{display:flex;align-items:center}.info__head__icon{min-width:24px;flex:1 1 24px;margin-right:8px}.info__head__name{overflow:hidden;flex:1 1 auto;text-overflow:ellipsis;white-space:nowrap}.info__description{font:400 12px/16px Golos UI,Roboto,Helvetica Neue,sans-serif;letter-spacing:normal;display:-webkit-box;overflow:hidden;-webkit-box-orient:vertical;color:#606274;-webkit-line-clamp:2}.info__description:empty{display:none}\n"] }]
|
|
689
|
+
}], ctorParameters: function () { return [{ type: i1.MatDialog }]; }, propDecorators: { step: [{
|
|
690
|
+
type: Input
|
|
691
|
+
}], policies: [{
|
|
418
692
|
type: Input
|
|
693
|
+
}], stepChange: [{
|
|
694
|
+
type: Output
|
|
419
695
|
}] } });
|
|
420
696
|
|
|
421
697
|
/*
|
|
@@ -434,10 +710,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
|
|
|
434
710
|
* limitations under the License.
|
|
435
711
|
*/
|
|
436
712
|
class GioPolicyStudioDetailsPhaseComponent {
|
|
437
|
-
constructor() {
|
|
438
|
-
this.
|
|
713
|
+
constructor(matDialog) {
|
|
714
|
+
this.matDialog = matDialog;
|
|
715
|
+
this.steps = [];
|
|
439
716
|
this.startConnector = [];
|
|
440
717
|
this.endConnector = [];
|
|
718
|
+
this.policies = [];
|
|
719
|
+
this.stepsChange = new EventEmitter();
|
|
441
720
|
this.stepsVM = [];
|
|
442
721
|
this.isDisabled = false;
|
|
443
722
|
}
|
|
@@ -452,9 +731,10 @@ class GioPolicyStudioDetailsPhaseComponent {
|
|
|
452
731
|
icon: connector.icon,
|
|
453
732
|
})),
|
|
454
733
|
},
|
|
455
|
-
...((_a = this.steps) !== null && _a !== void 0 ? _a : []).map(step => ({
|
|
456
|
-
type: '
|
|
734
|
+
...((_a = this.steps) !== null && _a !== void 0 ? _a : []).map((step, index) => ({
|
|
735
|
+
type: 'step',
|
|
457
736
|
step: step,
|
|
737
|
+
index,
|
|
458
738
|
})),
|
|
459
739
|
{
|
|
460
740
|
type: 'connectors',
|
|
@@ -468,13 +748,41 @@ class GioPolicyStudioDetailsPhaseComponent {
|
|
|
468
748
|
this.isDisabled = this.stepsVM.filter(step => step.type === 'connectors' && !isEmpty(step.connectors)).length < 2;
|
|
469
749
|
}
|
|
470
750
|
}
|
|
751
|
+
onAddPolicy(index) {
|
|
752
|
+
this.matDialog
|
|
753
|
+
.open(GioPolicyStudioPoliciesCatalogDialogComponent, {
|
|
754
|
+
data: {
|
|
755
|
+
policies: this.policies,
|
|
756
|
+
executionPhase: this.policyExecutionPhase,
|
|
757
|
+
apiType: this.apiType,
|
|
758
|
+
},
|
|
759
|
+
role: 'alertdialog',
|
|
760
|
+
id: 'gioPolicyStudioPoliciesCatalogDialog',
|
|
761
|
+
width: '1000px',
|
|
762
|
+
})
|
|
763
|
+
.afterClosed()
|
|
764
|
+
.subscribe(stepToAdd => {
|
|
765
|
+
if (!this.steps || !stepToAdd) {
|
|
766
|
+
return;
|
|
767
|
+
}
|
|
768
|
+
// Add Step after the given index
|
|
769
|
+
this.stepsChange.emit([...this.steps.slice(0, index + 1), stepToAdd, ...this.steps.slice(index + 1)]);
|
|
770
|
+
});
|
|
771
|
+
}
|
|
772
|
+
onStepChange(index, stepToEdit) {
|
|
773
|
+
if (!this.steps) {
|
|
774
|
+
return;
|
|
775
|
+
}
|
|
776
|
+
// Replace the step at the given index
|
|
777
|
+
this.stepsChange.emit([...this.steps.slice(0, index), stepToEdit, ...this.steps.slice(index + 1)]);
|
|
778
|
+
}
|
|
471
779
|
}
|
|
472
|
-
GioPolicyStudioDetailsPhaseComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: GioPolicyStudioDetailsPhaseComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
473
|
-
GioPolicyStudioDetailsPhaseComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.12", type: GioPolicyStudioDetailsPhaseComponent, selector: "gio-ps-flow-details-phase", inputs: { steps: "steps", name: "name", description: "description", startConnector: "startConnector", endConnector: "endConnector" }, usesOnChanges: true, ngImport: i0, template: "<!--\n\n Copyright (C) 2023 The Gravitee team (http://gravitee.io)\n \n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n \n http://www.apache.org/licenses/LICENSE-2.0\n \n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n\n-->\n\n<div class=\"header\">\n <span class=\"header__name\">\n {{ name }}\n </span>\n <span class=\"header__description\">\n {{ description }}\n </span>\n\n <span *ngIf=\"isDisabled\" class=\"header__infoIcon\" matTooltip=\"Policies might not be evaluated\" matTooltipPosition=\"before\">\n <mat-icon svgIcon=\"gio:info\"></mat-icon>\n </span>\n</div>\n\n<div *ngIf=\"!isDisabled; else disabledPhaseContent\" class=\"wrapper\">\n <div class=\"content\">\n <div *ngFor=\"let stepVM of stepsVM; first as isFirst\" class=\"content__step\">\n <!-- Connector -->\n <ng-container *ngIf=\"stepVM.type === 'connectors'\">\n <
|
|
780
|
+
GioPolicyStudioDetailsPhaseComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: GioPolicyStudioDetailsPhaseComponent, deps: [{ token: i1.MatDialog }], target: i0.ɵɵFactoryTarget.Component });
|
|
781
|
+
GioPolicyStudioDetailsPhaseComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.12", type: GioPolicyStudioDetailsPhaseComponent, selector: "gio-ps-flow-details-phase", inputs: { steps: "steps", name: "name", description: "description", startConnector: "startConnector", endConnector: "endConnector", apiType: "apiType", policies: "policies", policyExecutionPhase: "policyExecutionPhase" }, outputs: { stepsChange: "stepsChange" }, usesOnChanges: true, ngImport: i0, template: "<!--\n\n Copyright (C) 2023 The Gravitee team (http://gravitee.io)\n \n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n \n http://www.apache.org/licenses/LICENSE-2.0\n \n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n\n-->\n\n<div class=\"header\">\n <span class=\"header__name\">\n {{ name }}\n </span>\n <span class=\"header__description\">\n {{ description }}\n </span>\n\n <span *ngIf=\"isDisabled\" class=\"header__infoIcon\" matTooltip=\"Policies might not be evaluated\" matTooltipPosition=\"before\">\n <mat-icon svgIcon=\"gio:info\"></mat-icon>\n </span>\n</div>\n\n<div *ngIf=\"!isDisabled; else disabledPhaseContent\" class=\"wrapper\">\n <div class=\"content\">\n <div *ngFor=\"let stepVM of stepsVM; first as isFirst\" class=\"content__step\">\n <!-- Connector -->\n <ng-container *ngIf=\"stepVM.type === 'connectors'\">\n <div class=\"content__step__connector\">\n <span *ngFor=\"let connector of stepVM.connectors\" class=\"gio-badge-white content__step__connector__badge\">\n <mat-icon *ngIf=\"connector.icon\" [svgIcon]=\"connector.icon\" class=\"content__step__connector__badge__icon\"></mat-icon>\n {{ connector.name }}\n </span>\n </div>\n\n <!-- Add policy button after first connector -->\n <ng-container *ngIf=\"isFirst\">\n <mat-icon class=\"content__step__rightArrow\" svgIcon=\"gio:arrow-right\"></mat-icon>\n <button class=\"content__step__addBtn\" mat-icon-button (click)=\"onAddPolicy(-1)\"><mat-icon svgIcon=\"gio:plus\"></mat-icon></button>\n <mat-icon class=\"content__step__rightArrow\" svgIcon=\"gio:arrow-right\"></mat-icon>\n </ng-container>\n </ng-container>\n\n <!-- Policy -->\n <ng-container *ngIf=\"stepVM.type === 'step'\">\n <gio-ps-flow-details-phase-step\n class=\"content__step__step\"\n [policies]=\"policies\"\n [step]=\"stepVM.step\"\n (stepChange)=\"onStepChange(stepVM.index, $event)\"\n ></gio-ps-flow-details-phase-step>\n\n <!-- Add policy button -->\n <mat-icon class=\"content__step__rightArrow\" svgIcon=\"gio:arrow-right\"></mat-icon>\n <button class=\"content__step__addBtn\" mat-icon-button (click)=\"onAddPolicy(stepVM.index)\">\n <mat-icon svgIcon=\"gio:plus\"></mat-icon>\n </button>\n <mat-icon class=\"content__step__rightArrow\" svgIcon=\"gio:arrow-right\"></mat-icon>\n </ng-container>\n </div>\n </div>\n</div>\n\n<ng-template #disabledPhaseContent>\n <div class=\"disabledContent\">\n <gio-banner-warning>\n Policies might not be evaluated\n <span gioBannerBody> Your API entrypoints don't apply on this phase. To enable them, add an entrypoint supporting this phase. </span>\n </gio-banner-warning>\n </div>\n</ng-template>\n", styles: [":host{display:flex;overflow:hidden;min-height:199px;flex-direction:column;padding-top:16px;border:1px solid #d3d5dc;border-radius:8px;background-color:#fff}.header{display:flex;padding:0 16px;gap:8px}.header__name{flex:1 1 auto;font:600 14px/20px Golos UI,Roboto,Helvetica Neue,sans-serif;letter-spacing:.4px}.header__description{flex:1 1 auto;font:400 14px/20px Golos UI,Roboto,Helvetica Neue,sans-serif;letter-spacing:.4px;color:#606274}.wrapper{display:flex;flex:1 1 auto;padding:0 16px;overflow-y:auto}.content{display:flex;align-items:center}.content__step{display:flex;width:max-content;align-items:center}.content__step__connector{display:flex;flex-direction:column;gap:8px}.content__step__connector__badge{border:1px solid #876fec;border-radius:16px}.content__step__connector__badge__icon{margin-right:4px}.content__step__rightArrow{width:16px;height:16px;margin:0 8px;color:#b4b5bb}.disabledContent{display:flex;flex-direction:column;padding:16px}\n"], components: [{ type: i3.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { type: i2.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { type: GioPolicyStudioDetailsPhaseStepComponent, selector: "gio-ps-flow-details-phase-step", inputs: ["step", "policies"], outputs: ["stepChange"] }, { type: i4$1.GioBannerWarningComponent, selector: "gio-banner-warning" }], directives: [{ type: i5$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i7.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { type: i5$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i4$1.GioBannerBodyDirective, selector: "[gioBannerBody]" }] });
|
|
474
782
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: GioPolicyStudioDetailsPhaseComponent, decorators: [{
|
|
475
783
|
type: Component,
|
|
476
|
-
args: [{ selector: 'gio-ps-flow-details-phase', template: "<!--\n\n Copyright (C) 2023 The Gravitee team (http://gravitee.io)\n \n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n \n http://www.apache.org/licenses/LICENSE-2.0\n \n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n\n-->\n\n<div class=\"header\">\n <span class=\"header__name\">\n {{ name }}\n </span>\n <span class=\"header__description\">\n {{ description }}\n </span>\n\n <span *ngIf=\"isDisabled\" class=\"header__infoIcon\" matTooltip=\"Policies might not be evaluated\" matTooltipPosition=\"before\">\n <mat-icon svgIcon=\"gio:info\"></mat-icon>\n </span>\n</div>\n\n<div *ngIf=\"!isDisabled; else disabledPhaseContent\" class=\"wrapper\">\n <div class=\"content\">\n <div *ngFor=\"let stepVM of stepsVM; first as isFirst\" class=\"content__step\">\n <!-- Connector -->\n <ng-container *ngIf=\"stepVM.type === 'connectors'\">\n <
|
|
477
|
-
}], propDecorators: { steps: [{
|
|
784
|
+
args: [{ selector: 'gio-ps-flow-details-phase', template: "<!--\n\n Copyright (C) 2023 The Gravitee team (http://gravitee.io)\n \n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n \n http://www.apache.org/licenses/LICENSE-2.0\n \n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n\n-->\n\n<div class=\"header\">\n <span class=\"header__name\">\n {{ name }}\n </span>\n <span class=\"header__description\">\n {{ description }}\n </span>\n\n <span *ngIf=\"isDisabled\" class=\"header__infoIcon\" matTooltip=\"Policies might not be evaluated\" matTooltipPosition=\"before\">\n <mat-icon svgIcon=\"gio:info\"></mat-icon>\n </span>\n</div>\n\n<div *ngIf=\"!isDisabled; else disabledPhaseContent\" class=\"wrapper\">\n <div class=\"content\">\n <div *ngFor=\"let stepVM of stepsVM; first as isFirst\" class=\"content__step\">\n <!-- Connector -->\n <ng-container *ngIf=\"stepVM.type === 'connectors'\">\n <div class=\"content__step__connector\">\n <span *ngFor=\"let connector of stepVM.connectors\" class=\"gio-badge-white content__step__connector__badge\">\n <mat-icon *ngIf=\"connector.icon\" [svgIcon]=\"connector.icon\" class=\"content__step__connector__badge__icon\"></mat-icon>\n {{ connector.name }}\n </span>\n </div>\n\n <!-- Add policy button after first connector -->\n <ng-container *ngIf=\"isFirst\">\n <mat-icon class=\"content__step__rightArrow\" svgIcon=\"gio:arrow-right\"></mat-icon>\n <button class=\"content__step__addBtn\" mat-icon-button (click)=\"onAddPolicy(-1)\"><mat-icon svgIcon=\"gio:plus\"></mat-icon></button>\n <mat-icon class=\"content__step__rightArrow\" svgIcon=\"gio:arrow-right\"></mat-icon>\n </ng-container>\n </ng-container>\n\n <!-- Policy -->\n <ng-container *ngIf=\"stepVM.type === 'step'\">\n <gio-ps-flow-details-phase-step\n class=\"content__step__step\"\n [policies]=\"policies\"\n [step]=\"stepVM.step\"\n (stepChange)=\"onStepChange(stepVM.index, $event)\"\n ></gio-ps-flow-details-phase-step>\n\n <!-- Add policy button -->\n <mat-icon class=\"content__step__rightArrow\" svgIcon=\"gio:arrow-right\"></mat-icon>\n <button class=\"content__step__addBtn\" mat-icon-button (click)=\"onAddPolicy(stepVM.index)\">\n <mat-icon svgIcon=\"gio:plus\"></mat-icon>\n </button>\n <mat-icon class=\"content__step__rightArrow\" svgIcon=\"gio:arrow-right\"></mat-icon>\n </ng-container>\n </div>\n </div>\n</div>\n\n<ng-template #disabledPhaseContent>\n <div class=\"disabledContent\">\n <gio-banner-warning>\n Policies might not be evaluated\n <span gioBannerBody> Your API entrypoints don't apply on this phase. To enable them, add an entrypoint supporting this phase. </span>\n </gio-banner-warning>\n </div>\n</ng-template>\n", styles: [":host{display:flex;overflow:hidden;min-height:199px;flex-direction:column;padding-top:16px;border:1px solid #d3d5dc;border-radius:8px;background-color:#fff}.header{display:flex;padding:0 16px;gap:8px}.header__name{flex:1 1 auto;font:600 14px/20px Golos UI,Roboto,Helvetica Neue,sans-serif;letter-spacing:.4px}.header__description{flex:1 1 auto;font:400 14px/20px Golos UI,Roboto,Helvetica Neue,sans-serif;letter-spacing:.4px;color:#606274}.wrapper{display:flex;flex:1 1 auto;padding:0 16px;overflow-y:auto}.content{display:flex;align-items:center}.content__step{display:flex;width:max-content;align-items:center}.content__step__connector{display:flex;flex-direction:column;gap:8px}.content__step__connector__badge{border:1px solid #876fec;border-radius:16px}.content__step__connector__badge__icon{margin-right:4px}.content__step__rightArrow{width:16px;height:16px;margin:0 8px;color:#b4b5bb}.disabledContent{display:flex;flex-direction:column;padding:16px}\n"] }]
|
|
785
|
+
}], ctorParameters: function () { return [{ type: i1.MatDialog }]; }, propDecorators: { steps: [{
|
|
478
786
|
type: Input
|
|
479
787
|
}], name: [{
|
|
480
788
|
type: Input
|
|
@@ -484,6 +792,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
|
|
|
484
792
|
type: Input
|
|
485
793
|
}], endConnector: [{
|
|
486
794
|
type: Input
|
|
795
|
+
}], apiType: [{
|
|
796
|
+
type: Input
|
|
797
|
+
}], policies: [{
|
|
798
|
+
type: Input
|
|
799
|
+
}], policyExecutionPhase: [{
|
|
800
|
+
type: Input
|
|
801
|
+
}], stepsChange: [{
|
|
802
|
+
type: Output
|
|
487
803
|
}] } });
|
|
488
804
|
|
|
489
805
|
/*
|
|
@@ -544,6 +860,7 @@ class GioPolicyStudioDetailsComponent {
|
|
|
544
860
|
this.flow = undefined;
|
|
545
861
|
this.entrypointsInfo = [];
|
|
546
862
|
this.endpointsInfo = [];
|
|
863
|
+
this.policies = [];
|
|
547
864
|
this.flowChange = new EventEmitter();
|
|
548
865
|
this.deleteFlow = new EventEmitter();
|
|
549
866
|
}
|
|
@@ -581,12 +898,18 @@ class GioPolicyStudioDetailsComponent {
|
|
|
581
898
|
onDeleteFlow() {
|
|
582
899
|
this.deleteFlow.emit(this.flow);
|
|
583
900
|
}
|
|
901
|
+
onStepsChange(flowPhase, steps) {
|
|
902
|
+
if (!this.flow) {
|
|
903
|
+
return;
|
|
904
|
+
}
|
|
905
|
+
this.flowChange.emit(Object.assign(Object.assign({}, this.flow), { [flowPhase]: steps, _hasChanged: true }));
|
|
906
|
+
}
|
|
584
907
|
}
|
|
585
908
|
GioPolicyStudioDetailsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: GioPolicyStudioDetailsComponent, deps: [{ token: i1.MatDialog }], target: i0.ɵɵFactoryTarget.Component });
|
|
586
|
-
GioPolicyStudioDetailsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.12", type: GioPolicyStudioDetailsComponent, selector: "gio-ps-flow-details", inputs: { apiType: "apiType", flow: "flow", entrypointsInfo: "entrypointsInfo", endpointsInfo: "endpointsInfo" }, outputs: { flowChange: "flowChange", deleteFlow: "deleteFlow" }, ngImport: i0, template: "<!--\n\n Copyright (C) 2023 The Gravitee team (http://gravitee.io)\n \n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n \n http://www.apache.org/licenses/LICENSE-2.0\n \n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n\n-->\n<ng-container *ngIf=\"flow; else emptyFlows\">\n <div class=\"header\">\n <div class=\"header__label\">Flow details</div>\n <div class=\"header__configBtn\">\n <button class=\"header__configBtn__edit\" mat-stroked-button mat-icon-button (click)=\"onEditFlow()\">\n <mat-icon svgIcon=\"gio:edit-pencil\"></mat-icon>\n </button>\n <button class=\"header__configBtn__delete\" mat-stroked-button mat-icon-button (click)=\"onDeleteFlow()\">\n <mat-icon svgIcon=\"gio:trash\"></mat-icon>\n </button>\n </div>\n </div>\n <gio-ps-flow-details-info-bar class=\"infoBar\" [flow]=\"flow\" [entrypointsInfo]=\"entrypointsInfo\"></gio-ps-flow-details-info-bar>\n\n <div class=\"content\">\n <gio-banner-warning>\uD83D\uDEA7 Work in progress \uD83D\uDEA7</gio-banner-warning>\n\n <mat-tab-group *ngIf=\"apiType === 'MESSAGE'\" class=\"content__tabs\">\n <mat-tab label=\"Initial connection\">\n <gio-ps-flow-details-phase\n class=\"content__phase\"\n name=\"Request phase\"\n description=\"Policies will be applied during the connection establishment\"\n [startConnector]=\"entrypointsInfo\"\n [endConnector]=\"endpointsInfo\"\n [steps]=\"flow.
|
|
909
|
+
GioPolicyStudioDetailsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.12", type: GioPolicyStudioDetailsComponent, selector: "gio-ps-flow-details", inputs: { apiType: "apiType", flow: "flow", entrypointsInfo: "entrypointsInfo", endpointsInfo: "endpointsInfo", policies: "policies" }, outputs: { flowChange: "flowChange", deleteFlow: "deleteFlow" }, ngImport: i0, template: "<!--\n\n Copyright (C) 2023 The Gravitee team (http://gravitee.io)\n \n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n \n http://www.apache.org/licenses/LICENSE-2.0\n \n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n\n-->\n<ng-container *ngIf=\"flow; else emptyFlows\">\n <div class=\"header\">\n <div class=\"header__label\">Flow details</div>\n <div class=\"header__configBtn\">\n <button class=\"header__configBtn__edit\" mat-stroked-button mat-icon-button (click)=\"onEditFlow()\">\n <mat-icon svgIcon=\"gio:edit-pencil\"></mat-icon>\n </button>\n <button class=\"header__configBtn__delete\" mat-stroked-button mat-icon-button (click)=\"onDeleteFlow()\">\n <mat-icon svgIcon=\"gio:trash\"></mat-icon>\n </button>\n </div>\n </div>\n <gio-ps-flow-details-info-bar class=\"infoBar\" [flow]=\"flow\" [entrypointsInfo]=\"entrypointsInfo\"></gio-ps-flow-details-info-bar>\n\n <div class=\"content\">\n <gio-banner-warning>\uD83D\uDEA7 Work in progress \uD83D\uDEA7</gio-banner-warning>\n\n <mat-tab-group *ngIf=\"apiType === 'MESSAGE'\" class=\"content__tabs\">\n <mat-tab label=\"Initial connection\">\n <gio-ps-flow-details-phase\n class=\"content__phase\"\n name=\"Request phase\"\n description=\"Policies will be applied during the connection establishment\"\n [startConnector]=\"entrypointsInfo\"\n [endConnector]=\"endpointsInfo\"\n [steps]=\"flow.request ?? []\"\n [apiType]=\"apiType\"\n [policies]=\"policies\"\n policyExecutionPhase=\"REQUEST\"\n (stepsChange)=\"onStepsChange('request', $event)\"\n ></gio-ps-flow-details-phase>\n <gio-ps-flow-details-phase\n class=\"content__phase\"\n name=\"Response phase\"\n description=\"Policies will be applied during the connection termination\"\n [startConnector]=\"endpointsInfo\"\n [endConnector]=\"entrypointsInfo\"\n [steps]=\"flow.response ?? []\"\n [apiType]=\"apiType\"\n [policies]=\"policies\"\n policyExecutionPhase=\"RESPONSE\"\n (stepsChange)=\"onStepsChange('response', $event)\"\n ></gio-ps-flow-details-phase>\n </mat-tab>\n <mat-tab label=\"Event messages\">\n <gio-ps-flow-details-phase\n class=\"content__phase\"\n name=\"Publish phase\"\n description=\"Policies will be applied on messages sent to the endpoint\"\n [startConnector]=\"entrypointsInfo | gioFilterConnectorsByMode : 'PUBLISH'\"\n [endConnector]=\"endpointsInfo | gioFilterConnectorsByMode : 'PUBLISH'\"\n [steps]=\"flow.publish ?? []\"\n [apiType]=\"apiType\"\n [policies]=\"policies\"\n policyExecutionPhase=\"MESSAGE_RESPONSE\"\n (stepsChange)=\"onStepsChange('publish', $event)\"\n ></gio-ps-flow-details-phase>\n <gio-ps-flow-details-phase\n class=\"content__phase\"\n name=\"Subscribe phase\"\n description=\"Policies will be applied on messages received by the entrypoint\"\n [startConnector]=\"endpointsInfo | gioFilterConnectorsByMode : 'SUBSCRIBE'\"\n [endConnector]=\"entrypointsInfo | gioFilterConnectorsByMode : 'SUBSCRIBE'\"\n [steps]=\"flow.subscribe ?? []\"\n [apiType]=\"apiType\"\n [policies]=\"policies\"\n policyExecutionPhase=\"MESSAGE_REQUEST\"\n (stepsChange)=\"onStepsChange('subscribe', $event)\"\n ></gio-ps-flow-details-phase>\n </mat-tab>\n </mat-tab-group>\n\n <div *ngIf=\"apiType === 'PROXY'\">\n <gio-ps-flow-details-phase\n class=\"content__phase\"\n name=\"Request phase\"\n description=\"Policies will be applied during the connection establishment\"\n [startConnector]=\"entrypointsInfo | gioFilterConnectorsByMode : 'REQUEST_RESPONSE'\"\n [endConnector]=\"endpointsInfo | gioFilterConnectorsByMode : 'REQUEST_RESPONSE'\"\n [steps]=\"flow.request ?? []\"\n [apiType]=\"apiType\"\n [policies]=\"policies\"\n policyExecutionPhase=\"REQUEST\"\n (stepsChange)=\"onStepsChange('request', $event)\"\n ></gio-ps-flow-details-phase>\n <gio-ps-flow-details-phase\n class=\"content__phase\"\n name=\"Response phase\"\n description=\"Policies will be applied during the connection termination\"\n [startConnector]=\"endpointsInfo | gioFilterConnectorsByMode : 'REQUEST_RESPONSE'\"\n [endConnector]=\"entrypointsInfo | gioFilterConnectorsByMode : 'REQUEST_RESPONSE'\"\n [steps]=\"flow.response ?? []\"\n [apiType]=\"apiType\"\n [policies]=\"policies\"\n policyExecutionPhase=\"RESPONSE\"\n (stepsChange)=\"onStepsChange('response', $event)\"\n ></gio-ps-flow-details-phase>\n </div>\n </div>\n</ng-container>\n\n<ng-template #emptyFlows>\n <div class=\"emptyFlows\">\n <h2>No flows yet</h2>\n <p class=\"mat-body-1\">Flows allow you to customize the behavior of your API event phases through configurable policies</p>\n </div>\n</ng-template>\n", styles: [":host{display:flex;height:100%;flex-direction:column}.emptyFlows{display:flex;width:500px;height:100%;flex-direction:column;justify-content:center;margin:auto;text-align:center}.header{display:flex;align-items:center;padding:16px;border-bottom:1px solid #d3d5dc}.header__label{font:600 16px/24px Golos UI,Roboto,Helvetica Neue,sans-serif;letter-spacing:.4px;display:flex;flex:1 1 auto;align-items:center;margin-bottom:0;gap:8px}.header__configBtn{display:flex;align-items:center;margin-left:8px;gap:8px}.infoBar{border-bottom:1px solid #d3d5dc}.content{overflow:auto;flex:1 1 auto;background-color:#f7f8fd}.content__tabs{min-height:100%;min-height:calc(100% - 64px)}.content__phase{margin:16px 16px 0}\n"], components: [{ type: i2.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { type: i3.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { type: GioPolicyStudioDetailsInfoBarComponent, selector: "gio-ps-flow-details-info-bar", inputs: ["flow", "entrypointsInfo"] }, { type: i4$1.GioBannerWarningComponent, selector: "gio-banner-warning" }, { type: i6$1.MatTabGroup, selector: "mat-tab-group", inputs: ["color", "disableRipple"], exportAs: ["matTabGroup"] }, { type: i6$1.MatTab, selector: "mat-tab", inputs: ["disabled", "label", "aria-label", "aria-labelledby", "labelClass", "bodyClass"], exportAs: ["matTab"] }, { type: GioPolicyStudioDetailsPhaseComponent, selector: "gio-ps-flow-details-phase", inputs: ["steps", "name", "description", "startConnector", "endConnector", "apiType", "policies", "policyExecutionPhase"], outputs: ["stepsChange"] }], directives: [{ type: i5$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], pipes: { "gioFilterConnectorsByMode": GioFilterConnectorsByModePipe } });
|
|
587
910
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: GioPolicyStudioDetailsComponent, decorators: [{
|
|
588
911
|
type: Component,
|
|
589
|
-
args: [{ selector: 'gio-ps-flow-details', template: "<!--\n\n Copyright (C) 2023 The Gravitee team (http://gravitee.io)\n \n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n \n http://www.apache.org/licenses/LICENSE-2.0\n \n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n\n-->\n<ng-container *ngIf=\"flow; else emptyFlows\">\n <div class=\"header\">\n <div class=\"header__label\">Flow details</div>\n <div class=\"header__configBtn\">\n <button class=\"header__configBtn__edit\" mat-stroked-button mat-icon-button (click)=\"onEditFlow()\">\n <mat-icon svgIcon=\"gio:edit-pencil\"></mat-icon>\n </button>\n <button class=\"header__configBtn__delete\" mat-stroked-button mat-icon-button (click)=\"onDeleteFlow()\">\n <mat-icon svgIcon=\"gio:trash\"></mat-icon>\n </button>\n </div>\n </div>\n <gio-ps-flow-details-info-bar class=\"infoBar\" [flow]=\"flow\" [entrypointsInfo]=\"entrypointsInfo\"></gio-ps-flow-details-info-bar>\n\n <div class=\"content\">\n <gio-banner-warning>\uD83D\uDEA7 Work in progress \uD83D\uDEA7</gio-banner-warning>\n\n <mat-tab-group *ngIf=\"apiType === 'MESSAGE'\" class=\"content__tabs\">\n <mat-tab label=\"Initial connection\">\n <gio-ps-flow-details-phase\n class=\"content__phase\"\n name=\"Request phase\"\n description=\"Policies will be applied during the connection establishment\"\n [startConnector]=\"entrypointsInfo\"\n [endConnector]=\"endpointsInfo\"\n [steps]=\"flow.
|
|
912
|
+
args: [{ selector: 'gio-ps-flow-details', template: "<!--\n\n Copyright (C) 2023 The Gravitee team (http://gravitee.io)\n \n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n \n http://www.apache.org/licenses/LICENSE-2.0\n \n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n\n-->\n<ng-container *ngIf=\"flow; else emptyFlows\">\n <div class=\"header\">\n <div class=\"header__label\">Flow details</div>\n <div class=\"header__configBtn\">\n <button class=\"header__configBtn__edit\" mat-stroked-button mat-icon-button (click)=\"onEditFlow()\">\n <mat-icon svgIcon=\"gio:edit-pencil\"></mat-icon>\n </button>\n <button class=\"header__configBtn__delete\" mat-stroked-button mat-icon-button (click)=\"onDeleteFlow()\">\n <mat-icon svgIcon=\"gio:trash\"></mat-icon>\n </button>\n </div>\n </div>\n <gio-ps-flow-details-info-bar class=\"infoBar\" [flow]=\"flow\" [entrypointsInfo]=\"entrypointsInfo\"></gio-ps-flow-details-info-bar>\n\n <div class=\"content\">\n <gio-banner-warning>\uD83D\uDEA7 Work in progress \uD83D\uDEA7</gio-banner-warning>\n\n <mat-tab-group *ngIf=\"apiType === 'MESSAGE'\" class=\"content__tabs\">\n <mat-tab label=\"Initial connection\">\n <gio-ps-flow-details-phase\n class=\"content__phase\"\n name=\"Request phase\"\n description=\"Policies will be applied during the connection establishment\"\n [startConnector]=\"entrypointsInfo\"\n [endConnector]=\"endpointsInfo\"\n [steps]=\"flow.request ?? []\"\n [apiType]=\"apiType\"\n [policies]=\"policies\"\n policyExecutionPhase=\"REQUEST\"\n (stepsChange)=\"onStepsChange('request', $event)\"\n ></gio-ps-flow-details-phase>\n <gio-ps-flow-details-phase\n class=\"content__phase\"\n name=\"Response phase\"\n description=\"Policies will be applied during the connection termination\"\n [startConnector]=\"endpointsInfo\"\n [endConnector]=\"entrypointsInfo\"\n [steps]=\"flow.response ?? []\"\n [apiType]=\"apiType\"\n [policies]=\"policies\"\n policyExecutionPhase=\"RESPONSE\"\n (stepsChange)=\"onStepsChange('response', $event)\"\n ></gio-ps-flow-details-phase>\n </mat-tab>\n <mat-tab label=\"Event messages\">\n <gio-ps-flow-details-phase\n class=\"content__phase\"\n name=\"Publish phase\"\n description=\"Policies will be applied on messages sent to the endpoint\"\n [startConnector]=\"entrypointsInfo | gioFilterConnectorsByMode : 'PUBLISH'\"\n [endConnector]=\"endpointsInfo | gioFilterConnectorsByMode : 'PUBLISH'\"\n [steps]=\"flow.publish ?? []\"\n [apiType]=\"apiType\"\n [policies]=\"policies\"\n policyExecutionPhase=\"MESSAGE_RESPONSE\"\n (stepsChange)=\"onStepsChange('publish', $event)\"\n ></gio-ps-flow-details-phase>\n <gio-ps-flow-details-phase\n class=\"content__phase\"\n name=\"Subscribe phase\"\n description=\"Policies will be applied on messages received by the entrypoint\"\n [startConnector]=\"endpointsInfo | gioFilterConnectorsByMode : 'SUBSCRIBE'\"\n [endConnector]=\"entrypointsInfo | gioFilterConnectorsByMode : 'SUBSCRIBE'\"\n [steps]=\"flow.subscribe ?? []\"\n [apiType]=\"apiType\"\n [policies]=\"policies\"\n policyExecutionPhase=\"MESSAGE_REQUEST\"\n (stepsChange)=\"onStepsChange('subscribe', $event)\"\n ></gio-ps-flow-details-phase>\n </mat-tab>\n </mat-tab-group>\n\n <div *ngIf=\"apiType === 'PROXY'\">\n <gio-ps-flow-details-phase\n class=\"content__phase\"\n name=\"Request phase\"\n description=\"Policies will be applied during the connection establishment\"\n [startConnector]=\"entrypointsInfo | gioFilterConnectorsByMode : 'REQUEST_RESPONSE'\"\n [endConnector]=\"endpointsInfo | gioFilterConnectorsByMode : 'REQUEST_RESPONSE'\"\n [steps]=\"flow.request ?? []\"\n [apiType]=\"apiType\"\n [policies]=\"policies\"\n policyExecutionPhase=\"REQUEST\"\n (stepsChange)=\"onStepsChange('request', $event)\"\n ></gio-ps-flow-details-phase>\n <gio-ps-flow-details-phase\n class=\"content__phase\"\n name=\"Response phase\"\n description=\"Policies will be applied during the connection termination\"\n [startConnector]=\"endpointsInfo | gioFilterConnectorsByMode : 'REQUEST_RESPONSE'\"\n [endConnector]=\"entrypointsInfo | gioFilterConnectorsByMode : 'REQUEST_RESPONSE'\"\n [steps]=\"flow.response ?? []\"\n [apiType]=\"apiType\"\n [policies]=\"policies\"\n policyExecutionPhase=\"RESPONSE\"\n (stepsChange)=\"onStepsChange('response', $event)\"\n ></gio-ps-flow-details-phase>\n </div>\n </div>\n</ng-container>\n\n<ng-template #emptyFlows>\n <div class=\"emptyFlows\">\n <h2>No flows yet</h2>\n <p class=\"mat-body-1\">Flows allow you to customize the behavior of your API event phases through configurable policies</p>\n </div>\n</ng-template>\n", styles: [":host{display:flex;height:100%;flex-direction:column}.emptyFlows{display:flex;width:500px;height:100%;flex-direction:column;justify-content:center;margin:auto;text-align:center}.header{display:flex;align-items:center;padding:16px;border-bottom:1px solid #d3d5dc}.header__label{font:600 16px/24px Golos UI,Roboto,Helvetica Neue,sans-serif;letter-spacing:.4px;display:flex;flex:1 1 auto;align-items:center;margin-bottom:0;gap:8px}.header__configBtn{display:flex;align-items:center;margin-left:8px;gap:8px}.infoBar{border-bottom:1px solid #d3d5dc}.content{overflow:auto;flex:1 1 auto;background-color:#f7f8fd}.content__tabs{min-height:100%;min-height:calc(100% - 64px)}.content__phase{margin:16px 16px 0}\n"] }]
|
|
590
913
|
}], ctorParameters: function () { return [{ type: i1.MatDialog }]; }, propDecorators: { apiType: [{
|
|
591
914
|
type: Input
|
|
592
915
|
}], flow: [{
|
|
@@ -595,6 +918,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
|
|
|
595
918
|
type: Input
|
|
596
919
|
}], endpointsInfo: [{
|
|
597
920
|
type: Input
|
|
921
|
+
}], policies: [{
|
|
922
|
+
type: Input
|
|
598
923
|
}], flowChange: [{
|
|
599
924
|
type: Output
|
|
600
925
|
}], deleteFlow: [{
|
|
@@ -784,7 +1109,7 @@ class GioPolicyStudioFlowsMenuComponent {
|
|
|
784
1109
|
}
|
|
785
1110
|
}
|
|
786
1111
|
GioPolicyStudioFlowsMenuComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: GioPolicyStudioFlowsMenuComponent, deps: [{ token: i1.MatDialog }], target: i0.ɵɵFactoryTarget.Component });
|
|
787
|
-
GioPolicyStudioFlowsMenuComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.12", type: GioPolicyStudioFlowsMenuComponent, selector: "gio-ps-flows-menu", inputs: { apiType: "apiType", flowExecution: "flowExecution", flowsGroups: "flowsGroups", selectedFlow: "selectedFlow", entrypoints: "entrypoints" }, outputs: { selectedFlowChange: "selectedFlowChange", flowsGroupsChange: "flowsGroupsChange", flowExecutionChange: "flowExecutionChange" }, usesOnChanges: true, ngImport: i0, template: "<!--\n\n Copyright (C) 2023 The Gravitee team (http://gravitee.io)\n \n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n \n http://www.apache.org/licenses/LICENSE-2.0\n \n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n\n-->\n\n<div class=\"header\">\n <div class=\"header__label\">\n Flows <mat-icon svgIcon=\"gio:info\" matTooltip=\"Flows allow you to apply different policies on your API event phases\"></mat-icon>\n </div>\n <div class=\"header__configBtn\">\n <button class=\"header__configBtn_edit\" mat-stroked-button mat-icon-button (click)=\"onConfigureExecution(flowExecution)\">\n <mat-icon svgIcon=\"gio:settings\"></mat-icon>\n </button>\n </div>\n</div>\n\n<div class=\"list\">\n <div *ngFor=\"let flowsGroup of flowsGroupsVMSelected\" class=\"list__flowsGroup\">\n <div class=\"list__flowsGroup__header\">\n <div class=\"list__flowsGroup__header__label\">\n <mat-icon *ngIf=\"flowsGroup._icon\" [svgIcon]=\"flowsGroup._icon\"></mat-icon>\n <span>{{ flowsGroup.name }}</span>\n </div>\n <div class=\"list__flowsGroup__header__addBtn\">\n <button mat-icon-button (click)=\"onAddFlow(flowsGroup)\"><mat-icon svgIcon=\"gio:plus\" matTooltip=\"New flow\"></mat-icon></button>\n </div>\n </div>\n\n <div\n *ngFor=\"let flow of flowsGroup.flows\"\n class=\"list__flowsGroup__flow\"\n [class.selected]=\"flow.selected\"\n (click)=\"selectFlow(flowsGroup._id, flow._id)\"\n (mouseout)=\"flow.mouseOver = false\"\n (mouseover)=\"flow.mouseOver = true\"\n >\n <div *ngIf=\"flow.name\" class=\"list__flowsGroup__flow__name\" [attr.title]=\"flow.name\">\n {{ flow.name }}\n </div>\n <div class=\"list__flowsGroup__flow__infos\">\n <div class=\"list__flowsGroup__flow__infos__badges\">\n <span *ngFor=\"let badge of flow.badges\" class=\"list__flowsGroup__flow__infos__badges__badge\" [ngClass]=\"badge.class\">{{\n badge.label\n }}</span>\n </div>\n <div class=\"list__flowsGroup__flow__infos__pathOrChannelLabel\">{{ flow.pathOrChannelLabel }}</div>\n </div>\n </div>\n </div>\n</div>\n", styles: [":host{display:flex;max-height:100%;flex-direction:column;padding-top:16px}.header{display:flex;align-items:center;padding:0 16px;margin-bottom:16px}.header__label{font:600 16px/24px Golos UI,Roboto,Helvetica Neue,sans-serif;letter-spacing:.4px;display:flex;flex:1 1 auto;align-items:center;margin-bottom:0;gap:8px}.header__configBtn{margin-left:8px}.list{padding:0 16px;overflow-y:overlay}.list__flowsGroup{display:flex;flex-direction:column;padding-bottom:8px;gap:8px}.list__flowsGroup__header{display:flex;align-items:center;padding:8px 8px 8px 10px;border-radius:8px;background-color:#cdc5f7}.list__flowsGroup__header__label{font:600 14px/20px Golos UI,Roboto,Helvetica Neue,sans-serif;letter-spacing:.4px;display:flex;flex:1 1 auto;align-items:center;gap:8px}.list__flowsGroup__header__label>mat-icon{width:22px;height:22px;flex:0 0 auto}.list__flowsGroup__header__label>span{display:-webkit-box;overflow:hidden;flex:1 1 auto;-webkit-box-orient:vertical;-webkit-line-clamp:2}.list__flowsGroup__header__addBtn{margin-left:8px}.list__flowsGroup__flow{display:flex;height:68px;flex-direction:column;justify-content:center;padding:7px;border:1px solid #d3d5dc;border-radius:8px;gap:8px}.list__flowsGroup__flow:hover,.list__flowsGroup__flow.selected{padding:6px;border:2px solid #876fec;cursor:pointer}.list__flowsGroup__flow__name{overflow:hidden;padding-left:4px;text-overflow:ellipsis;white-space:nowrap}.list__flowsGroup__flow__infos{display:flex;align-items:center}.list__flowsGroup__flow__infos__badges{flex:0 0 auto}.list__flowsGroup__flow__infos__badges__badge{width:auto}.list__flowsGroup__flow__infos__pathOrChannelLabel{flex:1 1 auto}\n"], components: [{ type: i3.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { type: i2.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }], directives: [{ type:
|
|
1112
|
+
GioPolicyStudioFlowsMenuComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.12", type: GioPolicyStudioFlowsMenuComponent, selector: "gio-ps-flows-menu", inputs: { apiType: "apiType", flowExecution: "flowExecution", flowsGroups: "flowsGroups", selectedFlow: "selectedFlow", entrypoints: "entrypoints" }, outputs: { selectedFlowChange: "selectedFlowChange", flowsGroupsChange: "flowsGroupsChange", flowExecutionChange: "flowExecutionChange" }, usesOnChanges: true, ngImport: i0, template: "<!--\n\n Copyright (C) 2023 The Gravitee team (http://gravitee.io)\n \n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n \n http://www.apache.org/licenses/LICENSE-2.0\n \n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n\n-->\n\n<div class=\"header\">\n <div class=\"header__label\">\n Flows <mat-icon svgIcon=\"gio:info\" matTooltip=\"Flows allow you to apply different policies on your API event phases\"></mat-icon>\n </div>\n <div class=\"header__configBtn\">\n <button class=\"header__configBtn_edit\" mat-stroked-button mat-icon-button (click)=\"onConfigureExecution(flowExecution)\">\n <mat-icon svgIcon=\"gio:settings\"></mat-icon>\n </button>\n </div>\n</div>\n\n<div class=\"list\">\n <div *ngFor=\"let flowsGroup of flowsGroupsVMSelected\" class=\"list__flowsGroup\">\n <div class=\"list__flowsGroup__header\">\n <div class=\"list__flowsGroup__header__label\">\n <mat-icon *ngIf=\"flowsGroup._icon\" [svgIcon]=\"flowsGroup._icon\"></mat-icon>\n <span>{{ flowsGroup.name }}</span>\n </div>\n <div class=\"list__flowsGroup__header__addBtn\">\n <button mat-icon-button (click)=\"onAddFlow(flowsGroup)\"><mat-icon svgIcon=\"gio:plus\" matTooltip=\"New flow\"></mat-icon></button>\n </div>\n </div>\n\n <div\n *ngFor=\"let flow of flowsGroup.flows\"\n class=\"list__flowsGroup__flow\"\n [class.selected]=\"flow.selected\"\n (click)=\"selectFlow(flowsGroup._id, flow._id)\"\n (mouseout)=\"flow.mouseOver = false\"\n (mouseover)=\"flow.mouseOver = true\"\n >\n <div *ngIf=\"flow.name\" class=\"list__flowsGroup__flow__name\" [attr.title]=\"flow.name\">\n {{ flow.name }}\n </div>\n <div class=\"list__flowsGroup__flow__infos\">\n <div class=\"list__flowsGroup__flow__infos__badges\">\n <span *ngFor=\"let badge of flow.badges\" class=\"list__flowsGroup__flow__infos__badges__badge\" [ngClass]=\"badge.class\">{{\n badge.label\n }}</span>\n </div>\n <div class=\"list__flowsGroup__flow__infos__pathOrChannelLabel\">{{ flow.pathOrChannelLabel }}</div>\n </div>\n </div>\n </div>\n</div>\n", styles: [":host{display:flex;max-height:100%;flex-direction:column;padding-top:16px}.header{display:flex;align-items:center;padding:0 16px;margin-bottom:16px}.header__label{font:600 16px/24px Golos UI,Roboto,Helvetica Neue,sans-serif;letter-spacing:.4px;display:flex;flex:1 1 auto;align-items:center;margin-bottom:0;gap:8px}.header__configBtn{margin-left:8px}.list{padding:0 16px;overflow-y:overlay}.list__flowsGroup{display:flex;flex-direction:column;padding-bottom:8px;gap:8px}.list__flowsGroup__header{display:flex;align-items:center;padding:8px 8px 8px 10px;border-radius:8px;background-color:#cdc5f7}.list__flowsGroup__header__label{font:600 14px/20px Golos UI,Roboto,Helvetica Neue,sans-serif;letter-spacing:.4px;display:flex;flex:1 1 auto;align-items:center;gap:8px}.list__flowsGroup__header__label>mat-icon{width:22px;height:22px;flex:0 0 auto}.list__flowsGroup__header__label>span{display:-webkit-box;overflow:hidden;flex:1 1 auto;-webkit-box-orient:vertical;-webkit-line-clamp:2}.list__flowsGroup__header__addBtn{margin-left:8px}.list__flowsGroup__flow{display:flex;height:68px;flex-direction:column;justify-content:center;padding:7px;border:1px solid #d3d5dc;border-radius:8px;gap:8px}.list__flowsGroup__flow:hover,.list__flowsGroup__flow.selected{padding:6px;border:2px solid #876fec;cursor:pointer}.list__flowsGroup__flow__name{overflow:hidden;padding-left:4px;text-overflow:ellipsis;white-space:nowrap}.list__flowsGroup__flow__infos{display:flex;align-items:center}.list__flowsGroup__flow__infos__badges{flex:0 0 auto}.list__flowsGroup__flow__infos__badges__badge{width:auto}.list__flowsGroup__flow__infos__pathOrChannelLabel{flex:1 1 auto}\n"], components: [{ type: i3.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { type: i2.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }], directives: [{ type: i7.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { type: i5$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i5$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i5$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }] });
|
|
788
1113
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: GioPolicyStudioFlowsMenuComponent, decorators: [{
|
|
789
1114
|
type: Component,
|
|
790
1115
|
args: [{ selector: 'gio-ps-flows-menu', template: "<!--\n\n Copyright (C) 2023 The Gravitee team (http://gravitee.io)\n \n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n \n http://www.apache.org/licenses/LICENSE-2.0\n \n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n\n-->\n\n<div class=\"header\">\n <div class=\"header__label\">\n Flows <mat-icon svgIcon=\"gio:info\" matTooltip=\"Flows allow you to apply different policies on your API event phases\"></mat-icon>\n </div>\n <div class=\"header__configBtn\">\n <button class=\"header__configBtn_edit\" mat-stroked-button mat-icon-button (click)=\"onConfigureExecution(flowExecution)\">\n <mat-icon svgIcon=\"gio:settings\"></mat-icon>\n </button>\n </div>\n</div>\n\n<div class=\"list\">\n <div *ngFor=\"let flowsGroup of flowsGroupsVMSelected\" class=\"list__flowsGroup\">\n <div class=\"list__flowsGroup__header\">\n <div class=\"list__flowsGroup__header__label\">\n <mat-icon *ngIf=\"flowsGroup._icon\" [svgIcon]=\"flowsGroup._icon\"></mat-icon>\n <span>{{ flowsGroup.name }}</span>\n </div>\n <div class=\"list__flowsGroup__header__addBtn\">\n <button mat-icon-button (click)=\"onAddFlow(flowsGroup)\"><mat-icon svgIcon=\"gio:plus\" matTooltip=\"New flow\"></mat-icon></button>\n </div>\n </div>\n\n <div\n *ngFor=\"let flow of flowsGroup.flows\"\n class=\"list__flowsGroup__flow\"\n [class.selected]=\"flow.selected\"\n (click)=\"selectFlow(flowsGroup._id, flow._id)\"\n (mouseout)=\"flow.mouseOver = false\"\n (mouseover)=\"flow.mouseOver = true\"\n >\n <div *ngIf=\"flow.name\" class=\"list__flowsGroup__flow__name\" [attr.title]=\"flow.name\">\n {{ flow.name }}\n </div>\n <div class=\"list__flowsGroup__flow__infos\">\n <div class=\"list__flowsGroup__flow__infos__badges\">\n <span *ngFor=\"let badge of flow.badges\" class=\"list__flowsGroup__flow__infos__badges__badge\" [ngClass]=\"badge.class\">{{\n badge.label\n }}</span>\n </div>\n <div class=\"list__flowsGroup__flow__infos__pathOrChannelLabel\">{{ flow.pathOrChannelLabel }}</div>\n </div>\n </div>\n </div>\n</div>\n", styles: [":host{display:flex;max-height:100%;flex-direction:column;padding-top:16px}.header{display:flex;align-items:center;padding:0 16px;margin-bottom:16px}.header__label{font:600 16px/24px Golos UI,Roboto,Helvetica Neue,sans-serif;letter-spacing:.4px;display:flex;flex:1 1 auto;align-items:center;margin-bottom:0;gap:8px}.header__configBtn{margin-left:8px}.list{padding:0 16px;overflow-y:overlay}.list__flowsGroup{display:flex;flex-direction:column;padding-bottom:8px;gap:8px}.list__flowsGroup__header{display:flex;align-items:center;padding:8px 8px 8px 10px;border-radius:8px;background-color:#cdc5f7}.list__flowsGroup__header__label{font:600 14px/20px Golos UI,Roboto,Helvetica Neue,sans-serif;letter-spacing:.4px;display:flex;flex:1 1 auto;align-items:center;gap:8px}.list__flowsGroup__header__label>mat-icon{width:22px;height:22px;flex:0 0 auto}.list__flowsGroup__header__label>span{display:-webkit-box;overflow:hidden;flex:1 1 auto;-webkit-box-orient:vertical;-webkit-line-clamp:2}.list__flowsGroup__header__addBtn{margin-left:8px}.list__flowsGroup__flow{display:flex;height:68px;flex-direction:column;justify-content:center;padding:7px;border:1px solid #d3d5dc;border-radius:8px;gap:8px}.list__flowsGroup__flow:hover,.list__flowsGroup__flow.selected{padding:6px;border:2px solid #876fec;cursor:pointer}.list__flowsGroup__flow__name{overflow:hidden;padding-left:4px;text-overflow:ellipsis;white-space:nowrap}.list__flowsGroup__flow__infos{display:flex;align-items:center}.list__flowsGroup__flow__infos__badges{flex:0 0 auto}.list__flowsGroup__flow__infos__badges__badge{width:auto}.list__flowsGroup__flow__infos__pathOrChannelLabel{flex:1 1 auto}\n"] }]
|
|
@@ -822,7 +1147,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
|
|
|
822
1147
|
* limitations under the License.
|
|
823
1148
|
*/
|
|
824
1149
|
class GioPolicyStudioComponent {
|
|
825
|
-
constructor() {
|
|
1150
|
+
constructor(policyStudioService) {
|
|
1151
|
+
this.policyStudioService = policyStudioService;
|
|
826
1152
|
/**
|
|
827
1153
|
* List of entrypoints to display
|
|
828
1154
|
*/
|
|
@@ -831,8 +1157,28 @@ class GioPolicyStudioComponent {
|
|
|
831
1157
|
* List of endpoints to display
|
|
832
1158
|
*/
|
|
833
1159
|
this.endpointsInfo = [];
|
|
1160
|
+
/**
|
|
1161
|
+
* List of common flows to add to common flows group
|
|
1162
|
+
*/
|
|
834
1163
|
this.commonFlows = [];
|
|
1164
|
+
/**
|
|
1165
|
+
* List of plans with their flows
|
|
1166
|
+
*/
|
|
835
1167
|
this.plans = [];
|
|
1168
|
+
/**
|
|
1169
|
+
* List of policies usable in the policy studio
|
|
1170
|
+
*/
|
|
1171
|
+
this.policies = [];
|
|
1172
|
+
/**
|
|
1173
|
+
* Called when Policy Studio needs to fetch the policy schema
|
|
1174
|
+
* @returns Observable of the policy schema
|
|
1175
|
+
*/
|
|
1176
|
+
this.policySchemaFetcher = () => EMPTY;
|
|
1177
|
+
/**
|
|
1178
|
+
* Called when Policy Studio needs to fetch the policy documentation
|
|
1179
|
+
* @returns Observable of the policy documentation
|
|
1180
|
+
*/
|
|
1181
|
+
this.policyDocumentationFetcher = () => EMPTY;
|
|
836
1182
|
/**
|
|
837
1183
|
* Return what is needed to save.
|
|
838
1184
|
**/
|
|
@@ -861,6 +1207,12 @@ class GioPolicyStudioComponent {
|
|
|
861
1207
|
this.selectedFlow = this.flowsGroups[0].flows[0];
|
|
862
1208
|
}
|
|
863
1209
|
}
|
|
1210
|
+
if (changes.policySchemaFetcher) {
|
|
1211
|
+
this.policyStudioService.setPolicySchemaFetcher(this.policySchemaFetcher);
|
|
1212
|
+
}
|
|
1213
|
+
if (changes.policyDocumentationFetcher) {
|
|
1214
|
+
this.policyStudioService.setPolicyDocumentationFetcher(this.policyDocumentationFetcher);
|
|
1215
|
+
}
|
|
864
1216
|
}
|
|
865
1217
|
onFlowExecutionChange(flowExecution) {
|
|
866
1218
|
this.hasFlowExecutionChanged = !isEqual(this.flowExecution, flowExecution);
|
|
@@ -896,12 +1248,12 @@ class GioPolicyStudioComponent {
|
|
|
896
1248
|
this.save.emit(Object.assign(Object.assign(Object.assign({}, (commonFlows ? { commonFlows } : {})), (plansToUpdate ? { plansToUpdate } : {})), (this.hasFlowExecutionChanged ? { flowExecution: this.flowExecution } : {})));
|
|
897
1249
|
}
|
|
898
1250
|
}
|
|
899
|
-
GioPolicyStudioComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: GioPolicyStudioComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
900
|
-
GioPolicyStudioComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.12", type: GioPolicyStudioComponent, selector: "gio-policy-studio", inputs: { apiType: "apiType", flowExecution: "flowExecution", entrypointsInfo: "entrypointsInfo", endpointsInfo: "endpointsInfo", commonFlows: "commonFlows", plans: "plans" }, outputs: { save: "save" }, usesOnChanges: true, ngImport: i0, template: "<!--\n\n Copyright (C) 2015 The Gravitee team (http://gravitee.io)\n\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n\n-->\n\n<div class=\"header\">\n <div class=\"header__apiInfo\">\n <span class=\"gio-badge-primary\">\n {{ apiType | titlecase }}\n </span>\n <span\n class=\"gio-badge-neutral\"\n [matTooltip]=\"connectorsTooltip\"\n matTooltipPosition=\"right\"\n matTooltipClass=\"gio-policy-studio__tooltip-line-break\"\n >\n <mat-icon *ngFor=\"let entrypoint of entrypointsInfo\" class=\"gio-left\" [svgIcon]=\"entrypoint.icon\"></mat-icon>\n <mat-icon *ngFor=\"let endpoint of endpointsInfo\" class=\"gio-left\" [svgIcon]=\"endpoint.icon\"></mat-icon>\n </span>\n </div>\n\n <div class=\"header__btn\">\n <button mat-stroked-button color=\"primary\" [disabled]=\"disableSaveButton\" (click)=\"onSave()\">Save</button>\n </div>\n</div>\n\n<div class=\"wrapper\">\n <div class=\"wrapper__flowsMenu\">\n <gio-ps-flows-menu\n [apiType]=\"apiType\"\n [flowExecution]=\"flowExecution\"\n [flowsGroups]=\"flowsGroups\"\n [entrypoints]=\"entrypointsInfo\"\n (flowsGroupsChange)=\"onFlowsGroupsChange($event)\"\n (flowExecutionChange)=\"onFlowExecutionChange($event)\"\n [(selectedFlow)]=\"selectedFlow\"\n ></gio-ps-flows-menu>\n </div>\n\n <div class=\"wrapper__flowDetails\">\n <gio-ps-flow-details\n [apiType]=\"apiType\"\n [flow]=\"selectedFlow\"\n [entrypointsInfo]=\"entrypointsInfo\"\n [endpointsInfo]=\"endpointsInfo\"\n (flowChange)=\"onSelectedFlowChange($event)\"\n (deleteFlow)=\"onDeleteSelectedFlow($event)\"\n ></gio-ps-flow-details>\n </div>\n</div>\n", styles: [":host{display:flex;height:100%;flex-direction:column;padding:16px;background-color:#fff}::ng-deep .gio-policy-studio__tooltip-line-break{white-space:pre-line}.header{display:flex;align-items:center;padding-bottom:16px}.header__apiInfo{flex:1 1 auto}.wrapper{display:flex;min-height:0;flex:1 1 auto;flex-direction:row;gap:16px}.wrapper__flowsMenu{overflow:hidden;max-width:400px;flex:1 1 33%;border:1px solid #d3d5dc;border-radius:8px}.wrapper__flowDetails{overflow:hidden;flex:1 1 66%;border:1px solid #d3d5dc;border-radius:8px}\n"], components: [{ type: i3.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { type: i2.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { type: GioPolicyStudioFlowsMenuComponent, selector: "gio-ps-flows-menu", inputs: ["apiType", "flowExecution", "flowsGroups", "selectedFlow", "entrypoints"], outputs: ["selectedFlowChange", "flowsGroupsChange", "flowExecutionChange"] }, { type: GioPolicyStudioDetailsComponent, selector: "gio-ps-flow-details", inputs: ["apiType", "flow", "entrypointsInfo", "endpointsInfo"], outputs: ["flowChange", "deleteFlow"] }], directives: [{ type:
|
|
1251
|
+
GioPolicyStudioComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: GioPolicyStudioComponent, deps: [{ token: GioPolicyStudioService }], target: i0.ɵɵFactoryTarget.Component });
|
|
1252
|
+
GioPolicyStudioComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.12", type: GioPolicyStudioComponent, selector: "gio-policy-studio", inputs: { apiType: "apiType", flowExecution: "flowExecution", entrypointsInfo: "entrypointsInfo", endpointsInfo: "endpointsInfo", commonFlows: "commonFlows", plans: "plans", policies: "policies", policySchemaFetcher: "policySchemaFetcher", policyDocumentationFetcher: "policyDocumentationFetcher" }, outputs: { save: "save" }, usesOnChanges: true, ngImport: i0, template: "<!--\n\n Copyright (C) 2015 The Gravitee team (http://gravitee.io)\n\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n\n-->\n\n<div class=\"header\">\n <div class=\"header__apiInfo\">\n <span class=\"gio-badge-primary\">\n {{ apiType | titlecase }}\n </span>\n <span\n class=\"gio-badge-neutral\"\n [matTooltip]=\"connectorsTooltip\"\n matTooltipPosition=\"right\"\n matTooltipClass=\"gio-policy-studio__tooltip-line-break\"\n >\n <mat-icon *ngFor=\"let entrypoint of entrypointsInfo\" class=\"gio-left\" [svgIcon]=\"entrypoint.icon\"></mat-icon>\n <mat-icon *ngFor=\"let endpoint of endpointsInfo\" class=\"gio-left\" [svgIcon]=\"endpoint.icon\"></mat-icon>\n </span>\n </div>\n\n <div class=\"header__btn\">\n <button mat-stroked-button color=\"primary\" [disabled]=\"disableSaveButton\" (click)=\"onSave()\">Save</button>\n </div>\n</div>\n\n<div class=\"wrapper\">\n <div class=\"wrapper__flowsMenu\">\n <gio-ps-flows-menu\n [apiType]=\"apiType\"\n [flowExecution]=\"flowExecution\"\n [flowsGroups]=\"flowsGroups\"\n [entrypoints]=\"entrypointsInfo\"\n (flowsGroupsChange)=\"onFlowsGroupsChange($event)\"\n (flowExecutionChange)=\"onFlowExecutionChange($event)\"\n [(selectedFlow)]=\"selectedFlow\"\n ></gio-ps-flows-menu>\n </div>\n\n <div class=\"wrapper__flowDetails\">\n <gio-ps-flow-details\n [apiType]=\"apiType\"\n [flow]=\"selectedFlow\"\n [entrypointsInfo]=\"entrypointsInfo\"\n [endpointsInfo]=\"endpointsInfo\"\n [policies]=\"policies\"\n (flowChange)=\"onSelectedFlowChange($event)\"\n (deleteFlow)=\"onDeleteSelectedFlow($event)\"\n ></gio-ps-flow-details>\n </div>\n</div>\n", styles: [":host{display:flex;height:100%;flex-direction:column;padding:16px;background-color:#fff}::ng-deep .gio-policy-studio__tooltip-line-break{white-space:pre-line}.header{display:flex;align-items:center;padding-bottom:16px}.header__apiInfo{flex:1 1 auto}.wrapper{display:flex;min-height:0;flex:1 1 auto;flex-direction:row;gap:16px}.wrapper__flowsMenu{overflow:hidden;max-width:400px;flex:1 1 33%;border:1px solid #d3d5dc;border-radius:8px}.wrapper__flowDetails{overflow:hidden;flex:1 1 66%;border:1px solid #d3d5dc;border-radius:8px}\n"], components: [{ type: i3.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { type: i2.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { type: GioPolicyStudioFlowsMenuComponent, selector: "gio-ps-flows-menu", inputs: ["apiType", "flowExecution", "flowsGroups", "selectedFlow", "entrypoints"], outputs: ["selectedFlowChange", "flowsGroupsChange", "flowExecutionChange"] }, { type: GioPolicyStudioDetailsComponent, selector: "gio-ps-flow-details", inputs: ["apiType", "flow", "entrypointsInfo", "endpointsInfo", "policies"], outputs: ["flowChange", "deleteFlow"] }], directives: [{ type: i7.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { type: i5$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }], pipes: { "titlecase": i5$1.TitleCasePipe } });
|
|
901
1253
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: GioPolicyStudioComponent, decorators: [{
|
|
902
1254
|
type: Component,
|
|
903
|
-
args: [{ selector: 'gio-policy-studio', template: "<!--\n\n Copyright (C) 2015 The Gravitee team (http://gravitee.io)\n\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n\n-->\n\n<div class=\"header\">\n <div class=\"header__apiInfo\">\n <span class=\"gio-badge-primary\">\n {{ apiType | titlecase }}\n </span>\n <span\n class=\"gio-badge-neutral\"\n [matTooltip]=\"connectorsTooltip\"\n matTooltipPosition=\"right\"\n matTooltipClass=\"gio-policy-studio__tooltip-line-break\"\n >\n <mat-icon *ngFor=\"let entrypoint of entrypointsInfo\" class=\"gio-left\" [svgIcon]=\"entrypoint.icon\"></mat-icon>\n <mat-icon *ngFor=\"let endpoint of endpointsInfo\" class=\"gio-left\" [svgIcon]=\"endpoint.icon\"></mat-icon>\n </span>\n </div>\n\n <div class=\"header__btn\">\n <button mat-stroked-button color=\"primary\" [disabled]=\"disableSaveButton\" (click)=\"onSave()\">Save</button>\n </div>\n</div>\n\n<div class=\"wrapper\">\n <div class=\"wrapper__flowsMenu\">\n <gio-ps-flows-menu\n [apiType]=\"apiType\"\n [flowExecution]=\"flowExecution\"\n [flowsGroups]=\"flowsGroups\"\n [entrypoints]=\"entrypointsInfo\"\n (flowsGroupsChange)=\"onFlowsGroupsChange($event)\"\n (flowExecutionChange)=\"onFlowExecutionChange($event)\"\n [(selectedFlow)]=\"selectedFlow\"\n ></gio-ps-flows-menu>\n </div>\n\n <div class=\"wrapper__flowDetails\">\n <gio-ps-flow-details\n [apiType]=\"apiType\"\n [flow]=\"selectedFlow\"\n [entrypointsInfo]=\"entrypointsInfo\"\n [endpointsInfo]=\"endpointsInfo\"\n (flowChange)=\"onSelectedFlowChange($event)\"\n (deleteFlow)=\"onDeleteSelectedFlow($event)\"\n ></gio-ps-flow-details>\n </div>\n</div>\n", styles: [":host{display:flex;height:100%;flex-direction:column;padding:16px;background-color:#fff}::ng-deep .gio-policy-studio__tooltip-line-break{white-space:pre-line}.header{display:flex;align-items:center;padding-bottom:16px}.header__apiInfo{flex:1 1 auto}.wrapper{display:flex;min-height:0;flex:1 1 auto;flex-direction:row;gap:16px}.wrapper__flowsMenu{overflow:hidden;max-width:400px;flex:1 1 33%;border:1px solid #d3d5dc;border-radius:8px}.wrapper__flowDetails{overflow:hidden;flex:1 1 66%;border:1px solid #d3d5dc;border-radius:8px}\n"] }]
|
|
904
|
-
}], propDecorators: { apiType: [{
|
|
1255
|
+
args: [{ selector: 'gio-policy-studio', template: "<!--\n\n Copyright (C) 2015 The Gravitee team (http://gravitee.io)\n\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n\n-->\n\n<div class=\"header\">\n <div class=\"header__apiInfo\">\n <span class=\"gio-badge-primary\">\n {{ apiType | titlecase }}\n </span>\n <span\n class=\"gio-badge-neutral\"\n [matTooltip]=\"connectorsTooltip\"\n matTooltipPosition=\"right\"\n matTooltipClass=\"gio-policy-studio__tooltip-line-break\"\n >\n <mat-icon *ngFor=\"let entrypoint of entrypointsInfo\" class=\"gio-left\" [svgIcon]=\"entrypoint.icon\"></mat-icon>\n <mat-icon *ngFor=\"let endpoint of endpointsInfo\" class=\"gio-left\" [svgIcon]=\"endpoint.icon\"></mat-icon>\n </span>\n </div>\n\n <div class=\"header__btn\">\n <button mat-stroked-button color=\"primary\" [disabled]=\"disableSaveButton\" (click)=\"onSave()\">Save</button>\n </div>\n</div>\n\n<div class=\"wrapper\">\n <div class=\"wrapper__flowsMenu\">\n <gio-ps-flows-menu\n [apiType]=\"apiType\"\n [flowExecution]=\"flowExecution\"\n [flowsGroups]=\"flowsGroups\"\n [entrypoints]=\"entrypointsInfo\"\n (flowsGroupsChange)=\"onFlowsGroupsChange($event)\"\n (flowExecutionChange)=\"onFlowExecutionChange($event)\"\n [(selectedFlow)]=\"selectedFlow\"\n ></gio-ps-flows-menu>\n </div>\n\n <div class=\"wrapper__flowDetails\">\n <gio-ps-flow-details\n [apiType]=\"apiType\"\n [flow]=\"selectedFlow\"\n [entrypointsInfo]=\"entrypointsInfo\"\n [endpointsInfo]=\"endpointsInfo\"\n [policies]=\"policies\"\n (flowChange)=\"onSelectedFlowChange($event)\"\n (deleteFlow)=\"onDeleteSelectedFlow($event)\"\n ></gio-ps-flow-details>\n </div>\n</div>\n", styles: [":host{display:flex;height:100%;flex-direction:column;padding:16px;background-color:#fff}::ng-deep .gio-policy-studio__tooltip-line-break{white-space:pre-line}.header{display:flex;align-items:center;padding-bottom:16px}.header__apiInfo{flex:1 1 auto}.wrapper{display:flex;min-height:0;flex:1 1 auto;flex-direction:row;gap:16px}.wrapper__flowsMenu{overflow:hidden;max-width:400px;flex:1 1 33%;border:1px solid #d3d5dc;border-radius:8px}.wrapper__flowDetails{overflow:hidden;flex:1 1 66%;border:1px solid #d3d5dc;border-radius:8px}\n"] }]
|
|
1256
|
+
}], ctorParameters: function () { return [{ type: GioPolicyStudioService }]; }, propDecorators: { apiType: [{
|
|
905
1257
|
type: Input
|
|
906
1258
|
}], flowExecution: [{
|
|
907
1259
|
type: Input
|
|
@@ -913,6 +1265,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
|
|
|
913
1265
|
type: Input
|
|
914
1266
|
}], plans: [{
|
|
915
1267
|
type: Input
|
|
1268
|
+
}], policies: [{
|
|
1269
|
+
type: Input
|
|
1270
|
+
}], policySchemaFetcher: [{
|
|
1271
|
+
type: Input
|
|
1272
|
+
}], policyDocumentationFetcher: [{
|
|
1273
|
+
type: Input
|
|
916
1274
|
}], save: [{
|
|
917
1275
|
type: Output
|
|
918
1276
|
}] } });
|
|
@@ -992,8 +1350,11 @@ GioPolicyStudioModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", v
|
|
|
992
1350
|
GioPolicyStudioFlowProxyFormDialogComponent,
|
|
993
1351
|
GioPolicyStudioDetailsInfoBarComponent,
|
|
994
1352
|
GioPolicyStudioDetailsPhaseComponent,
|
|
995
|
-
|
|
996
|
-
GioFilterConnectorsByModePipe
|
|
1353
|
+
GioPolicyStudioDetailsPhaseStepComponent,
|
|
1354
|
+
GioFilterConnectorsByModePipe,
|
|
1355
|
+
GioPolicyStudioPoliciesCatalogDialogComponent,
|
|
1356
|
+
GioPolicyStudioStepEditDialogComponent,
|
|
1357
|
+
GioPolicyStudioStepFormComponent], imports: [CommonModule,
|
|
997
1358
|
ReactiveFormsModule,
|
|
998
1359
|
MatButtonModule,
|
|
999
1360
|
MatTooltipModule,
|
|
@@ -1008,7 +1369,7 @@ GioPolicyStudioModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", v
|
|
|
1008
1369
|
GioFormSlideToggleModule,
|
|
1009
1370
|
GioFormTagsInputModule,
|
|
1010
1371
|
GioBannerModule], exports: [GioPolicyStudioComponent] });
|
|
1011
|
-
GioPolicyStudioModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: GioPolicyStudioModule, imports: [[
|
|
1372
|
+
GioPolicyStudioModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: GioPolicyStudioModule, providers: [GioPolicyStudioService], imports: [[
|
|
1012
1373
|
CommonModule,
|
|
1013
1374
|
ReactiveFormsModule,
|
|
1014
1375
|
MatButtonModule,
|
|
@@ -1037,8 +1398,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
|
|
|
1037
1398
|
GioPolicyStudioFlowProxyFormDialogComponent,
|
|
1038
1399
|
GioPolicyStudioDetailsInfoBarComponent,
|
|
1039
1400
|
GioPolicyStudioDetailsPhaseComponent,
|
|
1040
|
-
|
|
1401
|
+
GioPolicyStudioDetailsPhaseStepComponent,
|
|
1041
1402
|
GioFilterConnectorsByModePipe,
|
|
1403
|
+
GioPolicyStudioPoliciesCatalogDialogComponent,
|
|
1404
|
+
GioPolicyStudioStepEditDialogComponent,
|
|
1405
|
+
GioPolicyStudioStepFormComponent,
|
|
1042
1406
|
],
|
|
1043
1407
|
imports: [
|
|
1044
1408
|
CommonModule,
|
|
@@ -1058,6 +1422,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
|
|
|
1058
1422
|
GioBannerModule,
|
|
1059
1423
|
],
|
|
1060
1424
|
exports: [GioPolicyStudioComponent],
|
|
1425
|
+
providers: [GioPolicyStudioService],
|
|
1061
1426
|
}]
|
|
1062
1427
|
}] });
|
|
1063
1428
|
|