@gravitee/ui-policy-studio-angular 7.6.0 → 7.7.0

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.
Files changed (71) hide show
  1. package/README.md +2 -3
  2. package/esm2020/lib/components/flow-details/gio-ps-flow-details.component.mjs +14 -7
  3. package/esm2020/lib/components/flow-details-info-bar/gio-ps-flow-details-info-bar.component.mjs +91 -0
  4. package/esm2020/lib/components/flow-details-phase/gio-ps-flow-details-phase.component.mjs +44 -0
  5. package/esm2020/lib/components/flow-details-phase-policy/gio-ps-flow-details-phase-policy.component.mjs +31 -0
  6. package/esm2020/lib/components/flow-form-dialog/flow-message-form-dialog/gio-ps-flow-message-form-dialog.component.mjs +3 -3
  7. package/esm2020/lib/components/flows-menu/gio-ps-flows-menu.component.mjs +9 -6
  8. package/esm2020/lib/gio-policy-studio.component.mjs +43 -28
  9. package/esm2020/lib/gio-policy-studio.model.mjs +1 -1
  10. package/esm2020/lib/gio-policy-studio.module.mjs +20 -4
  11. package/esm2020/lib/models/SaveOutput.mjs +2 -0
  12. package/esm2020/lib/models/index.mjs +2 -1
  13. package/esm2020/lib/models/plan/Plan.mjs +1 -1
  14. package/esm2020/testing/lib/components/flow-details/gio-ps-flow-details.harness.mjs +41 -0
  15. package/esm2020/testing/lib/components/flow-details-info-bar/gio-ps-flow-details-info-bar.harness.mjs +35 -0
  16. package/esm2020/testing/lib/components/flow-form-dialog/flow-message-form-dialog/gio-ps-flow-message-form-dialog.harness.mjs +87 -0
  17. package/esm2020/testing/lib/components/flow-form-dialog/flow-proxy-form-dialog/gio-ps-flow-proxy-form-dialog.harness.mjs +69 -0
  18. package/esm2020/testing/lib/components/flows-menu/gio-ps-flows-menu.harness.mjs +66 -0
  19. package/esm2020/testing/lib/gio-policy-studio.harness.mjs +105 -0
  20. package/esm2020/testing/lib/models/ConnectorsInfo.mjs +2 -0
  21. package/esm2020/testing/lib/models/SaveOutput.mjs +2 -0
  22. package/esm2020/testing/lib/models/flow/Flow.fixture.mjs +2 -2
  23. package/esm2020/testing/{testing → lib/models}/index.mjs +5 -3
  24. package/esm2020/testing/lib/models/plan/Plan.fixture.mjs +2 -1
  25. package/esm2020/testing/lib/models/plan/Plan.mjs +1 -1
  26. package/esm2020/testing/lib/models/plan/index.mjs +17 -0
  27. package/esm2020/testing/public-testing-api.mjs +2 -2
  28. package/fesm2015/gravitee-ui-policy-studio-angular-testing.mjs +329 -1312
  29. package/fesm2015/gravitee-ui-policy-studio-angular-testing.mjs.map +1 -1
  30. package/fesm2015/gravitee-ui-policy-studio-angular.mjs +240 -43
  31. package/fesm2015/gravitee-ui-policy-studio-angular.mjs.map +1 -1
  32. package/fesm2020/gravitee-ui-policy-studio-angular-testing.mjs +320 -1317
  33. package/fesm2020/gravitee-ui-policy-studio-angular-testing.mjs.map +1 -1
  34. package/fesm2020/gravitee-ui-policy-studio-angular.mjs +233 -43
  35. package/fesm2020/gravitee-ui-policy-studio-angular.mjs.map +1 -1
  36. package/lib/components/flow-details/gio-ps-flow-details.component.d.ts +4 -3
  37. package/lib/components/flow-details-info-bar/gio-ps-flow-details-info-bar.component.d.ts +16 -0
  38. package/lib/components/flow-details-phase/gio-ps-flow-details-phase.component.d.ts +11 -0
  39. package/lib/components/flow-details-phase-policy/gio-ps-flow-details-phase-policy.component.d.ts +7 -0
  40. package/lib/components/flows-menu/gio-ps-flows-menu.component.d.ts +1 -1
  41. package/lib/gio-policy-studio.component.d.ts +5 -8
  42. package/lib/gio-policy-studio.model.d.ts +1 -0
  43. package/lib/gio-policy-studio.module.d.ts +14 -10
  44. package/lib/models/SaveOutput.d.ts +6 -0
  45. package/lib/models/index.d.ts +1 -0
  46. package/lib/models/plan/Plan.d.ts +1 -0
  47. package/package.json +1 -1
  48. package/testing/lib/components/flow-details/gio-ps-flow-details.harness.d.ts +9 -0
  49. package/testing/lib/components/flow-details-info-bar/gio-ps-flow-details-info-bar.harness.d.ts +5 -0
  50. package/testing/lib/components/flow-form-dialog/flow-message-form-dialog/gio-ps-flow-message-form-dialog.harness.d.ts +16 -0
  51. package/testing/lib/components/flow-form-dialog/flow-proxy-form-dialog/gio-ps-flow-proxy-form-dialog.harness.d.ts +15 -0
  52. package/testing/lib/components/flows-menu/gio-ps-flows-menu.harness.d.ts +25 -0
  53. package/testing/lib/gio-policy-studio.harness.d.ts +34 -0
  54. package/testing/lib/models/ConnectorsInfo.d.ts +4 -0
  55. package/testing/lib/models/SaveOutput.d.ts +6 -0
  56. package/testing/lib/models/index.d.ts +4 -0
  57. package/testing/lib/models/plan/Plan.d.ts +1 -0
  58. package/testing/lib/models/plan/index.d.ts +1 -0
  59. package/testing/public-testing-api.d.ts +1 -1
  60. package/esm2020/testing/testing/harnesses/div.harness.mjs +0 -42
  61. package/esm2020/testing/testing/harnesses/index.mjs +0 -17
  62. package/esm2020/testing/testing/stories-resources/apim-definition.json +0 -405
  63. package/esm2020/testing/testing/stories-resources/apim-flow.json +0 -54
  64. package/esm2020/testing/testing/stories-resources/apim-policies.json +0 -486
  65. package/esm2020/testing/testing/stories-resources/apim-property-providers.json +0 -39
  66. package/esm2020/testing/testing/stories-resources/apim-resource-types.json +0 -187
  67. package/esm2020/testing/testing/stories-resources/index.mjs +0 -26
  68. package/testing/testing/harnesses/div.harness.d.ts +0 -20
  69. package/testing/testing/harnesses/index.d.ts +0 -1
  70. package/testing/testing/index.d.ts +0 -2
  71. package/testing/testing/stories-resources/index.d.ts +0 -592
@@ -1 +1 @@
1
- {"version":3,"file":"gravitee-ui-policy-studio-angular.mjs","sources":["../../../projects/ui-policy-studio-angular/src/lib/models/flow/HttpMethod.ts","../../../projects/ui-policy-studio-angular/src/lib/models/flow/index.ts","../../../projects/ui-policy-studio-angular/src/lib/models/plan/index.ts","../../../projects/ui-policy-studio-angular/src/lib/models/index.ts","../../../projects/ui-policy-studio-angular/src/lib/components/flow-form-dialog/flow-message-form-dialog/gio-ps-flow-message-form-dialog.component.ts","../../../projects/ui-policy-studio-angular/src/lib/components/flow-form-dialog/flow-message-form-dialog/gio-ps-flow-message-form-dialog.component.html","../../../projects/ui-policy-studio-angular/src/lib/components/flow-form-dialog/flow-proxy-form-dialog/gio-ps-flow-proxy-form-dialog.component.ts","../../../projects/ui-policy-studio-angular/src/lib/components/flow-form-dialog/flow-proxy-form-dialog/gio-ps-flow-proxy-form-dialog.component.html","../../../projects/ui-policy-studio-angular/src/lib/components/flow-details/gio-ps-flow-details.component.ts","../../../projects/ui-policy-studio-angular/src/lib/components/flow-details/gio-ps-flow-details.component.html","../../../projects/ui-policy-studio-angular/src/lib/components/flows-menu/gio-ps-flows-menu.component.ts","../../../projects/ui-policy-studio-angular/src/lib/components/flows-menu/gio-ps-flows-menu.component.html","../../../projects/ui-policy-studio-angular/src/lib/gio-policy-studio.component.ts","../../../projects/ui-policy-studio-angular/src/lib/gio-policy-studio.component.html","../../../projects/ui-policy-studio-angular/src/lib/gio-policy-studio.module.ts","../../../projects/ui-policy-studio-angular/src/public-api.ts","../../../projects/ui-policy-studio-angular/src/gravitee-ui-policy-studio-angular.ts"],"sourcesContent":["/*\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\nexport const HttpMethods = ['CONNECT', 'DELETE', 'GET', 'HEAD', 'OPTIONS', 'PATCH', 'POST', 'PUT', 'TRACE', 'OTHER'] as const;\nexport type HttpMethod = (typeof HttpMethods)[number];\n","/*\n * Copyright (C) 2022 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 */\nexport * from './ApiType';\nexport * from './Flow';\nexport * from './FlowExecution';\nexport * from './HttpMethod';\nexport * from './Selector';\nexport * from './Step';\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 */\nexport * from './Plan';\n","/*\n * Copyright (C) 2022 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 */\nexport * from './flow';\nexport * from './plan';\n\nexport * from './ConnectorsInfo';\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 */\nimport { Component, Inject } from '@angular/core';\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\nimport { FormControl, FormGroup } from '@angular/forms';\nimport { cloneDeep, uniqueId } from 'lodash';\n\nimport { FlowVM } from '../../../gio-policy-studio.model';\nimport { ChannelSelector, ConditionSelector } from '../../../models';\nimport { GioPolicyStudioFlowFormDialogResult } from '../gio-ps-flow-form-dialog-result.model';\n\nexport type GioPolicyStudioFlowMessageFormDialogData = {\n flow?: FlowVM;\n entrypoints?: string[];\n};\n\n@Component({\n selector: 'gio-ps-flow-message-form-dialog',\n templateUrl: './gio-ps-flow-message-form-dialog.component.html',\n styleUrls: ['./gio-ps-flow-message-form-dialog.component.scss'],\n})\nexport class GioPolicyStudioFlowMessageFormDialogComponent {\n public entrypoints: string[] = [];\n public flowFormGroup?: FormGroup;\n\n public existingFlow?: FlowVM;\n public mode: 'create' | 'edit' = 'create';\n\n constructor(\n public dialogRef: MatDialogRef<GioPolicyStudioFlowMessageFormDialogComponent, GioPolicyStudioFlowFormDialogResult>,\n @Inject(MAT_DIALOG_DATA) flowDialogData: GioPolicyStudioFlowMessageFormDialogData,\n ) {\n this.entrypoints = flowDialogData?.entrypoints ?? [];\n\n this.existingFlow = cloneDeep(flowDialogData?.flow);\n this.mode = this.existingFlow ? 'edit' : 'create';\n\n const channelSelector = flowDialogData?.flow?.selectors?.find(s => s.type === 'CHANNEL') as ChannelSelector;\n const conditionSelector = flowDialogData?.flow?.selectors?.find(s => s.type === 'CONDITION') as ConditionSelector;\n\n this.flowFormGroup = new FormGroup({\n name: new FormControl(flowDialogData?.flow?.name ?? ''),\n channelOperator: new FormControl(channelSelector?.channelOperator ?? 'EQUALS'),\n channel: new FormControl(channelSelector?.channel ?? ''),\n operations: new FormControl(channelSelector?.operations ?? []),\n entrypoints: new FormControl(channelSelector?.entrypoints ?? []),\n condition: new FormControl(conditionSelector?.condition ?? ''),\n });\n }\n\n public onSubmit(): void {\n const chanelSelectorToSave: ChannelSelector = {\n type: 'CHANNEL',\n channel: this.flowFormGroup?.get('channel')?.value,\n channelOperator: this.flowFormGroup?.get('channelOperator')?.value,\n operations: this.flowFormGroup?.get('operations')?.value,\n entrypoints: this.flowFormGroup?.get('entrypoints')?.value,\n };\n\n const conditionValue: string = this.flowFormGroup?.get('condition')?.value;\n const conditionSelectorToSave: ConditionSelector | undefined = conditionValue\n ? {\n type: 'CONDITION',\n condition: conditionValue,\n }\n : undefined;\n\n const flowToSave: FlowVM = {\n // New id for new flow\n _id: uniqueId('flow_'),\n // If existing flow, keep root props\n ...this.existingFlow,\n // Mark as changed\n _hasChanged: true,\n // Add changes\n name: this.flowFormGroup?.get('name')?.value,\n selectors: conditionSelectorToSave ? [chanelSelectorToSave, conditionSelectorToSave] : [chanelSelectorToSave],\n enabled: true,\n };\n\n this.dialogRef.close({\n ...flowToSave,\n });\n }\n}\n","<!--\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 {{ mode === 'create' ? 'Create a new flow' : 'Edit flow' }}\n\n <button class=\"title__closeBtn\" mat-icon-button aria-label=\"Close dialog\" [mat-dialog-close]=\"false\">\n <mat-icon svgIcon=\"gio:cancel\"></mat-icon>\n </button>\n</h2>\n\n<mat-dialog-content *ngIf=\"flowFormGroup\" class=\"content\" [formGroup]=\"flowFormGroup\">\n <p>Flows allow you to apply different policies per event phases. For example you can reroute calls based on the URL specified.</p>\n\n <div class=\"content__row\">\n <mat-form-field>\n <mat-label>Flow name</mat-label>\n <input matInput formControlName=\"name\" cdkFocusInitial />\n <mat-hint>Names will be automatically generated with channel and operation if left blank</mat-hint>\n </mat-form-field>\n </div>\n <div class=\"content__row\">\n <mat-form-field>\n <mat-label>Operator</mat-label>\n <mat-select formControlName=\"channelOperator\">\n <mat-option value=\"EQUALS\">Equals</mat-option>\n <mat-option value=\"STARTS_WITH\">Starts with</mat-option>\n </mat-select>\n <mat-hint>Channel operator</mat-hint>\n </mat-form-field>\n\n <mat-form-field>\n <mat-label>Channel</mat-label>\n <input matInput formControlName=\"channel\" />\n <mat-hint>Publish or Subscribe channel. This is the path of your request.</mat-hint>\n </mat-form-field>\n </div>\n\n <div class=\"content__row\">\n <mat-form-field>\n <mat-label>Entrypoints</mat-label>\n <mat-select multiple formControlName=\"entrypoints\">\n <mat-option *ngFor=\"let entrypoint of entrypoints\" [value]=\"entrypoint\">{{ entrypoint }}</mat-option>\n </mat-select>\n <mat-hint>Entrypoints where your flow will be executed</mat-hint>\n </mat-form-field>\n </div>\n\n <div class=\"content__row\">\n <mat-form-field>\n <mat-label>Entrypoints supported operations</mat-label>\n <mat-select multiple formControlName=\"operations\">\n <mat-option value=\"PUBLISH\">Publish</mat-option>\n <mat-option value=\"SUBSCRIBE\">Subscribe</mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n\n <div class=\"content__row\">\n <mat-form-field>\n <mat-label>Condition</mat-label>\n <input matInput formControlName=\"condition\" />\n <mat-hint>Condition to execute the flow, supports Expression Language</mat-hint>\n </mat-form-field>\n </div>\n</mat-dialog-content>\n\n<mat-dialog-actions class=\"actions\">\n <button class=\"actions__cancelBtn\" mat-flat-button [mat-dialog-close]=\"false\">Cancel</button>\n <button class=\"actions__saveBtn\" color=\"primary\" mat-stroked-button role=\"dialog\" (click)=\"onSubmit()\">\n {{ mode === 'create' ? 'Create' : 'Save' }}\n </button>\n</mat-dialog-actions>\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 */\nimport { Component, Inject } from '@angular/core';\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\nimport { FormControl, FormGroup } from '@angular/forms';\nimport { cloneDeep, uniqueId } from 'lodash';\n\nimport { FlowVM } from '../../../gio-policy-studio.model';\nimport { ConditionSelector, HttpMethod, HttpMethods, HttpSelector } from '../../../models';\nimport { GioPolicyStudioFlowFormDialogResult } from '../gio-ps-flow-form-dialog-result.model';\n\nexport type GioPolicyStudioFlowProxyFormDialogData = {\n flow?: FlowVM;\n};\n\ntype HttpMethodVM = HttpMethod | 'ALL';\n\nconst METHODS_AUTOCOMPLETE: HttpMethodVM[] = ['ALL', ...HttpMethods];\n\n@Component({\n selector: 'gio-ps-flow-proxy-form-dialog',\n templateUrl: './gio-ps-flow-proxy-form-dialog.component.html',\n styleUrls: ['./gio-ps-flow-proxy-form-dialog.component.scss'],\n})\nexport class GioPolicyStudioFlowProxyFormDialogComponent {\n public flowFormGroup?: FormGroup;\n\n public existingFlow?: FlowVM;\n public mode: 'create' | 'edit' = 'create';\n public methods = METHODS_AUTOCOMPLETE;\n\n constructor(\n public dialogRef: MatDialogRef<GioPolicyStudioFlowProxyFormDialogComponent, GioPolicyStudioFlowFormDialogResult>,\n @Inject(MAT_DIALOG_DATA) flowDialogData: GioPolicyStudioFlowProxyFormDialogData,\n ) {\n this.existingFlow = cloneDeep(flowDialogData?.flow);\n this.mode = this.existingFlow ? 'edit' : 'create';\n\n const httpSelector = flowDialogData?.flow?.selectors?.find(s => s.type === 'HTTP') as HttpSelector;\n const conditionSelector = flowDialogData?.flow?.selectors?.find(s => s.type === 'CONDITION') as ConditionSelector;\n\n this.flowFormGroup = new FormGroup({\n name: new FormControl(flowDialogData?.flow?.name ?? ''),\n pathOperator: new FormControl(httpSelector?.pathOperator ?? 'EQUALS'),\n path: new FormControl(httpSelector?.path ?? ''),\n methods: new FormControl(sanitizeMethodFormValue(httpSelector?.methods)),\n condition: new FormControl(conditionSelector?.condition ?? ''),\n });\n }\n\n public onSubmit(): void {\n const httpSelectorToSave: HttpSelector = {\n type: 'HTTP',\n path: this.flowFormGroup?.get('path')?.value,\n pathOperator: this.flowFormGroup?.get('pathOperator')?.value,\n methods: sanitizeMethods(this.flowFormGroup?.get('methods')?.value),\n };\n\n const conditionValue: string = this.flowFormGroup?.get('condition')?.value;\n const conditionSelectorToSave: ConditionSelector | undefined = conditionValue\n ? {\n type: 'CONDITION',\n condition: conditionValue,\n }\n : undefined;\n\n const flowToSave: FlowVM = {\n // New id for new flow\n _id: uniqueId('flow_'),\n // If existing flow, keep root props\n ...this.existingFlow,\n // Mark as changed\n _hasChanged: true,\n // Add changes\n name: this.flowFormGroup?.get('name')?.value,\n selectors: conditionSelectorToSave ? [httpSelectorToSave, conditionSelectorToSave] : [httpSelectorToSave],\n enabled: true,\n };\n\n this.dialogRef.close({\n ...flowToSave,\n });\n }\n\n public tagValidationHook(tag: string, validationCb: (shouldAddTag: boolean) => void) {\n validationCb(METHODS_AUTOCOMPLETE.map(m => `${m}`).includes(tag.toUpperCase()));\n }\n}\n\nconst sanitizeMethods: (value: HttpMethodVM[]) => HttpMethod[] = (value?: HttpMethodVM[]) => {\n if (!value || value.find(m => m === 'ALL')) return [];\n return value as HttpMethod[];\n};\n\nconst sanitizeMethodFormValue: (methods?: HttpMethod[]) => HttpMethodVM[] = (methods?: HttpMethod[]) => {\n if (!methods || methods.length === 0) return ['ALL'];\n return methods;\n};\n","<!--\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 {{ mode === 'create' ? 'Create a new flow' : 'Edit flow' }}\n\n <button class=\"title__closeBtn\" mat-icon-button aria-label=\"Close dialog\" [mat-dialog-close]=\"false\">\n <mat-icon svgIcon=\"gio:cancel\"></mat-icon>\n </button>\n</h2>\n\n<mat-dialog-content *ngIf=\"flowFormGroup\" class=\"content\" [formGroup]=\"flowFormGroup\">\n <p>\n Flows allow you to apply different policies per HTTP path and/or method. For example you can reroute calls based on the URL specified.\n </p>\n\n <div class=\"content__row\">\n <mat-form-field>\n <mat-label>Flow name</mat-label>\n <input matInput formControlName=\"name\" cdkFocusInitial />\n <mat-hint>Names will be automatically generated with path and method if left blank</mat-hint>\n </mat-form-field>\n </div>\n <div class=\"content__row\">\n <mat-form-field>\n <mat-label>Operator</mat-label>\n <mat-select formControlName=\"pathOperator\">\n <mat-option value=\"EQUALS\">Equals</mat-option>\n <mat-option value=\"STARTS_WITH\">Starts with</mat-option>\n </mat-select>\n <mat-hint>Path operator</mat-hint>\n </mat-form-field>\n\n <mat-form-field>\n <mat-label>Path</mat-label>\n <input matInput formControlName=\"path\" />\n <mat-hint>Path</mat-hint>\n </mat-form-field>\n </div>\n\n <div class=\"content__row\">\n <mat-form-field>\n <mat-label>Methods for your flow</mat-label>\n <gio-form-tags-input\n formControlName=\"methods\"\n [autocompleteOptions]=\"methods\"\n [tagValidationHook]=\"tagValidationHook\"\n ></gio-form-tags-input>\n </mat-form-field>\n </div>\n\n <div class=\"content__row\">\n <mat-form-field>\n <mat-label>Condition</mat-label>\n <input matInput formControlName=\"condition\" />\n <mat-hint>Condition to execute the flow, supports Expression Language</mat-hint>\n </mat-form-field>\n </div>\n</mat-dialog-content>\n\n<mat-dialog-actions class=\"actions\">\n <button class=\"actions__cancelBtn\" mat-flat-button [mat-dialog-close]=\"false\">Cancel</button>\n <button class=\"actions__saveBtn\" color=\"primary\" mat-stroked-button role=\"dialog\" (click)=\"onSubmit()\">\n {{ mode === 'create' ? 'Create' : 'Save' }}\n </button>\n</mat-dialog-actions>\n","/*\n * Copyright (C) 2022 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 */\nimport { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { MatDialog } from '@angular/material/dialog';\nimport { tap } from 'rxjs/operators';\n\nimport { FlowVM } from '../../gio-policy-studio.model';\nimport {\n GioPolicyStudioFlowMessageFormDialogComponent,\n GioPolicyStudioFlowMessageFormDialogData,\n} from '../flow-form-dialog/flow-message-form-dialog/gio-ps-flow-message-form-dialog.component';\nimport { ApiType } from '../../models';\nimport {\n GioPolicyStudioFlowProxyFormDialogComponent,\n GioPolicyStudioFlowProxyFormDialogData,\n} from '../flow-form-dialog/flow-proxy-form-dialog/gio-ps-flow-proxy-form-dialog.component';\nimport { GioPolicyStudioFlowFormDialogResult } from '../flow-form-dialog/gio-ps-flow-form-dialog-result.model';\n\n@Component({\n selector: 'gio-ps-flow-details',\n templateUrl: './gio-ps-flow-details.component.html',\n styleUrls: ['./gio-ps-flow-details.component.scss'],\n})\nexport class GioPolicyStudioDetailsComponent {\n @Input()\n public apiType!: ApiType;\n\n @Input()\n public flow?: FlowVM = undefined;\n\n @Input()\n public entrypoints: string[] = [];\n\n @Output()\n public flowChange = new EventEmitter<FlowVM>();\n\n @Output()\n public deleteFlow = new EventEmitter<FlowVM>();\n\n constructor(private readonly matDialog: MatDialog) {}\n\n public onEditFlow(): void {\n const dialogResult =\n this.apiType === 'MESSAGE'\n ? this.matDialog\n .open<\n GioPolicyStudioFlowMessageFormDialogComponent,\n GioPolicyStudioFlowMessageFormDialogData,\n GioPolicyStudioFlowFormDialogResult\n >(GioPolicyStudioFlowMessageFormDialogComponent, {\n data: {\n flow: this.flow,\n entrypoints: this.entrypoints,\n },\n role: 'alertdialog',\n id: 'gioPsFlowMessageFormDialog',\n })\n .afterClosed()\n : this.matDialog\n .open<GioPolicyStudioFlowProxyFormDialogComponent, GioPolicyStudioFlowProxyFormDialogData, GioPolicyStudioFlowFormDialogResult>(\n GioPolicyStudioFlowProxyFormDialogComponent,\n {\n data: {\n flow: this.flow,\n },\n role: 'alertdialog',\n id: 'gioPsFlowProxyFormDialog',\n },\n )\n .afterClosed();\n\n dialogResult\n .pipe(\n tap(createdOrEdited => {\n if (!createdOrEdited) {\n return;\n }\n\n this.flowChange.emit(createdOrEdited);\n }),\n )\n .subscribe();\n }\n\n public onDeleteFlow(): void {\n this.deleteFlow.emit(this.flow);\n }\n}\n","<!--\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\n <div class=\"content\">\n 🚧 Work in progress 🚧 <br />\n {{ flow | json }}\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","/*\n * Copyright (C) 2022 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 */\nimport { Component, EventEmitter, Input, OnChanges, Output, SimpleChanges } from '@angular/core';\nimport { MatDialog } from '@angular/material/dialog';\nimport { tap } from 'rxjs/operators';\nimport { cloneDeep } from 'lodash';\n\nimport {\n GioPolicyStudioFlowMessageFormDialogComponent,\n GioPolicyStudioFlowMessageFormDialogData,\n} from '../flow-form-dialog/flow-message-form-dialog/gio-ps-flow-message-form-dialog.component';\nimport { FlowGroupVM, FlowVM } from '../../gio-policy-studio.model';\nimport { ApiType, ChannelSelector, HttpSelector, Operation } from '../../models';\nimport {\n GioPolicyStudioFlowProxyFormDialogComponent,\n GioPolicyStudioFlowProxyFormDialogData,\n} from '../flow-form-dialog/flow-proxy-form-dialog/gio-ps-flow-proxy-form-dialog.component';\nimport { GioPolicyStudioFlowFormDialogResult } from '../flow-form-dialog/gio-ps-flow-form-dialog-result.model';\n\ninterface FlowGroupMenuVM extends FlowGroupVM {\n flows: FlowMenuVM[];\n}\n\ninterface FlowMenuVM extends FlowVM {\n selected: boolean;\n mouseOver: boolean;\n badges: {\n label: string;\n class: string;\n }[];\n pathOrChannelLabel: string;\n}\n\n@Component({\n selector: 'gio-ps-flows-menu',\n templateUrl: './gio-ps-flows-menu.component.html',\n styleUrls: ['./gio-ps-flows-menu.component.scss'],\n})\nexport class GioPolicyStudioFlowsMenuComponent implements OnChanges {\n @Input()\n public apiType!: ApiType;\n\n @Input()\n public flowsGroups: FlowGroupVM[] = [];\n\n @Input()\n public selectedFlow?: FlowVM = undefined;\n\n @Input()\n public entrypoints: string[] = [];\n\n @Output()\n public selectedFlowChange = new EventEmitter<FlowVM>();\n\n @Output()\n public flowsGroupsChange = new EventEmitter<FlowGroupVM[]>();\n\n public flowsGroupsVMSelected: FlowGroupMenuVM[] = [];\n\n constructor(private readonly matDialog: MatDialog) {}\n\n public ngOnChanges(changes: SimpleChanges): void {\n if (changes.flowsGroups || changes.selectedFlow) {\n this.flowsGroupsVMSelected = this.flowsGroups.map(flowGroup => {\n return {\n ...flowGroup,\n flows: flowGroup.flows.map(flow => {\n const badges: FlowMenuVM['badges'] = [];\n let pathOrChannelLabel = '';\n const channelSelector = flow.selectors?.find(s => s.type === 'CHANNEL') as ChannelSelector;\n if (channelSelector) {\n const operationToBadge: Record<Operation, string> = {\n PUBLISH: 'PUB',\n SUBSCRIBE: 'SUB',\n };\n const operationBadges = (channelSelector.operations ?? [])\n .map(operation => ({\n label: operationToBadge[operation],\n class: 'gio-badge-neutral',\n }))\n .sort((a, b) => a.label.localeCompare(b.label));\n operationBadges && badges.push(...operationBadges);\n pathOrChannelLabel = `${channelSelector.channel}${channelSelector.channelOperator === 'STARTS_WITH' ? '**' : ''}`;\n }\n\n const httpSelector = flow.selectors?.find(s => s.type === 'HTTP') as HttpSelector;\n if (httpSelector) {\n // Keep only 2 first http methods and add +X badge if there are more\n const httpMethodsToKeep = httpSelector.methods?.slice(0, 2);\n const httpMethodsLength = httpSelector.methods?.length;\n httpMethodsToKeep &&\n badges.push(...httpMethodsToKeep.map(method => ({ label: method, class: `gio-method-badge-${method.toLowerCase()}` })));\n if (httpMethodsLength && httpMethodsLength > 2) {\n badges?.push({\n label: `+${httpMethodsLength - 2}`,\n class: 'gio-badge-neutral',\n });\n }\n if (httpMethodsLength === 0) {\n badges?.push({\n label: 'ALL',\n class: 'gio-badge-neutral',\n });\n }\n\n pathOrChannelLabel = `${httpSelector.path}${httpSelector.pathOperator === 'STARTS_WITH' ? '/**' : ''}`;\n }\n\n return {\n ...flow,\n selected: this.selectedFlow?._id === flow._id,\n mouseOver: false,\n badges,\n pathOrChannelLabel,\n };\n }),\n };\n });\n }\n }\n\n public selectFlow(flow: FlowVM): void {\n this.selectedFlowChange.emit(flow);\n }\n\n public onAddFlow(flowGroup: FlowGroupVM): void {\n const dialogResult =\n this.apiType === 'MESSAGE'\n ? this.matDialog\n .open<\n GioPolicyStudioFlowMessageFormDialogComponent,\n GioPolicyStudioFlowMessageFormDialogData,\n GioPolicyStudioFlowFormDialogResult\n >(GioPolicyStudioFlowMessageFormDialogComponent, {\n data: {\n flow: undefined,\n entrypoints: this.entrypoints,\n },\n role: 'alertdialog',\n id: 'gioPsFlowFormDialog',\n })\n .afterClosed()\n : this.matDialog\n .open<GioPolicyStudioFlowProxyFormDialogComponent, GioPolicyStudioFlowProxyFormDialogData, GioPolicyStudioFlowFormDialogResult>(\n GioPolicyStudioFlowProxyFormDialogComponent,\n {\n data: {\n flow: undefined,\n },\n role: 'alertdialog',\n id: 'gioPsFlowFormDialog',\n },\n )\n .afterClosed();\n\n dialogResult\n .pipe(\n tap(createdOrEdited => {\n if (!createdOrEdited) {\n return;\n }\n const editedFlowsGroups = cloneDeep(this.flowsGroups);\n\n const flowsGroupToEdit = editedFlowsGroups.find(fg => fg._id === flowGroup._id);\n if (!flowsGroupToEdit) {\n throw new Error(`Flow group ${flowGroup._id} not found`);\n }\n flowsGroupToEdit.flows.push(createdOrEdited);\n\n this.flowsGroupsChange.emit(editedFlowsGroups);\n this.selectedFlowChange.emit(createdOrEdited);\n }),\n )\n .subscribe();\n }\n}\n","<!--\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 mat-stroked-button mat-icon-button><mat-icon svgIcon=\"gio:settings\"></mat-icon></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(flow)\"\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","/*\n * Copyright (C) 2022 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 */\nimport { Component, EventEmitter, Input, OnChanges, Output, SimpleChanges } from '@angular/core';\nimport { capitalize, flatten, omit, uniqueId } from 'lodash';\n\nimport { ApiType, ConnectorsInfo, Flow, Plan } from './models';\nimport { FlowGroupVM, FlowVM } from './gio-policy-studio.model';\n\n@Component({\n selector: 'gio-policy-studio',\n templateUrl: './gio-policy-studio.component.html',\n styleUrls: ['./gio-policy-studio.component.scss'],\n})\nexport class GioPolicyStudioComponent implements OnChanges {\n @Input()\n public apiType!: ApiType;\n\n /**\n * List of entrypoints to display\n */\n @Input()\n public entrypointsInfo: ConnectorsInfo[] = [];\n\n /**\n * List of endpoints to display\n */\n @Input()\n public endpointsInfo: ConnectorsInfo[] = [];\n\n @Input()\n public commonFlows: Flow[] = [];\n\n @Input()\n public plans: Plan[] = [];\n\n /**\n * Return common flows if they have been updated.\n */\n @Output()\n public commonFlowsChange = new EventEmitter<Flow[]>();\n\n /**\n * Return the list of plans with updated flows. Plans with no updated flows are not returned.\n **/\n @Output()\n public plansToUpdate = new EventEmitter<Plan[]>();\n\n public connectorsTooltip = '';\n\n public selectedFlow?: FlowVM = undefined;\n\n public flowsGroups: FlowGroupVM[] = [];\n\n public entrypointsType: string[] = [];\n\n public disableSaveButton = true;\n\n public ngOnChanges(changes: SimpleChanges): void {\n if (changes.entrypointsInfo || changes.endpointsInfo) {\n this.connectorsTooltip = `Entrypoints: ${(this.entrypointsInfo ?? []).map(e => capitalize(e.type)).join(', ')}\\nEndpoints: ${(\n this.endpointsInfo ?? []\n )\n .map(e => capitalize(e.type))\n .join(', ')}`;\n\n this.entrypointsType = (this.entrypointsInfo ?? []).map(e => e.type);\n }\n\n if (changes.commonFlows || changes.plans) {\n this.disableSaveButton = true;\n this.flowsGroups = getFlowsGroups(this.commonFlows, this.plans);\n\n // Select first flow by default on first load\n if (changes.commonFlows?.isFirstChange() || changes.plans?.isFirstChange()) {\n this.selectedFlow = this.flowsGroups[0].flows[0];\n }\n }\n }\n\n public onFlowsGroupsChange(flowsGroups: FlowGroupVM[]): void {\n this.flowsGroups = flowsGroups;\n this.disableSaveButton = false;\n }\n\n public onSelectedFlowChange(flow: FlowVM): void {\n this.flowsGroups = this.flowsGroups.map(flowGroup => ({\n ...flowGroup,\n flows: flowGroup.flows.map(f => (f._id === flow._id ? flow : f)),\n }));\n this.selectedFlow = flow;\n this.disableSaveButton = false;\n }\n\n public onDeleteSelectedFlow(flow: FlowVM): void {\n // Define next selected flow and remove flow from flowsGroups\n const allFlowsId = flatten(this.flowsGroups.map(flowGroup => flowGroup.flows)).map(f => f._id);\n const flowToDeleteIndex = allFlowsId.indexOf(flow._id);\n const nextSelectedFlow = allFlowsId[flowToDeleteIndex + 1] ?? allFlowsId[flowToDeleteIndex - 1];\n this.flowsGroups = this.flowsGroups.map(flowGroup => ({\n ...flowGroup,\n flows: flowGroup.flows.filter(f => f._id !== flow._id),\n }));\n\n this.selectedFlow = flatten(this.flowsGroups.map(flowGroup => flowGroup.flows)).find(f => f._id === nextSelectedFlow);\n\n this.disableSaveButton = false;\n }\n\n public onSave(): void {\n // Emit common flows only if they have been updated\n const commonFlows = getCommonFlowsOutput(this.flowsGroups);\n if (commonFlows != null) {\n this.commonFlowsChange.emit(commonFlows);\n }\n // Emit plans only if they have been updated\n const plans = getPlansChangeOutput(this.flowsGroups);\n if (plans != null) {\n this.plansToUpdate.emit(plans);\n }\n }\n}\n\nconst getFlowsGroups = (commonFlows: Flow[] = [], plans: Plan[] = []): FlowGroupVM[] => {\n const commFlowsGroup: FlowGroupVM = {\n _id: 'flowsGroup_commonFlow',\n name: 'Common flows',\n flows: commonFlows.map(flow => ({ ...flow, _id: uniqueId('flow_'), _hasChanged: false })),\n };\n\n return [\n ...plans.map(plan => ({\n _id: uniqueId('flowsGroup_'),\n _icon: 'gio:shield',\n name: plan.name,\n flows: plan.flows.map(flow => ({ ...flow, _id: uniqueId('flow_'), _hasChanged: false })),\n })),\n commFlowsGroup,\n ];\n};\n\nconst getCommonFlowsOutput = (flowsGroups: FlowGroupVM[]): Flow[] | null => {\n const commonFlowsGroup = flowsGroups.find(flowGroup => flowGroup._id === 'flowsGroup_commonFlow');\n const hasChanged = commonFlowsGroup?.flows.some(flow => flow._hasChanged);\n\n return hasChanged ? (commonFlowsGroup?.flows ?? []).map(flow => omit(flow, '_id', '_hasChanged')) : null;\n};\n\nconst getPlansChangeOutput = (flowsGroups: FlowGroupVM[]): Plan[] | null => {\n const plans = flowsGroups.filter(flowGroup => flowGroup._id !== 'flowsGroup_commonFlow');\n const plansWithChangedFlows = plans.filter(plan => plan.flows.some(flow => flow._hasChanged));\n const plansWithChangedFlowsOutput = plansWithChangedFlows.map(plan => ({\n ...omit(plan, '_id', '_icon'),\n flows: plan.flows.map(flow => omit(flow, '_id', '_hasChanged')),\n }));\n\n return plansWithChangedFlowsOutput.length > 0 ? plansWithChangedFlowsOutput : null;\n};\n","<!--\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 [flowsGroups]=\"flowsGroups\"\n [entrypoints]=\"entrypointsType\"\n (flowsGroupsChange)=\"onFlowsGroupsChange($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 [entrypoints]=\"entrypointsType\"\n (flowChange)=\"onSelectedFlowChange($event)\"\n (deleteFlow)=\"onDeleteSelectedFlow($event)\"\n ></gio-ps-flow-details>\n </div>\n</div>\n","/*\n * Copyright (C) 2022 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 */\nimport { NgModule } from '@angular/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { GioFormTagsInputModule, GioIconsModule } from '@gravitee/ui-particles-angular';\nimport { CommonModule } from '@angular/common';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { MatDialogModule } from '@angular/material/dialog';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatSelectModule } from '@angular/material/select';\nimport { ReactiveFormsModule } from '@angular/forms';\n\nimport { GioPolicyStudioFlowMessageFormDialogComponent } from './components/flow-form-dialog/flow-message-form-dialog/gio-ps-flow-message-form-dialog.component';\nimport { GioPolicyStudioDetailsComponent } from './components/flow-details/gio-ps-flow-details.component';\nimport { GioPolicyStudioFlowsMenuComponent } from './components/flows-menu/gio-ps-flows-menu.component';\nimport { GioPolicyStudioComponent } from './gio-policy-studio.component';\nimport { GioPolicyStudioFlowProxyFormDialogComponent } from './components/flow-form-dialog/flow-proxy-form-dialog/gio-ps-flow-proxy-form-dialog.component';\n\n@NgModule({\n declarations: [\n GioPolicyStudioComponent,\n GioPolicyStudioFlowsMenuComponent,\n GioPolicyStudioDetailsComponent,\n GioPolicyStudioFlowMessageFormDialogComponent,\n GioPolicyStudioFlowProxyFormDialogComponent,\n ],\n imports: [\n CommonModule,\n ReactiveFormsModule,\n\n MatButtonModule,\n MatTooltipModule,\n MatFormFieldModule,\n MatInputModule,\n MatSelectModule,\n MatDialogModule,\n\n GioIconsModule,\n GioFormTagsInputModule,\n ],\n exports: [GioPolicyStudioComponent],\n})\nexport class GioPolicyStudioModule {}\n","/*\n * Copyright (C) 2022 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 * Public API Surface of ui-policy-studio-angular\n */\nexport * from './lib/models';\nexport { GioPolicyStudioModule } from './lib/gio-policy-studio.module';\nexport { GioPolicyStudioComponent } from './lib/gio-policy-studio.component';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"gravitee-ui-policy-studio-angular.mjs","sources":["../../../projects/ui-policy-studio-angular/src/lib/models/flow/HttpMethod.ts","../../../projects/ui-policy-studio-angular/src/lib/models/flow/index.ts","../../../projects/ui-policy-studio-angular/src/lib/models/plan/index.ts","../../../projects/ui-policy-studio-angular/src/lib/models/index.ts","../../../projects/ui-policy-studio-angular/src/lib/components/flow-form-dialog/flow-message-form-dialog/gio-ps-flow-message-form-dialog.component.ts","../../../projects/ui-policy-studio-angular/src/lib/components/flow-form-dialog/flow-message-form-dialog/gio-ps-flow-message-form-dialog.component.html","../../../projects/ui-policy-studio-angular/src/lib/components/flow-form-dialog/flow-proxy-form-dialog/gio-ps-flow-proxy-form-dialog.component.ts","../../../projects/ui-policy-studio-angular/src/lib/components/flow-form-dialog/flow-proxy-form-dialog/gio-ps-flow-proxy-form-dialog.component.html","../../../projects/ui-policy-studio-angular/src/lib/components/flow-details-info-bar/gio-ps-flow-details-info-bar.component.ts","../../../projects/ui-policy-studio-angular/src/lib/components/flow-details-info-bar/gio-ps-flow-details-info-bar.component.html","../../../projects/ui-policy-studio-angular/src/lib/components/flow-details-phase/gio-ps-flow-details-phase.component.ts","../../../projects/ui-policy-studio-angular/src/lib/components/flow-details-phase/gio-ps-flow-details-phase.component.html","../../../projects/ui-policy-studio-angular/src/lib/components/flow-details/gio-ps-flow-details.component.ts","../../../projects/ui-policy-studio-angular/src/lib/components/flow-details/gio-ps-flow-details.component.html","../../../projects/ui-policy-studio-angular/src/lib/components/flows-menu/gio-ps-flows-menu.component.ts","../../../projects/ui-policy-studio-angular/src/lib/components/flows-menu/gio-ps-flows-menu.component.html","../../../projects/ui-policy-studio-angular/src/lib/gio-policy-studio.component.ts","../../../projects/ui-policy-studio-angular/src/lib/gio-policy-studio.component.html","../../../projects/ui-policy-studio-angular/src/lib/components/flow-details-phase-policy/gio-ps-flow-details-phase-policy.component.ts","../../../projects/ui-policy-studio-angular/src/lib/components/flow-details-phase-policy/gio-ps-flow-details-phase-policy.component.html","../../../projects/ui-policy-studio-angular/src/lib/gio-policy-studio.module.ts","../../../projects/ui-policy-studio-angular/src/public-api.ts","../../../projects/ui-policy-studio-angular/src/gravitee-ui-policy-studio-angular.ts"],"sourcesContent":["/*\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\nexport const HttpMethods = ['CONNECT', 'DELETE', 'GET', 'HEAD', 'OPTIONS', 'PATCH', 'POST', 'PUT', 'TRACE', 'OTHER'] as const;\nexport type HttpMethod = (typeof HttpMethods)[number];\n","/*\n * Copyright (C) 2022 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 */\nexport * from './ApiType';\nexport * from './Flow';\nexport * from './FlowExecution';\nexport * from './HttpMethod';\nexport * from './Selector';\nexport * from './Step';\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 */\nexport * from './Plan';\n","/*\n * Copyright (C) 2022 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 */\nexport * from './flow';\nexport * from './plan';\n\nexport * from './ConnectorsInfo';\nexport * from './SaveOutput';\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 */\nimport { Component, Inject } from '@angular/core';\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\nimport { FormControl, FormGroup } from '@angular/forms';\nimport { cloneDeep, uniqueId } from 'lodash';\n\nimport { FlowVM } from '../../../gio-policy-studio.model';\nimport { ChannelSelector, ConditionSelector } from '../../../models';\nimport { GioPolicyStudioFlowFormDialogResult } from '../gio-ps-flow-form-dialog-result.model';\n\nexport type GioPolicyStudioFlowMessageFormDialogData = {\n flow?: FlowVM;\n entrypoints?: string[];\n};\n\n@Component({\n selector: 'gio-ps-flow-message-form-dialog',\n templateUrl: './gio-ps-flow-message-form-dialog.component.html',\n styleUrls: ['./gio-ps-flow-message-form-dialog.component.scss'],\n})\nexport class GioPolicyStudioFlowMessageFormDialogComponent {\n public entrypoints: string[] = [];\n public flowFormGroup?: FormGroup;\n\n public existingFlow?: FlowVM;\n public mode: 'create' | 'edit' = 'create';\n\n constructor(\n public dialogRef: MatDialogRef<GioPolicyStudioFlowMessageFormDialogComponent, GioPolicyStudioFlowFormDialogResult>,\n @Inject(MAT_DIALOG_DATA) flowDialogData: GioPolicyStudioFlowMessageFormDialogData,\n ) {\n this.entrypoints = flowDialogData?.entrypoints ?? [];\n\n this.existingFlow = cloneDeep(flowDialogData?.flow);\n this.mode = this.existingFlow ? 'edit' : 'create';\n\n const channelSelector = flowDialogData?.flow?.selectors?.find(s => s.type === 'CHANNEL') as ChannelSelector;\n const conditionSelector = flowDialogData?.flow?.selectors?.find(s => s.type === 'CONDITION') as ConditionSelector;\n\n this.flowFormGroup = new FormGroup({\n name: new FormControl(flowDialogData?.flow?.name ?? ''),\n channelOperator: new FormControl(channelSelector?.channelOperator ?? 'EQUALS'),\n channel: new FormControl(channelSelector?.channel ?? ''),\n operations: new FormControl(channelSelector?.operations ?? []),\n entrypoints: new FormControl(channelSelector?.entrypoints ?? []),\n condition: new FormControl(conditionSelector?.condition ?? ''),\n });\n }\n\n public onSubmit(): void {\n const channelSelectorToSave: ChannelSelector = {\n type: 'CHANNEL',\n channel: this.flowFormGroup?.get('channel')?.value,\n channelOperator: this.flowFormGroup?.get('channelOperator')?.value,\n operations: this.flowFormGroup?.get('operations')?.value,\n entrypoints: this.flowFormGroup?.get('entrypoints')?.value,\n };\n\n const conditionValue: string = this.flowFormGroup?.get('condition')?.value;\n const conditionSelectorToSave: ConditionSelector | undefined = conditionValue\n ? {\n type: 'CONDITION',\n condition: conditionValue,\n }\n : undefined;\n\n const flowToSave: FlowVM = {\n // New id for new flow\n _id: uniqueId('flow_'),\n // If existing flow, keep root props\n ...this.existingFlow,\n // Mark as changed\n _hasChanged: true,\n // Add changes\n name: this.flowFormGroup?.get('name')?.value,\n selectors: conditionSelectorToSave ? [channelSelectorToSave, conditionSelectorToSave] : [channelSelectorToSave],\n enabled: true,\n };\n\n this.dialogRef.close({\n ...flowToSave,\n });\n }\n}\n","<!--\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 {{ mode === 'create' ? 'Create a new flow' : 'Edit flow' }}\n\n <button class=\"title__closeBtn\" mat-icon-button aria-label=\"Close dialog\" [mat-dialog-close]=\"false\">\n <mat-icon svgIcon=\"gio:cancel\"></mat-icon>\n </button>\n</h2>\n\n<mat-dialog-content *ngIf=\"flowFormGroup\" class=\"content\" [formGroup]=\"flowFormGroup\">\n <p>Flows allow you to apply different policies per event phases. For example you can reroute calls based on the URL specified.</p>\n\n <div class=\"content__row\">\n <mat-form-field>\n <mat-label>Flow name</mat-label>\n <input matInput formControlName=\"name\" cdkFocusInitial />\n <mat-hint>Names will be automatically generated with channel and operation if left blank</mat-hint>\n </mat-form-field>\n </div>\n <div class=\"content__row\">\n <mat-form-field>\n <mat-label>Operator</mat-label>\n <mat-select formControlName=\"channelOperator\">\n <mat-option value=\"EQUALS\">Equals</mat-option>\n <mat-option value=\"STARTS_WITH\">Starts with</mat-option>\n </mat-select>\n <mat-hint>Channel operator</mat-hint>\n </mat-form-field>\n\n <mat-form-field>\n <mat-label>Channel</mat-label>\n <input matInput formControlName=\"channel\" />\n <mat-hint>Publish or Subscribe channel. This is the path of your request.</mat-hint>\n </mat-form-field>\n </div>\n\n <div class=\"content__row\">\n <mat-form-field>\n <mat-label>Entrypoints</mat-label>\n <mat-select multiple formControlName=\"entrypoints\">\n <mat-option *ngFor=\"let entrypoint of entrypoints\" [value]=\"entrypoint\">{{ entrypoint }}</mat-option>\n </mat-select>\n <mat-hint>Entrypoints where your flow will be executed</mat-hint>\n </mat-form-field>\n </div>\n\n <div class=\"content__row\">\n <mat-form-field>\n <mat-label>Entrypoints supported operations</mat-label>\n <mat-select multiple formControlName=\"operations\">\n <mat-option value=\"PUBLISH\">Publish</mat-option>\n <mat-option value=\"SUBSCRIBE\">Subscribe</mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n\n <div class=\"content__row\">\n <mat-form-field>\n <mat-label>Condition</mat-label>\n <input matInput formControlName=\"condition\" />\n <mat-hint>Condition to execute the flow, supports Expression Language</mat-hint>\n </mat-form-field>\n </div>\n</mat-dialog-content>\n\n<mat-dialog-actions class=\"actions\">\n <button class=\"actions__cancelBtn\" mat-flat-button [mat-dialog-close]=\"false\">Cancel</button>\n <button class=\"actions__saveBtn\" color=\"primary\" mat-stroked-button role=\"dialog\" (click)=\"onSubmit()\">\n {{ mode === 'create' ? 'Create' : 'Save' }}\n </button>\n</mat-dialog-actions>\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 */\nimport { Component, Inject } from '@angular/core';\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\nimport { FormControl, FormGroup } from '@angular/forms';\nimport { cloneDeep, uniqueId } from 'lodash';\n\nimport { FlowVM } from '../../../gio-policy-studio.model';\nimport { ConditionSelector, HttpMethod, HttpMethods, HttpSelector } from '../../../models';\nimport { GioPolicyStudioFlowFormDialogResult } from '../gio-ps-flow-form-dialog-result.model';\n\nexport type GioPolicyStudioFlowProxyFormDialogData = {\n flow?: FlowVM;\n};\n\ntype HttpMethodVM = HttpMethod | 'ALL';\n\nconst METHODS_AUTOCOMPLETE: HttpMethodVM[] = ['ALL', ...HttpMethods];\n\n@Component({\n selector: 'gio-ps-flow-proxy-form-dialog',\n templateUrl: './gio-ps-flow-proxy-form-dialog.component.html',\n styleUrls: ['./gio-ps-flow-proxy-form-dialog.component.scss'],\n})\nexport class GioPolicyStudioFlowProxyFormDialogComponent {\n public flowFormGroup?: FormGroup;\n\n public existingFlow?: FlowVM;\n public mode: 'create' | 'edit' = 'create';\n public methods = METHODS_AUTOCOMPLETE;\n\n constructor(\n public dialogRef: MatDialogRef<GioPolicyStudioFlowProxyFormDialogComponent, GioPolicyStudioFlowFormDialogResult>,\n @Inject(MAT_DIALOG_DATA) flowDialogData: GioPolicyStudioFlowProxyFormDialogData,\n ) {\n this.existingFlow = cloneDeep(flowDialogData?.flow);\n this.mode = this.existingFlow ? 'edit' : 'create';\n\n const httpSelector = flowDialogData?.flow?.selectors?.find(s => s.type === 'HTTP') as HttpSelector;\n const conditionSelector = flowDialogData?.flow?.selectors?.find(s => s.type === 'CONDITION') as ConditionSelector;\n\n this.flowFormGroup = new FormGroup({\n name: new FormControl(flowDialogData?.flow?.name ?? ''),\n pathOperator: new FormControl(httpSelector?.pathOperator ?? 'EQUALS'),\n path: new FormControl(httpSelector?.path ?? ''),\n methods: new FormControl(sanitizeMethodFormValue(httpSelector?.methods)),\n condition: new FormControl(conditionSelector?.condition ?? ''),\n });\n }\n\n public onSubmit(): void {\n const httpSelectorToSave: HttpSelector = {\n type: 'HTTP',\n path: this.flowFormGroup?.get('path')?.value,\n pathOperator: this.flowFormGroup?.get('pathOperator')?.value,\n methods: sanitizeMethods(this.flowFormGroup?.get('methods')?.value),\n };\n\n const conditionValue: string = this.flowFormGroup?.get('condition')?.value;\n const conditionSelectorToSave: ConditionSelector | undefined = conditionValue\n ? {\n type: 'CONDITION',\n condition: conditionValue,\n }\n : undefined;\n\n const flowToSave: FlowVM = {\n // New id for new flow\n _id: uniqueId('flow_'),\n // If existing flow, keep root props\n ...this.existingFlow,\n // Mark as changed\n _hasChanged: true,\n // Add changes\n name: this.flowFormGroup?.get('name')?.value,\n selectors: conditionSelectorToSave ? [httpSelectorToSave, conditionSelectorToSave] : [httpSelectorToSave],\n enabled: true,\n };\n\n this.dialogRef.close({\n ...flowToSave,\n });\n }\n\n public tagValidationHook(tag: string, validationCb: (shouldAddTag: boolean) => void) {\n validationCb(METHODS_AUTOCOMPLETE.map(m => `${m}`).includes(tag.toUpperCase()));\n }\n}\n\nconst sanitizeMethods: (value: HttpMethodVM[]) => HttpMethod[] = (value?: HttpMethodVM[]) => {\n if (!value || value.find(m => m === 'ALL')) return [];\n return value as HttpMethod[];\n};\n\nconst sanitizeMethodFormValue: (methods?: HttpMethod[]) => HttpMethodVM[] = (methods?: HttpMethod[]) => {\n if (!methods || methods.length === 0) return ['ALL'];\n return methods;\n};\n","<!--\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 {{ mode === 'create' ? 'Create a new flow' : 'Edit flow' }}\n\n <button class=\"title__closeBtn\" mat-icon-button aria-label=\"Close dialog\" [mat-dialog-close]=\"false\">\n <mat-icon svgIcon=\"gio:cancel\"></mat-icon>\n </button>\n</h2>\n\n<mat-dialog-content *ngIf=\"flowFormGroup\" class=\"content\" [formGroup]=\"flowFormGroup\">\n <p>\n Flows allow you to apply different policies per HTTP path and/or method. For example you can reroute calls based on the URL specified.\n </p>\n\n <div class=\"content__row\">\n <mat-form-field>\n <mat-label>Flow name</mat-label>\n <input matInput formControlName=\"name\" cdkFocusInitial />\n <mat-hint>Names will be automatically generated with path and method if left blank</mat-hint>\n </mat-form-field>\n </div>\n <div class=\"content__row\">\n <mat-form-field>\n <mat-label>Operator</mat-label>\n <mat-select formControlName=\"pathOperator\">\n <mat-option value=\"EQUALS\">Equals</mat-option>\n <mat-option value=\"STARTS_WITH\">Starts with</mat-option>\n </mat-select>\n <mat-hint>Path operator</mat-hint>\n </mat-form-field>\n\n <mat-form-field>\n <mat-label>Path</mat-label>\n <input matInput formControlName=\"path\" />\n <mat-hint>Path</mat-hint>\n </mat-form-field>\n </div>\n\n <div class=\"content__row\">\n <mat-form-field>\n <mat-label>Methods for your flow</mat-label>\n <gio-form-tags-input\n formControlName=\"methods\"\n [autocompleteOptions]=\"methods\"\n [tagValidationHook]=\"tagValidationHook\"\n ></gio-form-tags-input>\n </mat-form-field>\n </div>\n\n <div class=\"content__row\">\n <mat-form-field>\n <mat-label>Condition</mat-label>\n <input matInput formControlName=\"condition\" />\n <mat-hint>Condition to execute the flow, supports Expression Language</mat-hint>\n </mat-form-field>\n </div>\n</mat-dialog-content>\n\n<mat-dialog-actions class=\"actions\">\n <button class=\"actions__cancelBtn\" mat-flat-button [mat-dialog-close]=\"false\">Cancel</button>\n <button class=\"actions__saveBtn\" color=\"primary\" mat-stroked-button role=\"dialog\" (click)=\"onSubmit()\">\n {{ mode === 'create' ? 'Create' : 'Save' }}\n </button>\n</mat-dialog-actions>\n","/*\n * Copyright (C) 2022 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 */\nimport { Component, Input } from '@angular/core';\n\nimport { FlowVM } from '../../gio-policy-studio.model';\nimport { ChannelSelector, ConditionSelector, ConnectorsInfo, HttpSelector, Operation } from '../../models';\n\n@Component({\n selector: 'gio-ps-flow-details-info-bar',\n templateUrl: './gio-ps-flow-details-info-bar.component.html',\n styleUrls: ['./gio-ps-flow-details-info-bar.component.scss'],\n})\nexport class GioPolicyStudioDetailsInfoBarComponent {\n @Input()\n public flow?: FlowVM = undefined;\n\n @Input()\n public entrypointsInfo: ConnectorsInfo[] = [];\n\n public get condition(): string | undefined {\n const conditionSelector = this.flow?.selectors?.find(s => s.type === 'CONDITION') as ConditionSelector;\n if (!conditionSelector) {\n return undefined;\n }\n return conditionSelector?.condition;\n }\n\n // MESSAGE API type\n\n public get operations(): string[] | undefined {\n const channelSelector = this.flow?.selectors?.find(s => s.type === 'CHANNEL') as ChannelSelector;\n if (!channelSelector) {\n return undefined;\n }\n const operationToBadge: Record<Operation, string> = {\n PUBLISH: 'PUB',\n SUBSCRIBE: 'SUB',\n };\n return channelSelector?.operations?.map(o => operationToBadge[o]).sort();\n }\n\n public get channel(): string | undefined {\n const channelSelector = this.flow?.selectors?.find(s => s.type === 'CHANNEL') as ChannelSelector;\n if (!channelSelector) {\n return undefined;\n }\n return channelSelector?.channel;\n }\n\n public get channelOperator(): string | undefined {\n const channelSelector = this.flow?.selectors?.find(s => s.type === 'CHANNEL') as ChannelSelector;\n if (!channelSelector) {\n return undefined;\n }\n return channelSelector?.channelOperator;\n }\n\n // PROXY API type\n\n public get path(): string | undefined {\n const httpSelector = this.flow?.selectors?.find(s => s.type === 'HTTP') as HttpSelector;\n if (!httpSelector) {\n return undefined;\n }\n return httpSelector?.path;\n }\n\n public get pathOperator(): string | undefined {\n const httpSelector = this.flow?.selectors?.find(s => s.type === 'HTTP') as HttpSelector;\n if (!httpSelector) {\n return undefined;\n }\n return httpSelector?.pathOperator;\n }\n\n public get methods(): string[] | undefined {\n const httpSelector = this.flow?.selectors?.find(s => s.type === 'HTTP') as HttpSelector;\n if (!httpSelector) {\n return undefined;\n }\n return httpSelector?.methods?.length ? httpSelector?.methods : ['ALL'];\n }\n}\n","<!--\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<div *ngIf=\"flow?.name\" class=\"info\">\n <span class=\"info__label\">Name</span>\n <span class=\"info__value strong\">{{ flow?.name }}</span>\n</div>\n\n<div *ngIf=\"entrypointsInfo\" class=\"info\">\n <span class=\"info__label\">Entrypoints</span>\n <span *ngFor=\"let entrypoint of entrypointsInfo\" class=\"info__value gio-badge-neutral\">\n <mat-icon [svgIcon]=\"entrypoint.icon\"></mat-icon>\n {{ entrypoint.type }}</span\n >\n</div>\n\n<!-- MESSAGE API type -->\n\n<div *ngIf=\"operations\" class=\"info\">\n <span class=\"info__label\">Operations</span>\n <span *ngFor=\"let operation of operations\" class=\"info__value gio-badge-neutral\"> {{ operation }}</span>\n</div>\n\n<div *ngIf=\"channel\" class=\"info\">\n <span class=\"info__label\">Channel</span>\n <span class=\"info__value strong\">{{ channel }}</span>\n</div>\n\n<div *ngIf=\"channelOperator\" class=\"info\">\n <span class=\"info__label\">Channel Operator</span>\n <span class=\"info__value gio-badge-neutral\">{{ channelOperator }}</span>\n</div>\n\n<!-- PROXY API type -->\n\n<div *ngIf=\"path\" class=\"info\">\n <span class=\"info__label\">Path</span>\n <span class=\"info__value strong\">{{ path }}</span>\n</div>\n\n<div *ngIf=\"pathOperator\" class=\"info\">\n <span class=\"info__label\">Path Operator</span>\n <span class=\"info__value gio-badge-neutral\">{{ pathOperator }}</span>\n</div>\n\n<div *ngIf=\"methods\" class=\"info\">\n <span class=\"info__label\">HTTP methods</span>\n <span *ngFor=\"let method of methods\" class=\"info__value gio-badge-neutral\"> {{ method }}</span>\n</div>\n\n<!-- Condition -->\n\n<div *ngIf=\"condition\" class=\"info\">\n <span class=\"info__label\">Condition</span>\n <span class=\"info__value gio-badge-neutral\">{{ condition }}</span>\n</div>\n","/*\n * Copyright (C) 2022 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 */\nimport { Component, Input } from '@angular/core';\n\nimport { ConnectorsInfo, Step } from '../../models';\n\n@Component({\n selector: 'gio-ps-flow-details-phase',\n templateUrl: './gio-ps-flow-details-phase.component.html',\n styleUrls: ['./gio-ps-flow-details-phase.component.scss'],\n})\nexport class GioPolicyStudioDetailsPhaseComponent {\n @Input()\n public steps?: Step[] = undefined;\n\n @Input()\n public name!: string;\n\n @Input()\n public description!: string;\n\n @Input()\n public entrypointsInfo: ConnectorsInfo[] = [];\n\n @Input()\n public endpointsInfo: ConnectorsInfo[] = [];\n}\n","<!--\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</div>\n\n<div class=\"wrapper\">\n <div class=\"content\">\n <span class=\"gio-badge-white content__connectorBadge\">\n <ng-container *ngFor=\"let entrypoint of entrypointsInfo\">\n <mat-icon [svgIcon]=\"entrypoint.icon\"></mat-icon>\n {{ entrypoint.type }}</ng-container\n >\n </span>\n\n <mat-icon class=\"content__rightArrow\" svgIcon=\"gio:arrow-right\"></mat-icon>\n\n <button mat-icon-button>\n <mat-icon svgIcon=\"gio:plus\"></mat-icon>\n </button>\n\n <mat-icon class=\"content__rightArrow\" svgIcon=\"gio:arrow-right\"></mat-icon>\n\n <span class=\"gio-badge-white content__connectorBadge\">\n <ng-container *ngFor=\"let endpoint of endpointsInfo\">\n <mat-icon [svgIcon]=\"endpoint.icon\"></mat-icon>\n {{ endpoint.type }}</ng-container\n >\n </span>\n </div>\n</div>\n","/*\n * Copyright (C) 2022 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 */\nimport { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { MatDialog } from '@angular/material/dialog';\nimport { tap } from 'rxjs/operators';\n\nimport { FlowVM } from '../../gio-policy-studio.model';\nimport {\n GioPolicyStudioFlowMessageFormDialogComponent,\n GioPolicyStudioFlowMessageFormDialogData,\n} from '../flow-form-dialog/flow-message-form-dialog/gio-ps-flow-message-form-dialog.component';\nimport { ApiType, ConnectorsInfo } from '../../models';\nimport {\n GioPolicyStudioFlowProxyFormDialogComponent,\n GioPolicyStudioFlowProxyFormDialogData,\n} from '../flow-form-dialog/flow-proxy-form-dialog/gio-ps-flow-proxy-form-dialog.component';\nimport { GioPolicyStudioFlowFormDialogResult } from '../flow-form-dialog/gio-ps-flow-form-dialog-result.model';\n\n@Component({\n selector: 'gio-ps-flow-details',\n templateUrl: './gio-ps-flow-details.component.html',\n styleUrls: ['./gio-ps-flow-details.component.scss'],\n})\nexport class GioPolicyStudioDetailsComponent {\n @Input()\n public apiType!: ApiType;\n\n @Input()\n public flow?: FlowVM = undefined;\n\n @Input()\n public entrypointsInfo: ConnectorsInfo[] = [];\n\n @Input()\n public endpointsInfo: ConnectorsInfo[] = [];\n\n @Output()\n public flowChange = new EventEmitter<FlowVM>();\n\n @Output()\n public deleteFlow = new EventEmitter<FlowVM>();\n\n constructor(private readonly matDialog: MatDialog) {}\n\n public onEditFlow(): void {\n const dialogResult =\n this.apiType === 'MESSAGE'\n ? this.matDialog\n .open<\n GioPolicyStudioFlowMessageFormDialogComponent,\n GioPolicyStudioFlowMessageFormDialogData,\n GioPolicyStudioFlowFormDialogResult\n >(GioPolicyStudioFlowMessageFormDialogComponent, {\n data: {\n flow: this.flow,\n entrypoints: (this.entrypointsInfo ?? []).map(e => e.type),\n },\n role: 'alertdialog',\n id: 'gioPsFlowMessageFormDialog',\n })\n .afterClosed()\n : this.matDialog\n .open<GioPolicyStudioFlowProxyFormDialogComponent, GioPolicyStudioFlowProxyFormDialogData, GioPolicyStudioFlowFormDialogResult>(\n GioPolicyStudioFlowProxyFormDialogComponent,\n {\n data: {\n flow: this.flow,\n },\n role: 'alertdialog',\n id: 'gioPsFlowProxyFormDialog',\n },\n )\n .afterClosed();\n\n dialogResult\n .pipe(\n tap(createdOrEdited => {\n if (!createdOrEdited) {\n return;\n }\n\n this.flowChange.emit(createdOrEdited);\n }),\n )\n .subscribe();\n }\n\n public onDeleteFlow(): void {\n this.deleteFlow.emit(this.flow);\n }\n}\n","<!--\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>🚧 Work in progress 🚧</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 [entrypointsInfo]=\"entrypointsInfo\"\n [endpointsInfo]=\"endpointsInfo\"\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 [entrypointsInfo]=\"entrypointsInfo\"\n [endpointsInfo]=\"endpointsInfo\"\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 [entrypointsInfo]=\"entrypointsInfo\"\n [endpointsInfo]=\"endpointsInfo\"\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 [entrypointsInfo]=\"entrypointsInfo\"\n [endpointsInfo]=\"endpointsInfo\"\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 [entrypointsInfo]=\"entrypointsInfo\"\n [endpointsInfo]=\"endpointsInfo\"\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 [entrypointsInfo]=\"entrypointsInfo\"\n [endpointsInfo]=\"endpointsInfo\"\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","/*\n * Copyright (C) 2022 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 */\nimport { Component, EventEmitter, Input, OnChanges, Output, SimpleChanges } from '@angular/core';\nimport { MatDialog } from '@angular/material/dialog';\nimport { tap } from 'rxjs/operators';\nimport { cloneDeep } from 'lodash';\n\nimport {\n GioPolicyStudioFlowMessageFormDialogComponent,\n GioPolicyStudioFlowMessageFormDialogData,\n} from '../flow-form-dialog/flow-message-form-dialog/gio-ps-flow-message-form-dialog.component';\nimport { FlowGroupVM, FlowVM } from '../../gio-policy-studio.model';\nimport { ApiType, ChannelSelector, HttpSelector, Operation } from '../../models';\nimport {\n GioPolicyStudioFlowProxyFormDialogComponent,\n GioPolicyStudioFlowProxyFormDialogData,\n} from '../flow-form-dialog/flow-proxy-form-dialog/gio-ps-flow-proxy-form-dialog.component';\nimport { GioPolicyStudioFlowFormDialogResult } from '../flow-form-dialog/gio-ps-flow-form-dialog-result.model';\n\ninterface FlowGroupMenuVM extends FlowGroupVM {\n flows: FlowMenuVM[];\n}\n\ninterface FlowMenuVM extends FlowVM {\n selected: boolean;\n mouseOver: boolean;\n badges: {\n label: string;\n class: string;\n }[];\n pathOrChannelLabel: string;\n}\n\n@Component({\n selector: 'gio-ps-flows-menu',\n templateUrl: './gio-ps-flows-menu.component.html',\n styleUrls: ['./gio-ps-flows-menu.component.scss'],\n})\nexport class GioPolicyStudioFlowsMenuComponent implements OnChanges {\n @Input()\n public apiType!: ApiType;\n\n @Input()\n public flowsGroups: FlowGroupVM[] = [];\n\n @Input()\n public selectedFlow?: FlowVM = undefined;\n\n @Input()\n public entrypoints: string[] = [];\n\n @Output()\n public selectedFlowChange = new EventEmitter<FlowVM>();\n\n @Output()\n public flowsGroupsChange = new EventEmitter<FlowGroupVM[]>();\n\n public flowsGroupsVMSelected: FlowGroupMenuVM[] = [];\n\n constructor(private readonly matDialog: MatDialog) {}\n\n public ngOnChanges(changes: SimpleChanges): void {\n if (changes.flowsGroups || changes.selectedFlow) {\n this.flowsGroupsVMSelected = cloneDeep(this.flowsGroups).map(flowGroup => {\n return {\n ...flowGroup,\n flows: flowGroup.flows.map(flow => {\n const badges: FlowMenuVM['badges'] = [];\n let pathOrChannelLabel = '';\n const channelSelector = flow.selectors?.find(s => s.type === 'CHANNEL') as ChannelSelector;\n if (channelSelector) {\n const operationToBadge: Record<Operation, string> = {\n PUBLISH: 'PUB',\n SUBSCRIBE: 'SUB',\n };\n const operationBadges = (channelSelector.operations ?? [])\n .map(operation => ({\n label: operationToBadge[operation],\n class: 'gio-badge-neutral',\n }))\n .sort((a, b) => a.label.localeCompare(b.label));\n operationBadges && badges.push(...operationBadges);\n pathOrChannelLabel = `${channelSelector.channel}${channelSelector.channelOperator === 'STARTS_WITH' ? '**' : ''}`;\n }\n\n const httpSelector = flow.selectors?.find(s => s.type === 'HTTP') as HttpSelector;\n if (httpSelector) {\n // Keep only 2 first http methods and add +X badge if there are more\n const httpMethodsToKeep = httpSelector.methods?.slice(0, 2);\n const httpMethodsLength = httpSelector.methods?.length;\n httpMethodsToKeep &&\n badges.push(...httpMethodsToKeep.map(method => ({ label: method, class: `gio-method-badge-${method.toLowerCase()}` })));\n if (httpMethodsLength && httpMethodsLength > 2) {\n badges?.push({\n label: `+${httpMethodsLength - 2}`,\n class: 'gio-badge-neutral',\n });\n }\n if (httpMethodsLength === 0) {\n badges?.push({\n label: 'ALL',\n class: 'gio-badge-neutral',\n });\n }\n\n pathOrChannelLabel = `${httpSelector.path}${httpSelector.pathOperator === 'STARTS_WITH' ? '/**' : ''}`;\n }\n\n return {\n ...flow,\n selected: this.selectedFlow?._id === flow._id,\n mouseOver: false,\n badges,\n pathOrChannelLabel,\n };\n }),\n };\n });\n }\n }\n\n public selectFlow(groupId: string, flowId: string): void {\n const flow = this.flowsGroups.find(fg => fg._id === groupId)?.flows.find(f => f._id === flowId);\n if (flow) {\n this.selectedFlowChange.emit(flow);\n }\n }\n\n public onAddFlow(flowGroup: FlowGroupVM): void {\n const dialogResult =\n this.apiType === 'MESSAGE'\n ? this.matDialog\n .open<\n GioPolicyStudioFlowMessageFormDialogComponent,\n GioPolicyStudioFlowMessageFormDialogData,\n GioPolicyStudioFlowFormDialogResult\n >(GioPolicyStudioFlowMessageFormDialogComponent, {\n data: {\n flow: undefined,\n entrypoints: this.entrypoints,\n },\n role: 'alertdialog',\n id: 'gioPsFlowFormDialog',\n })\n .afterClosed()\n : this.matDialog\n .open<GioPolicyStudioFlowProxyFormDialogComponent, GioPolicyStudioFlowProxyFormDialogData, GioPolicyStudioFlowFormDialogResult>(\n GioPolicyStudioFlowProxyFormDialogComponent,\n {\n data: {\n flow: undefined,\n },\n role: 'alertdialog',\n id: 'gioPsFlowFormDialog',\n },\n )\n .afterClosed();\n\n dialogResult\n .pipe(\n tap(createdOrEdited => {\n if (!createdOrEdited) {\n return;\n }\n const editedFlowsGroups = cloneDeep(this.flowsGroups);\n\n const flowsGroupToEdit = editedFlowsGroups.find(fg => fg._id === flowGroup._id);\n if (!flowsGroupToEdit) {\n throw new Error(`Flow group ${flowGroup._id} not found`);\n }\n flowsGroupToEdit.flows.push(createdOrEdited);\n\n this.flowsGroupsChange.emit(editedFlowsGroups);\n this.selectedFlowChange.emit(createdOrEdited);\n }),\n )\n .subscribe();\n }\n}\n","<!--\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 mat-stroked-button mat-icon-button><mat-icon svgIcon=\"gio:settings\"></mat-icon></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","/*\n * Copyright (C) 2022 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 */\nimport { Component, EventEmitter, Input, OnChanges, Output, SimpleChanges } from '@angular/core';\nimport { capitalize, cloneDeep, differenceBy, flatten, omit, unionBy, uniqueId } from 'lodash';\n\nimport { ApiType, ConnectorsInfo, Flow, Plan, SaveOutput } from './models';\nimport { FlowGroupVM, FlowVM } from './gio-policy-studio.model';\n\n@Component({\n selector: 'gio-policy-studio',\n templateUrl: './gio-policy-studio.component.html',\n styleUrls: ['./gio-policy-studio.component.scss'],\n})\nexport class GioPolicyStudioComponent implements OnChanges {\n @Input()\n public apiType!: ApiType;\n\n /**\n * List of entrypoints to display\n */\n @Input()\n public entrypointsInfo: ConnectorsInfo[] = [];\n\n /**\n * List of endpoints to display\n */\n @Input()\n public endpointsInfo: ConnectorsInfo[] = [];\n\n @Input()\n public commonFlows: Flow[] = [];\n\n @Input()\n public plans: Plan[] = [];\n\n /**\n * Return what is needed to save.\n **/\n @Output()\n public save = new EventEmitter<SaveOutput>();\n\n public connectorsTooltip = '';\n\n public selectedFlow?: FlowVM = undefined;\n\n public flowsGroups: FlowGroupVM[] = [];\n\n public entrypointsType: string[] = [];\n\n public disableSaveButton = true;\n\n // Used to keep track of initial flows groups to know if there are deleted flows\n private initialFlowsGroups: FlowGroupVM[] = [];\n\n public ngOnChanges(changes: SimpleChanges): void {\n if (changes.entrypointsInfo || changes.endpointsInfo) {\n this.connectorsTooltip = `Entrypoints: ${(this.entrypointsInfo ?? []).map(e => capitalize(e.type)).join(', ')}\\nEndpoints: ${(\n this.endpointsInfo ?? []\n )\n .map(e => capitalize(e.type))\n .join(', ')}`;\n\n this.entrypointsType = (this.entrypointsInfo ?? []).map(e => e.type);\n }\n\n if (changes.commonFlows || changes.plans) {\n this.disableSaveButton = true;\n this.flowsGroups = getFlowsGroups(this.commonFlows, this.plans);\n this.initialFlowsGroups = cloneDeep(this.flowsGroups);\n\n // Select first flow by default on first load\n if (changes.commonFlows?.isFirstChange() || changes.plans?.isFirstChange()) {\n this.selectedFlow = this.flowsGroups[0].flows[0];\n }\n }\n }\n\n public onFlowsGroupsChange(flowsGroups: FlowGroupVM[]): void {\n this.flowsGroups = flowsGroups;\n this.disableSaveButton = false;\n }\n\n public onSelectedFlowChange(flow: FlowVM): void {\n this.flowsGroups = this.flowsGroups.map(flowGroup => ({\n ...flowGroup,\n flows: flowGroup.flows.map(f => (f._id === flow._id ? flow : f)),\n }));\n this.selectedFlow = flow;\n this.disableSaveButton = false;\n }\n\n public onDeleteSelectedFlow(flow: FlowVM): void {\n // Define next selected flow and remove flow from flowsGroups\n const allFlowsId = flatten(this.flowsGroups.map(flowGroup => flowGroup.flows)).map(f => f._id);\n const flowToDeleteIndex = allFlowsId.indexOf(flow._id);\n const nextSelectedFlow = allFlowsId[flowToDeleteIndex + 1] ?? allFlowsId[flowToDeleteIndex - 1];\n this.flowsGroups = this.flowsGroups.map(flowGroup => ({\n ...flowGroup,\n flows: flowGroup.flows.filter(f => f._id !== flow._id),\n }));\n\n this.selectedFlow = flatten(this.flowsGroups.map(flowGroup => flowGroup.flows)).find(f => f._id === nextSelectedFlow);\n\n this.disableSaveButton = false;\n }\n\n public onSave(): void {\n // Emit common flows only if they have been updated\n const commonFlows = getCommonFlowsOutput(this.flowsGroups, this.initialFlowsGroups);\n\n // Emit plans only if they have been updated\n const plansToUpdate = getPlansChangeOutput(this.flowsGroups, this.initialFlowsGroups);\n\n this.save.emit({\n ...(commonFlows ? { commonFlows } : {}),\n ...(plansToUpdate ? { plansToUpdate } : {}),\n });\n }\n}\n\nconst getFlowsGroups = (commonFlows: Flow[] = [], plans: Plan[] = []): FlowGroupVM[] => {\n const commFlowsGroup: FlowGroupVM = {\n _id: 'flowsGroup_commonFlow',\n name: 'Common flows',\n flows: commonFlows.map(flow => ({ ...flow, _id: uniqueId('flow_'), _hasChanged: false })),\n };\n\n return [\n ...plans.map(plan => ({\n _id: uniqueId('flowsGroup_'),\n _icon: 'gio:shield',\n _planId: plan.id,\n name: plan.name,\n flows: plan.flows.map(flow => ({ ...flow, _id: uniqueId('flow_'), _hasChanged: false })),\n })),\n commFlowsGroup,\n ];\n};\n\nconst getCommonFlowsOutput = (flowsGroups: FlowGroupVM[], initialFlowsGroups: FlowGroupVM[]): Flow[] | null => {\n const commonFlowsGroup = flowsGroups.find(flowGroup => flowGroup._id === 'flowsGroup_commonFlow');\n const initialCommonFlowsGroup = initialFlowsGroups.find(flowGroup => flowGroup._id === 'flowsGroup_commonFlow');\n // Check if common flows have been updated\n const hasChanged = commonFlowsGroup?.flows.some(flow => flow._hasChanged);\n\n // Check if common flows have been deleted\n const hasDeletedFlow = differenceBy(initialCommonFlowsGroup?.flows ?? [], commonFlowsGroup?.flows ?? [], '_id').length > 0;\n\n return hasChanged || hasDeletedFlow ? (commonFlowsGroup?.flows ?? []).map(flow => omit(flow, '_id', '_hasChanged')) : null;\n};\n\nconst getPlansChangeOutput = (flowsGroups: FlowGroupVM[], initialFlowsGroups: FlowGroupVM[]): Plan[] | null => {\n const plansGroups = flowsGroups.filter(flowGroup => flowGroup._id !== 'flowsGroup_commonFlow');\n const initialPlansGroups = initialFlowsGroups.filter(flowGroup => flowGroup._id !== 'flowsGroup_commonFlow');\n\n // Get plans with changed flows\n const plansGroupsWithChangedFlows = plansGroups.filter(plan => plan.flows.some(flow => flow._hasChanged));\n\n // Get plans with deleted flows\n const plansGroupsWithDeletedFlows: FlowGroupVM[] = [];\n\n // Check if there are deleted flows in initial initialPlansGroups\n initialPlansGroups.forEach(plan => {\n const planGroupToCompare = plansGroups.find(p => p._planId === plan._planId);\n if (planGroupToCompare && differenceBy(plan.flows, planGroupToCompare?.flows ?? [], '_id').length > 0) {\n // If there are deleted flows, we need to return the complete plan with the new flows\n plansGroupsWithDeletedFlows.push(planGroupToCompare);\n }\n });\n\n // Merge plans with changed flows and plans with deleted flows\n const plansWithChangedFlowsOutput = unionBy([...plansGroupsWithChangedFlows, ...plansGroupsWithDeletedFlows], '_planId').map(plan => ({\n ...omit(plan, '_id', '_icon', '_planId'),\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion -- planId is always defined\n id: plan._planId!,\n flows: plan.flows.map(flow => omit(flow, '_id', '_hasChanged')),\n }));\n\n return plansWithChangedFlowsOutput.length > 0 ? plansWithChangedFlowsOutput : null;\n};\n","<!--\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 [flowsGroups]=\"flowsGroups\"\n [entrypoints]=\"entrypointsType\"\n (flowsGroupsChange)=\"onFlowsGroupsChange($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","/*\n * Copyright (C) 2022 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 */\nimport { Component, Input } from '@angular/core';\n\nimport { Step } from '../../models';\n\n@Component({\n selector: 'gio-ps-flow-details-phase-policy',\n templateUrl: './gio-ps-flow-details-phase-policy.component.html',\n styleUrls: ['./gio-ps-flow-details-phase-policy.component.scss'],\n})\nexport class GioPolicyStudioDetailsPhasePolicyComponent {\n @Input()\n public step?: Step = undefined;\n}\n","<!--\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🚧 Work in progress 🚧\n","/*\n * Copyright (C) 2022 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 */\nimport { NgModule } from '@angular/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { GioBannerModule, GioFormTagsInputModule, GioIconsModule } from '@gravitee/ui-particles-angular';\nimport { CommonModule } from '@angular/common';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { MatDialogModule } from '@angular/material/dialog';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatSelectModule } from '@angular/material/select';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { MatTabsModule } from '@angular/material/tabs';\n\nimport { GioPolicyStudioFlowMessageFormDialogComponent } from './components/flow-form-dialog/flow-message-form-dialog/gio-ps-flow-message-form-dialog.component';\nimport { GioPolicyStudioDetailsComponent } from './components/flow-details/gio-ps-flow-details.component';\nimport { GioPolicyStudioFlowsMenuComponent } from './components/flows-menu/gio-ps-flows-menu.component';\nimport { GioPolicyStudioComponent } from './gio-policy-studio.component';\nimport { GioPolicyStudioFlowProxyFormDialogComponent } from './components/flow-form-dialog/flow-proxy-form-dialog/gio-ps-flow-proxy-form-dialog.component';\nimport { GioPolicyStudioDetailsInfoBarComponent } from './components/flow-details-info-bar/gio-ps-flow-details-info-bar.component';\nimport { GioPolicyStudioDetailsPhasePolicyComponent } from './components/flow-details-phase-policy/gio-ps-flow-details-phase-policy.component';\nimport { GioPolicyStudioDetailsPhaseComponent } from './components/flow-details-phase/gio-ps-flow-details-phase.component';\n\n@NgModule({\n declarations: [\n GioPolicyStudioComponent,\n GioPolicyStudioFlowsMenuComponent,\n GioPolicyStudioDetailsComponent,\n GioPolicyStudioFlowMessageFormDialogComponent,\n GioPolicyStudioFlowProxyFormDialogComponent,\n GioPolicyStudioDetailsInfoBarComponent,\n GioPolicyStudioDetailsPhaseComponent,\n GioPolicyStudioDetailsPhasePolicyComponent,\n ],\n imports: [\n CommonModule,\n ReactiveFormsModule,\n\n MatButtonModule,\n MatTooltipModule,\n MatFormFieldModule,\n MatInputModule,\n MatSelectModule,\n MatDialogModule,\n MatTabsModule,\n\n GioIconsModule,\n GioFormTagsInputModule,\n GioBannerModule,\n ],\n exports: [GioPolicyStudioComponent],\n})\nexport class GioPolicyStudioModule {}\n","/*\n * Copyright (C) 2022 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 * Public API Surface of ui-policy-studio-angular\n */\nexport * from './lib/models';\nexport { GioPolicyStudioModule } from './lib/gio-policy-studio.module';\nexport { GioPolicyStudioComponent } from './lib/gio-policy-studio.component';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}