@valtimo/form-flow-management 13.43.0 → 13.44.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.
- package/fesm2022/valtimo-form-flow-management.mjs +1559 -186
- package/fesm2022/valtimo-form-flow-management.mjs.map +1 -1
- package/lib/components/editor/form-flow-editor.component.d.ts +34 -5
- package/lib/components/editor/form-flow-editor.component.d.ts.map +1 -1
- package/lib/components/editor/tabs/form-flow-json-editor-tab/form-flow-json-editor-tab.component.d.ts +17 -0
- package/lib/components/editor/tabs/form-flow-json-editor-tab/form-flow-json-editor-tab.component.d.ts.map +1 -0
- package/lib/components/editor/tabs/form-flow-ui-editor-tab/form-flow-context-properties/form-flow-context-properties.component.d.ts +23 -0
- package/lib/components/editor/tabs/form-flow-ui-editor-tab/form-flow-context-properties/form-flow-context-properties.component.d.ts.map +1 -0
- package/lib/components/editor/tabs/form-flow-ui-editor-tab/form-flow-expression-help-modal/form-flow-expression-help-modal.component.d.ts +15 -0
- package/lib/components/editor/tabs/form-flow-ui-editor-tab/form-flow-expression-help-modal/form-flow-expression-help-modal.component.d.ts.map +1 -0
- package/lib/components/editor/tabs/form-flow-ui-editor-tab/form-flow-expression-list/form-flow-expression-list.component.d.ts +54 -0
- package/lib/components/editor/tabs/form-flow-ui-editor-tab/form-flow-expression-list/form-flow-expression-list.component.d.ts.map +1 -0
- package/lib/components/editor/tabs/form-flow-ui-editor-tab/form-flow-step-detail/form-flow-step-detail.component.d.ts +73 -0
- package/lib/components/editor/tabs/form-flow-ui-editor-tab/form-flow-step-detail/form-flow-step-detail.component.d.ts.map +1 -0
- package/lib/components/editor/tabs/form-flow-ui-editor-tab/form-flow-step-list/form-flow-step-list.component.d.ts +42 -0
- package/lib/components/editor/tabs/form-flow-ui-editor-tab/form-flow-step-list/form-flow-step-list.component.d.ts.map +1 -0
- package/lib/components/editor/tabs/form-flow-ui-editor-tab/form-flow-transition-list/form-flow-transition-list.component.d.ts +49 -0
- package/lib/components/editor/tabs/form-flow-ui-editor-tab/form-flow-transition-list/form-flow-transition-list.component.d.ts.map +1 -0
- package/lib/components/editor/tabs/form-flow-ui-editor-tab/form-flow-ui-editor-tab.component.d.ts +89 -0
- package/lib/components/editor/tabs/form-flow-ui-editor-tab/form-flow-ui-editor-tab.component.d.ts.map +1 -0
- package/lib/components/new-form-flow-modal/new-form-flow-modal.component.d.ts.map +1 -1
- package/lib/constants/form-flow-editor.test-ids.d.ts +19 -0
- package/lib/constants/form-flow-editor.test-ids.d.ts.map +1 -0
- package/lib/constants/index.d.ts +3 -0
- package/lib/constants/index.d.ts.map +1 -0
- package/lib/constants/injection-tokens.d.ts +5 -0
- package/lib/constants/injection-tokens.d.ts.map +1 -0
- package/lib/form-flow-management.module.d.ts +3 -1
- package/lib/form-flow-management.module.d.ts.map +1 -1
- package/lib/models/form-flow-custom-component.model.d.ts +18 -0
- package/lib/models/form-flow-custom-component.model.d.ts.map +1 -0
- package/lib/models/form-flow-editor.model.d.ts +6 -0
- package/lib/models/form-flow-editor.model.d.ts.map +1 -0
- package/lib/models/form-flow.model.d.ts +8 -6
- package/lib/models/form-flow.model.d.ts.map +1 -1
- package/lib/models/index.d.ts +2 -0
- package/lib/models/index.d.ts.map +1 -1
- package/lib/services/form-flow-component.service.d.ts +13 -0
- package/lib/services/form-flow-component.service.d.ts.map +1 -0
- package/lib/services/form-flow-download.service.d.ts.map +1 -1
- package/lib/services/form-flow-editor-form.service.d.ts +52 -0
- package/lib/services/form-flow-editor-form.service.d.ts.map +1 -0
- package/lib/services/form-flow.service.d.ts +2 -1
- package/lib/services/form-flow.service.d.ts.map +1 -1
- package/lib/services/index.d.ts +1 -0
- package/lib/services/index.d.ts.map +1 -1
- package/lib/utils/index.d.ts +2 -0
- package/lib/utils/index.d.ts.map +1 -0
- package/lib/utils/translate.utils.d.ts +8 -0
- package/lib/utils/translate.utils.d.ts.map +1 -0
- package/package.json +1 -1
- package/public-api.d.ts +1 -0
- package/public-api.d.ts.map +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"valtimo-form-flow-management.mjs","sources":["../../../../projects/valtimo/form-flow-management/src/lib/models/form-flow.model.ts","../../../../projects/valtimo/form-flow-management/src/lib/models/index.ts","../../../../projects/valtimo/form-flow-management/src/lib/services/form-flow.service.ts","../../../../projects/valtimo/form-flow-management/src/lib/services/index.ts","../../../../projects/valtimo/form-flow-management/src/lib/components/new-form-flow-modal/new-form-flow-modal.component.ts","../../../../projects/valtimo/form-flow-management/src/lib/components/new-form-flow-modal/new-form-flow-modal.component.html","../../../../projects/valtimo/form-flow-management/src/lib/components/overview/form-flow-overview.component.ts","../../../../projects/valtimo/form-flow-management/src/lib/components/overview/form-flow-overview.component.html","../../../../projects/valtimo/form-flow-management/src/lib/services/form-flow-download.service.ts","../../../../projects/valtimo/form-flow-management/src/lib/components/editor/form-flow-editor.component.ts","../../../../projects/valtimo/form-flow-management/src/lib/components/editor/form-flow-editor.component.html","../../../../projects/valtimo/form-flow-management/src/lib/components/delete-form-flow-modal/delete-form-flow-modal.component.ts","../../../../projects/valtimo/form-flow-management/src/lib/components/delete-form-flow-modal/delete-form-flow-modal.component.html","../../../../projects/valtimo/form-flow-management/src/lib/form-flow-management.module.ts","../../../../projects/valtimo/form-flow-management/src/public-api.ts","../../../../projects/valtimo/form-flow-management/src/valtimo-form-flow-management.ts"],"sourcesContent":["/*\n * Copyright 2015-2025 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (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 * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\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\ninterface ListFormFlowDefinition {\n key: string;\n versions: Array<number>;\n readOnly?: boolean;\n}\n\ninterface FormFlowDefinition {\n key: string;\n readOnly?: boolean;\n startStep: string;\n steps: Array<FormFlowStep>;\n}\n\ninterface FormFlowDefinitionId {\n key: string;\n version: number;\n}\n\ninterface FormFlowStep {\n key: string;\n nextSteps: Array<FormFlowNextStep>;\n onBack: Array<string>;\n onOpen: Array<string>;\n onComplete: Array<string>;\n type: FormFlowStepType;\n}\n\ninterface FormFlowNextStep {\n condition?: string;\n step: string;\n}\n\ninterface FormFlowStepType {\n name: string;\n properties: FormStepTypeProperties | CustomComponentStepTypeProperties;\n}\n\ninterface FormStepTypeProperties {\n definition: string;\n}\n\ninterface CustomComponentStepTypeProperties {\n componentId: string;\n}\n\ninterface DeleteFormFlowsRequest {\n formFlowKeys: Array<string>;\n}\n\ninterface LoadedValue<T> {\n isLoading: boolean;\n value?: T;\n}\n\ninterface FormFlowEditorParams {\n formFlowDefinitionKey: string;\n caseDefinitionKey: string;\n caseDefinitionVersionTag: string;\n}\n\ninterface FormFlowRouteParams {\n formFlowDefinitionKey: string;\n}\n\nexport {\n ListFormFlowDefinition,\n FormFlowDefinition,\n FormFlowDefinitionId,\n FormFlowStep,\n FormFlowNextStep,\n FormFlowStepType,\n FormStepTypeProperties,\n CustomComponentStepTypeProperties,\n DeleteFormFlowsRequest,\n LoadedValue,\n FormFlowEditorParams,\n FormFlowRouteParams,\n};\n","/*\n * Copyright 2015-2025 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (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 * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\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 * from './form-flow.model';\n","/*\n * Copyright 2015-2025 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (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 * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\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\nimport {HttpClient} from '@angular/common/http';\nimport {Injectable} from '@angular/core';\nimport {ConfigService, Page, BaseApiService} from '@valtimo/shared';\nimport {BehaviorSubject, catchError, Observable, of, switchMap, take, tap} from 'rxjs';\nimport {FormFlowDefinition, FormFlowDefinitionId, ListFormFlowDefinition} from '../models';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class FormFlowService extends BaseApiService {\n constructor(\n protected readonly httpClient: HttpClient,\n protected readonly configService: ConfigService\n ) {\n super(httpClient, configService);\n }\n\n public getFormFlowDefinitionSchema(): Observable<object> {\n return this.httpClient.get<object>(this.getApiUrl('management/v1/form-flow-definition/schema'));\n }\n\n public getFormFlowDefinitions(\n caseDefinitionKey: string,\n caseVersionTag: string\n ): Observable<Page<ListFormFlowDefinition>> {\n return this.httpClient.get<Page<ListFormFlowDefinition>>(\n this.getApiUrl(\n `management/v1/case-definition/${caseDefinitionKey}/version/${caseVersionTag}/form-flow-definition`\n )\n );\n }\n\n public getFormFlowDefinitionByKey(\n caseDefinitionKey: string,\n caseVersionTag: string,\n formFlowDefinitionKey: string\n ): Observable<FormFlowDefinition> {\n return this.httpClient.get<FormFlowDefinition>(\n this.getApiUrl(\n `management/v1/case-definition/${caseDefinitionKey}/version/${caseVersionTag}/form-flow-definition/${formFlowDefinitionKey}`\n )\n );\n }\n\n public createFormFlowDefinition(\n caseDefinitionKey: string,\n caseVersionTag: string,\n definition: FormFlowDefinition\n ): Observable<FormFlowDefinition> {\n return this.httpClient.post<FormFlowDefinition>(\n this.getApiUrl(\n `management/v1/case-definition/${caseDefinitionKey}/version/${caseVersionTag}/form-flow-definition`\n ),\n definition\n );\n }\n\n public deleteFormFlowDefinition(\n caseDefinitionKey: string,\n caseVersionTag: string,\n definitionKey: string\n ): Observable<null> {\n return this.httpClient.delete<null>(\n this.getApiUrl(\n `management/v1/case-definition/${caseDefinitionKey}/version/${caseVersionTag}/form-flow-definition/${definitionKey}`\n )\n );\n }\n\n public updateFormFlowDefinition(\n caseDefinitionKey: string,\n caseVersionTag: string,\n definitionKey: string,\n updatedDefinition: FormFlowDefinition\n ): Observable<FormFlowDefinition> {\n return this.httpClient.put<FormFlowDefinition>(\n this.getApiUrl(\n `management/v1/case-definition/${caseDefinitionKey}/version/${caseVersionTag}/form-flow-definition/${definitionKey}`\n ),\n updatedDefinition\n );\n }\n\n public getBuildingBlockFormFlowDefinitions(\n buildingBlockKey: string,\n versionTag: string\n ): Observable<Page<ListFormFlowDefinition>> {\n return this.httpClient.get<Page<ListFormFlowDefinition>>(\n this.getApiUrl(\n `management/v1/building-block/${buildingBlockKey}/version/${versionTag}/form-flow-definition`\n )\n );\n }\n\n public getBuildingBlockFormFlowDefinitionByKey(\n buildingBlockKey: string,\n versionTag: string,\n formFlowDefinitionKey: string\n ): Observable<FormFlowDefinition> {\n return this.httpClient.get<FormFlowDefinition>(\n this.getApiUrl(\n `management/v1/building-block/${buildingBlockKey}/version/${versionTag}/form-flow-definition/${formFlowDefinitionKey}`\n )\n );\n }\n\n public createBuildingBlockFormFlowDefinition(\n buildingBlockKey: string,\n versionTag: string,\n definition: FormFlowDefinition\n ): Observable<FormFlowDefinition> {\n return this.httpClient.post<FormFlowDefinition>(\n this.getApiUrl(\n `management/v1/building-block/${buildingBlockKey}/version/${versionTag}/form-flow-definition`\n ),\n definition\n );\n }\n\n public deleteBuildingBlockFormFlowDefinition(\n buildingBlockKey: string,\n versionTag: string,\n definitionKey: string\n ): Observable<null> {\n return this.httpClient.delete<null>(\n this.getApiUrl(\n `management/v1/building-block/${buildingBlockKey}/version/${versionTag}/form-flow-definition/${definitionKey}`\n )\n );\n }\n\n public updateBuildingBlockFormFlowDefinition(\n buildingBlockKey: string,\n versionTag: string,\n definitionKey: string,\n updatedDefinition: FormFlowDefinition\n ): Observable<FormFlowDefinition> {\n return this.httpClient.put<FormFlowDefinition>(\n this.getApiUrl(\n `management/v1/building-block/${buildingBlockKey}/version/${versionTag}/form-flow-definition/${definitionKey}`\n ),\n updatedDefinition\n );\n }\n}\n","/*\n * Copyright 2015-2025 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (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 * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\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 * from './form-flow.service';\n","/*\n * Copyright 2015-2025 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (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 * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\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\nimport {ChangeDetectionStrategy, Component, EventEmitter, Input, Output} from '@angular/core';\nimport {FormBuilder, ReactiveFormsModule, Validators} from '@angular/forms';\nimport {FormFlowDefinition} from '../../models';\nimport {CARBON_CONSTANTS, ValtimoCdsModalDirective} from '@valtimo/components';\nimport {TranslateModule} from '@ngx-translate/core';\nimport {ButtonModule, InputModule, ModalModule} from 'carbon-components-angular';\n\n@Component({\n standalone: true,\n selector: 'valtimo-new-form-flow-modal',\n templateUrl: './new-form-flow-modal.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n ReactiveFormsModule,\n TranslateModule,\n ModalModule,\n InputModule,\n ButtonModule,\n ValtimoCdsModalDirective,\n ],\n})\nexport class NewFormFlowModalComponent {\n @Input() open = false;\n @Output() closeEvent = new EventEmitter<FormFlowDefinition | null>();\n\n public form = this.fb.group({\n key: this.fb.control('', Validators.required),\n });\n\n public get key() {\n return this.form?.get('key');\n }\n\n constructor(private readonly fb: FormBuilder) {}\n\n public onCancel(): void {\n this.closeEvent.emit(null);\n this.resetForm();\n }\n\n public onConfirm(): void {\n if (!this.key) {\n return;\n }\n\n this.closeEvent.emit({\n key: this.key.value ?? '',\n startStep: 'start-step',\n steps: [],\n });\n this.resetForm();\n }\n\n private resetForm(): void {\n setTimeout(() => {\n this.form.reset();\n }, CARBON_CONSTANTS.modalAnimationMs);\n }\n}\n","<!--\n ~ Copyright 2015-2025 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (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 ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\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<cds-modal\n [open]=\"open\"\n showFooter=\"true\"\n [title]=\"'formFlow.add' | translate\"\n valtimoCdsModal\n (close)=\"onCancel()\"\n>\n <cds-modal-header [showCloseButton]=\"true\" (closeSelect)=\"onCancel()\">\n <h3 cdsModalHeaderHeading>\n {{ 'formFlow.add' | translate }}\n </h3>\n </cds-modal-header>\n\n <section cdsModalContent>\n <form [formGroup]=\"form\">\n <cds-label [invalid]=\"key.dirty && key.invalid\">\n {{ 'formFlow.key' | translate }}\n\n <input\n formControlName=\"key\"\n cdsText\n placeholder=\"{{ 'formFlow.key' | translate }}\"\n [attr.modal-primary-focus]=\"true\"\n [invalid]=\"key.dirty && key.invalid\"\n />\n </cds-label>\n </form>\n </section>\n\n <cds-modal-footer>\n <button cdsButton=\"secondary\" (click)=\"onCancel()\">\n {{ 'interface.cancel' | translate }}\n </button>\n\n <button [disabled]=\"this.form.invalid\" (click)=\"onConfirm()\" cdsButton=\"primary\">\n {{ 'interface.create' | translate }}\n </button>\n </cds-modal-footer>\n</cds-modal>\n","/*\n * Copyright 2015-2025 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (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 * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\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 {ChangeDetectionStrategy, Component, ViewChild} from '@angular/core';\nimport {ActivatedRoute, Router} from '@angular/router';\nimport {TranslateService} from '@ngx-translate/core';\nimport {ActionItem, CarbonListComponent, ColumnConfig, ViewType} from '@valtimo/components';\nimport {\n CaseManagementParams,\n EditPermissionsService,\n getCaseManagementRouteParams,\n GlobalNotificationService,\n Page,\n} from '@valtimo/shared';\nimport {BehaviorSubject, combineLatest, map, Observable, of, switchMap, tap} from 'rxjs';\nimport {FormFlowDefinition, ListFormFlowDefinition} from '../../models';\nimport {FormFlowService} from '../../services';\n\n@Component({\n standalone: false,\n templateUrl: './form-flow-overview.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class FormFlowOverviewComponent {\n @ViewChild(CarbonListComponent) carbonList: CarbonListComponent;\n\n public readonly FIELDS: ColumnConfig[] = [\n {\n viewType: ViewType.TEXT,\n key: 'key',\n label: 'formFlow.key',\n },\n {\n viewType: ViewType.TEXT,\n key: 'versions.0',\n label: 'formFlow.version',\n },\n {\n viewType: ViewType.BOOLEAN,\n key: 'readOnly',\n label: 'formFlow.readOnly',\n },\n ];\n\n public readonly ACTION_ITEMS: ActionItem[] = [\n {\n callback: this.editFormFlowDetails.bind(this),\n label: 'interface.edit',\n },\n {\n callback: this.deleteFormFlow.bind(this),\n label: 'interface.delete',\n type: 'danger',\n },\n ];\n\n public readonly loading$ = new BehaviorSubject<boolean>(true);\n public readonly showDeleteModal$ = new BehaviorSubject<boolean>(false);\n public readonly deleteDefinitionKey$ = new BehaviorSubject<string | null>(null);\n\n private _params: CaseManagementParams | undefined = undefined;\n private readonly _refresh$ = new BehaviorSubject<null>(null);\n public readonly formFlowDefinitions$: Observable<ListFormFlowDefinition[]> = combineLatest([\n getCaseManagementRouteParams(this.route),\n this._refresh$,\n ]).pipe(\n tap(([params]) => {\n this.loading$.next(true);\n this._params = params;\n }),\n switchMap(([params]) =>\n !params\n ? of(null)\n : this.formFlowService.getFormFlowDefinitions(\n params.caseDefinitionKey,\n params.caseDefinitionVersionTag\n )\n ),\n map((formFlows: Page<ListFormFlowDefinition> | null) => {\n this.loading$.next(false);\n return !formFlows ? [] : formFlows.content;\n })\n );\n public readonly showAddModal$ = new BehaviorSubject<boolean>(false);\n\n public readonly params$ = getCaseManagementRouteParams(this.route);\n\n public readonly hasEditPermissions$: Observable<boolean> = this.params$.pipe(\n switchMap(params =>\n this.editPermissionsService.hasEditPermissions(\n params?.caseDefinitionKey,\n params?.caseDefinitionVersionTag\n )\n )\n );\n\n constructor(\n private readonly formFlowService: FormFlowService,\n private readonly globalNotificationService: GlobalNotificationService,\n private readonly route: ActivatedRoute,\n private readonly router: Router,\n private readonly translateService: TranslateService,\n private readonly editPermissionsService: EditPermissionsService\n ) {}\n\n public openAddModal(): void {\n this.showAddModal$.next(true);\n }\n\n public onAdd(formFlowDefinition: FormFlowDefinition | null): void {\n this.showAddModal$.next(false);\n\n if (!formFlowDefinition || !this._params) return;\n\n this.formFlowService\n .createFormFlowDefinition(\n this._params.caseDefinitionKey,\n this._params.caseDefinitionVersionTag,\n formFlowDefinition\n )\n .subscribe((formFlowDefinition: FormFlowDefinition) => {\n this.showAddModal$.next(false);\n this.router.navigate([formFlowDefinition.key], {relativeTo: this.route});\n });\n }\n\n public editFormFlowDetails(formFlowDefinition: ListFormFlowDefinition): void {\n this.router.navigate([formFlowDefinition.key], {relativeTo: this.route});\n }\n\n public deleteFormFlow(item: ListFormFlowDefinition): void {\n this.deleteDefinitionKey$.next(item.key);\n this.showDeleteModal$.next(true);\n }\n\n public onDelete(definitionKey: string): void {\n if (!this._params) return;\n\n this.formFlowService\n .deleteFormFlowDefinition(\n this._params.caseDefinitionKey,\n this._params.caseDefinitionVersionTag,\n definitionKey\n )\n .subscribe(() => {\n this.globalNotificationService.showToast({\n title: this.translateService.instant('interface.delete'),\n caption: this.translateService.instant('formFlow.deletedSuccessfully', {\n key: definitionKey,\n }),\n type: 'success',\n });\n this._refresh$.next(null);\n });\n }\n}\n","<!--\n ~ Copyright 2015-2025 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (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 ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\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<valtimo-carbon-list\n [actionItems]=\"ACTION_ITEMS\"\n [header]=\"false\"\n [items]=\"formFlowDefinitions$ | async\"\n [fields]=\"FIELDS\"\n [loading]=\"loading$ | async\"\n (rowClicked)=\"editFormFlowDetails($event)\"\n>\n <ng-container header> {{ 'formFlow.title' | translate }} </ng-container>\n\n <div carbonToolbarContent>\n <ng-container [ngTemplateOutlet]=\"addFormFlowButton\"></ng-container>\n </div>\n\n <valtimo-no-results\n [action]=\"addFormFlowButton\"\n description=\"{{ 'formFlow.noResults.description' | translate }}\"\n title=\"{{ 'formFlow.noResults.title' | translate }}\"\n ></valtimo-no-results>\n</valtimo-carbon-list>\n\n<valtimo-new-form-flow-modal\n [open]=\"showAddModal$ | async\"\n (closeEvent)=\"onAdd($event)\"\n></valtimo-new-form-flow-modal>\n\n<ng-template #addFormFlowButton>\n <button *ngIf=\"hasEditPermissions$ | async\" cdsButton=\"primary\" (click)=\"openAddModal()\">\n {{ 'formFlow.add' | translate }}\n\n <svg class=\"cds--btn__icon\" cdsIcon=\"add\" size=\"16\"></svg>\n </button>\n</ng-template>\n\n<valtimo-confirmation-modal\n confirmButtonTextTranslationKey=\"interface.delete\"\n confirmButtonType=\"danger\"\n contentTranslationKey=\"formFlow.deleteModalContent\"\n [outputOnConfirm]=\"deleteDefinitionKey$ | async\"\n [showModalSubject$]=\"showDeleteModal$\"\n titleTranslationKey=\"interface.delete\"\n (confirmEvent)=\"onDelete($event)\"\n></valtimo-confirmation-modal>\n","/*\n * Copyright 2015-2025 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (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 * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\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 {Injectable} from '@angular/core';\nimport {FormFlowEditorParams} from '../models';\n\n@Injectable({providedIn: 'root'})\nexport class FormFlowDownloadService {\n public downloadJson(\n json: object,\n params: FormFlowEditorParams\n ): void {\n const sJson = JSON.stringify(json, null, 2);\n const element = document.createElement('a');\n element.setAttribute('href', 'data:text/json;charset=UTF-8,' + encodeURIComponent(sJson));\n element.setAttribute(\n 'download',\n `${params.caseDefinitionKey}-${params.caseDefinitionVersionTag}-${params.formFlowDefinitionKey}.formflow.json`\n );\n element.style.display = 'none';\n document.body.appendChild(element);\n element.click(); // simulate click\n document.body.removeChild(element);\n }\n}\n","/*\n * Copyright 2015-2025 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (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 * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\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 {ChangeDetectionStrategy, Component, OnDestroy} from '@angular/core';\nimport {ActivatedRoute, Router} from '@angular/router';\nimport {ArrowLeft16} from '@carbon/icons';\nimport {TranslateService} from '@ngx-translate/core';\nimport {\n BreadcrumbService,\n EditorModel,\n PageHeaderService,\n PageTitleService,\n} from '@valtimo/components';\nimport {\n getBuildingBlockManagementRouteParams,\n getCaseManagementRouteParams,\n getContextObservable,\n GlobalNotificationService,\n ManagementContext,\n} from '@valtimo/shared';\nimport {IconService} from 'carbon-components-angular';\nimport {editor} from 'monaco-editor';\nimport {\n BehaviorSubject,\n combineLatest,\n finalize,\n map,\n Observable,\n shareReplay,\n switchMap,\n take,\n tap,\n} from 'rxjs';\nimport {FormFlowDefinition, FormFlowEditorParams, FormFlowRouteParams} from '../../models';\nimport {FormFlowService} from '../../services';\nimport {FormFlowDownloadService} from '../../services/form-flow-download.service';\n\n@Component({\n standalone: false,\n templateUrl: './form-flow-editor.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n styleUrls: ['./form-flow-editor.component.scss'],\n})\nexport class FormFlowEditorComponent implements OnDestroy {\n public readonly readOnly$ = new BehaviorSubject<boolean>(false);\n public readonly valid$ = new BehaviorSubject<boolean>(false);\n public readonly loading$ = new BehaviorSubject<boolean>(true);\n public readonly showDeleteModal$ = new BehaviorSubject<boolean>(false);\n public readonly CARBON_THEME = 'g10';\n\n private readonly _context$: Observable<ManagementContext | null> = getContextObservable(\n this.route\n );\n\n private readonly _params$: Observable<FormFlowEditorParams> = this._context$.pipe(\n switchMap(context => {\n if (context === 'buildingBlock') {\n return combineLatest([\n getBuildingBlockManagementRouteParams(this.route),\n this.route.params as Observable<FormFlowRouteParams>,\n ]).pipe(\n map(([bbParams, params]) => ({\n caseDefinitionKey: bbParams?.buildingBlockDefinitionKey ?? '',\n caseDefinitionVersionTag: bbParams?.buildingBlockDefinitionVersionTag ?? '',\n formFlowDefinitionKey: params.formFlowDefinitionKey,\n }))\n );\n }\n\n return combineLatest([\n getCaseManagementRouteParams(this.route),\n this.route.params as Observable<FormFlowRouteParams>,\n ]).pipe(\n map(([caseManagementParams, params]) => ({\n ...(caseManagementParams ?? {caseDefinitionKey: '', caseDefinitionVersionTag: ''}),\n ...params,\n }))\n );\n })\n );\n\n public readonly formFlowSchemaJson$: Observable<object> = this.formFlowService\n .getFormFlowDefinitionSchema()\n .pipe(shareReplay(1));\n\n public readonly editorOptions: editor.IEditorOptions = {\n quickSuggestions: {other: true, comments: false, strings: true},\n };\n\n private readonly _formFlowDefinition2$ = combineLatest([this._params$, this._context$]).pipe(\n tap(() => this.loading$.next(true)),\n switchMap(([params, context]) => {\n this.initBreadcrumbs(params, context);\n\n if (context === 'buildingBlock') {\n return this.formFlowService.getBuildingBlockFormFlowDefinitionByKey(\n params.caseDefinitionKey,\n params.caseDefinitionVersionTag,\n params.formFlowDefinitionKey\n );\n }\n\n return this.formFlowService.getFormFlowDefinitionByKey(\n params.caseDefinitionKey,\n params.caseDefinitionVersionTag,\n params.formFlowDefinitionKey\n );\n }),\n tap((formFlowDefinition: FormFlowDefinition) => {\n this.pageTitleService.setCustomPageTitle(formFlowDefinition.key);\n this.readOnly$.next(formFlowDefinition.readOnly === true);\n this.loading$.next(false);\n })\n );\n public readonly model$: Observable<EditorModel> = this._formFlowDefinition2$.pipe(\n map((formFlowDefinition: FormFlowDefinition) => this.getEditorModel(formFlowDefinition))\n );\n\n private readonly _updatedModelValue$ = new BehaviorSubject<string>('');\n\n public readonly compactMode$ = this.pageHeaderService.compactMode$;\n\n constructor(\n private readonly breadcrumbService: BreadcrumbService,\n private readonly formFlowDownloadService: FormFlowDownloadService,\n private readonly formFlowService: FormFlowService,\n private readonly iconService: IconService,\n private readonly notificationService: GlobalNotificationService,\n private readonly pageHeaderService: PageHeaderService,\n private readonly pageTitleService: PageTitleService,\n private readonly route: ActivatedRoute,\n private readonly router: Router,\n private readonly translateService: TranslateService\n ) {\n this.iconService.registerAll([ArrowLeft16]);\n this.pageTitleService.disableReset();\n }\n\n public ngOnDestroy(): void {\n this.pageTitleService.enableReset();\n this.breadcrumbService.clearThirdBreadcrumb();\n this.breadcrumbService.clearFourthBreadcrumb();\n }\n\n public onValid(valid: boolean): void {\n this.valid$.next(valid);\n }\n\n public onValueChange(value: string): void {\n this._updatedModelValue$.next(value);\n }\n\n public updateFormFlowDefinition(): void {\n this.loading$.next(true);\n\n combineLatest([this._params$, this._updatedModelValue$, this._context$])\n .pipe(\n take(1),\n switchMap(([params, updatedModelValue, context]) => {\n const updatedDefinition = {\n ...(JSON.parse(updatedModelValue) as FormFlowDefinition),\n key: params.formFlowDefinitionKey,\n };\n\n if (context === 'buildingBlock') {\n return this.formFlowService.updateBuildingBlockFormFlowDefinition(\n params.caseDefinitionKey,\n params.caseDefinitionVersionTag,\n params.formFlowDefinitionKey,\n updatedDefinition\n );\n }\n\n return this.formFlowService.updateFormFlowDefinition(\n params.caseDefinitionKey,\n params.caseDefinitionVersionTag,\n params.formFlowDefinitionKey,\n updatedDefinition\n );\n }),\n finalize(() => this.loading$.next(false))\n )\n .subscribe(result => {\n this.showSuccessMessage(result.key);\n });\n }\n\n public onDelete(): void {\n this.loading$.next(true);\n combineLatest([this._params$, this._context$])\n .pipe(\n take(1),\n switchMap(([params, context]) => {\n if (context === 'buildingBlock') {\n return this.formFlowService.deleteBuildingBlockFormFlowDefinition(\n params.caseDefinitionKey,\n params.caseDefinitionVersionTag,\n params.formFlowDefinitionKey\n );\n }\n\n return this.formFlowService.deleteFormFlowDefinition(\n params.caseDefinitionKey,\n params.caseDefinitionVersionTag,\n params.formFlowDefinitionKey\n );\n })\n )\n .subscribe(() => {\n this.router.navigate(['../'], {relativeTo: this.route});\n });\n }\n\n public showDeleteModal(): void {\n this.showDeleteModal$.next(true);\n }\n\n public downloadFormFlowDefinition(model: EditorModel): void {\n this._params$\n .pipe(take(1))\n .subscribe((params: FormFlowEditorParams) =>\n this.formFlowDownloadService.downloadJson(JSON.parse(model.value), params)\n );\n }\n\n public navigateBack(): void {\n this.router.navigate(['../'], {relativeTo: this.route});\n }\n\n private getEditorModel(formFlowDefinition: FormFlowDefinition): EditorModel {\n const clone = {...formFlowDefinition};\n delete clone.readOnly;\n return {\n value: JSON.stringify(clone),\n language: 'json',\n uri: `inmemory://form-flow/${formFlowDefinition.key}.formflow.json`,\n };\n }\n\n private showSuccessMessage(formFlowDefinitionKey: string): void {\n this.notificationService.showToast({\n caption: this.translateService.instant('formFlow.savedSuccessTitleMessage', {\n key: formFlowDefinitionKey,\n }),\n type: 'success',\n title: this.translateService.instant('formFlow.savedSuccessTitle'),\n });\n }\n\n private initBreadcrumbs(params: FormFlowEditorParams, context: ManagementContext | null): void {\n if (context === 'buildingBlock') {\n const route = `/building-block-management/building-block/${params.caseDefinitionKey}/version/${params.caseDefinitionVersionTag}`;\n const generalRoute = `${route}/general`;\n\n this.breadcrumbService.setThirdBreadcrumb({\n route: [generalRoute],\n content: `${params.caseDefinitionKey} (${params.caseDefinitionVersionTag})`,\n href: generalRoute,\n });\n\n const routeWithFormFlows = `${route}/form-flows`;\n\n this.breadcrumbService.setFourthBreadcrumb({\n route: [routeWithFormFlows],\n content: this.translateService.instant('buildingBlockManagement.tabs.formFlows'),\n href: routeWithFormFlows,\n });\n } else {\n const route = `/case-management/case/${params.caseDefinitionKey}/version/${params.caseDefinitionVersionTag}`;\n\n this.breadcrumbService.setThirdBreadcrumb({\n route: [route],\n content: `${params.caseDefinitionKey} (${params.caseDefinitionVersionTag})`,\n href: route,\n });\n\n const routeWithFormFlows = `${route}/form-flows`;\n\n this.breadcrumbService.setFourthBreadcrumb({\n route: [routeWithFormFlows],\n content: this.translateService.instant('caseManagement.tabs.formFlows'),\n href: routeWithFormFlows,\n });\n }\n }\n}\n","<!--\n ~ Copyright 2015-2025 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (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 ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\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@if ({model: model$ | async, schema: formFlowSchemaJson$ | async}; as obs) {\n @if (obs.model && obs.schema) {\n <valtimo-editor\n [disabled]=\"(loading$ | async) === false && readOnly$ | async\"\n [editorOptions]=\"editorOptions\"\n [model]=\"obs.model\"\n [jsonSchema]=\"obs.schema\"\n (validEvent)=\"onValid($event)\"\n (valueChangeEvent)=\"onValueChange($event)\"\n [fitPage]=\"true\"\n ></valtimo-editor>\n } @else {\n <cds-loading></cds-loading>\n }\n}\n\n<ng-container renderInPageHeader>\n <ng-template>\n <div\n *ngIf=\"{\n compactMode: compactMode$ | async,\n valid: valid$ | async,\n readOnly: readOnly$ | async,\n model: model$ | async,\n } as obs\"\n class=\"buttons-container\"\n >\n <v-overflow-menu placement=\"bottom-end\">\n <v-overflow-menu-trigger overflowTrigger></v-overflow-menu-trigger>\n <v-overflow-menu-option\n [disabled]=\"!obs.valid && !obs.readOnly\"\n (selected)=\"downloadFormFlowDefinition(obs.model)\"\n >{{ 'interface.export' | translate }}\n </v-overflow-menu-option>\n\n <v-overflow-menu-option\n [disabled]=\"obs.readOnly\"\n type=\"danger\"\n (selected)=\"showDeleteModal()\"\n >{{ 'interface.delete' | translate }}\n </v-overflow-menu-option>\n </v-overflow-menu>\n\n <button cdsButton=\"secondary\" [size]=\"obs.compactMode ? 'sm' : 'md'\" (click)=\"navigateBack()\">\n {{ 'interface.back' | translate }}\n\n <svg class=\"cds--btn__icon\" cdsIcon=\"arrow--left\" size=\"16\"></svg>\n </button>\n\n <button\n [disabled]=\"!obs.valid || obs.readOnly\"\n cdsButton=\"primary\"\n [size]=\"obs.compactMode ? 'sm' : 'md'\"\n (click)=\"updateFormFlowDefinition()\"\n >\n {{ 'interface.save' | translate }}\n\n <svg class=\"cds--btn__icon\" cdsIcon=\"save\" size=\"16\"></svg>\n </button>\n </div>\n </ng-template>\n</ng-container>\n\n<valtimo-confirmation-modal\n confirmButtonTextTranslationKey=\"interface.delete\"\n confirmButtonType=\"danger\"\n contentTranslationKey=\"formFlow.deleteModalContent\"\n [showModalSubject$]=\"showDeleteModal$\"\n titleTranslationKey=\"interface.delete\"\n (confirmEvent)=\"onDelete()\"\n></valtimo-confirmation-modal>\n","/*\n * Copyright 2015-2025 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (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 * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\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\nimport {ChangeDetectionStrategy, Component, EventEmitter, Input, Output} from '@angular/core';\nimport {Observable} from 'rxjs';\n\n@Component({\n standalone: false,\n selector: 'valtimo-delete-form-flow-modal',\n templateUrl: './delete-form-flow-modal.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class DeleteFormFlowModalComponent {\n @Input() deleteFormFlowDefinitionKey: string;\n @Input() showDeleteModal$: Observable<boolean>;\n @Output() deleteEvent = new EventEmitter<string>();\n\n public onDelete(formFlowDefinitionKey: string): void {\n this.deleteEvent.emit(formFlowDefinitionKey);\n }\n}\n","<!--\n ~ Copyright 2015-2025 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (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 ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\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<valtimo-confirmation-modal\n confirmButtonTextTranslationKey=\"interface.delete\"\n confirmButtonType=\"danger\"\n contentTranslationKey=\"formFlow.deleteModalContent\"\n [outputOnConfirm]=\"deleteFormFlowDefinitionKey\"\n [showModalSubject$]=\"showDeleteModal$\"\n titleTranslationKey=\"interface.delete\"\n (confirmEvent)=\"onDelete($event)\"\n></valtimo-confirmation-modal>\n","/*\n * Copyright 2015-2025 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (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 * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\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\nimport {CommonModule} from '@angular/common';\nimport {NgModule} from '@angular/core';\nimport {TranslateModule} from '@ngx-translate/core';\nimport {\n CarbonListModule,\n ConfirmationModalModule,\n EditorModule,\n OverflowMenuComponent,\n OverflowMenuOptionComponent,\n OverflowMenuTriggerComponent,\n RenderInPageHeaderDirective,\n} from '@valtimo/components';\nimport {FormFlowOverviewComponent} from './components/overview/form-flow-overview.component';\nimport {NewFormFlowModalComponent} from './components/new-form-flow-modal/new-form-flow-modal.component';\nimport {\n ButtonModule,\n DropdownModule,\n IconModule,\n InputModule,\n LoadingModule,\n ModalModule,\n NotificationModule,\n} from 'carbon-components-angular';\nimport {FormsModule, ReactiveFormsModule} from '@angular/forms';\nimport {FormFlowEditorComponent} from './components/editor/form-flow-editor.component';\nimport {DeleteFormFlowModalComponent} from './components/delete-form-flow-modal/delete-form-flow-modal.component';\n\n@NgModule({\n declarations: [\n FormFlowOverviewComponent,\n FormFlowEditorComponent,\n DeleteFormFlowModalComponent,\n ],\n imports: [\n CommonModule,\n ButtonModule,\n FormsModule,\n ModalModule,\n TranslateModule,\n ReactiveFormsModule,\n InputModule,\n IconModule,\n ConfirmationModalModule,\n EditorModule,\n RenderInPageHeaderDirective,\n LoadingModule,\n IconModule,\n OverflowMenuComponent,\n OverflowMenuOptionComponent,\n OverflowMenuTriggerComponent,\n NotificationModule,\n CarbonListModule,\n DropdownModule,\n ConfirmationModalModule,\n NewFormFlowModalComponent,\n ],\n})\nexport class FormFlowManagementModule {}\n","/*\n * Copyright 2015-2025 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (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 * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\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 * Public API Surface of form-flow\n */\n\nexport * from './lib/models';\nexport * from './lib/services';\nexport * from './lib/components/overview/form-flow-overview.component';\nexport * from './lib/components/editor/form-flow-editor.component';\nexport * from './lib/components/new-form-flow-modal/new-form-flow-modal.component';\nexport * from './lib/form-flow-management.module';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","i2","i1.FormFlowService","i3","i6","i7","i8.NewFormFlowModalComponent","i2.FormFlowDownloadService","i3.FormFlowService","i4","i5","i8"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"valtimo-form-flow-management.mjs","sources":["../../../../projects/valtimo/form-flow-management/src/lib/constants/form-flow-editor.test-ids.ts","../../../../projects/valtimo/form-flow-management/src/lib/constants/injection-tokens.ts","../../../../projects/valtimo/form-flow-management/src/lib/constants/index.ts","../../../../projects/valtimo/form-flow-management/src/lib/models/form-flow.model.ts","../../../../projects/valtimo/form-flow-management/src/lib/models/form-flow-custom-component.model.ts","../../../../projects/valtimo/form-flow-management/src/lib/models/form-flow-editor.model.ts","../../../../projects/valtimo/form-flow-management/src/lib/models/index.ts","../../../../projects/valtimo/form-flow-management/src/lib/services/form-flow.service.ts","../../../../projects/valtimo/form-flow-management/src/lib/services/form-flow-component.service.ts","../../../../projects/valtimo/form-flow-management/src/lib/services/index.ts","../../../../projects/valtimo/form-flow-management/src/lib/components/new-form-flow-modal/new-form-flow-modal.component.ts","../../../../projects/valtimo/form-flow-management/src/lib/components/new-form-flow-modal/new-form-flow-modal.component.html","../../../../projects/valtimo/form-flow-management/src/lib/components/overview/form-flow-overview.component.ts","../../../../projects/valtimo/form-flow-management/src/lib/components/overview/form-flow-overview.component.html","../../../../projects/valtimo/form-flow-management/src/lib/services/form-flow-download.service.ts","../../../../projects/valtimo/form-flow-management/src/lib/components/editor/tabs/form-flow-json-editor-tab/form-flow-json-editor-tab.component.ts","../../../../projects/valtimo/form-flow-management/src/lib/components/editor/tabs/form-flow-json-editor-tab/form-flow-json-editor-tab.component.html","../../../../projects/valtimo/form-flow-management/src/lib/services/form-flow-editor-form.service.ts","../../../../projects/valtimo/form-flow-management/src/lib/utils/translate.utils.ts","../../../../projects/valtimo/form-flow-management/src/lib/utils/index.ts","../../../../projects/valtimo/form-flow-management/src/lib/components/editor/tabs/form-flow-ui-editor-tab/form-flow-context-properties/form-flow-context-properties.component.ts","../../../../projects/valtimo/form-flow-management/src/lib/components/editor/tabs/form-flow-ui-editor-tab/form-flow-context-properties/form-flow-context-properties.component.html","../../../../projects/valtimo/form-flow-management/src/lib/components/editor/tabs/form-flow-ui-editor-tab/form-flow-expression-help-modal/form-flow-expression-help-modal.component.ts","../../../../projects/valtimo/form-flow-management/src/lib/components/editor/tabs/form-flow-ui-editor-tab/form-flow-expression-help-modal/form-flow-expression-help-modal.component.html","../../../../projects/valtimo/form-flow-management/src/lib/components/editor/tabs/form-flow-ui-editor-tab/form-flow-expression-list/form-flow-expression-list.component.ts","../../../../projects/valtimo/form-flow-management/src/lib/components/editor/tabs/form-flow-ui-editor-tab/form-flow-expression-list/form-flow-expression-list.component.html","../../../../projects/valtimo/form-flow-management/src/lib/components/editor/tabs/form-flow-ui-editor-tab/form-flow-transition-list/form-flow-transition-list.component.ts","../../../../projects/valtimo/form-flow-management/src/lib/components/editor/tabs/form-flow-ui-editor-tab/form-flow-transition-list/form-flow-transition-list.component.html","../../../../projects/valtimo/form-flow-management/src/lib/components/editor/tabs/form-flow-ui-editor-tab/form-flow-step-detail/form-flow-step-detail.component.ts","../../../../projects/valtimo/form-flow-management/src/lib/components/editor/tabs/form-flow-ui-editor-tab/form-flow-step-detail/form-flow-step-detail.component.html","../../../../projects/valtimo/form-flow-management/src/lib/components/editor/tabs/form-flow-ui-editor-tab/form-flow-step-list/form-flow-step-list.component.ts","../../../../projects/valtimo/form-flow-management/src/lib/components/editor/tabs/form-flow-ui-editor-tab/form-flow-step-list/form-flow-step-list.component.html","../../../../projects/valtimo/form-flow-management/src/lib/components/editor/tabs/form-flow-ui-editor-tab/form-flow-ui-editor-tab.component.ts","../../../../projects/valtimo/form-flow-management/src/lib/components/editor/tabs/form-flow-ui-editor-tab/form-flow-ui-editor-tab.component.html","../../../../projects/valtimo/form-flow-management/src/lib/components/editor/form-flow-editor.component.ts","../../../../projects/valtimo/form-flow-management/src/lib/components/editor/form-flow-editor.component.html","../../../../projects/valtimo/form-flow-management/src/lib/components/delete-form-flow-modal/delete-form-flow-modal.component.ts","../../../../projects/valtimo/form-flow-management/src/lib/components/delete-form-flow-modal/delete-form-flow-modal.component.html","../../../../projects/valtimo/form-flow-management/src/lib/form-flow-management.module.ts","../../../../projects/valtimo/form-flow-management/src/public-api.ts","../../../../projects/valtimo/form-flow-management/src/valtimo-form-flow-management.ts"],"sourcesContent":["/*\n * Copyright 2015-2026 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (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 * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\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 FORM_FLOW_EDITOR_TEST_IDS = {\n saveButton: 'formFlowEditorSaveButton',\n backButton: 'formFlowEditorBackButton',\n stepList: 'formFlowEditorStepList',\n stepListItem: 'formFlowEditorStepListItem',\n addStepButton: 'formFlowEditorAddStepButton',\n deleteStepButton: 'formFlowEditorDeleteStepButton',\n makeStartStepButton: 'formFlowEditorMakeStartStepButton',\n stepKeyInput: 'formFlowEditorStepKeyInput',\n stepTitleInput: 'formFlowEditorStepTitleInput',\n stepTypeDropdown: 'formFlowEditorStepTypeDropdown',\n stepPropertyInput: 'formFlowEditorStepPropertyInput',\n stepPropertyDropdown: 'formFlowEditorStepPropertyDropdown',\n addTransitionButton: 'formFlowEditorAddTransitionButton',\n transitionRow: 'formFlowEditorTransitionRow',\n addExpressionButton: 'formFlowEditorAddExpressionButton',\n expressionInput: 'formFlowEditorExpressionInput',\n} as const;\n","/*\n * Copyright 2015-2026 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (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 * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\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\nimport {InjectionToken} from '@angular/core';\nimport {FormFlowCustomComponentDefinition} from '../models';\n\nconst FORM_FLOW_COMPONENT_TOKEN = new InjectionToken<Array<FormFlowCustomComponentDefinition>>(\n 'Supported form-flow Angular components',\n {factory: () => []}\n);\n\nexport {FORM_FLOW_COMPONENT_TOKEN};\n","/*\n * Copyright 2015-2026 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (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 * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\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 * from './form-flow-editor.test-ids';\nexport * from './injection-tokens';\n","/*\n * Copyright 2015-2025 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (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 * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\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\ninterface ListFormFlowDefinition {\n key: string;\n versions: Array<number>;\n readOnly?: boolean;\n}\n\ninterface FormFlowDefinition {\n key: string;\n readOnly?: boolean;\n startStep: string;\n steps: Array<FormFlowStep>;\n}\n\ninterface FormFlowDefinitionId {\n key: string;\n version: number;\n}\n\ninterface FormFlowStep {\n key: string;\n title?: string;\n nextStep?: string;\n nextSteps?: Array<FormFlowNextStep>;\n onBack?: Array<string>;\n onOpen?: Array<string>;\n onComplete?: Array<string>;\n type: FormFlowStepType;\n}\n\ninterface FormFlowNextStep {\n condition?: string | null;\n step: string;\n}\n\ninterface FormFlowStepType {\n name: string;\n properties: FormStepTypeProperties | CustomComponentStepTypeProperties | Record<string, string>;\n}\n\ninterface FormStepTypeProperties {\n definition: string;\n}\n\ninterface CustomComponentStepTypeProperties {\n componentId: string;\n}\n\ninterface DeleteFormFlowsRequest {\n formFlowKeys: Array<string>;\n}\n\ninterface LoadedValue<T> {\n isLoading: boolean;\n value?: T;\n}\n\ninterface FormFlowEditorParams {\n formFlowDefinitionKey: string;\n caseDefinitionKey: string;\n caseDefinitionVersionTag: string;\n}\n\ninterface FormFlowRouteParams {\n formFlowDefinitionKey: string;\n}\n\nexport {\n ListFormFlowDefinition,\n FormFlowDefinition,\n FormFlowDefinitionId,\n FormFlowStep,\n FormFlowNextStep,\n FormFlowStepType,\n FormStepTypeProperties,\n CustomComponentStepTypeProperties,\n DeleteFormFlowsRequest,\n LoadedValue,\n FormFlowEditorParams,\n FormFlowRouteParams,\n};\n","/*\n * Copyright 2015-2026 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (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 * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\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\nimport {EventEmitter, Type} from '@angular/core';\nimport {FormioSubmission} from '@valtimo/components';\n\ninterface ChangeEvent {\n data: object;\n}\n\ninterface FormFlowCustomComponent {\n formFlowInstanceId: string;\n componentId?: string;\n disabled: boolean;\n changeEvent: EventEmitter<ChangeEvent>;\n submitEvent: EventEmitter<FormioSubmission>;\n}\n\ninterface FormFlowCustomComponentDefinition {\n id: string;\n component: Type<FormFlowCustomComponent>;\n}\n\nexport {ChangeEvent, FormFlowCustomComponent, FormFlowCustomComponentDefinition};\n","/*\n * Copyright 2015-2026 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (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 * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\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\nenum FormFlowEditorTab {\n EDITOR = 'editor',\n JSON_EDITOR = 'jsonEditor',\n}\n\nexport {FormFlowEditorTab};\n","/*\n * Copyright 2015-2025 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (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 * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\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 * from './form-flow.model';\nexport * from './form-flow-custom-component.model';\nexport * from './form-flow-editor.model';\n","/*\n * Copyright 2015-2025 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (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 * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\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\nimport {HttpClient} from '@angular/common/http';\nimport {Injectable} from '@angular/core';\nimport {ConfigService, FormFlowRegistryDto, Page, BaseApiService} from '@valtimo/shared';\nimport {Observable} from 'rxjs';\nimport {FormFlowDefinition, FormFlowDefinitionId, ListFormFlowDefinition} from '../models';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class FormFlowService extends BaseApiService {\n constructor(\n protected readonly httpClient: HttpClient,\n protected readonly configService: ConfigService\n ) {\n super(httpClient, configService);\n }\n\n public getFormFlowDefinitionSchema(): Observable<object> {\n return this.httpClient.get<object>(this.getApiUrl('management/v1/form-flow-definition/schema'));\n }\n\n // The registry describes what can be used in a form flow definition (step types, expression\n // beans and additional properties). The backend builds it once at startup, so this is a cheap\n // call that is made fresh every time — no client-side caching.\n public getFormFlowRegistry(): Observable<FormFlowRegistryDto> {\n return this.httpClient.get<FormFlowRegistryDto>(\n this.getApiUrl('management/v1/form-flow/registry')\n );\n }\n\n public getFormFlowDefinitions(\n caseDefinitionKey: string,\n caseVersionTag: string\n ): Observable<Page<ListFormFlowDefinition>> {\n return this.httpClient.get<Page<ListFormFlowDefinition>>(\n this.getApiUrl(\n `management/v1/case-definition/${caseDefinitionKey}/version/${caseVersionTag}/form-flow-definition`\n )\n );\n }\n\n public getFormFlowDefinitionByKey(\n caseDefinitionKey: string,\n caseVersionTag: string,\n formFlowDefinitionKey: string\n ): Observable<FormFlowDefinition> {\n return this.httpClient.get<FormFlowDefinition>(\n this.getApiUrl(\n `management/v1/case-definition/${caseDefinitionKey}/version/${caseVersionTag}/form-flow-definition/${formFlowDefinitionKey}`\n )\n );\n }\n\n public createFormFlowDefinition(\n caseDefinitionKey: string,\n caseVersionTag: string,\n definition: FormFlowDefinition\n ): Observable<FormFlowDefinition> {\n return this.httpClient.post<FormFlowDefinition>(\n this.getApiUrl(\n `management/v1/case-definition/${caseDefinitionKey}/version/${caseVersionTag}/form-flow-definition`\n ),\n definition\n );\n }\n\n public deleteFormFlowDefinition(\n caseDefinitionKey: string,\n caseVersionTag: string,\n definitionKey: string\n ): Observable<null> {\n return this.httpClient.delete<null>(\n this.getApiUrl(\n `management/v1/case-definition/${caseDefinitionKey}/version/${caseVersionTag}/form-flow-definition/${definitionKey}`\n )\n );\n }\n\n public updateFormFlowDefinition(\n caseDefinitionKey: string,\n caseVersionTag: string,\n definitionKey: string,\n updatedDefinition: FormFlowDefinition\n ): Observable<FormFlowDefinition> {\n return this.httpClient.put<FormFlowDefinition>(\n this.getApiUrl(\n `management/v1/case-definition/${caseDefinitionKey}/version/${caseVersionTag}/form-flow-definition/${definitionKey}`\n ),\n updatedDefinition\n );\n }\n\n public getBuildingBlockFormFlowDefinitions(\n buildingBlockKey: string,\n versionTag: string\n ): Observable<Page<ListFormFlowDefinition>> {\n return this.httpClient.get<Page<ListFormFlowDefinition>>(\n this.getApiUrl(\n `management/v1/building-block/${buildingBlockKey}/version/${versionTag}/form-flow-definition`\n )\n );\n }\n\n public getBuildingBlockFormFlowDefinitionByKey(\n buildingBlockKey: string,\n versionTag: string,\n formFlowDefinitionKey: string\n ): Observable<FormFlowDefinition> {\n return this.httpClient.get<FormFlowDefinition>(\n this.getApiUrl(\n `management/v1/building-block/${buildingBlockKey}/version/${versionTag}/form-flow-definition/${formFlowDefinitionKey}`\n )\n );\n }\n\n public createBuildingBlockFormFlowDefinition(\n buildingBlockKey: string,\n versionTag: string,\n definition: FormFlowDefinition\n ): Observable<FormFlowDefinition> {\n return this.httpClient.post<FormFlowDefinition>(\n this.getApiUrl(\n `management/v1/building-block/${buildingBlockKey}/version/${versionTag}/form-flow-definition`\n ),\n definition\n );\n }\n\n public deleteBuildingBlockFormFlowDefinition(\n buildingBlockKey: string,\n versionTag: string,\n definitionKey: string\n ): Observable<null> {\n return this.httpClient.delete<null>(\n this.getApiUrl(\n `management/v1/building-block/${buildingBlockKey}/version/${versionTag}/form-flow-definition/${definitionKey}`\n )\n );\n }\n\n public updateBuildingBlockFormFlowDefinition(\n buildingBlockKey: string,\n versionTag: string,\n definitionKey: string,\n updatedDefinition: FormFlowDefinition\n ): Observable<FormFlowDefinition> {\n return this.httpClient.put<FormFlowDefinition>(\n this.getApiUrl(\n `management/v1/building-block/${buildingBlockKey}/version/${versionTag}/form-flow-definition/${definitionKey}`\n ),\n updatedDefinition\n );\n }\n}\n","/*\n * Copyright 2015-2026 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (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 * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\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\nimport {Inject, Injectable} from '@angular/core';\nimport {BehaviorSubject, filter, Observable} from 'rxjs';\nimport {FORM_FLOW_COMPONENT_TOKEN} from '../constants';\nimport {FormFlowCustomComponentDefinition} from '../models';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class FormFlowComponentService {\n private readonly _supportedComponents$ =\n new BehaviorSubject<Array<FormFlowCustomComponentDefinition> | null>(null);\n\n public get supportedComponents$(): Observable<Array<FormFlowCustomComponentDefinition>> {\n return this._supportedComponents$.pipe(filter(components => !!components));\n }\n\n constructor(\n @Inject(FORM_FLOW_COMPONENT_TOKEN)\n private readonly supportedCustomComponents: Array<FormFlowCustomComponentDefinition>\n ) {\n this.setSupportedComponents(supportedCustomComponents);\n }\n\n private setSupportedComponents(\n supportedComponents: Array<FormFlowCustomComponentDefinition>\n ): void {\n this._supportedComponents$.next(supportedComponents);\n }\n}\n","/*\n * Copyright 2015-2025 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (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 * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\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 * from './form-flow.service';\nexport * from './form-flow-component.service';\n","/*\n * Copyright 2015-2025 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (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 * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\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\nimport {ChangeDetectionStrategy, Component, EventEmitter, Input, Output} from '@angular/core';\nimport {FormBuilder, ReactiveFormsModule, Validators} from '@angular/forms';\nimport {FormFlowDefinition} from '../../models';\nimport {CARBON_CONSTANTS, ValtimoCdsModalDirective} from '@valtimo/components';\nimport {TranslateModule} from '@ngx-translate/core';\nimport {ButtonModule, InputModule, ModalModule} from 'carbon-components-angular';\n\n@Component({\n standalone: true,\n selector: 'valtimo-new-form-flow-modal',\n templateUrl: './new-form-flow-modal.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n ReactiveFormsModule,\n TranslateModule,\n ModalModule,\n InputModule,\n ButtonModule,\n ValtimoCdsModalDirective,\n ],\n})\nexport class NewFormFlowModalComponent {\n @Input() open = false;\n @Output() closeEvent = new EventEmitter<FormFlowDefinition | null>();\n\n public form = this.fb.group({\n key: this.fb.control('', Validators.required),\n });\n\n public get key() {\n return this.form?.get('key');\n }\n\n constructor(private readonly fb: FormBuilder) {}\n\n public onCancel(): void {\n this.closeEvent.emit(null);\n this.resetForm();\n }\n\n public onConfirm(): void {\n if (!this.key) {\n return;\n }\n\n this.closeEvent.emit({\n key: this.key.value ?? '',\n startStep: 'start-step',\n // Every form flow needs a start step, so create one up front: without it the editor opens on a\n // \"start step does not exist\" error for a flow the user has only just named. The form\n // definition is intentionally left blank — the editor flags it as the field still to fill in.\n steps: [\n {\n key: 'start-step',\n type: {name: 'form', properties: {definition: ''}},\n nextSteps: [],\n },\n ],\n });\n this.resetForm();\n }\n\n private resetForm(): void {\n setTimeout(() => {\n this.form.reset();\n }, CARBON_CONSTANTS.modalAnimationMs);\n }\n}\n","<!--\n ~ Copyright 2015-2025 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (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 ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\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<cds-modal\n [open]=\"open\"\n showFooter=\"true\"\n [title]=\"'formFlow.add' | translate\"\n valtimoCdsModal\n (close)=\"onCancel()\"\n>\n <cds-modal-header [showCloseButton]=\"true\" (closeSelect)=\"onCancel()\">\n <h3 cdsModalHeaderHeading>\n {{ 'formFlow.add' | translate }}\n </h3>\n </cds-modal-header>\n\n <section cdsModalContent>\n <form [formGroup]=\"form\">\n <cds-label [invalid]=\"key.dirty && key.invalid\">\n {{ 'formFlow.key' | translate }}\n\n <input\n formControlName=\"key\"\n cdsText\n placeholder=\"{{ 'formFlow.key' | translate }}\"\n [attr.modal-primary-focus]=\"true\"\n [invalid]=\"key.dirty && key.invalid\"\n />\n </cds-label>\n </form>\n </section>\n\n <cds-modal-footer>\n <button cdsButton=\"secondary\" (click)=\"onCancel()\">\n {{ 'interface.cancel' | translate }}\n </button>\n\n <button [disabled]=\"this.form.invalid\" (click)=\"onConfirm()\" cdsButton=\"primary\">\n {{ 'interface.create' | translate }}\n </button>\n </cds-modal-footer>\n</cds-modal>\n","/*\n * Copyright 2015-2025 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (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 * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\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 {ChangeDetectionStrategy, Component, ViewChild} from '@angular/core';\nimport {ActivatedRoute, Router} from '@angular/router';\nimport {TranslateService} from '@ngx-translate/core';\nimport {ActionItem, CarbonListComponent, ColumnConfig, ViewType} from '@valtimo/components';\nimport {\n CaseManagementParams,\n EditPermissionsService,\n getCaseManagementRouteParams,\n GlobalNotificationService,\n Page,\n} from '@valtimo/shared';\nimport {BehaviorSubject, combineLatest, map, Observable, of, switchMap, tap} from 'rxjs';\nimport {FormFlowDefinition, ListFormFlowDefinition} from '../../models';\nimport {FormFlowService} from '../../services';\n\n@Component({\n standalone: false,\n templateUrl: './form-flow-overview.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class FormFlowOverviewComponent {\n @ViewChild(CarbonListComponent) carbonList: CarbonListComponent;\n\n public readonly FIELDS: ColumnConfig[] = [\n {\n viewType: ViewType.TEXT,\n key: 'key',\n label: 'formFlow.key',\n },\n {\n viewType: ViewType.TEXT,\n key: 'versions.0',\n label: 'formFlow.version',\n },\n {\n viewType: ViewType.BOOLEAN,\n key: 'readOnly',\n label: 'formFlow.readOnly',\n },\n ];\n\n public readonly ACTION_ITEMS: ActionItem[] = [\n {\n callback: this.editFormFlowDetails.bind(this),\n label: 'interface.edit',\n },\n {\n callback: this.deleteFormFlow.bind(this),\n label: 'interface.delete',\n type: 'danger',\n },\n ];\n\n public readonly loading$ = new BehaviorSubject<boolean>(true);\n public readonly showDeleteModal$ = new BehaviorSubject<boolean>(false);\n public readonly deleteDefinitionKey$ = new BehaviorSubject<string | null>(null);\n\n private _params: CaseManagementParams | undefined = undefined;\n private readonly _refresh$ = new BehaviorSubject<null>(null);\n public readonly formFlowDefinitions$: Observable<ListFormFlowDefinition[]> = combineLatest([\n getCaseManagementRouteParams(this.route),\n this._refresh$,\n ]).pipe(\n tap(([params]) => {\n this.loading$.next(true);\n this._params = params;\n }),\n switchMap(([params]) =>\n !params\n ? of(null)\n : this.formFlowService.getFormFlowDefinitions(\n params.caseDefinitionKey,\n params.caseDefinitionVersionTag\n )\n ),\n map((formFlows: Page<ListFormFlowDefinition> | null) => {\n this.loading$.next(false);\n return !formFlows ? [] : formFlows.content;\n })\n );\n public readonly showAddModal$ = new BehaviorSubject<boolean>(false);\n\n public readonly params$ = getCaseManagementRouteParams(this.route);\n\n public readonly hasEditPermissions$: Observable<boolean> = this.params$.pipe(\n switchMap(params =>\n this.editPermissionsService.hasEditPermissions(\n params?.caseDefinitionKey,\n params?.caseDefinitionVersionTag\n )\n )\n );\n\n constructor(\n private readonly formFlowService: FormFlowService,\n private readonly globalNotificationService: GlobalNotificationService,\n private readonly route: ActivatedRoute,\n private readonly router: Router,\n private readonly translateService: TranslateService,\n private readonly editPermissionsService: EditPermissionsService\n ) {}\n\n public openAddModal(): void {\n this.showAddModal$.next(true);\n }\n\n public onAdd(formFlowDefinition: FormFlowDefinition | null): void {\n this.showAddModal$.next(false);\n\n if (!formFlowDefinition || !this._params) return;\n\n this.formFlowService\n .createFormFlowDefinition(\n this._params.caseDefinitionKey,\n this._params.caseDefinitionVersionTag,\n formFlowDefinition\n )\n .subscribe((formFlowDefinition: FormFlowDefinition) => {\n this.showAddModal$.next(false);\n this.router.navigate([formFlowDefinition.key], {relativeTo: this.route});\n });\n }\n\n public editFormFlowDetails(formFlowDefinition: ListFormFlowDefinition): void {\n this.router.navigate([formFlowDefinition.key], {relativeTo: this.route});\n }\n\n public deleteFormFlow(item: ListFormFlowDefinition): void {\n this.deleteDefinitionKey$.next(item.key);\n this.showDeleteModal$.next(true);\n }\n\n public onDelete(definitionKey: string): void {\n if (!this._params) return;\n\n this.formFlowService\n .deleteFormFlowDefinition(\n this._params.caseDefinitionKey,\n this._params.caseDefinitionVersionTag,\n definitionKey\n )\n .subscribe(() => {\n this.globalNotificationService.showToast({\n title: this.translateService.instant('interface.delete'),\n caption: this.translateService.instant('formFlow.deletedSuccessfully', {\n key: definitionKey,\n }),\n type: 'success',\n });\n this._refresh$.next(null);\n });\n }\n}\n","<!--\n ~ Copyright 2015-2025 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (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 ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\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<valtimo-carbon-list\n [actionItems]=\"ACTION_ITEMS\"\n [header]=\"false\"\n [items]=\"formFlowDefinitions$ | async\"\n [fields]=\"FIELDS\"\n [loading]=\"loading$ | async\"\n (rowClicked)=\"editFormFlowDetails($event)\"\n>\n <ng-container header> {{ 'formFlow.title' | translate }} </ng-container>\n\n <div carbonToolbarContent>\n <ng-container [ngTemplateOutlet]=\"addFormFlowButton\"></ng-container>\n </div>\n\n <valtimo-no-results\n [action]=\"addFormFlowButton\"\n description=\"{{ 'formFlow.noResults.description' | translate }}\"\n title=\"{{ 'formFlow.noResults.title' | translate }}\"\n ></valtimo-no-results>\n</valtimo-carbon-list>\n\n<valtimo-new-form-flow-modal\n [open]=\"showAddModal$ | async\"\n (closeEvent)=\"onAdd($event)\"\n></valtimo-new-form-flow-modal>\n\n<ng-template #addFormFlowButton>\n <button *ngIf=\"hasEditPermissions$ | async\" cdsButton=\"primary\" (click)=\"openAddModal()\">\n {{ 'formFlow.add' | translate }}\n\n <svg class=\"cds--btn__icon\" cdsIcon=\"add\" size=\"16\"></svg>\n </button>\n</ng-template>\n\n<valtimo-confirmation-modal\n confirmButtonTextTranslationKey=\"interface.delete\"\n confirmButtonType=\"danger\"\n contentTranslationKey=\"formFlow.deleteModalContent\"\n [outputOnConfirm]=\"deleteDefinitionKey$ | async\"\n [showModalSubject$]=\"showDeleteModal$\"\n titleTranslationKey=\"interface.delete\"\n (confirmEvent)=\"onDelete($event)\"\n></valtimo-confirmation-modal>\n","/*\n * Copyright 2015-2025 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (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 * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\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 {Injectable} from '@angular/core';\nimport {FormFlowEditorParams} from '../models';\n\n@Injectable({providedIn: 'root'})\nexport class FormFlowDownloadService {\n public downloadJson(json: object, params: FormFlowEditorParams): void {\n const sJson = JSON.stringify(json, null, 2);\n const element = document.createElement('a');\n element.setAttribute('href', 'data:text/json;charset=UTF-8,' + encodeURIComponent(sJson));\n element.setAttribute(\n 'download',\n `${params.caseDefinitionKey}-${params.caseDefinitionVersionTag}-${params.formFlowDefinitionKey}.formflow.json`\n );\n element.style.display = 'none';\n document.body.appendChild(element);\n element.click(); // simulate click\n document.body.removeChild(element);\n }\n}\n","/*\n * Copyright 2015-2026 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (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 * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\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\nimport {CommonModule} from '@angular/common';\nimport {ChangeDetectionStrategy, Component, EventEmitter, Input, Output} from '@angular/core';\nimport {EditorModel, EditorModule} from '@valtimo/components';\nimport {editor} from 'monaco-editor';\n\n@Component({\n standalone: true,\n selector: 'valtimo-form-flow-json-editor-tab',\n templateUrl: './form-flow-json-editor-tab.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [CommonModule, EditorModule],\n})\nexport class FormFlowJsonEditorTabComponent {\n @Input() public disabled: boolean | null = false;\n @Input() public model!: EditorModel;\n @Input() public schema: object | null = null;\n\n @Output() public validEvent = new EventEmitter<boolean>();\n @Output() public valueChangeEvent = new EventEmitter<string>();\n\n public readonly editorOptions: editor.IEditorOptions = {\n quickSuggestions: {other: true, comments: false, strings: true},\n };\n\n public onValid(valid: boolean): void {\n this.validEvent.emit(valid);\n }\n\n public onValueChange(value: string): void {\n this.valueChangeEvent.emit(value);\n }\n}\n","<!--\n ~ Copyright 2015-2026 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (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 ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\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@if (schema) {\n <valtimo-editor\n [disabled]=\"disabled ?? false\"\n [editorOptions]=\"editorOptions\"\n [fitPage]=\"true\"\n [jsonSchema]=\"schema\"\n [model]=\"model\"\n (validEvent)=\"onValid($event)\"\n (valueChangeEvent)=\"onValueChange($event)\"\n ></valtimo-editor>\n}\n","/*\n * Copyright 2015-2026 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (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 * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\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\nimport {Injectable} from '@angular/core';\nimport {\n AbstractControl,\n FormArray,\n FormBuilder,\n FormControl,\n FormGroup,\n ValidationErrors,\n ValidatorFn,\n Validators,\n} from '@angular/forms';\nimport {FormFlowRegistryDto} from '@valtimo/shared';\nimport {FormFlowDefinition, FormFlowNextStep, FormFlowStep} from '../models';\n\n/**\n * Builds and reads the reactive form tree that backs the visual form flow editor.\n *\n * The form mirrors the definition JSON: a `startStep` control and a `steps` array where every step\n * has its key, title, type (name plus a dynamic properties group driven by the registry),\n * transitions and the three expression lists. Serialization produces the same JSON contract the\n * JSON editor tab emits, so both tabs are interchangeable to the surrounding editor page.\n */\n@Injectable()\nexport class FormFlowEditorFormService {\n constructor(private readonly fb: FormBuilder) {}\n\n public buildDefinitionForm(\n definition: FormFlowDefinition,\n registry: FormFlowRegistryDto\n ): FormGroup {\n return this.fb.group(\n {\n startStep: this.fb.control(definition.startStep ?? '', Validators.required),\n steps: this.fb.array(\n (definition.steps ?? []).map(step => this.buildStepGroup(step, registry)),\n [uniqueStepKeysValidator]\n ),\n },\n {validators: [startStepExistsValidator, transitionTargetsExistValidator]}\n );\n }\n\n public buildStepGroup(step: FormFlowStep, registry: FormFlowRegistryDto): FormGroup {\n const typeName = step.type?.name ?? '';\n // The legacy single `nextStep` field is normalized into a `nextSteps` transition, mirroring\n // how the backend interprets it.\n const transitions =\n step.nextSteps ?? (step.nextStep ? [{step: step.nextStep} as FormFlowNextStep] : []);\n\n return this.fb.group({\n key: this.fb.control(step.key ?? '', Validators.required),\n title: this.fb.control(step.title ?? ''),\n typeName: this.fb.control(typeName, Validators.required),\n properties: this.buildPropertiesGroup(\n typeName,\n (step.type?.properties ?? {}) as Record<string, string>,\n registry\n ),\n nextSteps: this.fb.array(\n transitions.map(transition => this.buildTransitionGroup(transition)),\n [singleDefaultTransitionValidator]\n ),\n onOpen: this.buildExpressionArray(step.onOpen),\n onComplete: this.buildExpressionArray(step.onComplete),\n onBack: this.buildExpressionArray(step.onBack),\n });\n }\n\n public buildNewStepGroup(existingKeys: string[], registry: FormFlowRegistryDto): FormGroup {\n const defaultType =\n registry.stepTypes.find(stepType => stepType.name === 'form')?.name ??\n registry.stepTypes[0]?.name ??\n 'form';\n\n return this.buildStepGroup(\n {\n key: this.generateStepKey(existingKeys),\n type: {name: defaultType, properties: {}},\n nextSteps: [],\n },\n registry\n );\n }\n\n /**\n * Builds the dynamic properties group for a step type. Known types get one required control per\n * registry property; unknown (custom) types keep controls for whatever properties the loaded\n * definition already contained. Values for properties that exist in both the old and the new\n * type are preserved.\n */\n public buildPropertiesGroup(\n typeName: string,\n currentProperties: Record<string, string>,\n registry: FormFlowRegistryDto\n ): FormGroup {\n const registryStepType = registry.stepTypes.find(stepType => stepType.name === typeName);\n const propertyNames = registryStepType\n ? registryStepType.properties.map(property => property.name)\n : Object.keys(currentProperties);\n\n return this.fb.group(\n Object.fromEntries(\n propertyNames.map(name => [\n name,\n this.fb.control(currentProperties[name] ?? '', Validators.required),\n ])\n )\n );\n }\n\n public buildTransitionGroup(transition?: FormFlowNextStep): FormGroup {\n return this.fb.group({\n step: this.fb.control(transition?.step ?? '', Validators.required),\n condition: this.fb.control(transition?.condition ?? ''),\n });\n }\n\n public buildExpressionControl(expression = ''): FormControl {\n return this.fb.control(expression, Validators.required);\n }\n\n public serialize(form: FormGroup, definitionKey: string): FormFlowDefinition {\n const value = form.getRawValue();\n\n return {\n key: definitionKey,\n startStep: value.startStep,\n steps: (value.steps as StepFormValue[]).map(step => ({\n key: step.key,\n ...(step.title?.trim() ? {title: step.title.trim()} : {}),\n type: {\n name: step.typeName,\n properties: step.properties,\n },\n nextSteps: step.nextSteps.map(transition => ({\n step: transition.step,\n ...(transition.condition?.trim() ? {condition: transition.condition.trim()} : {}),\n })),\n onBack: step.onBack,\n onOpen: step.onOpen,\n onComplete: step.onComplete,\n })),\n };\n }\n\n /**\n * Rewrites every reference to a renamed step key: the start step and all transition targets.\n * Used while the user types a new key, so the definition stays internally consistent.\n */\n public renameStepReferences(form: FormGroup, oldKey: string, newKey: string): void {\n if (!oldKey || oldKey === newKey) return;\n\n const startStepControl = form.get('startStep');\n if (startStepControl?.value === oldKey) {\n startStepControl.setValue(newKey, {emitEvent: false});\n }\n\n this.getStepsArray(form).controls.forEach(stepGroup => {\n (stepGroup.get('nextSteps') as FormArray).controls.forEach(transitionGroup => {\n const stepControl = transitionGroup.get('step');\n if (stepControl?.value === oldKey) {\n stepControl.setValue(newKey, {emitEvent: false});\n }\n });\n });\n }\n\n public getStepsArray(form: FormGroup): FormArray {\n return form.get('steps') as FormArray;\n }\n\n private buildExpressionArray(expressions: string[] | undefined): FormArray {\n return this.fb.array(\n (expressions ?? []).map(expression => this.buildExpressionControl(expression))\n );\n }\n\n private generateStepKey(existingKeys: string[]): string {\n let index = existingKeys.length + 1;\n while (existingKeys.includes(`step-${index}`)) {\n index++;\n }\n\n return `step-${index}`;\n }\n}\n\ninterface StepFormValue {\n key: string;\n title: string;\n typeName: string;\n properties: Record<string, string>;\n nextSteps: Array<{step: string; condition: string}>;\n onOpen: string[];\n onComplete: string[];\n onBack: string[];\n}\n\n/** Marks duplicated step keys invalid on the `steps` array. */\nconst uniqueStepKeysValidator: ValidatorFn = (\n control: AbstractControl\n): ValidationErrors | null => {\n const keys = (control as FormArray).controls\n .map(stepGroup => (stepGroup.get('key')?.value ?? '').trim())\n .filter(key => key !== '');\n const duplicates = keys.filter((key, index) => keys.indexOf(key) !== index);\n\n return duplicates.length ? {duplicateStepKeys: {keys: [...new Set(duplicates)]}} : null;\n};\n\n/** The configured start step must reference an existing step. */\nconst startStepExistsValidator: ValidatorFn = (\n control: AbstractControl\n): ValidationErrors | null => {\n const startStep = control.get('startStep')?.value;\n if (!startStep) return null;\n\n const keys = (control.get('steps') as FormArray).controls.map(\n stepGroup => stepGroup.get('key')?.value\n );\n\n return keys.includes(startStep) ? null : {startStepMissing: {startStep}};\n};\n\n/** Every transition must point to an existing step. */\nconst transitionTargetsExistValidator: ValidatorFn = (\n control: AbstractControl\n): ValidationErrors | null => {\n const steps = (control.get('steps') as FormArray).controls;\n const keys = steps.map(stepGroup => stepGroup.get('key')?.value);\n\n const unknownTargets = steps.flatMap(stepGroup =>\n (stepGroup.get('nextSteps') as FormArray).controls\n .map(transitionGroup => transitionGroup.get('step')?.value)\n .filter(target => !!target && !keys.includes(target))\n );\n\n return unknownTargets.length\n ? {unknownTransitionTargets: {targets: [...new Set(unknownTargets)]}}\n : null;\n};\n\n/**\n * Transitions are evaluated in order and the first condition-less entry acts as the default, so at\n * most one transition per step may omit its condition.\n */\nconst singleDefaultTransitionValidator: ValidatorFn = (\n control: AbstractControl\n): ValidationErrors | null => {\n const defaultCount = (control as FormArray).controls.filter(\n transitionGroup => !(transitionGroup.get('condition')?.value ?? '').trim()\n ).length;\n\n return defaultCount > 1 ? {multipleDefaultTransitions: true} : null;\n};\n\nexport {\n uniqueStepKeysValidator,\n startStepExistsValidator,\n transitionTargetsExistValidator,\n singleDefaultTransitionValidator,\n};\n","/*\n * Copyright 2015-2026 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (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 * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\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\nimport {TranslateService} from '@ngx-translate/core';\n\n/**\n * Translates a key and falls back to the given value when no translation exists (ngx-translate\n * returns the key itself in that case). Used for registry-driven labels where only the well-known\n * entries have translations.\n */\nexport function translateWithFallback(\n translateService: TranslateService,\n key: string,\n fallback: string\n): string {\n const translation = translateService.instant(key);\n return translation === key ? fallback : translation;\n}\n","/*\n * Copyright 2015-2026 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (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 * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\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 * from './translate.utils';\n","/*\n * Copyright 2015-2026 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (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 * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\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\nimport {CommonModule} from '@angular/common';\nimport {ChangeDetectionStrategy, Component, Input} from '@angular/core';\nimport {TranslateModule, TranslateService} from '@ngx-translate/core';\nimport {FormFlowAdditionalPropertyDto, FormFlowRegistryDto} from '@valtimo/shared';\nimport {translateWithFallback} from '../../../../../utils';\n\ninterface ContextPropertyGroup {\n labelKey: string;\n properties: FormFlowAdditionalPropertyDto[];\n}\n\n/**\n * Lists the `additionalProperties` entries that expressions can rely on, grouped by how the form\n * flow is linked (user task or start event). The property names come from the form flow registry,\n * so this always matches what the backend actually provides.\n */\n@Component({\n standalone: true,\n selector: 'valtimo-form-flow-context-properties',\n templateUrl: './form-flow-context-properties.component.html',\n styleUrls: ['./form-flow-context-properties.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [CommonModule, TranslateModule],\n})\nexport class FormFlowContextPropertiesComponent {\n @Input() public set registry(registry: FormFlowRegistryDto | null) {\n const properties = registry?.additionalProperties ?? [];\n\n this.groups = [\n {labelKey: 'formFlow.uiEditor.additionalPropertiesUserTask', context: 'userTask'},\n {labelKey: 'formFlow.uiEditor.additionalPropertiesStartEvent', context: 'startEvent'},\n ]\n .map(group => ({\n labelKey: group.labelKey,\n properties: properties.filter(property => property.context === group.context),\n }))\n .filter(group => group.properties.length > 0);\n }\n\n public groups: ContextPropertyGroup[] = [];\n\n constructor(private readonly translateService: TranslateService) {}\n\n public getDescription(property: FormFlowAdditionalPropertyDto): string {\n return translateWithFallback(\n this.translateService,\n `formFlow.uiEditor.additionalProperties.${property.name}`,\n ''\n );\n }\n}\n","<!--\n ~ Copyright 2015-2026 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (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 ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\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@if (groups.length) {\n <div class=\"context-properties\">\n <p class=\"context-properties__title\">\n {{ 'formFlow.uiEditor.additionalPropertiesTitle' | translate }}\n </p>\n\n @for (group of groups; track group.labelKey) {\n <p class=\"context-properties__group\">{{ group.labelKey | translate }}</p>\n\n <ul>\n @for (property of group.properties; track property.name) {\n <li>\n <code>additionalProperties.{{ property.name }}</code>\n\n @if (!property.alwaysPresent) {\n <span class=\"context-properties__optional\">{{\n 'formFlow.uiEditor.additionalPropertiesOptional' | translate\n }}</span>\n }\n\n @if (getDescription(property)) {\n — {{ getDescription(property) }}\n }\n </li>\n }\n </ul>\n }\n </div>\n}\n","/*\n * Copyright 2015-2026 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (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 * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\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\nimport {CommonModule} from '@angular/common';\nimport {ChangeDetectionStrategy, Component, EventEmitter, Input, Output} from '@angular/core';\nimport {TranslateModule} from '@ngx-translate/core';\nimport {ValtimoCdsModalDirective} from '@valtimo/components';\nimport {FormFlowRegistryDto} from '@valtimo/shared';\nimport {ButtonModule, ModalModule} from 'carbon-components-angular';\nimport {FormFlowContextPropertiesComponent} from '../form-flow-context-properties/form-flow-context-properties.component';\n\n/**\n * Explains how SpEL expressions work in a form flow — conditions, action hooks and the data they\n * can access — in a modal, so the editor itself only needs a compact pointer to this help.\n */\n@Component({\n standalone: true,\n selector: 'valtimo-form-flow-expression-help-modal',\n templateUrl: './form-flow-expression-help-modal.component.html',\n styleUrls: ['./form-flow-expression-help-modal.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n CommonModule,\n TranslateModule,\n ButtonModule,\n ModalModule,\n ValtimoCdsModalDirective,\n FormFlowContextPropertiesComponent,\n ],\n})\nexport class FormFlowExpressionHelpModalComponent {\n @Input() public open = false;\n @Input() public registry: FormFlowRegistryDto | null = null;\n\n @Output() public closeEvent = new EventEmitter<void>();\n}\n","<!--\n ~ Copyright 2015-2026 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (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 ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\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<cds-modal\n size=\"md\"\n [open]=\"open\"\n [title]=\"'formFlow.uiEditor.help.title' | translate\"\n valtimoCdsModal\n (close)=\"closeEvent.emit()\"\n>\n <cds-modal-header [showCloseButton]=\"true\" (closeSelect)=\"closeEvent.emit()\">\n <h3 cdsModalHeaderHeading>{{ 'formFlow.uiEditor.help.title' | translate }}</h3>\n </cds-modal-header>\n\n <section cdsModalContent class=\"expression-help\">\n <p>{{ 'formFlow.uiEditor.help.intro' | translate }}</p>\n\n <h5>{{ 'formFlow.uiEditor.help.conditionsHeading' | translate }}</h5>\n\n <p>{{ 'formFlow.uiEditor.conditionExamplesTitle' | translate }}</p>\n\n <ul>\n <li>\n <code>{{ '${step.submissionData.age >= 21}' }}</code>\n — {{ 'formFlow.uiEditor.conditionExampleSubmission' | translate }}\n </li>\n\n <li>\n <code>{{ '${additionalProperties.documentId != null}' }}</code>\n — {{ 'formFlow.uiEditor.conditionExampleContext' | translate }}\n </li>\n </ul>\n\n <p>{{ 'formFlow.uiEditor.conditionExampleDefault' | translate }}</p>\n\n <h5>{{ 'formFlow.uiEditor.help.actionsHeading' | translate }}</h5>\n\n <p>{{ 'formFlow.uiEditor.help.actionsBody' | translate }}</p>\n\n <h5>{{ 'formFlow.uiEditor.help.dataHeading' | translate }}</h5>\n\n <valtimo-form-flow-context-properties\n [registry]=\"registry\"\n ></valtimo-form-flow-context-properties>\n </section>\n\n <cds-modal-footer>\n <button cdsButton=\"primary\" (click)=\"closeEvent.emit()\">\n {{ 'interface.close' | translate }}\n </button>\n </cds-modal-footer>\n</cds-modal>\n","/*\n * Copyright 2015-2026 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (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 * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\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\nimport {CommonModule} from '@angular/common';\nimport {ChangeDetectionStrategy, Component, Input} from '@angular/core';\nimport {FormArray, FormControl, ReactiveFormsModule} from '@angular/forms';\nimport {TranslateModule} from '@ngx-translate/core';\nimport {Add16, TrashCan16} from '@carbon/icons';\nimport {OverflowMenuComponent, OverflowMenuOptionComponent} from '@valtimo/components';\nimport {FormFlowExpressionMethodDto, FormFlowRegistryDto} from '@valtimo/shared';\nimport {ButtonModule, IconModule, IconService, InputModule} from 'carbon-components-angular';\nimport {FORM_FLOW_EDITOR_TEST_IDS} from '../../../../../constants';\nimport {FormFlowEditorFormService} from '../../../../../services/form-flow-editor-form.service';\n\ninterface ExpressionSuggestion {\n label: string;\n expression: string;\n}\n\n/**\n * Editable list of SpEL expressions for one of a step's lifecycle hooks (on open, on complete,\n * on back). The add-menu offers the expression beans from the form flow registry as ready-made\n * templates next to a blank expression.\n */\n@Component({\n standalone: true,\n selector: 'valtimo-form-flow-expression-list',\n templateUrl: './form-flow-expression-list.component.html',\n styleUrls: ['./form-flow-expression-list.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n CommonModule,\n ReactiveFormsModule,\n TranslateModule,\n ButtonModule,\n IconModule,\n InputModule,\n OverflowMenuComponent,\n OverflowMenuOptionComponent,\n ],\n})\nexport class FormFlowExpressionListComponent {\n @Input() public expressions!: FormArray;\n @Input() public label = '';\n @Input() public description = '';\n @Input() public readOnly: boolean | null = false;\n /** While false the admin is still modelling and empty-expression errors stay hidden; a save\n * attempt flips it to reveal them. */\n @Input() public revealErrors = false;\n\n @Input() public set registry(registry: FormFlowRegistryDto | null) {\n this.suggestions = (registry?.expressionBeans ?? []).flatMap(bean =>\n bean.methods.map(method => {\n const call = `${bean.name}.${this.formatMethod(method)}`;\n return {label: call, expression: `\\${${call}}`};\n })\n );\n }\n\n public suggestions: ExpressionSuggestion[] = [];\n\n protected readonly testIds = FORM_FLOW_EDITOR_TEST_IDS;\n\n constructor(\n private readonly formService: FormFlowEditorFormService,\n private readonly iconService: IconService\n ) {\n this.iconService.registerAll([Add16, TrashCan16]);\n }\n\n public get expressionControls(): FormControl[] {\n return this.expressions.controls as FormControl[];\n }\n\n public addExpression(expression = ''): void {\n this.expressions.push(this.formService.buildExpressionControl(expression));\n this.expressions.markAsDirty();\n }\n\n public removeExpression(index: number): void {\n this.expressions.removeAt(index);\n this.expressions.markAsDirty();\n }\n\n private formatMethod(method: FormFlowExpressionMethodDto): string {\n return `${method.name}(${method.parameters.map(parameter => parameter.name).join(', ')})`;\n }\n}\n","<!--\n ~ Copyright 2015-2026 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (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 ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\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 class=\"expression-list\">\n <div class=\"expression-list__header\">\n <h6>{{ label }}</h6>\n\n <p class=\"expression-list__description\">{{ description }}</p>\n </div>\n\n @for (control of expressionControls; track control; let index = $index) {\n <div class=\"expression-list__row\">\n <input\n cdsText\n [formControl]=\"control\"\n [invalid]=\"control.invalid && revealErrors\"\n [attr.data-test-id]=\"testIds.expressionInput\"\n placeholder=\"${valtimoFormFlow.completeTask(additionalProperties)}\"\n />\n\n @if (!readOnly) {\n <button\n cdsButton=\"ghost\"\n size=\"md\"\n [iconOnly]=\"true\"\n [attr.aria-label]=\"'interface.delete' | translate\"\n (click)=\"removeExpression(index)\"\n >\n <svg cdsIcon=\"trash-can\" size=\"16\"></svg>\n </button>\n }\n </div>\n } @empty {\n <p class=\"expression-list__empty\">{{ 'formFlow.uiEditor.noExpressions' | translate }}</p>\n }\n\n @if (!readOnly) {\n <div class=\"expression-list__add\">\n <v-overflow-menu placement=\"bottom-start\">\n <button\n cdsButton=\"tertiary\"\n size=\"sm\"\n overflowTrigger\n [attr.data-test-id]=\"testIds.addExpressionButton\"\n >\n {{ 'formFlow.uiEditor.addExpression' | translate }}\n\n <svg class=\"cds--btn__icon\" cdsIcon=\"add\" size=\"16\"></svg>\n </button>\n\n <v-overflow-menu-option (selected)=\"addExpression()\">{{\n 'formFlow.uiEditor.blankExpression' | translate\n }}</v-overflow-menu-option>\n\n @for (suggestion of suggestions; track suggestion.label) {\n <v-overflow-menu-option (selected)=\"addExpression(suggestion.expression)\">{{\n suggestion.label\n }}</v-overflow-menu-option>\n }\n </v-overflow-menu>\n </div>\n }\n</div>\n","/*\n * Copyright 2015-2026 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (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 * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\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\nimport {CommonModule} from '@angular/common';\nimport {ChangeDetectionStrategy, Component, Input, OnChanges, SimpleChanges} from '@angular/core';\nimport {FormArray, FormGroup, ReactiveFormsModule} from '@angular/forms';\nimport {TranslateModule} from '@ngx-translate/core';\nimport {Add16, ArrowDown16, ArrowUp16, TrashCan16} from '@carbon/icons';\nimport {TooltipIconModule} from '@valtimo/components';\nimport {\n ButtonModule,\n DropdownModule,\n IconModule,\n IconService,\n InputModule,\n ListItem,\n} from 'carbon-components-angular';\nimport {FORM_FLOW_EDITOR_TEST_IDS} from '../../../../../constants';\nimport {FormFlowEditorFormService} from '../../../../../services/form-flow-editor-form.service';\n\n/**\n * Editable list of a step's outgoing transitions. Transitions are evaluated top to bottom — the\n * first entry whose condition holds is taken and a condition-less entry acts as the default — so\n * the rows can be reordered.\n */\n@Component({\n standalone: true,\n selector: 'valtimo-form-flow-transition-list',\n templateUrl: './form-flow-transition-list.component.html',\n styleUrls: ['./form-flow-transition-list.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n CommonModule,\n ReactiveFormsModule,\n TranslateModule,\n ButtonModule,\n DropdownModule,\n IconModule,\n InputModule,\n TooltipIconModule,\n ],\n})\nexport class FormFlowTransitionListComponent implements OnChanges {\n @Input() public transitions!: FormArray;\n @Input() public stepKeys: string[] = [];\n @Input() public readOnly: boolean | null = false;\n /** While false the admin is still modelling and empty-target errors stay hidden; a save attempt\n * flips it to reveal them. */\n @Input() public revealErrors = false;\n\n protected readonly testIds = FORM_FLOW_EDITOR_TEST_IDS;\n\n // Per-row dropdown items, cached per transition group. The Carbon dropdown resets its visual\n // selection whenever its items array is swapped, so the array is only rebuilt when the step keys\n // or the row's own selection actually change.\n private readonly _rowItems = new WeakMap<\n FormGroup,\n {keys: string[]; value: string; items: ListItem[]}\n >();\n\n constructor(\n private readonly formService: FormFlowEditorFormService,\n private readonly iconService: IconService\n ) {\n this.iconService.registerAll([Add16, ArrowDown16, ArrowUp16, TrashCan16]);\n }\n\n public ngOnChanges(changes: SimpleChanges): void {\n if (changes['stepKeys']) {\n // A new keys reference invalidates every cached row; rows lazily rebuild on the next read.\n this.transitionGroups.forEach(group => this._rowItems.delete(group));\n }\n }\n\n public get transitionGroups(): FormGroup[] {\n return this.transitions.controls as FormGroup[];\n }\n\n public getRowItems(transitionGroup: FormGroup): ListItem[] {\n const value = transitionGroup.get('step')?.value ?? '';\n const cached = this._rowItems.get(transitionGroup);\n if (cached && cached.keys === this.stepKeys && cached.value === value) {\n return cached.items;\n }\n\n const items = this.stepKeys.map(key => ({content: key, id: key, selected: key === value}));\n this._rowItems.set(transitionGroup, {keys: this.stepKeys, value, items});\n return items;\n }\n\n public addTransition(): void {\n this.transitions.push(this.formService.buildTransitionGroup());\n this.transitions.markAsDirty();\n }\n\n public removeTransition(index: number): void {\n this.transitions.removeAt(index);\n this.transitions.markAsDirty();\n }\n\n public moveTransition(index: number, offset: -1 | 1): void {\n const target = index + offset;\n if (target < 0 || target >= this.transitions.length) return;\n\n const control = this.transitions.at(index);\n this.transitions.removeAt(index);\n this.transitions.insert(target, control);\n this.transitions.markAsDirty();\n }\n}\n","<!--\n ~ Copyright 2015-2026 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (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 ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\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 class=\"transition-list\">\n @for (transitionGroup of transitionGroups; track transitionGroup; let index = $index) {\n <div\n class=\"transition-list__row\"\n [formGroup]=\"transitionGroup\"\n [attr.data-test-id]=\"testIds.transitionRow\"\n >\n <div class=\"transition-list__target\">\n <cds-dropdown\n formControlName=\"step\"\n itemValueKey=\"id\"\n [invalid]=\"transitionGroup.get('step')?.invalid && revealErrors\"\n [label]=\"targetStepLabelTemplate\"\n [placeholder]=\"'formFlow.uiEditor.selectStep' | translate\"\n >\n <cds-dropdown-list [items]=\"getRowItems(transitionGroup)\"></cds-dropdown-list>\n </cds-dropdown>\n\n <ng-template #targetStepLabelTemplate>\n <span class=\"transition-list__label\">\n {{ 'formFlow.uiEditor.targetStep' | translate }}\n\n <v-tooltip-icon\n [tooltip]=\"'formFlow.uiEditor.fieldTooltips.targetStep' | translate\"\n ></v-tooltip-icon>\n </span>\n </ng-template>\n </div>\n\n <cds-label class=\"transition-list__condition\">\n <span class=\"transition-list__label\">\n {{ 'formFlow.uiEditor.condition' | translate }}\n\n <v-tooltip-icon\n [tooltip]=\"'formFlow.uiEditor.fieldTooltips.condition' | translate\"\n ></v-tooltip-icon>\n </span>\n\n <input\n cdsText\n formControlName=\"condition\"\n placeholder=\"{{ 'formFlow.uiEditor.conditionPlaceholder' | translate }}\"\n />\n </cds-label>\n\n @if (!readOnly) {\n <div class=\"transition-list__actions\">\n <button\n cdsButton=\"ghost\"\n size=\"md\"\n [iconOnly]=\"true\"\n [disabled]=\"index === 0\"\n [attr.aria-label]=\"'formFlow.uiEditor.moveUp' | translate\"\n (click)=\"moveTransition(index, -1)\"\n >\n <svg cdsIcon=\"arrow--up\" size=\"16\"></svg>\n </button>\n\n <button\n cdsButton=\"ghost\"\n size=\"md\"\n [iconOnly]=\"true\"\n [disabled]=\"index === transitionGroups.length - 1\"\n [attr.aria-label]=\"'formFlow.uiEditor.moveDown' | translate\"\n (click)=\"moveTransition(index, 1)\"\n >\n <svg cdsIcon=\"arrow--down\" size=\"16\"></svg>\n </button>\n\n <button\n cdsButton=\"ghost\"\n size=\"md\"\n [iconOnly]=\"true\"\n [attr.aria-label]=\"'interface.delete' | translate\"\n (click)=\"removeTransition(index)\"\n >\n <svg cdsIcon=\"trash-can\" size=\"16\"></svg>\n </button>\n </div>\n }\n </div>\n } @empty {\n <p class=\"transition-list__empty\">{{ 'formFlow.uiEditor.noTransitions' | translate }}</p>\n }\n\n @if (revealErrors && transitions.hasError('multipleDefaultTransitions')) {\n <p class=\"transition-list__error\">\n {{ 'formFlow.uiEditor.multipleDefaultTransitions' | translate }}\n </p>\n }\n\n @if (!readOnly) {\n <div>\n <button\n cdsButton=\"tertiary\"\n size=\"sm\"\n [attr.data-test-id]=\"testIds.addTransitionButton\"\n (click)=\"addTransition()\"\n >\n {{ 'formFlow.uiEditor.addTransition' | translate }}\n\n <svg class=\"cds--btn__icon\" cdsIcon=\"add\" size=\"16\"></svg>\n </button>\n </div>\n }\n</div>\n","/*\n * Copyright 2015-2026 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (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 * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\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\nimport {CommonModule} from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n EventEmitter,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n Output,\n signal,\n SimpleChanges,\n} from '@angular/core';\nimport {FormArray, FormGroup, ReactiveFormsModule} from '@angular/forms';\nimport {TranslateModule, TranslateService} from '@ngx-translate/core';\nimport {Flag16, TrashCan16} from '@carbon/icons';\nimport {FormFlowRegistryDto} from '@valtimo/shared';\nimport {TooltipIconModule} from '@valtimo/components';\nimport {\n ButtonModule,\n DropdownModule,\n IconModule,\n IconService,\n InputModule,\n LayerModule,\n ListItem,\n NotificationAction,\n NotificationModule,\n TagModule,\n} from 'carbon-components-angular';\nimport {Subscription} from 'rxjs';\nimport {FORM_FLOW_EDITOR_TEST_IDS} from '../../../../../constants';\nimport {FormFlowEditorFormService} from '../../../../../services/form-flow-editor-form.service';\nimport {translateWithFallback} from '../../../../../utils';\nimport {FormFlowExpressionHelpModalComponent} from '../form-flow-expression-help-modal/form-flow-expression-help-modal.component';\nimport {FormFlowExpressionListComponent} from '../form-flow-expression-list/form-flow-expression-list.component';\nimport {FormFlowTransitionListComponent} from '../form-flow-transition-list/form-flow-transition-list.component';\n\n/**\n * Detail editor for a single form flow step: its key, title, type with type-specific properties,\n * outgoing transitions and the three lifecycle expression lists.\n */\n@Component({\n standalone: true,\n selector: 'valtimo-form-flow-step-detail',\n templateUrl: './form-flow-step-detail.component.html',\n styleUrls: ['./form-flow-step-detail.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n CommonModule,\n ReactiveFormsModule,\n TranslateModule,\n ButtonModule,\n DropdownModule,\n IconModule,\n InputModule,\n LayerModule,\n NotificationModule,\n TagModule,\n TooltipIconModule,\n FormFlowExpressionHelpModalComponent,\n FormFlowExpressionListComponent,\n FormFlowTransitionListComponent,\n ],\n})\nexport class FormFlowStepDetailComponent implements OnInit, OnChanges, OnDestroy {\n @Input() public stepGroup!: FormGroup;\n @Input() public registry: FormFlowRegistryDto | null = null;\n @Input() public stepKeys: string[] = [];\n @Input() public formOptions: string[] = [];\n @Input() public componentOptions: string[] = [];\n @Input() public isStartStep = false;\n @Input() public readOnly: boolean | null = false;\n @Input() public duplicateKey = false;\n /** When false the admin is still modelling and required-field errors stay hidden; a save attempt\n * flips it to reveal them. */\n @Input() public revealErrors = false;\n\n @Output() public deleteStepEvent = new EventEmitter<void>();\n @Output() public makeStartEvent = new EventEmitter<void>();\n\n public stepTypeItems: ListItem[] = [];\n\n public readonly $showHelpModal = signal<boolean>(false);\n\n // The \"how do expressions work\" action on the inline help notifications, opening the modal that\n // holds the full explanation.\n public helpActions: NotificationAction[] = [];\n\n protected readonly testIds = FORM_FLOW_EDITOR_TEST_IDS;\n\n // Cached per property: the Carbon dropdown resets its visual selection whenever its items array\n // is swapped, so an array is only rebuilt when its options or its selection change.\n private readonly _selectItemsCache = new Map<\n string,\n {options: string[]; value: string; items: ListItem[]}\n >();\n\n private _typeSubscription = new Subscription();\n\n constructor(\n private readonly formService: FormFlowEditorFormService,\n private readonly iconService: IconService,\n private readonly translateService: TranslateService\n ) {\n this.iconService.registerAll([Flag16, TrashCan16]);\n }\n\n public ngOnInit(): void {\n this.helpActions = [\n {\n text: this.translateService.instant('formFlow.uiEditor.help.button'),\n click: () => this.$showHelpModal.set(true),\n },\n ];\n }\n\n public ngOnChanges(changes: SimpleChanges): void {\n if (changes['stepGroup'] || changes['registry'] || changes['componentOptions']) {\n this.buildStepTypeItems();\n }\n\n if (changes['stepGroup'] || changes['registry']) {\n this.openTypeSubscription();\n }\n }\n\n public ngOnDestroy(): void {\n this._typeSubscription.unsubscribe();\n }\n\n public get propertiesGroup(): FormGroup {\n return this.stepGroup.get('properties') as FormGroup;\n }\n\n public get propertyNames(): string[] {\n return Object.keys(this.propertiesGroup.controls);\n }\n\n public get transitions(): FormArray {\n return this.stepGroup.get('nextSteps') as FormArray;\n }\n\n public getExpressions(hook: 'onOpen' | 'onComplete' | 'onBack'): FormArray {\n return this.stepGroup.get(hook) as FormArray;\n }\n\n public isControlInvalid(name: string): boolean {\n const control = this.stepGroup.get(name);\n return !!control && control.invalid && this.revealErrors;\n }\n\n public getPropertyLabel(name: string): string {\n return translateWithFallback(\n this.translateService,\n `formFlow.uiEditor.properties.${name}`,\n name\n );\n }\n\n // The `definition` property of the built-in `form` step type references a form of the\n // surrounding case definition or building block, so it is offered as a choice list.\n public isFormDefinitionProperty(name: string): boolean {\n return name === 'definition' && this.formOptions.length > 0;\n }\n\n public getFormDefinitionItems(): ListItem[] {\n return this.getSelectItems('definition', this.formOptions);\n }\n\n // The `componentId` property of the built-in `custom-component` step type references an Angular\n // component registered by the implementation, so the registered ids are offered as a choice list.\n public isCustomComponentProperty(name: string): boolean {\n return name === 'componentId' && this.componentOptions.length > 0;\n }\n\n public getCustomComponentItems(): ListItem[] {\n return this.getSelectItems('componentId', this.componentOptions);\n }\n\n private getSelectItems(propertyName: string, options: string[]): ListItem[] {\n const value = this.propertiesGroup.get(propertyName)?.value ?? '';\n const cached = this._selectItemsCache.get(propertyName);\n if (cached && cached.options === options && cached.value === value) {\n return cached.items;\n }\n\n // A value that is no longer available stays selectable, so opening an older definition never\n // silently changes it.\n const names = options.includes(value) || !value ? options : [...options, value];\n const items = names.map(name => ({content: name, id: name, selected: name === value}));\n this._selectItemsCache.set(propertyName, {options, value, items});\n return items;\n }\n\n private buildStepTypeItems(): void {\n const registryTypeNames = (this.registry?.stepTypes ?? []).map(stepType => stepType.name);\n const currentTypeName = this.stepGroup?.get('typeName')?.value;\n const typeNames =\n currentTypeName && !registryTypeNames.includes(currentTypeName)\n ? [...registryTypeNames, currentTypeName]\n : registryTypeNames;\n\n this.stepTypeItems = typeNames.map(name => ({\n content: name,\n id: name,\n selected: name === currentTypeName,\n // `custom-component` steps need a component registered by the implementation; without any,\n // the type cannot be configured (unless the step already uses it).\n disabled:\n name === 'custom-component' &&\n this.componentOptions.length === 0 &&\n currentTypeName !== 'custom-component',\n }));\n }\n\n public getTypeTooltip(): string {\n const tooltip = this.translateService.instant('formFlow.uiEditor.fieldTooltips.type');\n\n return this.componentOptions.length === 0\n ? `${tooltip} ${this.translateService.instant('formFlow.uiEditor.fieldTooltips.typeNoComponents')}`\n : tooltip;\n }\n\n // Selecting another step type swaps the properties group for the controls that type needs,\n // keeping the values of properties both types share.\n private openTypeSubscription(): void {\n this._typeSubscription.unsubscribe();\n this._typeSubscription = new Subscription();\n\n if (!this.stepGroup || !this.registry) return;\n\n this._typeSubscription.add(\n this.stepGroup.get('typeName')?.valueChanges.subscribe(typeName => {\n const currentValues = this.propertiesGroup.getRawValue() as Record<string, string>;\n this.stepGroup.setControl(\n 'properties',\n this.formService.buildPropertiesGroup(typeName, currentValues, this.registry!)\n );\n })\n );\n }\n}\n","<!--\n ~ Copyright 2015-2026 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (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 ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\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 class=\"step-detail\" [cdsLayer]=\"1\" [formGroup]=\"stepGroup\">\n <div class=\"step-detail__header\">\n <div class=\"step-detail__heading\">\n <h5>{{ 'formFlow.uiEditor.stepDetails' | translate }}</h5>\n\n @if (isStartStep) {\n <cds-tag type=\"green\" size=\"sm\">{{ 'formFlow.uiEditor.startStep' | translate }}</cds-tag>\n }\n </div>\n\n @if (!readOnly) {\n <div class=\"step-detail__header-actions\">\n @if (!isStartStep) {\n <button\n cdsButton=\"tertiary\"\n size=\"sm\"\n [attr.data-test-id]=\"testIds.makeStartStepButton\"\n (click)=\"makeStartEvent.emit()\"\n >\n {{ 'formFlow.uiEditor.makeStartStep' | translate }}\n\n <svg class=\"cds--btn__icon\" cdsIcon=\"flag\" size=\"16\"></svg>\n </button>\n }\n\n <button\n cdsButton=\"danger--ghost\"\n size=\"sm\"\n [attr.data-test-id]=\"testIds.deleteStepButton\"\n (click)=\"deleteStepEvent.emit()\"\n >\n {{ 'formFlow.uiEditor.deleteStep' | translate }}\n\n <svg class=\"cds--btn__icon\" cdsIcon=\"trash-can\" size=\"16\"></svg>\n </button>\n </div>\n }\n </div>\n\n <div class=\"step-detail__grid\">\n <cds-label\n [invalid]=\"isControlInvalid('key') || (duplicateKey && revealErrors)\"\n [invalidText]=\"\n duplicateKey\n ? ('formFlow.uiEditor.duplicateKey' | translate)\n : ('formFlow.uiEditor.required' | translate)\n \"\n >\n <span class=\"step-detail__label\">\n {{ 'formFlow.key' | translate }}\n\n <v-tooltip-icon\n [tooltip]=\"'formFlow.uiEditor.fieldTooltips.key' | translate\"\n ></v-tooltip-icon>\n </span>\n\n <input\n cdsText\n formControlName=\"key\"\n [invalid]=\"isControlInvalid('key') || (duplicateKey && revealErrors)\"\n [attr.data-test-id]=\"testIds.stepKeyInput\"\n placeholder=\"{{ 'formFlow.uiEditor.keyPlaceholder' | translate }}\"\n />\n </cds-label>\n\n <cds-label>\n <span class=\"step-detail__label\">\n {{ 'formFlow.uiEditor.title' | translate }}\n\n <v-tooltip-icon\n [tooltip]=\"'formFlow.uiEditor.fieldTooltips.title' | translate\"\n ></v-tooltip-icon>\n </span>\n\n <input\n cdsText\n formControlName=\"title\"\n [attr.data-test-id]=\"testIds.stepTitleInput\"\n placeholder=\"{{ 'formFlow.uiEditor.titlePlaceholder' | translate }}\"\n />\n </cds-label>\n\n <div [attr.data-test-id]=\"testIds.stepTypeDropdown\">\n <cds-dropdown formControlName=\"typeName\" itemValueKey=\"id\" [label]=\"stepTypeLabelTemplate\">\n <cds-dropdown-list [items]=\"stepTypeItems\"></cds-dropdown-list>\n </cds-dropdown>\n\n <ng-template #stepTypeLabelTemplate>\n <span class=\"step-detail__label\">\n {{ 'formFlow.uiEditor.stepType' | translate }}\n\n <v-tooltip-icon [tooltip]=\"getTypeTooltip()\"></v-tooltip-icon>\n </span>\n </ng-template>\n </div>\n\n <ng-container formGroupName=\"properties\">\n @for (propertyName of propertyNames; track propertyName) {\n @if (isFormDefinitionProperty(propertyName)) {\n <div [attr.data-test-id]=\"testIds.stepPropertyDropdown\">\n <cds-dropdown\n formControlName=\"definition\"\n itemValueKey=\"id\"\n [invalid]=\"propertiesGroup.get('definition')?.invalid && revealErrors\"\n [label]=\"formDefinitionLabelTemplate\"\n [placeholder]=\"'formFlow.uiEditor.selectForm' | translate\"\n >\n <cds-dropdown-list [items]=\"getFormDefinitionItems()\"></cds-dropdown-list>\n </cds-dropdown>\n\n <ng-template #formDefinitionLabelTemplate>\n <span class=\"step-detail__label\">\n {{ getPropertyLabel(propertyName) }}\n\n <v-tooltip-icon\n [tooltip]=\"'formFlow.uiEditor.fieldTooltips.definition' | translate\"\n ></v-tooltip-icon>\n </span>\n </ng-template>\n </div>\n } @else if (isCustomComponentProperty(propertyName)) {\n <div [attr.data-test-id]=\"testIds.stepPropertyDropdown\">\n <cds-dropdown\n formControlName=\"componentId\"\n itemValueKey=\"id\"\n [invalid]=\"propertiesGroup.get('componentId')?.invalid && revealErrors\"\n [label]=\"componentIdLabelTemplate\"\n [placeholder]=\"'formFlow.uiEditor.selectComponent' | translate\"\n >\n <cds-dropdown-list [items]=\"getCustomComponentItems()\"></cds-dropdown-list>\n </cds-dropdown>\n\n <ng-template #componentIdLabelTemplate>\n <span class=\"step-detail__label\">\n {{ getPropertyLabel(propertyName) }}\n\n <v-tooltip-icon\n [tooltip]=\"'formFlow.uiEditor.fieldTooltips.componentId' | translate\"\n ></v-tooltip-icon>\n </span>\n </ng-template>\n </div>\n } @else {\n <cds-label\n [invalid]=\"propertiesGroup.get(propertyName)?.invalid && revealErrors\"\n [invalidText]=\"'formFlow.uiEditor.required' | translate\"\n >\n {{ getPropertyLabel(propertyName) }}\n\n <input\n cdsText\n [formControlName]=\"propertyName\"\n [invalid]=\"propertiesGroup.get(propertyName)?.invalid && revealErrors\"\n [attr.data-test-id]=\"testIds.stepPropertyInput\"\n />\n </cds-label>\n }\n }\n </ng-container>\n </div>\n\n <hr class=\"step-detail__divider\" />\n\n <section class=\"step-detail__section\">\n <div class=\"step-detail__section-header\">\n <h5>{{ 'formFlow.uiEditor.navigation' | translate }}</h5>\n\n <p class=\"step-detail__section-description\">\n {{ 'formFlow.uiEditor.navigationDescription' | translate }}\n </p>\n </div>\n\n <valtimo-form-flow-transition-list\n [readOnly]=\"readOnly\"\n [revealErrors]=\"revealErrors\"\n [stepKeys]=\"stepKeys\"\n [transitions]=\"transitions\"\n ></valtimo-form-flow-transition-list>\n\n <cds-actionable-notification\n class=\"step-detail__help-notification\"\n [notificationObj]=\"{\n type: 'info',\n lowContrast: true,\n showClose: false,\n title: 'formFlow.uiEditor.help.conditionsInlineTitle' | translate,\n message: 'formFlow.uiEditor.help.conditionsInlineMessage' | translate,\n actions: helpActions,\n }\"\n ></cds-actionable-notification>\n </section>\n\n <hr class=\"step-detail__divider\" />\n\n <section class=\"step-detail__section\">\n <div class=\"step-detail__section-header\">\n <h5>{{ 'formFlow.uiEditor.actions' | translate }}</h5>\n\n <p class=\"step-detail__section-description\">\n {{ 'formFlow.uiEditor.actionsDescription' | translate }}\n </p>\n </div>\n\n <cds-actionable-notification\n class=\"step-detail__help-notification\"\n [notificationObj]=\"{\n type: 'info',\n lowContrast: true,\n showClose: false,\n title: 'formFlow.uiEditor.help.actionsInlineTitle' | translate,\n message: 'formFlow.uiEditor.help.actionsInlineMessage' | translate,\n actions: helpActions,\n }\"\n ></cds-actionable-notification>\n\n <valtimo-form-flow-expression-list\n [description]=\"'formFlow.uiEditor.onOpenDescription' | translate\"\n [expressions]=\"getExpressions('onOpen')\"\n [label]=\"'formFlow.uiEditor.onOpen' | translate\"\n [readOnly]=\"readOnly\"\n [registry]=\"registry\"\n [revealErrors]=\"revealErrors\"\n ></valtimo-form-flow-expression-list>\n\n <valtimo-form-flow-expression-list\n [description]=\"'formFlow.uiEditor.onCompleteDescription' | translate\"\n [expressions]=\"getExpressions('onComplete')\"\n [label]=\"'formFlow.uiEditor.onComplete' | translate\"\n [readOnly]=\"readOnly\"\n [registry]=\"registry\"\n [revealErrors]=\"revealErrors\"\n ></valtimo-form-flow-expression-list>\n\n <valtimo-form-flow-expression-list\n [description]=\"'formFlow.uiEditor.onBackDescription' | translate\"\n [expressions]=\"getExpressions('onBack')\"\n [label]=\"'formFlow.uiEditor.onBack' | translate\"\n [readOnly]=\"readOnly\"\n [registry]=\"registry\"\n [revealErrors]=\"revealErrors\"\n ></valtimo-form-flow-expression-list>\n </section>\n\n <valtimo-form-flow-expression-help-modal\n [open]=\"$showHelpModal()\"\n [registry]=\"registry\"\n (closeEvent)=\"$showHelpModal.set(false)\"\n ></valtimo-form-flow-expression-help-modal>\n</div>\n","/*\n * Copyright 2015-2026 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (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 * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\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\nimport {CommonModule} from '@angular/common';\nimport {ChangeDetectionStrategy, Component, EventEmitter, Input, Output} from '@angular/core';\nimport {TranslateModule} from '@ngx-translate/core';\nimport {Add16, WarningFilled16} from '@carbon/icons';\nimport {ButtonModule, IconModule, IconService, TagModule} from 'carbon-components-angular';\nimport {FORM_FLOW_EDITOR_TEST_IDS} from '../../../../../constants';\n\ninterface FormFlowStepListItem {\n key: string;\n title: string;\n typeName: string;\n isStart: boolean;\n invalid: boolean;\n}\n\n/** Clickable overview of all steps in the flow, ordered as defined, with the start step first. */\n@Component({\n standalone: true,\n selector: 'valtimo-form-flow-step-list',\n templateUrl: './form-flow-step-list.component.html',\n styleUrls: ['./form-flow-step-list.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [CommonModule, TranslateModule, ButtonModule, IconModule, TagModule],\n})\nexport class FormFlowStepListComponent {\n @Input() public steps: FormFlowStepListItem[] = [];\n @Input() public selectedIndex: number | null = null;\n @Input() public readOnly: boolean | null = false;\n\n @Output() public selectEvent = new EventEmitter<number>();\n @Output() public addEvent = new EventEmitter<void>();\n\n protected readonly testIds = FORM_FLOW_EDITOR_TEST_IDS;\n\n constructor(private readonly iconService: IconService) {\n this.iconService.registerAll([Add16, WarningFilled16]);\n }\n}\n\nexport {FormFlowStepListItem};\n","<!--\n ~ Copyright 2015-2026 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (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 ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\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 class=\"step-list__header\">\n <span class=\"step-list__title\">{{ 'formFlow.uiEditor.stepsTitle' | translate }}</span>\n\n @if (!readOnly) {\n <button\n cdsButton=\"primary\"\n size=\"sm\"\n [attr.data-test-id]=\"testIds.addStepButton\"\n (click)=\"addEvent.emit()\"\n >\n {{ 'formFlow.uiEditor.addStep' | translate }}\n\n <svg class=\"cds--btn__icon\" cdsIcon=\"add\" size=\"16\"></svg>\n </button>\n }\n</div>\n\n<ul class=\"step-list__list\" [attr.data-test-id]=\"testIds.stepList\">\n @for (step of steps; track $index) {\n <li class=\"step-list__list-item\">\n <button\n class=\"step-list__item\"\n [class.step-list__item--selected]=\"selectedIndex === $index\"\n [attr.data-test-id]=\"testIds.stepListItem\"\n type=\"button\"\n (click)=\"selectEvent.emit($index)\"\n >\n <span class=\"step-list__item-heading\">\n <span class=\"step-list__item-key\" [title]=\"step.key\">{{ step.key }}</span>\n\n @if (step.invalid) {\n <svg\n class=\"step-list__item-warning\"\n cdsIcon=\"warning--filled\"\n size=\"16\"\n [attr.aria-label]=\"'formFlow.uiEditor.stepInvalid' | translate\"\n ></svg>\n }\n </span>\n\n @if (step.title) {\n <span class=\"step-list__item-title\">{{ step.title }}</span>\n }\n\n <span class=\"step-list__item-tags\">\n @if (step.isStart) {\n <cds-tag type=\"green\" size=\"sm\">{{\n 'formFlow.uiEditor.startStep' | translate\n }}</cds-tag>\n }\n\n <cds-tag type=\"blue\" size=\"sm\">{{ step.typeName }}</cds-tag>\n </span>\n </button>\n </li>\n }\n</ul>\n","/*\n * Copyright 2015-2026 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (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 * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\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\nimport {CommonModule} from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n EventEmitter,\n Input,\n OnChanges,\n OnDestroy,\n Output,\n signal,\n SimpleChanges,\n} from '@angular/core';\nimport {FormArray, FormGroup, ReactiveFormsModule} from '@angular/forms';\nimport {ActivatedRoute} from '@angular/router';\nimport {TranslateModule, TranslateService} from '@ngx-translate/core';\nimport {EditorModel, FitPageDirective} from '@valtimo/components';\nimport {FormDefinition, FormManagementService} from '@valtimo/form-management';\nimport {\n FormFlowRegistryDto,\n getBuildingBlockManagementRouteParams,\n getCaseManagementRouteParams,\n getContextObservable,\n} from '@valtimo/shared';\nimport {LoadingModule, NotificationModule} from 'carbon-components-angular';\nimport {catchError, map, of, Subscription, switchMap, take} from 'rxjs';\nimport {FORM_FLOW_EDITOR_TEST_IDS} from '../../../../constants';\nimport {FormFlowDefinition} from '../../../../models';\nimport {FormFlowService} from '../../../../services';\nimport {FormFlowComponentService} from '../../../../services/form-flow-component.service';\nimport {FormFlowEditorFormService} from '../../../../services/form-flow-editor-form.service';\nimport {FormFlowStepDetailComponent} from './form-flow-step-detail/form-flow-step-detail.component';\nimport {\n FormFlowStepListComponent,\n FormFlowStepListItem,\n} from './form-flow-step-list/form-flow-step-list.component';\n\n/**\n * The visual form flow editor. Renders the definition as a step list with a detail panel and emits\n * the modified definition as JSON through the same contract as the JSON editor tab, so the\n * surrounding editor page treats both tabs identically.\n */\n@Component({\n standalone: true,\n selector: 'valtimo-form-flow-ui-editor-tab',\n templateUrl: './form-flow-ui-editor-tab.component.html',\n styleUrls: ['./form-flow-ui-editor-tab.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [FormFlowEditorFormService],\n imports: [\n CommonModule,\n ReactiveFormsModule,\n TranslateModule,\n FitPageDirective,\n LoadingModule,\n NotificationModule,\n FormFlowStepDetailComponent,\n FormFlowStepListComponent,\n ],\n})\nexport class FormFlowUiEditorTabComponent implements OnChanges, OnDestroy {\n @Input() public model: EditorModel | null = null;\n @Input() public readOnly: boolean | null = false;\n /** The parent's save-attempt state: while false the admin is still modelling and no validation\n * errors are shown; a save attempt flips it and reveals them. */\n @Input() public revealErrors = false;\n\n @Output() public validEvent = new EventEmitter<boolean>();\n @Output() public valueChangeEvent = new EventEmitter<string>();\n\n public form: FormGroup | null = null;\n public registry: FormFlowRegistryDto | null = null;\n\n public readonly $selectedIndex = signal<number | null>(null);\n public readonly $stepListItems = signal<FormFlowStepListItem[]>([]);\n // Only replaced when the keys themselves change: the Carbon dropdown resets its visual\n // selection whenever its items array is swapped, so a stable reference prevents flicker while\n // typing in unrelated fields.\n public readonly $stepKeys = signal<string[]>([]);\n public readonly $formOptions = signal<string[]>([]);\n public readonly $componentOptions = signal<string[]>([]);\n public readonly $definitionErrors = signal<string[]>([]);\n public readonly $parseFailed = signal<boolean>(false);\n\n protected readonly testIds = FORM_FLOW_EDITOR_TEST_IDS;\n\n private _definition: FormFlowDefinition | null = null;\n private _definitionKey = '';\n private _previousStepKeys: string[] = [];\n private _formSubscriptions = new Subscription();\n private readonly _subscriptions = new Subscription();\n\n constructor(\n private readonly formService: FormFlowEditorFormService,\n private readonly formFlowService: FormFlowService,\n private readonly formFlowComponentService: FormFlowComponentService,\n private readonly formManagementService: FormManagementService,\n private readonly route: ActivatedRoute,\n private readonly translateService: TranslateService\n ) {\n this._subscriptions.add(\n this.formFlowService.getFormFlowRegistry().subscribe(registry => {\n this.registry = registry;\n this.buildForm();\n })\n );\n\n // The custom Angular components an implementation has registered for `custom-component`\n // steps. The editor offers their ids as choices.\n this._subscriptions.add(\n this.formFlowComponentService.supportedComponents$\n .pipe(take(1))\n .subscribe(components =>\n this.$componentOptions.set(components.map(component => component.id).sort())\n )\n );\n\n this.loadFormOptions();\n }\n\n public ngOnChanges(changes: SimpleChanges): void {\n if (changes['model']) {\n this.parseModel();\n this.buildForm();\n }\n\n if (changes['readOnly'] && !changes['readOnly'].firstChange) {\n this.applyReadOnly();\n }\n }\n\n public ngOnDestroy(): void {\n this._subscriptions.unsubscribe();\n this._formSubscriptions.unsubscribe();\n }\n\n public get selectedStepGroup(): FormGroup | null {\n const index = this.$selectedIndex();\n if (this.form === null || index === null) return null;\n\n return (this.stepsArray.controls[index] as FormGroup) ?? null;\n }\n\n public isSelectedKeyDuplicate(): boolean {\n const index = this.$selectedIndex();\n if (index === null) return false;\n\n const keys = this.stepsArray.controls.map(stepGroup => stepGroup.get('key')?.value);\n return keys.filter(key => key === keys[index]).length > 1;\n }\n\n public isSelectedStepStart(): boolean {\n return (\n !!this.selectedStepGroup &&\n this.selectedStepGroup.get('key')?.value === this.form?.get('startStep')?.value\n );\n }\n\n public onMakeStartStep(): void {\n const key = this.selectedStepGroup?.get('key')?.value;\n if (key) {\n this.form?.get('startStep')?.setValue(key);\n this.form?.get('startStep')?.markAsDirty();\n }\n }\n\n public onSelectStep(index: number): void {\n this.$selectedIndex.set(index);\n }\n\n public onAddStep(): void {\n if (!this.form || !this.registry) return;\n\n const existingKeys = this.stepsArray.controls.map(stepGroup => stepGroup.get('key')?.value);\n this.stepsArray.push(this.formService.buildNewStepGroup(existingKeys, this.registry));\n this.stepsArray.markAsDirty();\n this.$selectedIndex.set(this.stepsArray.length - 1);\n }\n\n public onDeleteStep(): void {\n const index = this.$selectedIndex();\n if (index === null || !this.form) return;\n\n const deletedKey = this.stepsArray.at(index).get('key')?.value;\n this.stepsArray.removeAt(index);\n this.stepsArray.markAsDirty();\n\n // Deleting the start step promotes the first remaining step, so the definition stays valid.\n const startStepControl = this.form.get('startStep');\n if (startStepControl?.value === deletedKey) {\n startStepControl.setValue(this.stepsArray.at(0)?.get('key')?.value ?? '');\n }\n\n if (this.stepsArray.length === 0) {\n this.$selectedIndex.set(null);\n } else {\n this.$selectedIndex.set(Math.min(index, this.stepsArray.length - 1));\n }\n }\n\n private get stepsArray(): FormArray {\n return this.formService.getStepsArray(this.form!);\n }\n\n private parseModel(): void {\n this._definition = null;\n this.$parseFailed.set(false);\n\n if (!this.model?.value) return;\n\n try {\n this._definition = JSON.parse(this.model.value) as FormFlowDefinition;\n this._definitionKey = this._definition.key;\n } catch {\n this.$parseFailed.set(true);\n }\n }\n\n private buildForm(): void {\n if (!this._definition || !this.registry) return;\n\n this._formSubscriptions.unsubscribe();\n this._formSubscriptions = new Subscription();\n\n this.form = this.formService.buildDefinitionForm(this._definition, this.registry);\n this._previousStepKeys = this.currentStepKeys();\n this.applyReadOnly();\n this.selectInitialStep();\n this.refreshDerivedState();\n\n // The initial emission is the container's clean baseline; every change after that re-emits the\n // serialized definition and its validity, mirroring the JSON editor tab.\n this.emitState();\n\n // Validity only changes together with values (validators run on value changes and the\n // readOnly enable/disable path suppresses events), so valueChanges alone keeps every derived\n // signal fresh.\n this._formSubscriptions.add(\n this.form.valueChanges.subscribe(() => {\n this.trackStepKeyRenames();\n this.refreshDerivedState();\n this.emitState();\n })\n );\n }\n\n private selectInitialStep(): void {\n const startStep = this._definition?.startStep;\n const startIndex = (this._definition?.steps ?? []).findIndex(step => step.key === startStep);\n\n if ((this._definition?.steps ?? []).length === 0) {\n this.$selectedIndex.set(null);\n return;\n }\n\n this.$selectedIndex.set(startIndex >= 0 ? startIndex : 0);\n }\n\n private applyReadOnly(): void {\n if (!this.form) return;\n\n if (this.readOnly) {\n this.form.disable({emitEvent: false});\n } else {\n this.form.enable({emitEvent: false});\n }\n }\n\n // Renaming a step key rewrites the start step and every transition that targeted the old key, so\n // the definition never breaks while typing a new key.\n private trackStepKeyRenames(): void {\n const currentKeys = this.currentStepKeys();\n\n if (currentKeys.length === this._previousStepKeys.length) {\n const changedIndices = currentKeys\n .map((key, index) => (key !== this._previousStepKeys[index] ? index : -1))\n .filter(index => index !== -1);\n\n if (changedIndices.length === 1) {\n const index = changedIndices[0];\n this.formService.renameStepReferences(\n this.form!,\n this._previousStepKeys[index],\n currentKeys[index]\n );\n }\n }\n\n this._previousStepKeys = currentKeys;\n }\n\n private currentStepKeys(): string[] {\n return this.stepsArray.controls.map(stepGroup => stepGroup.get('key')?.value ?? '');\n }\n\n private refreshDerivedState(): void {\n if (!this.form) return;\n\n const startStep = this.form.get('startStep')?.value;\n const keys = this.currentStepKeys();\n\n this.$stepListItems.set(\n this.stepsArray.controls.map(stepGroup => ({\n key: stepGroup.get('key')?.value ?? '',\n title: stepGroup.get('title')?.value ?? '',\n typeName: stepGroup.get('typeName')?.value ?? '',\n isStart: stepGroup.get('key')?.value === startStep,\n invalid: stepGroup.invalid,\n }))\n );\n\n if (!this.arraysEqual(keys, this.$stepKeys())) {\n this.$stepKeys.set(keys);\n }\n\n this.$definitionErrors.set(this.collectDefinitionErrors());\n }\n\n // Loads the form definitions of the surrounding case definition or building block, so the\n // `form` step type can offer them as choices instead of a free-text form key.\n private loadFormOptions(): void {\n this._subscriptions.add(\n getContextObservable(this.route)\n .pipe(\n take(1),\n switchMap(context => {\n if (context === 'buildingBlock') {\n return getBuildingBlockManagementRouteParams(this.route).pipe(\n take(1),\n switchMap(params =>\n this.formManagementService.queryFormDefinitionsBuildingBlock(\n params?.buildingBlockDefinitionKey ?? '',\n params?.buildingBlockDefinitionVersionTag ?? '',\n {size: 1000}\n )\n ),\n map(page => page.content)\n );\n }\n\n return getCaseManagementRouteParams(this.route).pipe(\n take(1),\n switchMap(params =>\n this.formManagementService.queryFormDefinitionsCase(\n params?.caseDefinitionKey ?? '',\n params?.caseDefinitionVersionTag ?? '',\n {size: 1000}\n )\n ),\n map(response => response.content as unknown as FormDefinition[])\n );\n }),\n map(formDefinitions =>\n [...new Set(formDefinitions.map(definition => definition.name).filter(Boolean))].sort()\n ),\n catchError(() => of([] as string[]))\n )\n .subscribe(names => this.$formOptions.set(names))\n );\n }\n\n private arraysEqual(left: string[], right: string[]): boolean {\n return left.length === right.length && left.every((value, index) => value === right[index]);\n }\n\n private collectDefinitionErrors(): string[] {\n const errors: string[] = [];\n const formErrors = this.form?.errors ?? {};\n const stepErrors = this.form?.get('steps')?.errors ?? {};\n\n if (stepErrors['duplicateStepKeys']) {\n errors.push(\n this.translateService.instant('formFlow.uiEditor.errors.duplicateKeys', {\n keys: stepErrors['duplicateStepKeys'].keys.join(', '),\n })\n );\n }\n\n if (formErrors['startStepMissing']) {\n errors.push(\n this.translateService.instant('formFlow.uiEditor.errors.startStepMissing', {\n startStep: formErrors['startStepMissing'].startStep,\n })\n );\n }\n\n if (formErrors['unknownTransitionTargets']) {\n errors.push(\n this.translateService.instant('formFlow.uiEditor.errors.unknownTargets', {\n targets: formErrors['unknownTransitionTargets'].targets.join(', '),\n })\n );\n }\n\n // A step can be invalid on its own — a missing type, an unselected form, an empty transition\n // target or expression — which the definition-level checks above never name. `invalid` (not\n // `!valid`) skips disabled controls, so a read-only flow is never reported as incomplete; this\n // mirrors the warning icon shown per step. The notification is only *shown* after a save attempt\n // (see `revealErrors` in the template), so collecting these stays quiet while modelling.\n (this.form?.get('steps') as FormArray | null)?.controls.forEach((stepGroup, index) => {\n if (!stepGroup.invalid) return;\n const key = (stepGroup.get('key')?.value ?? '').trim();\n errors.push(\n this.translateService.instant('formFlow.uiEditor.errors.stepIncomplete', {\n step: key || `#${index + 1}`,\n })\n );\n });\n\n return errors;\n }\n\n private emitState(): void {\n if (!this.form) return;\n\n const definition = this.formService.serialize(this.form, this._definitionKey);\n this.valueChangeEvent.emit(JSON.stringify(definition));\n this.validEvent.emit(this.form.valid);\n }\n}\n","<!--\n ~ Copyright 2015-2026 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (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 ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\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@if ($parseFailed()) {\n <div class=\"ui-editor__notification\">\n <cds-inline-notification\n [notificationObj]=\"{\n type: 'warning',\n title: 'formFlow.uiEditor.parseFailedTitle' | translate,\n message: 'formFlow.uiEditor.parseFailedMessage' | translate,\n showClose: false,\n lowContrast: true,\n }\"\n ></cds-inline-notification>\n </div>\n} @else if (form && registry) {\n <div [formGroup]=\"form\">\n <!-- fitPage sizes this container to the viewport; the notification, sidebar and panel all live\n inside it, so toggling the notification reflows the body instead of shifting the container's\n top offset (which fitPage only re-measures on a header change or resize). -->\n <div class=\"ui-editor\" fitPage>\n @if (revealErrors && $definitionErrors().length) {\n <div class=\"ui-editor__notification\">\n <cds-inline-notification\n [notificationObj]=\"{\n type: 'error',\n title: 'formFlow.uiEditor.errors.title' | translate,\n message: $definitionErrors().join(' '),\n showClose: false,\n lowContrast: true,\n }\"\n ></cds-inline-notification>\n </div>\n }\n\n <div class=\"ui-editor__body\">\n <aside class=\"ui-editor__sidebar\">\n <valtimo-form-flow-step-list\n [readOnly]=\"readOnly\"\n [selectedIndex]=\"$selectedIndex()\"\n [steps]=\"$stepListItems()\"\n (addEvent)=\"onAddStep()\"\n (selectEvent)=\"onSelectStep($event)\"\n ></valtimo-form-flow-step-list>\n </aside>\n\n <div class=\"ui-editor__panel\">\n @if (selectedStepGroup; as stepGroup) {\n <valtimo-form-flow-step-detail\n [componentOptions]=\"$componentOptions()\"\n [duplicateKey]=\"isSelectedKeyDuplicate()\"\n [formOptions]=\"$formOptions()\"\n [isStartStep]=\"isSelectedStepStart()\"\n [readOnly]=\"readOnly\"\n [registry]=\"registry\"\n [revealErrors]=\"revealErrors\"\n [stepGroup]=\"stepGroup\"\n [stepKeys]=\"$stepKeys()\"\n (deleteStepEvent)=\"onDeleteStep()\"\n (makeStartEvent)=\"onMakeStartStep()\"\n ></valtimo-form-flow-step-detail>\n } @else {\n <div class=\"ui-editor__empty\">\n <h5 class=\"ui-editor__empty-title\">\n {{ 'formFlow.uiEditor.noStepsTitle' | translate }}\n </h5>\n\n <p class=\"ui-editor__empty-message\">\n {{ 'formFlow.uiEditor.noStepsDescription' | translate }}\n </p>\n </div>\n }\n </div>\n </div>\n </div>\n </div>\n} @else {\n <div class=\"ui-editor__loading\">\n <cds-loading></cds-loading>\n </div>\n}\n","/*\n * Copyright 2015-2025 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (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 * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\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 {\n ChangeDetectionStrategy,\n Component,\n OnDestroy,\n QueryList,\n signal,\n ViewChildren,\n} from '@angular/core';\nimport {ActivatedRoute, Router} from '@angular/router';\nimport {ArrowLeft16} from '@carbon/icons';\nimport {TranslateService} from '@ngx-translate/core';\nimport {\n BreadcrumbService,\n EditorModel,\n PageHeaderService,\n PageTitleService,\n PendingChangesComponent,\n} from '@valtimo/components';\nimport {\n getBuildingBlockManagementRouteParams,\n getCaseManagementRouteParams,\n getContextObservable,\n GlobalNotificationService,\n ManagementContext,\n} from '@valtimo/shared';\nimport {IconService, Tab} from 'carbon-components-angular';\nimport {\n BehaviorSubject,\n combineLatest,\n finalize,\n map,\n Observable,\n shareReplay,\n switchMap,\n take,\n tap,\n} from 'rxjs';\nimport {FORM_FLOW_EDITOR_TEST_IDS} from '../../constants';\nimport {\n FormFlowDefinition,\n FormFlowEditorParams,\n FormFlowEditorTab,\n FormFlowRouteParams,\n} from '../../models';\nimport {FormFlowService} from '../../services';\nimport {FormFlowDownloadService} from '../../services/form-flow-download.service';\n\n@Component({\n standalone: false,\n templateUrl: './form-flow-editor.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n styleUrls: ['./form-flow-editor.component.scss'],\n})\nexport class FormFlowEditorComponent extends PendingChangesComponent implements OnDestroy {\n // The Carbon tab headers, used to restore the highlighted header when a leave-page prompt is\n // cancelled (Carbon highlights the clicked header immediately, before the guard resolves).\n @ViewChildren(Tab) private _tabs!: QueryList<Tab>;\n\n public readonly readOnly$ = new BehaviorSubject<boolean>(false);\n public readonly valid$ = new BehaviorSubject<boolean>(false);\n public readonly loading$ = new BehaviorSubject<boolean>(true);\n public readonly showDeleteModal$ = new BehaviorSubject<boolean>(false);\n\n public readonly $activeTab = signal<FormFlowEditorTab>(FormFlowEditorTab.JSON_EDITOR);\n // Validate-on-save: while the admin is modelling nothing is flagged. Clicking Save on an invalid\n // definition flips this instead of calling the backend, which reveals the errors in the active\n // tab and — from then on — gates the Save button on validity until the definition is fixed.\n public readonly $saveAttempted = signal<boolean>(false);\n\n protected readonly FormFlowEditorTab = FormFlowEditorTab;\n protected readonly testIds = FORM_FLOW_EDITOR_TEST_IDS;\n\n private readonly _context$: Observable<ManagementContext | null> = getContextObservable(\n this.route\n );\n\n private readonly _params$: Observable<FormFlowEditorParams> = this._context$.pipe(\n switchMap(context => {\n if (context === 'buildingBlock') {\n return combineLatest([\n getBuildingBlockManagementRouteParams(this.route),\n this.route.params as Observable<FormFlowRouteParams>,\n ]).pipe(\n map(([bbParams, params]) => ({\n caseDefinitionKey: bbParams?.buildingBlockDefinitionKey ?? '',\n caseDefinitionVersionTag: bbParams?.buildingBlockDefinitionVersionTag ?? '',\n formFlowDefinitionKey: params.formFlowDefinitionKey,\n }))\n );\n }\n\n return combineLatest([\n getCaseManagementRouteParams(this.route),\n this.route.params as Observable<FormFlowRouteParams>,\n ]).pipe(\n map(([caseManagementParams, params]) => ({\n ...(caseManagementParams ?? {caseDefinitionKey: '', caseDefinitionVersionTag: ''}),\n ...params,\n }))\n );\n })\n );\n\n public readonly formFlowSchemaJson$: Observable<object> = this.formFlowService\n .getFormFlowDefinitionSchema()\n .pipe(shareReplay(1));\n\n private readonly _formFlowDefinition2$ = combineLatest([this._params$, this._context$]).pipe(\n tap(() => this.loading$.next(true)),\n switchMap(([params, context]) => {\n this.initBreadcrumbs(params, context);\n\n if (context === 'buildingBlock') {\n return this.formFlowService.getBuildingBlockFormFlowDefinitionByKey(\n params.caseDefinitionKey,\n params.caseDefinitionVersionTag,\n params.formFlowDefinitionKey\n );\n }\n\n return this.formFlowService.getFormFlowDefinitionByKey(\n params.caseDefinitionKey,\n params.caseDefinitionVersionTag,\n params.formFlowDefinitionKey\n );\n }),\n tap((formFlowDefinition: FormFlowDefinition) => {\n this.pageTitleService.setCustomPageTitle(formFlowDefinition.key);\n this.readOnly$.next(formFlowDefinition.readOnly === true);\n this.loading$.next(false);\n\n // A freshly loaded definition is the clean baseline: the next editor emission recaptures it,\n // saving without edits is possible from either tab, and the unsaved-changes flag is cleared.\n this._updatedModelValue$.next(this.serializeDefinition(formFlowDefinition));\n this._pendingBaseline = null;\n this.pendingChanges = false;\n this.valid$.next(true);\n // A reloaded definition starts a fresh modelling session; drop any prior save-attempt state.\n this.$saveAttempted.set(false);\n })\n );\n public readonly model$: Observable<EditorModel> = this._formFlowDefinition2$.pipe(\n map((formFlowDefinition: FormFlowDefinition) => this.getEditorModel(formFlowDefinition))\n );\n\n private readonly _updatedModelValue$ = new BehaviorSubject<string>('');\n // The editor's serialized value captured on (re)load. Edits that differ from it mark the editor\n // dirty so the leave-page guard can warn about unsaved changes.\n private _pendingBaseline: string | null = null;\n\n public readonly compactMode$ = this.pageHeaderService.compactMode$;\n\n constructor(\n private readonly breadcrumbService: BreadcrumbService,\n private readonly formFlowDownloadService: FormFlowDownloadService,\n private readonly formFlowService: FormFlowService,\n private readonly iconService: IconService,\n private readonly notificationService: GlobalNotificationService,\n private readonly pageHeaderService: PageHeaderService,\n private readonly pageTitleService: PageTitleService,\n private readonly route: ActivatedRoute,\n private readonly router: Router,\n private readonly translateService: TranslateService\n ) {\n super();\n this.iconService.registerAll([ArrowLeft16]);\n this.pageTitleService.disableReset();\n this.restoreActiveTabFromUrl();\n }\n\n public ngOnDestroy(): void {\n this.pendingChanges = false;\n this.pageTitleService.enableReset();\n this.breadcrumbService.clearThirdBreadcrumb();\n this.breadcrumbService.clearFourthBreadcrumb();\n }\n\n public onValid(valid: boolean): void {\n this.valid$.next(valid);\n }\n\n public onValueChange(value: string): void {\n // The first emission after a (re)load is the editor's baseline. Comparison is done on the\n // normalized (whitespace-insensitive) JSON so the JSON editor's format-on-load reflow is not\n // mistaken for an edit; only a genuine content change marks the editor dirty.\n const normalized = this.normalizeJson(value);\n if (this._pendingBaseline === null) {\n this._pendingBaseline = normalized;\n this.pendingChanges = false;\n } else {\n this.pendingChanges = normalized !== this._pendingBaseline;\n }\n\n this._updatedModelValue$.next(value);\n }\n\n public setActiveTab(tab: FormFlowEditorTab): void {\n if (this.$activeTab() === tab) return;\n\n combineLatest([this._params$, this._context$])\n .pipe(take(1))\n .subscribe(([params, context]) => {\n this.router.navigate(this.editorRouteSegments(params, context, tab));\n });\n }\n\n protected override onCancelRedirect(): void {\n this.syncTabHeaders();\n }\n\n public updateFormFlowDefinition(): void {\n // Validate on the click: while modelling nothing is flagged, so clicking Save on an invalid\n // definition reveals its errors (via $saveAttempted → the tabs' revealErrors) instead of\n // sending it to the backend. From here on the Save button gates on validity until it is fixed.\n if (!this.valid$.value) {\n this.$saveAttempted.set(true);\n return;\n }\n\n this.loading$.next(true);\n\n combineLatest([this._params$, this._updatedModelValue$, this._context$])\n .pipe(\n take(1),\n switchMap(([params, updatedModelValue, context]) => {\n const updatedDefinition = {\n ...(JSON.parse(updatedModelValue) as FormFlowDefinition),\n key: params.formFlowDefinitionKey,\n };\n\n if (context === 'buildingBlock') {\n return this.formFlowService.updateBuildingBlockFormFlowDefinition(\n params.caseDefinitionKey,\n params.caseDefinitionVersionTag,\n params.formFlowDefinitionKey,\n updatedDefinition\n );\n }\n\n return this.formFlowService.updateFormFlowDefinition(\n params.caseDefinitionKey,\n params.caseDefinitionVersionTag,\n params.formFlowDefinitionKey,\n updatedDefinition\n );\n }),\n finalize(() => this.loading$.next(false))\n )\n .subscribe(result => {\n // The saved value is the new clean baseline for the leave-page guard.\n this._pendingBaseline = this.normalizeJson(this._updatedModelValue$.getValue());\n this.pendingChanges = false;\n this.$saveAttempted.set(false);\n this.showSuccessMessage(result.key);\n });\n }\n\n public onDelete(): void {\n this.loading$.next(true);\n this.pendingChanges = false;\n\n combineLatest([this._params$, this._context$])\n .pipe(\n take(1),\n switchMap(([params, context]) => {\n if (context === 'buildingBlock') {\n return this.formFlowService\n .deleteBuildingBlockFormFlowDefinition(\n params.caseDefinitionKey,\n params.caseDefinitionVersionTag,\n params.formFlowDefinitionKey\n )\n .pipe(map(() => ({params, context})));\n }\n\n return this.formFlowService\n .deleteFormFlowDefinition(\n params.caseDefinitionKey,\n params.caseDefinitionVersionTag,\n params.formFlowDefinitionKey\n )\n .pipe(map(() => ({params, context})));\n })\n )\n .subscribe(({params, context}) => {\n this.router.navigate(this.overviewRouteSegments(params, context));\n });\n }\n\n public showDeleteModal(): void {\n this.showDeleteModal$.next(true);\n }\n\n public downloadFormFlowDefinition(model: EditorModel): void {\n this._params$\n .pipe(take(1))\n .subscribe((params: FormFlowEditorParams) =>\n this.formFlowDownloadService.downloadJson(JSON.parse(model.value), params)\n );\n }\n\n public navigateBack(): void {\n combineLatest([this._params$, this._context$])\n .pipe(take(1))\n .subscribe(([params, context]) => {\n this.router.navigate(this.overviewRouteSegments(params, context));\n });\n }\n\n private restoreActiveTabFromUrl(): void {\n const url = this.route.snapshot.url;\n const lastSegment = url[url.length - 1]?.path;\n if (lastSegment === 'editor') {\n this.$activeTab.set(FormFlowEditorTab.EDITOR);\n }\n }\n\n // The Carbon tab header highlights the clicked tab immediately; if the leave-page prompt is\n // cancelled, restore the highlight to the tab that is actually still active.\n private syncTabHeaders(): void {\n const order = [FormFlowEditorTab.JSON_EDITOR, FormFlowEditorTab.EDITOR];\n this._tabs?.forEach((tab, index) => {\n tab.active = order[index] === this.$activeTab();\n });\n }\n\n private editorRouteSegments(\n params: FormFlowEditorParams,\n context: ManagementContext | null,\n tab: FormFlowEditorTab\n ): string[] {\n const segments = [...this.overviewRouteSegments(params, context), params.formFlowDefinitionKey];\n\n return tab === FormFlowEditorTab.EDITOR ? [...segments, 'editor'] : segments;\n }\n\n private overviewRouteSegments(\n params: FormFlowEditorParams,\n context: ManagementContext | null\n ): string[] {\n if (context === 'buildingBlock') {\n return [\n '/building-block-management',\n 'building-block',\n params.caseDefinitionKey,\n 'version',\n params.caseDefinitionVersionTag,\n 'form-flows',\n ];\n }\n\n return [\n '/case-management',\n 'case',\n params.caseDefinitionKey,\n 'version',\n params.caseDefinitionVersionTag,\n 'form-flows',\n ];\n }\n\n private serializeDefinition(formFlowDefinition: FormFlowDefinition): string {\n const clone = {...formFlowDefinition};\n delete clone.readOnly;\n return JSON.stringify(clone);\n }\n\n private getEditorModel(formFlowDefinition: FormFlowDefinition): EditorModel {\n return {\n value: this.serializeDefinition(formFlowDefinition),\n language: 'json',\n uri: `inmemory://form-flow/${formFlowDefinition.key}.formflow.json`,\n };\n }\n\n // Canonicalizes a JSON string by dropping insignificant whitespace, so reformatting (such as the\n // JSON editor's format-on-load) does not register as a change. Invalid JSON is compared as-is.\n private normalizeJson(value: string): string {\n try {\n return JSON.stringify(JSON.parse(value));\n } catch {\n return value;\n }\n }\n\n private showSuccessMessage(formFlowDefinitionKey: string): void {\n this.notificationService.showToast({\n caption: this.translateService.instant('formFlow.savedSuccessTitleMessage', {\n key: formFlowDefinitionKey,\n }),\n type: 'success',\n title: this.translateService.instant('formFlow.savedSuccessTitle'),\n });\n }\n\n private initBreadcrumbs(params: FormFlowEditorParams, context: ManagementContext | null): void {\n if (context === 'buildingBlock') {\n const route = `/building-block-management/building-block/${params.caseDefinitionKey}/version/${params.caseDefinitionVersionTag}`;\n const generalRoute = `${route}/general`;\n\n this.breadcrumbService.setThirdBreadcrumb({\n route: [generalRoute],\n content: `${params.caseDefinitionKey} (${params.caseDefinitionVersionTag})`,\n href: generalRoute,\n });\n\n const routeWithFormFlows = `${route}/form-flows`;\n\n // The breadcrumb service translates this key on render (and re-translates on load / language\n // switch), so a direct page load shows the label, not the raw key.\n this.breadcrumbService.setFourthBreadcrumb({\n route: [routeWithFormFlows],\n content: 'buildingBlockManagement.tabs.formFlows',\n href: routeWithFormFlows,\n });\n } else {\n const route = `/case-management/case/${params.caseDefinitionKey}/version/${params.caseDefinitionVersionTag}`;\n\n this.breadcrumbService.setThirdBreadcrumb({\n route: [route],\n content: `${params.caseDefinitionKey} (${params.caseDefinitionVersionTag})`,\n href: route,\n });\n\n const routeWithFormFlows = `${route}/form-flows`;\n\n this.breadcrumbService.setFourthBreadcrumb({\n route: [routeWithFormFlows],\n content: 'caseManagement.tabs.formFlows',\n href: routeWithFormFlows,\n });\n }\n }\n}\n","<!--\n ~ Copyright 2015-2025 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (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 ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\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=\"model$ | async as model; else loading\">\n <!-- The headers only switch the active tab; the tab content is rendered below (gated by the\n active-tab signal) instead of inside the Carbon tab panes. Carbon removes a pane's content\n as soon as another header is clicked, which would destroy the editor's unsaved form before\n the leave-page confirmation is resolved. -->\n <cds-tabs type=\"contained\">\n <cds-tab\n [active]=\"$activeTab() === FormFlowEditorTab.JSON_EDITOR\"\n [heading]=\"'formFlow.tabs.jsonEditor' | translate\"\n (selected)=\"setActiveTab(FormFlowEditorTab.JSON_EDITOR)\"\n ></cds-tab>\n\n <cds-tab\n [active]=\"$activeTab() === FormFlowEditorTab.EDITOR\"\n [heading]=\"'formFlow.tabs.editor' | translate\"\n (selected)=\"setActiveTab(FormFlowEditorTab.EDITOR)\"\n ></cds-tab>\n </cds-tabs>\n\n <!-- White surface for the tab content. The Carbon tab pane used to provide this; since the\n content is rendered outside the panes, the wrapper supplies the layer background. -->\n <div class=\"form-flow-editor__content\">\n @if ($activeTab() === FormFlowEditorTab.EDITOR) {\n <valtimo-form-flow-ui-editor-tab\n [model]=\"model\"\n [readOnly]=\"readOnly$ | async\"\n [revealErrors]=\"$saveAttempted()\"\n (validEvent)=\"onValid($event)\"\n (valueChangeEvent)=\"onValueChange($event)\"\n ></valtimo-form-flow-ui-editor-tab>\n }\n\n @if ($activeTab() === FormFlowEditorTab.JSON_EDITOR) {\n <valtimo-form-flow-json-editor-tab\n [disabled]=\"(loading$ | async) === false && (readOnly$ | async)\"\n [model]=\"model\"\n [schema]=\"formFlowSchemaJson$ | async\"\n (validEvent)=\"onValid($event)\"\n (valueChangeEvent)=\"onValueChange($event)\"\n ></valtimo-form-flow-json-editor-tab>\n }\n </div>\n</ng-container>\n\n<ng-container renderInPageHeader>\n <ng-template>\n <div\n *ngIf=\"{\n compactMode: compactMode$ | async,\n valid: valid$ | async,\n readOnly: readOnly$ | async,\n model: model$ | async,\n } as obs\"\n class=\"buttons-container\"\n >\n <v-overflow-menu placement=\"bottom-end\">\n <v-overflow-menu-trigger overflowTrigger></v-overflow-menu-trigger>\n <v-overflow-menu-option\n [disabled]=\"!obs.valid && !obs.readOnly\"\n (selected)=\"downloadFormFlowDefinition(obs.model)\"\n >{{ 'interface.export' | translate }}\n </v-overflow-menu-option>\n\n <v-overflow-menu-option\n [disabled]=\"obs.readOnly\"\n type=\"danger\"\n (selected)=\"showDeleteModal()\"\n >{{ 'interface.delete' | translate }}\n </v-overflow-menu-option>\n </v-overflow-menu>\n\n <button\n cdsButton=\"secondary\"\n [size]=\"obs.compactMode ? 'sm' : 'md'\"\n [attr.data-test-id]=\"testIds.backButton\"\n (click)=\"navigateBack()\"\n >\n {{ 'interface.back' | translate }}\n\n <svg class=\"cds--btn__icon\" cdsIcon=\"arrow--left\" size=\"16\"></svg>\n </button>\n\n <button\n [disabled]=\"obs.readOnly || ($saveAttempted() && !obs.valid)\"\n cdsButton=\"primary\"\n [size]=\"obs.compactMode ? 'sm' : 'md'\"\n [attr.data-test-id]=\"testIds.saveButton\"\n (click)=\"updateFormFlowDefinition()\"\n >\n {{ 'interface.save' | translate }}\n\n <svg class=\"cds--btn__icon\" cdsIcon=\"save\" size=\"16\"></svg>\n </button>\n </div>\n </ng-template>\n</ng-container>\n\n<valtimo-confirmation-modal\n confirmButtonTextTranslationKey=\"interface.delete\"\n confirmButtonType=\"danger\"\n contentTranslationKey=\"formFlow.deleteModalContent\"\n [showModalSubject$]=\"showDeleteModal$\"\n titleTranslationKey=\"interface.delete\"\n (confirmEvent)=\"onDelete()\"\n></valtimo-confirmation-modal>\n\n<ng-template #loading>\n <div class=\"loading-container\">\n <cds-loading></cds-loading>\n </div>\n</ng-template>\n","/*\n * Copyright 2015-2025 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (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 * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\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\nimport {ChangeDetectionStrategy, Component, EventEmitter, Input, Output} from '@angular/core';\nimport {Observable} from 'rxjs';\n\n@Component({\n standalone: false,\n selector: 'valtimo-delete-form-flow-modal',\n templateUrl: './delete-form-flow-modal.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class DeleteFormFlowModalComponent {\n @Input() deleteFormFlowDefinitionKey: string;\n @Input() showDeleteModal$: Observable<boolean>;\n @Output() deleteEvent = new EventEmitter<string>();\n\n public onDelete(formFlowDefinitionKey: string): void {\n this.deleteEvent.emit(formFlowDefinitionKey);\n }\n}\n","<!--\n ~ Copyright 2015-2025 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (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 ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\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<valtimo-confirmation-modal\n confirmButtonTextTranslationKey=\"interface.delete\"\n confirmButtonType=\"danger\"\n contentTranslationKey=\"formFlow.deleteModalContent\"\n [outputOnConfirm]=\"deleteFormFlowDefinitionKey\"\n [showModalSubject$]=\"showDeleteModal$\"\n titleTranslationKey=\"interface.delete\"\n (confirmEvent)=\"onDelete($event)\"\n></valtimo-confirmation-modal>\n","/*\n * Copyright 2015-2025 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (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 * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\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\nimport {CommonModule} from '@angular/common';\nimport {NgModule} from '@angular/core';\nimport {TranslateModule} from '@ngx-translate/core';\nimport {\n CarbonListModule,\n ConfirmationModalModule,\n EditorModule,\n OverflowMenuComponent,\n OverflowMenuOptionComponent,\n OverflowMenuTriggerComponent,\n RenderInPageHeaderDirective,\n} from '@valtimo/components';\nimport {FormFlowOverviewComponent} from './components/overview/form-flow-overview.component';\nimport {NewFormFlowModalComponent} from './components/new-form-flow-modal/new-form-flow-modal.component';\nimport {\n ButtonModule,\n DropdownModule,\n IconModule,\n InputModule,\n LoadingModule,\n ModalModule,\n NotificationModule,\n TabsModule,\n} from 'carbon-components-angular';\nimport {FormsModule, ReactiveFormsModule} from '@angular/forms';\nimport {FormFlowEditorComponent} from './components/editor/form-flow-editor.component';\nimport {FormFlowJsonEditorTabComponent} from './components/editor/tabs/form-flow-json-editor-tab/form-flow-json-editor-tab.component';\nimport {FormFlowUiEditorTabComponent} from './components/editor/tabs/form-flow-ui-editor-tab/form-flow-ui-editor-tab.component';\nimport {DeleteFormFlowModalComponent} from './components/delete-form-flow-modal/delete-form-flow-modal.component';\n\n@NgModule({\n declarations: [FormFlowOverviewComponent, FormFlowEditorComponent, DeleteFormFlowModalComponent],\n imports: [\n CommonModule,\n ButtonModule,\n FormsModule,\n ModalModule,\n TranslateModule,\n ReactiveFormsModule,\n InputModule,\n IconModule,\n ConfirmationModalModule,\n EditorModule,\n RenderInPageHeaderDirective,\n LoadingModule,\n IconModule,\n OverflowMenuComponent,\n OverflowMenuOptionComponent,\n OverflowMenuTriggerComponent,\n NotificationModule,\n CarbonListModule,\n DropdownModule,\n ConfirmationModalModule,\n NewFormFlowModalComponent,\n TabsModule,\n FormFlowJsonEditorTabComponent,\n FormFlowUiEditorTabComponent,\n ],\n})\nexport class FormFlowManagementModule {}\n","/*\n * Copyright 2015-2025 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (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 * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\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 * Public API Surface of form-flow\n */\n\nexport * from './lib/constants';\nexport * from './lib/models';\nexport * from './lib/services';\nexport * from './lib/components/overview/form-flow-overview.component';\nexport * from './lib/components/editor/form-flow-editor.component';\nexport * from './lib/components/new-form-flow-modal/new-form-flow-modal.component';\nexport * from './lib/form-flow-management.module';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","i2","i3","i1.FormFlowService","i6","i7","i8.NewFormFlowModalComponent","i1.FormFlowEditorFormService","i5","i4","i2.FormFlowService","i3.FormFlowComponentService","i8","i2.FormFlowDownloadService","i3.FormFlowService","i9.FormFlowJsonEditorTabComponent","i10.FormFlowUiEditorTabComponent"],"mappings":"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"}
|