From e3b41bec70852de539025f69a0b89f1e5c855ad3 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 29 Jan 2026 09:31:16 +0000 Subject: [PATCH 01/34] Initial plan From 51da0bf10672e901f883adb8ecf4bc0811f75bb5 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 29 Jan 2026 09:33:29 +0000 Subject: [PATCH 02/34] Add ChangeDetectorRef to fix ExpressionChangedAfterItHasBeenCheckedError Co-authored-by: renemadsen <76994+renemadsen@users.noreply.github.com> --- .../eforms/components/eforms-page/eforms-page.component.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/eform-client/src/app/modules/eforms/components/eforms-page/eforms-page.component.ts b/eform-client/src/app/modules/eforms/components/eforms-page/eforms-page.component.ts index 6fecd997d4..27fd211d58 100644 --- a/eform-client/src/app/modules/eforms/components/eforms-page/eforms-page.component.ts +++ b/eform-client/src/app/modules/eforms/components/eforms-page/eforms-page.component.ts @@ -1,4 +1,4 @@ -import { Component, OnDestroy, OnInit, ViewChild, inject } from '@angular/core'; +import { Component, OnDestroy, OnInit, ViewChild, inject, ChangeDetectorRef } from '@angular/core'; import {Subject, Subscription} from 'rxjs'; import {debounceTime} from 'rxjs/operators'; import {UserClaimsEnum} from 'src/app/common/const'; @@ -78,6 +78,7 @@ export class EformsPageComponent implements OnInit, OnDestroy { dialog = inject(MatDialog); private overlay = inject(Overlay); private translateService = inject(TranslateService); + private cdr = inject(ChangeDetectorRef); @ViewChild('modalTags', {static: true}) modalTags: EformsTagsComponent; @@ -163,6 +164,7 @@ export class EformsPageComponent implements OnInit, OnDestroy { .subscribe((operation) => { if (operation && operation.success) { this.templateListModel = operation.model; + this.cdr.detectChanges(); } }); } From a73e7f288ef6ab33829245a5212b7f38a60511e7 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 29 Jan 2026 09:38:39 +0000 Subject: [PATCH 03/34] Use markForCheck instead of detectChanges for better change detection Co-authored-by: renemadsen <76994+renemadsen@users.noreply.github.com> --- .../eforms/components/eforms-page/eforms-page.component.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/eform-client/src/app/modules/eforms/components/eforms-page/eforms-page.component.ts b/eform-client/src/app/modules/eforms/components/eforms-page/eforms-page.component.ts index 27fd211d58..a07d789da0 100644 --- a/eform-client/src/app/modules/eforms/components/eforms-page/eforms-page.component.ts +++ b/eform-client/src/app/modules/eforms/components/eforms-page/eforms-page.component.ts @@ -164,7 +164,7 @@ export class EformsPageComponent implements OnInit, OnDestroy { .subscribe((operation) => { if (operation && operation.success) { this.templateListModel = operation.model; - this.cdr.detectChanges(); + this.cdr.markForCheck(); } }); } From 04dd2f4a024aa97bafc1468f6aead0835a2f3adb Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 29 Jan 2026 09:47:19 +0000 Subject: [PATCH 04/34] Add clarifying comment to trigger CI pipeline Co-authored-by: renemadsen <76994+renemadsen@users.noreply.github.com> --- .../eforms/components/eforms-page/eforms-page.component.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/eform-client/src/app/modules/eforms/components/eforms-page/eforms-page.component.ts b/eform-client/src/app/modules/eforms/components/eforms-page/eforms-page.component.ts index a07d789da0..6319507078 100644 --- a/eform-client/src/app/modules/eforms/components/eforms-page/eforms-page.component.ts +++ b/eform-client/src/app/modules/eforms/components/eforms-page/eforms-page.component.ts @@ -164,6 +164,7 @@ export class EformsPageComponent implements OnInit, OnDestroy { .subscribe((operation) => { if (operation && operation.success) { this.templateListModel = operation.model; + // Trigger change detection after async update this.cdr.markForCheck(); } }); From ba1c583007f3f2b4de1bb95182d31b8cb340ccb5 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 29 Jan 2026 10:41:20 +0000 Subject: [PATCH 05/34] Fix multiple ExpressionChangedAfterItHasBeenCheckedError issues across components Co-authored-by: renemadsen <76994+renemadsen@users.noreply.github.com> --- .../entity-edit-create.component.ts | 7 ++++++- .../app/components/footer/footer.component.ts | 21 +++++++++++++++---- .../full-layout/full-layout.component.ts | 5 ++++- .../eforms-page/eforms-page.component.ts | 2 ++ 4 files changed, 29 insertions(+), 6 deletions(-) diff --git a/eform-client/src/app/common/modules/eform-shared/components/entity-edit-create/entity-edit-create.component.ts b/eform-client/src/app/common/modules/eform-shared/components/entity-edit-create/entity-edit-create.component.ts index a706f7a39f..eb873faa04 100644 --- a/eform-client/src/app/common/modules/eform-shared/components/entity-edit-create/entity-edit-create.component.ts +++ b/eform-client/src/app/common/modules/eform-shared/components/entity-edit-create/entity-edit-create.component.ts @@ -1,4 +1,4 @@ -import { Component, EventEmitter, OnDestroy, OnInit, Output, ViewChild, inject } from '@angular/core'; +import { Component, EventEmitter, OnDestroy, OnInit, Output, ViewChild, inject, ChangeDetectorRef } from '@angular/core'; import { EntityGroupEditModel, EntityItemModel, @@ -37,6 +37,7 @@ export class EntityEditCreateComponent implements OnInit, OnDestroy{ private location = inject(Location); dialog = inject(MatDialog); private overlay = inject(Overlay); + private cdr = inject(ChangeDetectorRef); entityGroupEditModel: EntityGroupEditModel = new EntityGroupEditModel(); @ViewChild('frame', { static: true }) frame; @@ -91,6 +92,8 @@ export class EntityEditCreateComponent implements OnInit, OnDestroy{ description: data.model.description, } this.actualizeEntityItemPositions(); + // Trigger change detection after async update + this.cdr.markForCheck(); } }); } else if (this.header === 'selectable'){ @@ -108,6 +111,8 @@ export class EntityEditCreateComponent implements OnInit, OnDestroy{ description: data.model.description, } this.actualizeEntityItemPositions(); + // Trigger change detection after async update + this.cdr.markForCheck(); } }); } diff --git a/eform-client/src/app/components/footer/footer.component.ts b/eform-client/src/app/components/footer/footer.component.ts index e8f1732e35..aad843bd3c 100644 --- a/eform-client/src/app/components/footer/footer.component.ts +++ b/eform-client/src/app/components/footer/footer.component.ts @@ -1,4 +1,4 @@ -import { Component, inject, OnInit, DestroyRef } from '@angular/core'; +import { Component, inject, OnInit, DestroyRef, ChangeDetectorRef } from '@angular/core'; import { Store } from '@ngrx/store'; import { selectCurrentUserFullName, @@ -36,6 +36,7 @@ export class FooterComponent implements OnInit { private authStore = inject(Store); private destroyRef = inject(DestroyRef); private selectCurrentUserClaims$ = this.authStore.select(selectCurrentUserClaims); + private cdr = inject(ChangeDetectorRef); fullName = ''; userName = ''; @@ -46,15 +47,27 @@ export class FooterComponent implements OnInit { ngOnInit() { this.store.select(selectCurrentUserFullName) .pipe(takeUntilDestroyed(this.destroyRef)) - .subscribe(name => this.fullName = name); + .subscribe(name => { + this.fullName = name; + // Trigger change detection after async update + this.cdr.markForCheck(); + }); this.store.select(selectCurrentUserName) .pipe(takeUntilDestroyed(this.destroyRef)) - .subscribe(user => this.userName = user); + .subscribe(user => { + this.userName = user; + // Trigger change detection after async update + this.cdr.markForCheck(); + }); this.store.select(selectCurrentUserAvatarUrl) .pipe(takeUntilDestroyed(this.destroyRef)) - .subscribe(url => this.avatarUrl = url); + .subscribe(url => { + this.avatarUrl = url; + // Trigger change detection after async update + this.cdr.markForCheck(); + }); } checkGuards(guards: string[]): Observable { diff --git a/eform-client/src/app/components/layouts/full-layout/full-layout.component.ts b/eform-client/src/app/components/layouts/full-layout/full-layout.component.ts index ce782c2c14..cb06bc58f6 100644 --- a/eform-client/src/app/components/layouts/full-layout/full-layout.component.ts +++ b/eform-client/src/app/components/layouts/full-layout/full-layout.component.ts @@ -1,4 +1,4 @@ -import { AfterViewInit, Component, HostListener, OnDestroy, OnInit, Renderer2, ViewChild, inject } from '@angular/core'; +import { AfterViewInit, Component, HostListener, OnDestroy, OnInit, Renderer2, ViewChild, inject, ChangeDetectorRef } from '@angular/core'; import {AuthStateService} from 'src/app/common/store'; import {AutoUnsubscribe} from 'ngx-auto-unsubscribe'; import {Observable, of, Subscription, take, tap} from 'rxjs'; @@ -46,6 +46,7 @@ export class FullLayoutComponent implements OnInit, OnDestroy, AfterViewInit { private eventBrokerService = inject(EventBrokerService); private settingsService = inject(AppSettingsService); private loaderService = inject(LoaderService); + private cdr = inject(ChangeDetectorRef); @ViewChild('drawer') drawer: MatDrawer; isDarkThemeAsync$: Subscription; @@ -136,6 +137,8 @@ export class FullLayoutComponent implements OnInit, OnDestroy, AfterViewInit { } else if (!this.headerSettingsModel.imageLink) { this.logoImage = '../../../assets/images/logo.png'; } + // Trigger change detection after async update + this.cdr.markForCheck(); } })); } diff --git a/eform-client/src/app/modules/eforms/components/eforms-page/eforms-page.component.ts b/eform-client/src/app/modules/eforms/components/eforms-page/eforms-page.component.ts index 6319507078..e6a4cf6a35 100644 --- a/eform-client/src/app/modules/eforms/components/eforms-page/eforms-page.component.ts +++ b/eform-client/src/app/modules/eforms/components/eforms-page/eforms-page.component.ts @@ -178,6 +178,8 @@ export class EformsPageComponent implements OnInit, OnDestroy { .subscribe((data) => { if (data && data.success) { this.availableTags = data.model; + // Trigger change detection after async update + this.cdr.markForCheck(); this.loadSelectedUserTags(); } }); From a2f1db3d1f260ace103cf7d4818e018493c84a36 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 29 Jan 2026 10:45:05 +0000 Subject: [PATCH 06/34] Use detectChanges instead of markForCheck for default change detection strategy Co-authored-by: renemadsen <76994+renemadsen@users.noreply.github.com> --- .../entity-edit-create/entity-edit-create.component.ts | 4 ++-- eform-client/src/app/components/footer/footer.component.ts | 6 +++--- .../components/layouts/full-layout/full-layout.component.ts | 2 +- .../eforms/components/eforms-page/eforms-page.component.ts | 4 ++-- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/eform-client/src/app/common/modules/eform-shared/components/entity-edit-create/entity-edit-create.component.ts b/eform-client/src/app/common/modules/eform-shared/components/entity-edit-create/entity-edit-create.component.ts index eb873faa04..c4e5599b7a 100644 --- a/eform-client/src/app/common/modules/eform-shared/components/entity-edit-create/entity-edit-create.component.ts +++ b/eform-client/src/app/common/modules/eform-shared/components/entity-edit-create/entity-edit-create.component.ts @@ -93,7 +93,7 @@ export class EntityEditCreateComponent implements OnInit, OnDestroy{ } this.actualizeEntityItemPositions(); // Trigger change detection after async update - this.cdr.markForCheck(); + this.cdr.detectChanges(); } }); } else if (this.header === 'selectable'){ @@ -112,7 +112,7 @@ export class EntityEditCreateComponent implements OnInit, OnDestroy{ } this.actualizeEntityItemPositions(); // Trigger change detection after async update - this.cdr.markForCheck(); + this.cdr.detectChanges(); } }); } diff --git a/eform-client/src/app/components/footer/footer.component.ts b/eform-client/src/app/components/footer/footer.component.ts index aad843bd3c..c17bc4ec05 100644 --- a/eform-client/src/app/components/footer/footer.component.ts +++ b/eform-client/src/app/components/footer/footer.component.ts @@ -50,7 +50,7 @@ export class FooterComponent implements OnInit { .subscribe(name => { this.fullName = name; // Trigger change detection after async update - this.cdr.markForCheck(); + this.cdr.detectChanges(); }); this.store.select(selectCurrentUserName) @@ -58,7 +58,7 @@ export class FooterComponent implements OnInit { .subscribe(user => { this.userName = user; // Trigger change detection after async update - this.cdr.markForCheck(); + this.cdr.detectChanges(); }); this.store.select(selectCurrentUserAvatarUrl) @@ -66,7 +66,7 @@ export class FooterComponent implements OnInit { .subscribe(url => { this.avatarUrl = url; // Trigger change detection after async update - this.cdr.markForCheck(); + this.cdr.detectChanges(); }); } diff --git a/eform-client/src/app/components/layouts/full-layout/full-layout.component.ts b/eform-client/src/app/components/layouts/full-layout/full-layout.component.ts index cb06bc58f6..7a8a8254ec 100644 --- a/eform-client/src/app/components/layouts/full-layout/full-layout.component.ts +++ b/eform-client/src/app/components/layouts/full-layout/full-layout.component.ts @@ -138,7 +138,7 @@ export class FullLayoutComponent implements OnInit, OnDestroy, AfterViewInit { this.logoImage = '../../../assets/images/logo.png'; } // Trigger change detection after async update - this.cdr.markForCheck(); + this.cdr.detectChanges(); } })); } diff --git a/eform-client/src/app/modules/eforms/components/eforms-page/eforms-page.component.ts b/eform-client/src/app/modules/eforms/components/eforms-page/eforms-page.component.ts index e6a4cf6a35..c13331d083 100644 --- a/eform-client/src/app/modules/eforms/components/eforms-page/eforms-page.component.ts +++ b/eform-client/src/app/modules/eforms/components/eforms-page/eforms-page.component.ts @@ -165,7 +165,7 @@ export class EformsPageComponent implements OnInit, OnDestroy { if (operation && operation.success) { this.templateListModel = operation.model; // Trigger change detection after async update - this.cdr.markForCheck(); + this.cdr.detectChanges(); } }); } @@ -179,7 +179,7 @@ export class EformsPageComponent implements OnInit, OnDestroy { if (data && data.success) { this.availableTags = data.model; // Trigger change detection after async update - this.cdr.markForCheck(); + this.cdr.detectChanges(); this.loadSelectedUserTags(); } }); From 822e55a538e39b72690abf4083307fb5444465a5 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 29 Jan 2026 11:04:35 +0000 Subject: [PATCH 07/34] Fix ExpressionChangedAfterItHasBeenCheckedError in 5 additional components Co-authored-by: renemadsen <76994+renemadsen@users.noreply.github.com> --- eform-client/src/app/components/header/header.component.ts | 7 ++++++- .../src/app/components/navigation/navigation.component.ts | 5 ++++- .../entity-search/entity-search/entity-search.component.ts | 5 ++++- .../entity-select/entity-select/entity-select.component.ts | 5 ++++- .../components/folders/folders/folders.component.ts | 5 ++++- 5 files changed, 22 insertions(+), 5 deletions(-) diff --git a/eform-client/src/app/components/header/header.component.ts b/eform-client/src/app/components/header/header.component.ts index e893c0a962..a0850483f4 100644 --- a/eform-client/src/app/components/header/header.component.ts +++ b/eform-client/src/app/components/header/header.component.ts @@ -1,4 +1,4 @@ -import { Component, OnInit, inject } from '@angular/core'; +import { Component, OnInit, inject, ChangeDetectorRef } from '@angular/core'; import {Router} from '@angular/router'; import {EventBrokerService} from 'src/app/common/helpers'; import {HeaderSettingsModel} from 'src/app/common/models/settings'; @@ -16,6 +16,7 @@ export class HeaderComponent implements OnInit { private eventBrokerService = inject(EventBrokerService); private settingsService = inject(AppSettingsService); private router = inject(Router); + private cdr = inject(ChangeDetectorRef); headerSettingsModel: HeaderSettingsModel = new HeaderSettingsModel; logoImage: any; @@ -46,6 +47,8 @@ export class HeaderComponent implements OnInit { } else if (!this.headerSettingsModel.imageLink) { this.logoImage = '../../../assets/images/logo.png'; } + // Trigger change detection after async update + this.cdr.detectChanges(); } })); } else { @@ -55,6 +58,8 @@ export class HeaderComponent implements OnInit { this.headerSettingsModel.secondaryTextVisible = true; this.headerSettingsModel.mainText = 'eForm Backend'; this.headerSettingsModel.secondaryText = 'No more paper-forms and back-office data entry'; + // Trigger change detection after sync update + this.cdr.detectChanges(); this.router.navigate(['/connection-string']).then(); } }); diff --git a/eform-client/src/app/components/navigation/navigation.component.ts b/eform-client/src/app/components/navigation/navigation.component.ts index 548eb0c313..2fe612ab37 100644 --- a/eform-client/src/app/components/navigation/navigation.component.ts +++ b/eform-client/src/app/components/navigation/navigation.component.ts @@ -1,4 +1,4 @@ -import { Component, EventEmitter, OnDestroy, OnInit, Output, inject } from '@angular/core'; +import { Component, EventEmitter, OnDestroy, OnInit, Output, inject, ChangeDetectorRef } from '@angular/core'; import {AutoUnsubscribe} from 'ngx-auto-unsubscribe'; import {Observable, Subscription} from 'rxjs'; import { MatTreeNestedDataSource, MatTree, MatTreeNodeDef, MatTreeNode, MatTreeNodePadding, MatNestedTreeNode, MatTreeNodeToggle, MatTreeNodeOutlet } from '@angular/material/tree'; @@ -34,6 +34,7 @@ interface MenuNode { export class NavigationComponent implements OnInit, OnDestroy { router = inject(Router); private authStore = inject(Store); + private cdr = inject(ChangeDetectorRef); @Output() clickOnLink: EventEmitter = new EventEmitter(); @@ -58,6 +59,8 @@ export class NavigationComponent implements OnInit, OnDestroy { if (x.length > 0) { this.menu.data = [...x]; this.restoreOpenedMenu(); + // Trigger change detection after async update + this.cdr.detectChanges(); } }); }); diff --git a/eform-client/src/app/modules/advanced/components/entity-search/entity-search/entity-search.component.ts b/eform-client/src/app/modules/advanced/components/entity-search/entity-search/entity-search.component.ts index 7348b77035..8fa9d3fcf9 100644 --- a/eform-client/src/app/modules/advanced/components/entity-search/entity-search/entity-search.component.ts +++ b/eform-client/src/app/modules/advanced/components/entity-search/entity-search/entity-search.component.ts @@ -1,4 +1,4 @@ -import { Component, OnDestroy, OnInit, inject } from '@angular/core'; +import { Component, OnDestroy, OnInit, inject, ChangeDetectorRef } from '@angular/core'; import { EntityGroupModel, Paged, @@ -48,6 +48,7 @@ export class EntitySearchComponent implements OnInit, OnDestroy { private dialog = inject(MatDialog); private overlay = inject(Overlay); private translateService = inject(TranslateService); + private cdr = inject(ChangeDetectorRef); advEntitySearchableGroupListModel: Paged = new Paged(); entitySearchRemoveComponentAfterClosedSub$: Subscription; @@ -84,6 +85,8 @@ export class EntitySearchComponent implements OnInit, OnDestroy { if (data && data.model) { this.advEntitySearchableGroupListModel = data.model; this.store.dispatch(updateEntitySearchTotal({total: data.model.total})); + // Trigger change detection after async update + this.cdr.detectChanges(); } }); } diff --git a/eform-client/src/app/modules/advanced/components/entity-select/entity-select/entity-select.component.ts b/eform-client/src/app/modules/advanced/components/entity-select/entity-select/entity-select.component.ts index 37c03503d5..fb94b5898c 100644 --- a/eform-client/src/app/modules/advanced/components/entity-select/entity-select/entity-select.component.ts +++ b/eform-client/src/app/modules/advanced/components/entity-select/entity-select/entity-select.component.ts @@ -1,4 +1,4 @@ -import { Component, OnDestroy, OnInit, inject } from '@angular/core'; +import { Component, OnDestroy, OnInit, inject, ChangeDetectorRef } from '@angular/core'; import { Paged, EntityGroupModel, @@ -50,6 +50,7 @@ export class EntitySelectComponent implements OnInit, OnDestroy { private dialog = inject(MatDialog); private overlay = inject(Overlay); private translateService = inject(TranslateService); + private cdr = inject(ChangeDetectorRef); advEntitySelectableGroupListModel: Paged = new Paged(); entitySelectRemoveComponentAfterClosedSub$: Subscription; @@ -87,6 +88,8 @@ export class EntitySelectComponent implements OnInit, OnDestroy { if (data && data.model) { this.advEntitySelectableGroupListModel = data.model; this.store.dispatch(updateEntitySelectTotal({total: data.model.total})); + // Trigger change detection after async update + this.cdr.detectChanges(); } }); } diff --git a/eform-client/src/app/modules/advanced/components/folders/folders/folders.component.ts b/eform-client/src/app/modules/advanced/components/folders/folders/folders.component.ts index 8852461423..8182f2dcdd 100644 --- a/eform-client/src/app/modules/advanced/components/folders/folders/folders.component.ts +++ b/eform-client/src/app/modules/advanced/components/folders/folders/folders.component.ts @@ -1,4 +1,4 @@ -import { Component, OnInit, ViewChild, inject } from '@angular/core'; +import { Component, OnInit, ViewChild, inject, ChangeDetectorRef } from '@angular/core'; import { Router } from '@angular/router'; import { FoldersService } from 'src/app/common/services'; import {FolderDto, LanguagesModel} from 'src/app/common/models'; @@ -27,6 +27,7 @@ export class FoldersComponent implements OnInit { private foldersService = inject(FoldersService); private dialog = inject(MatDialog); private overlay = inject(Overlay); + private cdr = inject(ChangeDetectorRef); foldersFlatList: Array = []; foldersDto: Array = []; @@ -64,6 +65,8 @@ export class FoldersComponent implements OnInit { this.foldersService.getAllFolders().subscribe((operation) => { if (operation && operation.success) { this.foldersDto = operation.model; + // Trigger change detection after async update + this.cdr.detectChanges(); } }); } From 9312d14ca8c02ae204c4a93975668e34163cbc5f Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 29 Jan 2026 11:08:38 +0000 Subject: [PATCH 08/34] Remove unnecessary detectChanges call from synchronous else branch Co-authored-by: renemadsen <76994+renemadsen@users.noreply.github.com> --- eform-client/src/app/components/header/header.component.ts | 2 -- 1 file changed, 2 deletions(-) diff --git a/eform-client/src/app/components/header/header.component.ts b/eform-client/src/app/components/header/header.component.ts index a0850483f4..2834d28715 100644 --- a/eform-client/src/app/components/header/header.component.ts +++ b/eform-client/src/app/components/header/header.component.ts @@ -58,8 +58,6 @@ export class HeaderComponent implements OnInit { this.headerSettingsModel.secondaryTextVisible = true; this.headerSettingsModel.mainText = 'eForm Backend'; this.headerSettingsModel.secondaryText = 'No more paper-forms and back-office data entry'; - // Trigger change detection after sync update - this.cdr.detectChanges(); this.router.navigate(['/connection-string']).then(); } }); From b4664bd6aab940f64b7eb38285979055aff35011 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 29 Jan 2026 11:55:46 +0000 Subject: [PATCH 09/34] Fix FoldersComponent unit test by adding ChangeDetectorRef mock Co-authored-by: renemadsen <76994+renemadsen@users.noreply.github.com> --- .../folders/folders/folders.component.spec.ts | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/eform-client/src/app/modules/advanced/components/folders/folders/folders.component.spec.ts b/eform-client/src/app/modules/advanced/components/folders/folders/folders.component.spec.ts index 5da90e4a9f..23b0bb9941 100644 --- a/eform-client/src/app/modules/advanced/components/folders/folders/folders.component.spec.ts +++ b/eform-client/src/app/modules/advanced/components/folders/folders/folders.component.spec.ts @@ -1,7 +1,7 @@ import { describe, it, expect, beforeEach, afterEach, vi } from 'vitest'; import { ComponentFixture, TestBed } from '@angular/core/testing'; import { FormsModule } from '@angular/forms'; -import { NO_ERRORS_SCHEMA } from '@angular/core'; +import { NO_ERRORS_SCHEMA, ChangeDetectorRef } from '@angular/core'; import { FoldersComponent } from './folders.component'; import { FoldersService } from 'src/app/common/services'; import { MatDialog } from '@angular/material/dialog'; @@ -33,6 +33,13 @@ describe('FoldersComponent', () => { updateState: vi.fn(), loadMobileMenuItems: vi.fn() }; + const mockChangeDetectorRef = { + markForCheck: vi.fn(), + detectChanges: vi.fn(), + checkNoChanges: vi.fn(), + detach: vi.fn(), + reattach: vi.fn() + }; mockFoldersService = { getAllFolders: vi.fn(), getAllFoldersList: vi.fn(), @@ -54,6 +61,7 @@ describe('FoldersComponent', () => { { provide: Store, useValue: mockStore }, { provide: TranslateService, useValue: mockTranslateService }, { provide: AppMenuStateService, useValue: mockAppMenuStateService }, + { provide: ChangeDetectorRef, useValue: mockChangeDetectorRef }, { provide: Overlay, useValue: { scrollStrategies: { reposition: () => ({}) } } } ], schemas: [NO_ERRORS_SCHEMA] From 364b07b88eedf8c00cf38b11e702497e38d37cd5 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 29 Jan 2026 12:03:14 +0000 Subject: [PATCH 10/34] Fix TranslateService mock to return proper observables in FoldersComponent test Co-authored-by: renemadsen <76994+renemadsen@users.noreply.github.com> --- .../components/folders/folders/folders.component.spec.ts | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/eform-client/src/app/modules/advanced/components/folders/folders/folders.component.spec.ts b/eform-client/src/app/modules/advanced/components/folders/folders/folders.component.spec.ts index 23b0bb9941..30e30a4207 100644 --- a/eform-client/src/app/modules/advanced/components/folders/folders/folders.component.spec.ts +++ b/eform-client/src/app/modules/advanced/components/folders/folders/folders.component.spec.ts @@ -23,12 +23,14 @@ describe('FoldersComponent', () => { const mockTranslateService = { instant: vi.fn((key: string) => key), get: vi.fn((key: string) => of(key)), - use: vi.fn(), + use: vi.fn(() => of(null)), setDefaultLang: vi.fn(), currentLang: 'en', - stream: vi.fn() + stream: vi.fn((key: string) => of(key)), + onLangChange: of({ lang: 'en', translations: {} }), + onTranslationChange: of({ lang: 'en', translations: {} }), + onDefaultLangChange: of({ lang: 'en', translations: {} }) }; - mockTranslateService.stream.mockReturnValue(of('Test')); const mockAppMenuStateService = { updateState: vi.fn(), loadMobileMenuItems: vi.fn() From e36d5731a3d28a9239f45f8b915ac1c3e9dc2911 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 29 Jan 2026 12:08:36 +0000 Subject: [PATCH 11/34] Add missing getParsedResult and getCurrentLang methods to TranslateService mock Co-authored-by: renemadsen <76994+renemadsen@users.noreply.github.com> --- .../components/folders/folders/folders.component.spec.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/eform-client/src/app/modules/advanced/components/folders/folders/folders.component.spec.ts b/eform-client/src/app/modules/advanced/components/folders/folders/folders.component.spec.ts index 30e30a4207..85b014e65d 100644 --- a/eform-client/src/app/modules/advanced/components/folders/folders/folders.component.spec.ts +++ b/eform-client/src/app/modules/advanced/components/folders/folders/folders.component.spec.ts @@ -27,6 +27,8 @@ describe('FoldersComponent', () => { setDefaultLang: vi.fn(), currentLang: 'en', stream: vi.fn((key: string) => of(key)), + getParsedResult: vi.fn((translations: any, key: string) => key), + getCurrentLang: vi.fn(() => 'en'), onLangChange: of({ lang: 'en', translations: {} }), onTranslationChange: of({ lang: 'en', translations: {} }), onDefaultLangChange: of({ lang: 'en', translations: {} }) From 135f325bb121561098f595028dfc713f6f342fa2 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 29 Jan 2026 12:45:48 +0000 Subject: [PATCH 12/34] Remove detectChanges() calls from EformsPageComponent to fix Angular 21 tags API issue Co-authored-by: renemadsen <76994+renemadsen@users.noreply.github.com> --- .../eforms/components/eforms-page/eforms-page.component.ts | 4 ---- 1 file changed, 4 deletions(-) diff --git a/eform-client/src/app/modules/eforms/components/eforms-page/eforms-page.component.ts b/eform-client/src/app/modules/eforms/components/eforms-page/eforms-page.component.ts index c13331d083..79edf630fd 100644 --- a/eform-client/src/app/modules/eforms/components/eforms-page/eforms-page.component.ts +++ b/eform-client/src/app/modules/eforms/components/eforms-page/eforms-page.component.ts @@ -164,8 +164,6 @@ export class EformsPageComponent implements OnInit, OnDestroy { .subscribe((operation) => { if (operation && operation.success) { this.templateListModel = operation.model; - // Trigger change detection after async update - this.cdr.detectChanges(); } }); } @@ -178,8 +176,6 @@ export class EformsPageComponent implements OnInit, OnDestroy { .subscribe((data) => { if (data && data.success) { this.availableTags = data.model; - // Trigger change detection after async update - this.cdr.detectChanges(); this.loadSelectedUserTags(); } }); From c5c4a1edfa8ed4617242120ec03defc00c4df702 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 29 Jan 2026 12:51:50 +0000 Subject: [PATCH 13/34] Use markForCheck() instead of detectChanges() for Angular 21 compatibility Co-authored-by: renemadsen <76994+renemadsen@users.noreply.github.com> --- .../eforms/components/eforms-page/eforms-page.component.ts | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/eform-client/src/app/modules/eforms/components/eforms-page/eforms-page.component.ts b/eform-client/src/app/modules/eforms/components/eforms-page/eforms-page.component.ts index 79edf630fd..a7bde032a5 100644 --- a/eform-client/src/app/modules/eforms/components/eforms-page/eforms-page.component.ts +++ b/eform-client/src/app/modules/eforms/components/eforms-page/eforms-page.component.ts @@ -164,6 +164,8 @@ export class EformsPageComponent implements OnInit, OnDestroy { .subscribe((operation) => { if (operation && operation.success) { this.templateListModel = operation.model; + // Mark for check instead of immediate detectChanges for Angular 21 compatibility + this.cdr.markForCheck(); } }); } @@ -177,6 +179,8 @@ export class EformsPageComponent implements OnInit, OnDestroy { if (data && data.success) { this.availableTags = data.model; this.loadSelectedUserTags(); + // Mark for check instead of immediate detectChanges for Angular 21 compatibility + this.cdr.markForCheck(); } }); // } else { From df769292d5d1bd4c7899610b1c4e04aac833d5f3 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 29 Jan 2026 14:14:18 +0000 Subject: [PATCH 14/34] Fix mtx-select dropdownPosition attribute for Angular 21 compatibility Co-authored-by: renemadsen <76994+renemadsen@users.noreply.github.com> --- .../eform-edit-tags-modal/eform-edit-tags-modal.component.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/eform-client/src/app/modules/eforms/components/eform-edit-tags-modal/eform-edit-tags-modal.component.html b/eform-client/src/app/modules/eforms/components/eform-edit-tags-modal/eform-edit-tags-modal.component.html index 864d87c883..a75978ed2d 100644 --- a/eform-client/src/app/modules/eforms/components/eform-edit-tags-modal/eform-edit-tags-modal.component.html +++ b/eform-client/src/app/modules/eforms/components/eform-edit-tags-modal/eform-edit-tags-modal.component.html @@ -4,7 +4,7 @@

{{ 'Select tags for template' | translate }}

{{ 'Current tags' | translate }} Date: Thu, 29 Jan 2026 14:19:47 +0000 Subject: [PATCH 15/34] Fix all mtx-select dropdownPosition attributes across codebase for Angular 21 Co-authored-by: renemadsen <76994+renemadsen@users.noreply.github.com> --- .../components/sites/site-edit/site-edit.component.html | 2 +- .../eform-create-modal/eform-create-modal.component.html | 2 +- .../eforms/components/eforms-page/eforms-page.component.html | 2 +- .../visual-editor-additional-field-entity-search.component.html | 2 +- .../visual-editor-additional-field-entity-select.component.html | 2 +- .../visual-editor-field-modal.component.html | 2 +- .../eform-visual-editor-header.component.html | 2 +- .../email-recipient-edit/email-recipient-edit.component.html | 2 +- .../email-recipient-new/email-recipients-new.component.html | 2 +- 9 files changed, 9 insertions(+), 9 deletions(-) diff --git a/eform-client/src/app/modules/advanced/components/sites/site-edit/site-edit.component.html b/eform-client/src/app/modules/advanced/components/sites/site-edit/site-edit.component.html index 3831a066c1..c896704dd5 100644 --- a/eform-client/src/app/modules/advanced/components/sites/site-edit/site-edit.component.html +++ b/eform-client/src/app/modules/advanced/components/sites/site-edit/site-edit.component.html @@ -13,7 +13,7 @@

{{ 'Edit' | translate}}

{{ 'Current tags' | translate }} {{ 'Create eForm' | translate }} {{ 'Tags' | translate }} {{'Selected entity group search' | translate}} {{'Selected entity group select' | translate}} {{ (isFieldSelected ? 'Edit field' : 'New field') | transla {{'Type' | translate}} {{ 'Selected tags' | translate }} {{'Edit email recipient' | translate}} {{'Tags' | translate }} {{'New Email recipients' | translate}} {{'Tags' | translate }} Date: Thu, 29 Jan 2026 14:27:02 +0000 Subject: [PATCH 16/34] Fix TranslateService mocks in all unit tests for Angular 21 compatibility Co-authored-by: renemadsen <76994+renemadsen@users.noreply.github.com> --- .../shared-tag-create.component.spec.ts | 10 +++++++--- .../shared-tag-delete.component.spec.ts | 10 +++++++--- .../shared-tag-edit/shared-tag-edit.component.spec.ts | 10 +++++++--- .../folder-delete/folder-delete.component.spec.ts | 10 +++++++--- .../units/unit-create/unit-create.component.spec.ts | 10 +++++++--- .../units-otp-code/units-otp-code.component.spec.ts | 10 +++++++--- .../advanced/components/units/units.component.spec.ts | 10 +++++++--- .../worker-delete/worker-delete.component.spec.ts | 10 +++++++--- .../workers/workers/workers.component.spec.ts | 10 +++++++--- .../navigation-menu-custom-dropdown.component.spec.ts | 10 +++++++--- .../navigation-menu-custom-link.component.spec.ts | 10 +++++++--- .../navigation-menu-custom.component.spec.ts | 10 +++++++--- .../navigation-menu-item-delete.component.spec.ts | 10 +++++++--- .../navigation-menu-item-edit.component.spec.ts | 10 +++++++--- .../navigation-menu-reset.component.spec.ts | 10 +++++++--- .../eform-excel-report-modal.component.spec.ts | 10 +++++++--- .../eform-docx-report-header-editor.component.spec.ts | 10 +++++++--- .../eform-docx-report-header.component.spec.ts | 10 +++++++--- .../email-recipient-delete.component.spec.ts | 10 +++++++--- .../email-recipient-edit.component.spec.ts | 10 +++++++--- .../email-recipients-new.component.spec.ts | 10 +++++++--- 21 files changed, 147 insertions(+), 63 deletions(-) diff --git a/eform-client/src/app/common/modules/eform-shared-tags/components/shared-tag-create/shared-tag-create.component.spec.ts b/eform-client/src/app/common/modules/eform-shared-tags/components/shared-tag-create/shared-tag-create.component.spec.ts index 3eef0e481a..324c536063 100644 --- a/eform-client/src/app/common/modules/eform-shared-tags/components/shared-tag-create/shared-tag-create.component.spec.ts +++ b/eform-client/src/app/common/modules/eform-shared-tags/components/shared-tag-create/shared-tag-create.component.spec.ts @@ -17,12 +17,16 @@ describe('EmailRecipientTagNewComponent', () => { const mockTranslateService = { instant: vi.fn((key: string) => key), get: vi.fn((key: string) => of(key)), - use: vi.fn(), + use: vi.fn(() => of(null)), setDefaultLang: vi.fn(), currentLang: 'en', - stream: vi.fn() + stream: vi.fn((key: string) => of(key)), + getParsedResult: vi.fn((translations: any, key: string) => key), + getCurrentLang: vi.fn(() => 'en'), + onLangChange: of({ lang: 'en', translations: {} }), + onTranslationChange: of({ lang: 'en', translations: {} }), + onDefaultLangChange: of({ lang: 'en', translations: {} }) }; - mockTranslateService.stream.mockReturnValue(of('Test')); const mockDialogRef = { close: vi.fn(), }; diff --git a/eform-client/src/app/common/modules/eform-shared-tags/components/shared-tag-delete/shared-tag-delete.component.spec.ts b/eform-client/src/app/common/modules/eform-shared-tags/components/shared-tag-delete/shared-tag-delete.component.spec.ts index 20393303a4..743fed1c5d 100644 --- a/eform-client/src/app/common/modules/eform-shared-tags/components/shared-tag-delete/shared-tag-delete.component.spec.ts +++ b/eform-client/src/app/common/modules/eform-shared-tags/components/shared-tag-delete/shared-tag-delete.component.spec.ts @@ -17,12 +17,16 @@ describe('EmailRecipientTagDeleteComponent', () => { const mockTranslateService = { instant: vi.fn((key: string) => key), get: vi.fn((key: string) => of(key)), - use: vi.fn(), + use: vi.fn(() => of(null)), setDefaultLang: vi.fn(), currentLang: 'en', - stream: vi.fn() + stream: vi.fn((key: string) => of(key)), + getParsedResult: vi.fn((translations: any, key: string) => key), + getCurrentLang: vi.fn(() => 'en'), + onLangChange: of({ lang: 'en', translations: {} }), + onTranslationChange: of({ lang: 'en', translations: {} }), + onDefaultLangChange: of({ lang: 'en', translations: {} }) }; - mockTranslateService.stream.mockReturnValue(of('Test')); const mockDialogRef = { close: vi.fn() }; diff --git a/eform-client/src/app/common/modules/eform-shared-tags/components/shared-tag-edit/shared-tag-edit.component.spec.ts b/eform-client/src/app/common/modules/eform-shared-tags/components/shared-tag-edit/shared-tag-edit.component.spec.ts index 1727ffc9c2..f212379f56 100644 --- a/eform-client/src/app/common/modules/eform-shared-tags/components/shared-tag-edit/shared-tag-edit.component.spec.ts +++ b/eform-client/src/app/common/modules/eform-shared-tags/components/shared-tag-edit/shared-tag-edit.component.spec.ts @@ -17,12 +17,16 @@ describe('EmailRecipientTagEditComponent', () => { const mockTranslateService = { instant: vi.fn((key: string) => key), get: vi.fn((key: string) => of(key)), - use: vi.fn(), + use: vi.fn(() => of(null)), setDefaultLang: vi.fn(), currentLang: 'en', - stream: vi.fn() + stream: vi.fn((key: string) => of(key)), + getParsedResult: vi.fn((translations: any, key: string) => key), + getCurrentLang: vi.fn(() => 'en'), + onLangChange: of({ lang: 'en', translations: {} }), + onTranslationChange: of({ lang: 'en', translations: {} }), + onDefaultLangChange: of({ lang: 'en', translations: {} }) }; - mockTranslateService.stream.mockReturnValue(of('Test')); const mockDialogRef = { close: vi.fn(), }; diff --git a/eform-client/src/app/modules/advanced/components/folders/folder-delete/folder-delete.component.spec.ts b/eform-client/src/app/modules/advanced/components/folders/folder-delete/folder-delete.component.spec.ts index 19229508db..464531d444 100644 --- a/eform-client/src/app/modules/advanced/components/folders/folder-delete/folder-delete.component.spec.ts +++ b/eform-client/src/app/modules/advanced/components/folders/folder-delete/folder-delete.component.spec.ts @@ -21,12 +21,16 @@ describe('FolderDeleteComponent', () => { const mockTranslateService = { instant: vi.fn((key: string) => key), get: vi.fn((key: string) => of(key)), - use: vi.fn(), + use: vi.fn(() => of(null)), setDefaultLang: vi.fn(), currentLang: 'en', - stream: vi.fn() + stream: vi.fn((key: string) => of(key)), + getParsedResult: vi.fn((translations: any, key: string) => key), + getCurrentLang: vi.fn(() => 'en'), + onLangChange: of({ lang: 'en', translations: {} }), + onTranslationChange: of({ lang: 'en', translations: {} }), + onDefaultLangChange: of({ lang: 'en', translations: {} }) }; - mockTranslateService.stream.mockReturnValue(of('Test')); mockFoldersService = { deleteSingleFolder: vi.fn(), }; diff --git a/eform-client/src/app/modules/advanced/components/units/unit-create/unit-create.component.spec.ts b/eform-client/src/app/modules/advanced/components/units/unit-create/unit-create.component.spec.ts index 559348b5d4..280da69c32 100644 --- a/eform-client/src/app/modules/advanced/components/units/unit-create/unit-create.component.spec.ts +++ b/eform-client/src/app/modules/advanced/components/units/unit-create/unit-create.component.spec.ts @@ -22,12 +22,16 @@ describe('UnitCreateComponent', () => { const mockTranslateService = { instant: vi.fn((key: string) => key), get: vi.fn((key: string) => of(key)), - use: vi.fn(), + use: vi.fn(() => of(null)), setDefaultLang: vi.fn(), currentLang: 'en', - stream: vi.fn() + stream: vi.fn((key: string) => of(key)), + getParsedResult: vi.fn((translations: any, key: string) => key), + getCurrentLang: vi.fn(() => 'en'), + onLangChange: of({ lang: 'en', translations: {} }), + onTranslationChange: of({ lang: 'en', translations: {} }), + onDefaultLangChange: of({ lang: 'en', translations: {} }) }; - mockTranslateService.stream.mockReturnValue(of('Test')); mockUnitsService = { createUnit: vi.fn(), }; diff --git a/eform-client/src/app/modules/advanced/components/units/units-otp-code/units-otp-code.component.spec.ts b/eform-client/src/app/modules/advanced/components/units/units-otp-code/units-otp-code.component.spec.ts index 7b509d1917..361f5b07db 100644 --- a/eform-client/src/app/modules/advanced/components/units/units-otp-code/units-otp-code.component.spec.ts +++ b/eform-client/src/app/modules/advanced/components/units/units-otp-code/units-otp-code.component.spec.ts @@ -21,12 +21,16 @@ describe('UnitsOtpCodeComponent', () => { const mockTranslateService = { instant: vi.fn((key: string) => key), get: vi.fn((key: string) => of(key)), - use: vi.fn(), + use: vi.fn(() => of(null)), setDefaultLang: vi.fn(), currentLang: 'en', - stream: vi.fn() + stream: vi.fn((key: string) => of(key)), + getParsedResult: vi.fn((translations: any, key: string) => key), + getCurrentLang: vi.fn(() => 'en'), + onLangChange: of({ lang: 'en', translations: {} }), + onTranslationChange: of({ lang: 'en', translations: {} }), + onDefaultLangChange: of({ lang: 'en', translations: {} }) }; - mockTranslateService.stream.mockReturnValue(of('Test')); mockUnitsService = { requestOtp: vi.fn(), }; diff --git a/eform-client/src/app/modules/advanced/components/units/units.component.spec.ts b/eform-client/src/app/modules/advanced/components/units/units.component.spec.ts index 9a6525b9ae..0b20529d1b 100644 --- a/eform-client/src/app/modules/advanced/components/units/units.component.spec.ts +++ b/eform-client/src/app/modules/advanced/components/units/units.component.spec.ts @@ -23,12 +23,16 @@ describe('UnitsComponent', () => { const mockTranslateService = { instant: vi.fn((key: string) => key), get: vi.fn((key: string) => of(key)), - use: vi.fn(), + use: vi.fn(() => of(null)), setDefaultLang: vi.fn(), currentLang: 'en', - stream: vi.fn() + stream: vi.fn((key: string) => of(key)), + getParsedResult: vi.fn((translations: any, key: string) => key), + getCurrentLang: vi.fn(() => 'en'), + onLangChange: of({ lang: 'en', translations: {} }), + onTranslationChange: of({ lang: 'en', translations: {} }), + onDefaultLangChange: of({ lang: 'en', translations: {} }) }; - mockTranslateService.stream.mockReturnValue(of('Test')); mockUnitsService = { getAllUnits: vi.fn(), }; diff --git a/eform-client/src/app/modules/advanced/components/workers/worker-delete/worker-delete.component.spec.ts b/eform-client/src/app/modules/advanced/components/workers/worker-delete/worker-delete.component.spec.ts index d93547c41b..db99b44297 100644 --- a/eform-client/src/app/modules/advanced/components/workers/worker-delete/worker-delete.component.spec.ts +++ b/eform-client/src/app/modules/advanced/components/workers/worker-delete/worker-delete.component.spec.ts @@ -21,12 +21,16 @@ describe.skip('WorkerDeleteComponent', () => { const mockTranslateService = { instant: vi.fn((key: string) => key), get: vi.fn((key: string) => of(key)), - use: vi.fn(), + use: vi.fn(() => of(null)), setDefaultLang: vi.fn(), currentLang: 'en', - stream: vi.fn() + stream: vi.fn((key: string) => of(key)), + getParsedResult: vi.fn((translations: any, key: string) => key), + getCurrentLang: vi.fn(() => 'en'), + onLangChange: of({ lang: 'en', translations: {} }), + onTranslationChange: of({ lang: 'en', translations: {} }), + onDefaultLangChange: of({ lang: 'en', translations: {} }) }; - mockTranslateService.stream.mockReturnValue(of('Test')); mockWorkersService = { deleteSingleWorker: vi.fn(), }; diff --git a/eform-client/src/app/modules/advanced/components/workers/workers/workers.component.spec.ts b/eform-client/src/app/modules/advanced/components/workers/workers/workers.component.spec.ts index b7140dd528..885dce95ea 100644 --- a/eform-client/src/app/modules/advanced/components/workers/workers/workers.component.spec.ts +++ b/eform-client/src/app/modules/advanced/components/workers/workers/workers.component.spec.ts @@ -24,12 +24,16 @@ describe('WorkersComponent', () => { const mockTranslateService = { instant: vi.fn((key: string) => key), get: vi.fn((key: string) => of(key)), - use: vi.fn(), + use: vi.fn(() => of(null)), setDefaultLang: vi.fn(), currentLang: 'en', - stream: vi.fn() + stream: vi.fn((key: string) => of(key)), + getParsedResult: vi.fn((translations: any, key: string) => key), + getCurrentLang: vi.fn(() => 'en'), + onLangChange: of({ lang: 'en', translations: {} }), + onTranslationChange: of({ lang: 'en', translations: {} }), + onDefaultLangChange: of({ lang: 'en', translations: {} }) }; - mockTranslateService.stream.mockReturnValue(of('Test')); const mockAppMenuStateService = { updateState: vi.fn(), loadMobileMenuItems: vi.fn() diff --git a/eform-client/src/app/modules/advanced/modules/navigation-menu/components/menu-custom/navigation-menu-custom-dropdown/navigation-menu-custom-dropdown.component.spec.ts b/eform-client/src/app/modules/advanced/modules/navigation-menu/components/menu-custom/navigation-menu-custom-dropdown/navigation-menu-custom-dropdown.component.spec.ts index bcd80516fc..671f6ae2d2 100644 --- a/eform-client/src/app/modules/advanced/modules/navigation-menu/components/menu-custom/navigation-menu-custom-dropdown/navigation-menu-custom-dropdown.component.spec.ts +++ b/eform-client/src/app/modules/advanced/modules/navigation-menu/components/menu-custom/navigation-menu-custom-dropdown/navigation-menu-custom-dropdown.component.spec.ts @@ -17,12 +17,16 @@ describe('NavigationMenuCustomDropdownComponent', () => { const mockTranslateService = { instant: vi.fn((key: string) => key), get: vi.fn((key: string) => of(key)), - use: vi.fn(), + use: vi.fn(() => of(null)), setDefaultLang: vi.fn(), currentLang: 'en', - stream: vi.fn() + stream: vi.fn((key: string) => of(key)), + getParsedResult: vi.fn((translations: any, key: string) => key), + getCurrentLang: vi.fn(() => 'en'), + onLangChange: of({ lang: 'en', translations: {} }), + onTranslationChange: of({ lang: 'en', translations: {} }), + onDefaultLangChange: of({ lang: 'en', translations: {} }) }; - mockTranslateService.stream.mockReturnValue(of('Test')); const mockDialogRef = { close: vi.fn(), }; diff --git a/eform-client/src/app/modules/advanced/modules/navigation-menu/components/menu-custom/navigation-menu-custom-link/navigation-menu-custom-link.component.spec.ts b/eform-client/src/app/modules/advanced/modules/navigation-menu/components/menu-custom/navigation-menu-custom-link/navigation-menu-custom-link.component.spec.ts index 66e466208a..3fddc8bde1 100644 --- a/eform-client/src/app/modules/advanced/modules/navigation-menu/components/menu-custom/navigation-menu-custom-link/navigation-menu-custom-link.component.spec.ts +++ b/eform-client/src/app/modules/advanced/modules/navigation-menu/components/menu-custom/navigation-menu-custom-link/navigation-menu-custom-link.component.spec.ts @@ -17,12 +17,16 @@ describe('NavigationMenuCustomLinkComponent', () => { const mockTranslateService = { instant: vi.fn((key: string) => key), get: vi.fn((key: string) => of(key)), - use: vi.fn(), + use: vi.fn(() => of(null)), setDefaultLang: vi.fn(), currentLang: 'en', - stream: vi.fn() + stream: vi.fn((key: string) => of(key)), + getParsedResult: vi.fn((translations: any, key: string) => key), + getCurrentLang: vi.fn(() => 'en'), + onLangChange: of({ lang: 'en', translations: {} }), + onTranslationChange: of({ lang: 'en', translations: {} }), + onDefaultLangChange: of({ lang: 'en', translations: {} }) }; - mockTranslateService.stream.mockReturnValue(of('Test')); const mockDialogRef = { close: vi.fn(), }; diff --git a/eform-client/src/app/modules/advanced/modules/navigation-menu/components/menu-custom/navigation-menu-custom/navigation-menu-custom.component.spec.ts b/eform-client/src/app/modules/advanced/modules/navigation-menu/components/menu-custom/navigation-menu-custom/navigation-menu-custom.component.spec.ts index bde8d32cd7..8c5cfd0436 100644 --- a/eform-client/src/app/modules/advanced/modules/navigation-menu/components/menu-custom/navigation-menu-custom/navigation-menu-custom.component.spec.ts +++ b/eform-client/src/app/modules/advanced/modules/navigation-menu/components/menu-custom/navigation-menu-custom/navigation-menu-custom.component.spec.ts @@ -15,12 +15,16 @@ describe('NavigationMenuCustomComponent', () => { const mockTranslateService = { instant: vi.fn((key: string) => key), get: vi.fn((key: string) => of(key)), - use: vi.fn(), + use: vi.fn(() => of(null)), setDefaultLang: vi.fn(), currentLang: 'en', - stream: vi.fn() + stream: vi.fn((key: string) => of(key)), + getParsedResult: vi.fn((translations: any, key: string) => key), + getCurrentLang: vi.fn(() => 'en'), + onLangChange: of({ lang: 'en', translations: {} }), + onTranslationChange: of({ lang: 'en', translations: {} }), + onDefaultLangChange: of({ lang: 'en', translations: {} }) }; - mockTranslateService.stream.mockReturnValue(of('Test')); TestBed.configureTestingModule({ imports: [FormsModule, NavigationMenuCustomComponent], diff --git a/eform-client/src/app/modules/advanced/modules/navigation-menu/components/menu-item/navigation-menu-item-delete/navigation-menu-item-delete.component.spec.ts b/eform-client/src/app/modules/advanced/modules/navigation-menu/components/menu-item/navigation-menu-item-delete/navigation-menu-item-delete.component.spec.ts index 279bf323a8..0f77076065 100644 --- a/eform-client/src/app/modules/advanced/modules/navigation-menu/components/menu-item/navigation-menu-item-delete/navigation-menu-item-delete.component.spec.ts +++ b/eform-client/src/app/modules/advanced/modules/navigation-menu/components/menu-item/navigation-menu-item-delete/navigation-menu-item-delete.component.spec.ts @@ -17,12 +17,16 @@ describe('NavigationMenuItemDeleteComponent', () => { const mockTranslateService = { instant: vi.fn((key: string) => key), get: vi.fn((key: string) => of(key)), - use: vi.fn(), + use: vi.fn(() => of(null)), setDefaultLang: vi.fn(), currentLang: 'en', - stream: vi.fn() + stream: vi.fn((key: string) => of(key)), + getParsedResult: vi.fn((translations: any, key: string) => key), + getCurrentLang: vi.fn(() => 'en'), + onLangChange: of({ lang: 'en', translations: {} }), + onTranslationChange: of({ lang: 'en', translations: {} }), + onDefaultLangChange: of({ lang: 'en', translations: {} }) }; - mockTranslateService.stream.mockReturnValue(of('Test')); const mockDialogRef = { close: vi.fn(), }; diff --git a/eform-client/src/app/modules/advanced/modules/navigation-menu/components/menu-item/navigation-menu-item-edit/navigation-menu-item-edit.component.spec.ts b/eform-client/src/app/modules/advanced/modules/navigation-menu/components/menu-item/navigation-menu-item-edit/navigation-menu-item-edit.component.spec.ts index af1c325522..be22915db8 100644 --- a/eform-client/src/app/modules/advanced/modules/navigation-menu/components/menu-item/navigation-menu-item-edit/navigation-menu-item-edit.component.spec.ts +++ b/eform-client/src/app/modules/advanced/modules/navigation-menu/components/menu-item/navigation-menu-item-edit/navigation-menu-item-edit.component.spec.ts @@ -17,12 +17,16 @@ describe.skip('NavigationMenuItemEditComponent', () => { const mockTranslateService = { instant: vi.fn((key: string) => key), get: vi.fn((key: string) => of(key)), - use: vi.fn(), + use: vi.fn(() => of(null)), setDefaultLang: vi.fn(), currentLang: 'en', - stream: vi.fn() + stream: vi.fn((key: string) => of(key)), + getParsedResult: vi.fn((translations: any, key: string) => key), + getCurrentLang: vi.fn(() => 'en'), + onLangChange: of({ lang: 'en', translations: {} }), + onTranslationChange: of({ lang: 'en', translations: {} }), + onDefaultLangChange: of({ lang: 'en', translations: {} }) }; - mockTranslateService.stream.mockReturnValue(of('Test')); const mockDialogRef = { close: vi.fn(), }; diff --git a/eform-client/src/app/modules/advanced/modules/navigation-menu/components/navigation-menu-reset/navigation-menu-reset.component.spec.ts b/eform-client/src/app/modules/advanced/modules/navigation-menu/components/navigation-menu-reset/navigation-menu-reset.component.spec.ts index 27f4869c0c..1af2dbe7ac 100644 --- a/eform-client/src/app/modules/advanced/modules/navigation-menu/components/navigation-menu-reset/navigation-menu-reset.component.spec.ts +++ b/eform-client/src/app/modules/advanced/modules/navigation-menu/components/navigation-menu-reset/navigation-menu-reset.component.spec.ts @@ -17,12 +17,16 @@ describe('NavigationMenuResetComponent', () => { const mockTranslateService = { instant: vi.fn((key: string) => key), get: vi.fn((key: string) => of(key)), - use: vi.fn(), + use: vi.fn(() => of(null)), setDefaultLang: vi.fn(), currentLang: 'en', - stream: vi.fn() + stream: vi.fn((key: string) => of(key)), + getParsedResult: vi.fn((translations: any, key: string) => key), + getCurrentLang: vi.fn(() => 'en'), + onLangChange: of({ lang: 'en', translations: {} }), + onTranslationChange: of({ lang: 'en', translations: {} }), + onDefaultLangChange: of({ lang: 'en', translations: {} }) }; - mockTranslateService.stream.mockReturnValue(of('Test')); mockDialogRef = { close: vi.fn(), }; diff --git a/eform-client/src/app/modules/eforms/components/eform-excel-report-modal/eform-excel-report-modal.component.spec.ts b/eform-client/src/app/modules/eforms/components/eform-excel-report-modal/eform-excel-report-modal.component.spec.ts index e505480c9e..7e6808b65b 100644 --- a/eform-client/src/app/modules/eforms/components/eform-excel-report-modal/eform-excel-report-modal.component.spec.ts +++ b/eform-client/src/app/modules/eforms/components/eform-excel-report-modal/eform-excel-report-modal.component.spec.ts @@ -17,12 +17,16 @@ describe('EformExcelReportModalComponent', () => { const mockTranslateService = { instant: vi.fn((key: string) => key), get: vi.fn((key: string) => of(key)), - use: vi.fn(), + use: vi.fn(() => of(null)), setDefaultLang: vi.fn(), currentLang: 'en', - stream: vi.fn() + stream: vi.fn((key: string) => of(key)), + getParsedResult: vi.fn((translations: any, key: string) => key), + getCurrentLang: vi.fn(() => 'en'), + onLangChange: of({ lang: 'en', translations: {} }), + onTranslationChange: of({ lang: 'en', translations: {} }), + onDefaultLangChange: of({ lang: 'en', translations: {} }) }; - mockTranslateService.stream.mockReturnValue(of('Test')); const mockEFormService = { downloadEformExcel: vi.fn().mockReturnValue(of(new Blob())), }; diff --git a/eform-client/src/app/modules/eforms/eform-docx-report/components/eform-docx-report-header-editor/eform-docx-report-header-editor.component.spec.ts b/eform-client/src/app/modules/eforms/eform-docx-report/components/eform-docx-report-header-editor/eform-docx-report-header-editor.component.spec.ts index 0561858143..e08d7d88c3 100644 --- a/eform-client/src/app/modules/eforms/eform-docx-report/components/eform-docx-report-header-editor/eform-docx-report-header-editor.component.spec.ts +++ b/eform-client/src/app/modules/eforms/eform-docx-report/components/eform-docx-report-header-editor/eform-docx-report-header-editor.component.spec.ts @@ -16,12 +16,16 @@ describe('EformDocxReportHeaderEditorComponent', () => { const mockTranslateService = { instant: vi.fn((key: string) => key), get: vi.fn((key: string) => of(key)), - use: vi.fn(), + use: vi.fn(() => of(null)), setDefaultLang: vi.fn(), currentLang: 'en', - stream: vi.fn() + stream: vi.fn((key: string) => of(key)), + getParsedResult: vi.fn((translations: any, key: string) => key), + getCurrentLang: vi.fn(() => 'en'), + onLangChange: of({ lang: 'en', translations: {} }), + onTranslationChange: of({ lang: 'en', translations: {} }), + onDefaultLangChange: of({ lang: 'en', translations: {} }) }; - mockTranslateService.stream.mockReturnValue(of('Test')); const mockDialogRef = { close: vi.fn(), }; diff --git a/eform-client/src/app/modules/eforms/eform-docx-report/components/eform-docx-report-header/eform-docx-report-header.component.spec.ts b/eform-client/src/app/modules/eforms/eform-docx-report/components/eform-docx-report-header/eform-docx-report-header.component.spec.ts index a9b7bc6f05..50be3fa83c 100644 --- a/eform-client/src/app/modules/eforms/eform-docx-report/components/eform-docx-report-header/eform-docx-report-header.component.spec.ts +++ b/eform-client/src/app/modules/eforms/eform-docx-report/components/eform-docx-report-header/eform-docx-report-header.component.spec.ts @@ -16,12 +16,16 @@ describe('EformDocxReportHeaderComponent', () => { const mockTranslateService = { instant: vi.fn((key: string) => key), get: vi.fn((key: string) => of(key)), - use: vi.fn(), + use: vi.fn(() => of(null)), setDefaultLang: vi.fn(), currentLang: 'en', - stream: vi.fn() + stream: vi.fn((key: string) => of(key)), + getParsedResult: vi.fn((translations: any, key: string) => key), + getCurrentLang: vi.fn(() => 'en'), + onLangChange: of({ lang: 'en', translations: {} }), + onTranslationChange: of({ lang: 'en', translations: {} }), + onDefaultLangChange: of({ lang: 'en', translations: {} }) }; - mockTranslateService.stream.mockReturnValue(of('Test')); TestBed.configureTestingModule({ imports: [FormsModule, EformDocxReportHeaderComponent], diff --git a/eform-client/src/app/modules/email-recipients/components/recipients/email-recipient-delete/email-recipient-delete.component.spec.ts b/eform-client/src/app/modules/email-recipients/components/recipients/email-recipient-delete/email-recipient-delete.component.spec.ts index 200089885b..2058680856 100644 --- a/eform-client/src/app/modules/email-recipients/components/recipients/email-recipient-delete/email-recipient-delete.component.spec.ts +++ b/eform-client/src/app/modules/email-recipients/components/recipients/email-recipient-delete/email-recipient-delete.component.spec.ts @@ -19,12 +19,16 @@ describe('EmailRecipientDeleteComponent', () => { const mockTranslateService = { instant: vi.fn((key: string) => key), get: vi.fn((key: string) => of(key)), - use: vi.fn(), + use: vi.fn(() => of(null)), setDefaultLang: vi.fn(), currentLang: 'en', - stream: vi.fn() + stream: vi.fn((key: string) => of(key)), + getParsedResult: vi.fn((translations: any, key: string) => key), + getCurrentLang: vi.fn(() => 'en'), + onLangChange: of({ lang: 'en', translations: {} }), + onTranslationChange: of({ lang: 'en', translations: {} }), + onDefaultLangChange: of({ lang: 'en', translations: {} }) }; - mockTranslateService.stream.mockReturnValue(of('Test')); const mockEmailRecipientsService = { delete: vi.fn(), }; diff --git a/eform-client/src/app/modules/email-recipients/components/recipients/email-recipient-edit/email-recipient-edit.component.spec.ts b/eform-client/src/app/modules/email-recipients/components/recipients/email-recipient-edit/email-recipient-edit.component.spec.ts index b278a7524b..8836440b8e 100644 --- a/eform-client/src/app/modules/email-recipients/components/recipients/email-recipient-edit/email-recipient-edit.component.spec.ts +++ b/eform-client/src/app/modules/email-recipients/components/recipients/email-recipient-edit/email-recipient-edit.component.spec.ts @@ -18,12 +18,16 @@ describe('EmailRecipientEditComponent', () => { const mockTranslateService = { instant: vi.fn((key: string) => key), get: vi.fn((key: string) => of(key)), - use: vi.fn(), + use: vi.fn(() => of(null)), setDefaultLang: vi.fn(), currentLang: 'en', - stream: vi.fn() + stream: vi.fn((key: string) => of(key)), + getParsedResult: vi.fn((translations: any, key: string) => key), + getCurrentLang: vi.fn(() => 'en'), + onLangChange: of({ lang: 'en', translations: {} }), + onTranslationChange: of({ lang: 'en', translations: {} }), + onDefaultLangChange: of({ lang: 'en', translations: {} }) }; - mockTranslateService.stream.mockReturnValue(of('Test')); const mockEmailRecipientsService = { update: vi.fn(), }; diff --git a/eform-client/src/app/modules/email-recipients/components/recipients/email-recipient-new/email-recipients-new.component.spec.ts b/eform-client/src/app/modules/email-recipients/components/recipients/email-recipient-new/email-recipients-new.component.spec.ts index d0f242c6c8..867dc581c2 100644 --- a/eform-client/src/app/modules/email-recipients/components/recipients/email-recipient-new/email-recipients-new.component.spec.ts +++ b/eform-client/src/app/modules/email-recipients/components/recipients/email-recipient-new/email-recipients-new.component.spec.ts @@ -19,12 +19,16 @@ describe('EmailRecipientCreateComponent', () => { const mockTranslateService = { instant: vi.fn((key: string) => key), get: vi.fn((key: string) => of(key)), - use: vi.fn(), + use: vi.fn(() => of(null)), setDefaultLang: vi.fn(), currentLang: 'en', - stream: vi.fn() + stream: vi.fn((key: string) => of(key)), + getParsedResult: vi.fn((translations: any, key: string) => key), + getCurrentLang: vi.fn(() => 'en'), + onLangChange: of({ lang: 'en', translations: {} }), + onTranslationChange: of({ lang: 'en', translations: {} }), + onDefaultLangChange: of({ lang: 'en', translations: {} }) }; - mockTranslateService.stream.mockReturnValue(of('Test')); const mockEmailRecipientsService = { create: vi.fn(), }; From 3105cfa1eb94a4a19e17110ee3ad81dd0622f831 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 29 Jan 2026 15:04:50 +0000 Subject: [PATCH 17/34] Fix TranslatePipe subscription errors by using EventEmitter for event properties Co-authored-by: renemadsen <76994+renemadsen@users.noreply.github.com> --- .../shared-tag-create/shared-tag-create.component.spec.ts | 8 ++++---- .../shared-tag-delete/shared-tag-delete.component.spec.ts | 8 ++++---- .../shared-tag-edit/shared-tag-edit.component.spec.ts | 8 ++++---- .../folders/folder-delete/folder-delete.component.spec.ts | 8 ++++---- .../components/folders/folders/folders.component.spec.ts | 8 ++++---- .../units/unit-create/unit-create.component.spec.ts | 8 ++++---- .../units/units-otp-code/units-otp-code.component.spec.ts | 8 ++++---- .../advanced/components/units/units.component.spec.ts | 8 ++++---- .../workers/worker-delete/worker-delete.component.spec.ts | 8 ++++---- .../components/workers/workers/workers.component.spec.ts | 8 ++++---- .../navigation-menu-custom-dropdown.component.spec.ts | 8 ++++---- .../navigation-menu-custom-link.component.spec.ts | 8 ++++---- .../navigation-menu-custom.component.spec.ts | 8 ++++---- .../navigation-menu-item-delete.component.spec.ts | 8 ++++---- .../navigation-menu-item-edit.component.spec.ts | 8 ++++---- .../navigation-menu-reset.component.spec.ts | 8 ++++---- .../eform-excel-report-modal.component.spec.ts | 8 ++++---- .../eform-docx-report-header-editor.component.spec.ts | 8 ++++---- .../eform-docx-report-header.component.spec.ts | 8 ++++---- .../email-recipient-delete.component.spec.ts | 8 ++++---- .../email-recipient-edit.component.spec.ts | 8 ++++---- .../email-recipients-new.component.spec.ts | 8 ++++---- 22 files changed, 88 insertions(+), 88 deletions(-) diff --git a/eform-client/src/app/common/modules/eform-shared-tags/components/shared-tag-create/shared-tag-create.component.spec.ts b/eform-client/src/app/common/modules/eform-shared-tags/components/shared-tag-create/shared-tag-create.component.spec.ts index 324c536063..137886bf18 100644 --- a/eform-client/src/app/common/modules/eform-shared-tags/components/shared-tag-create/shared-tag-create.component.spec.ts +++ b/eform-client/src/app/common/modules/eform-shared-tags/components/shared-tag-create/shared-tag-create.component.spec.ts @@ -2,7 +2,7 @@ import { describe, it, expect, beforeEach, afterEach, vi } from 'vitest'; import { ComponentFixture, TestBed } from '@angular/core/testing'; import { FormsModule } from '@angular/forms'; import { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog'; -import { NO_ERRORS_SCHEMA } from '@angular/core'; +import { NO_ERRORS_SCHEMA , EventEmitter } from '@angular/core'; import { MockTranslatePipe } from 'src/test-helpers'; import { TranslateService } from '@ngx-translate/core'; import { of } from 'rxjs'; @@ -23,9 +23,9 @@ describe('EmailRecipientTagNewComponent', () => { stream: vi.fn((key: string) => of(key)), getParsedResult: vi.fn((translations: any, key: string) => key), getCurrentLang: vi.fn(() => 'en'), - onLangChange: of({ lang: 'en', translations: {} }), - onTranslationChange: of({ lang: 'en', translations: {} }), - onDefaultLangChange: of({ lang: 'en', translations: {} }) + onLangChange: new EventEmitter(), + onTranslationChange: new EventEmitter(), + onDefaultLangChange: new EventEmitter() }; const mockDialogRef = { close: vi.fn(), diff --git a/eform-client/src/app/common/modules/eform-shared-tags/components/shared-tag-delete/shared-tag-delete.component.spec.ts b/eform-client/src/app/common/modules/eform-shared-tags/components/shared-tag-delete/shared-tag-delete.component.spec.ts index 743fed1c5d..f31caacf89 100644 --- a/eform-client/src/app/common/modules/eform-shared-tags/components/shared-tag-delete/shared-tag-delete.component.spec.ts +++ b/eform-client/src/app/common/modules/eform-shared-tags/components/shared-tag-delete/shared-tag-delete.component.spec.ts @@ -2,7 +2,7 @@ import { describe, it, expect, beforeEach, afterEach, vi } from 'vitest'; import { ComponentFixture, TestBed } from '@angular/core/testing'; import { FormsModule } from '@angular/forms'; import { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog'; -import { NO_ERRORS_SCHEMA } from '@angular/core'; +import { NO_ERRORS_SCHEMA , EventEmitter } from '@angular/core'; import { MockTranslatePipe } from 'src/test-helpers'; import { TranslateService } from '@ngx-translate/core'; import { of } from 'rxjs'; @@ -23,9 +23,9 @@ describe('EmailRecipientTagDeleteComponent', () => { stream: vi.fn((key: string) => of(key)), getParsedResult: vi.fn((translations: any, key: string) => key), getCurrentLang: vi.fn(() => 'en'), - onLangChange: of({ lang: 'en', translations: {} }), - onTranslationChange: of({ lang: 'en', translations: {} }), - onDefaultLangChange: of({ lang: 'en', translations: {} }) + onLangChange: new EventEmitter(), + onTranslationChange: new EventEmitter(), + onDefaultLangChange: new EventEmitter() }; const mockDialogRef = { close: vi.fn() diff --git a/eform-client/src/app/common/modules/eform-shared-tags/components/shared-tag-edit/shared-tag-edit.component.spec.ts b/eform-client/src/app/common/modules/eform-shared-tags/components/shared-tag-edit/shared-tag-edit.component.spec.ts index f212379f56..1f87f91b1a 100644 --- a/eform-client/src/app/common/modules/eform-shared-tags/components/shared-tag-edit/shared-tag-edit.component.spec.ts +++ b/eform-client/src/app/common/modules/eform-shared-tags/components/shared-tag-edit/shared-tag-edit.component.spec.ts @@ -2,7 +2,7 @@ import { describe, it, expect, beforeEach, afterEach, vi } from 'vitest'; import { ComponentFixture, TestBed } from '@angular/core/testing'; import { FormsModule } from '@angular/forms'; import { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog'; -import { NO_ERRORS_SCHEMA } from '@angular/core'; +import { NO_ERRORS_SCHEMA , EventEmitter } from '@angular/core'; import { MockTranslatePipe } from 'src/test-helpers'; import { TranslateService } from '@ngx-translate/core'; import { of } from 'rxjs'; @@ -23,9 +23,9 @@ describe('EmailRecipientTagEditComponent', () => { stream: vi.fn((key: string) => of(key)), getParsedResult: vi.fn((translations: any, key: string) => key), getCurrentLang: vi.fn(() => 'en'), - onLangChange: of({ lang: 'en', translations: {} }), - onTranslationChange: of({ lang: 'en', translations: {} }), - onDefaultLangChange: of({ lang: 'en', translations: {} }) + onLangChange: new EventEmitter(), + onTranslationChange: new EventEmitter(), + onDefaultLangChange: new EventEmitter() }; const mockDialogRef = { close: vi.fn(), diff --git a/eform-client/src/app/modules/advanced/components/folders/folder-delete/folder-delete.component.spec.ts b/eform-client/src/app/modules/advanced/components/folders/folder-delete/folder-delete.component.spec.ts index 464531d444..a91dc12855 100644 --- a/eform-client/src/app/modules/advanced/components/folders/folder-delete/folder-delete.component.spec.ts +++ b/eform-client/src/app/modules/advanced/components/folders/folder-delete/folder-delete.component.spec.ts @@ -1,7 +1,7 @@ import { describe, it, expect, beforeEach, afterEach, vi } from 'vitest'; import { ComponentFixture, TestBed } from '@angular/core/testing'; import { FormsModule } from '@angular/forms'; -import { NO_ERRORS_SCHEMA } from '@angular/core'; +import { NO_ERRORS_SCHEMA , EventEmitter } from '@angular/core'; import { FolderDeleteComponent } from './folder-delete.component'; import { FoldersService } from 'src/app/common/services'; import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog'; @@ -27,9 +27,9 @@ describe('FolderDeleteComponent', () => { stream: vi.fn((key: string) => of(key)), getParsedResult: vi.fn((translations: any, key: string) => key), getCurrentLang: vi.fn(() => 'en'), - onLangChange: of({ lang: 'en', translations: {} }), - onTranslationChange: of({ lang: 'en', translations: {} }), - onDefaultLangChange: of({ lang: 'en', translations: {} }) + onLangChange: new EventEmitter(), + onTranslationChange: new EventEmitter(), + onDefaultLangChange: new EventEmitter() }; mockFoldersService = { deleteSingleFolder: vi.fn(), diff --git a/eform-client/src/app/modules/advanced/components/folders/folders/folders.component.spec.ts b/eform-client/src/app/modules/advanced/components/folders/folders/folders.component.spec.ts index 85b014e65d..3761440665 100644 --- a/eform-client/src/app/modules/advanced/components/folders/folders/folders.component.spec.ts +++ b/eform-client/src/app/modules/advanced/components/folders/folders/folders.component.spec.ts @@ -1,7 +1,7 @@ import { describe, it, expect, beforeEach, afterEach, vi } from 'vitest'; import { ComponentFixture, TestBed } from '@angular/core/testing'; import { FormsModule } from '@angular/forms'; -import { NO_ERRORS_SCHEMA, ChangeDetectorRef } from '@angular/core'; +import { NO_ERRORS_SCHEMA, ChangeDetectorRef, EventEmitter } from '@angular/core'; import { FoldersComponent } from './folders.component'; import { FoldersService } from 'src/app/common/services'; import { MatDialog } from '@angular/material/dialog'; @@ -29,9 +29,9 @@ describe('FoldersComponent', () => { stream: vi.fn((key: string) => of(key)), getParsedResult: vi.fn((translations: any, key: string) => key), getCurrentLang: vi.fn(() => 'en'), - onLangChange: of({ lang: 'en', translations: {} }), - onTranslationChange: of({ lang: 'en', translations: {} }), - onDefaultLangChange: of({ lang: 'en', translations: {} }) + onLangChange: new EventEmitter(), + onTranslationChange: new EventEmitter(), + onDefaultLangChange: new EventEmitter() }; const mockAppMenuStateService = { updateState: vi.fn(), diff --git a/eform-client/src/app/modules/advanced/components/units/unit-create/unit-create.component.spec.ts b/eform-client/src/app/modules/advanced/components/units/unit-create/unit-create.component.spec.ts index 280da69c32..2cef7b3fca 100644 --- a/eform-client/src/app/modules/advanced/components/units/unit-create/unit-create.component.spec.ts +++ b/eform-client/src/app/modules/advanced/components/units/unit-create/unit-create.component.spec.ts @@ -1,7 +1,7 @@ import { describe, it, expect, beforeEach, afterEach, vi } from 'vitest'; import { ComponentFixture, TestBed } from '@angular/core/testing'; import { FormsModule } from '@angular/forms'; -import { NO_ERRORS_SCHEMA } from '@angular/core'; +import { NO_ERRORS_SCHEMA , EventEmitter } from '@angular/core'; import { UnitCreateComponent } from './unit-create.component'; import { UnitsService } from 'src/app/common/services'; import { DeviceUserService } from 'src/app/common/services/device-users'; @@ -28,9 +28,9 @@ describe('UnitCreateComponent', () => { stream: vi.fn((key: string) => of(key)), getParsedResult: vi.fn((translations: any, key: string) => key), getCurrentLang: vi.fn(() => 'en'), - onLangChange: of({ lang: 'en', translations: {} }), - onTranslationChange: of({ lang: 'en', translations: {} }), - onDefaultLangChange: of({ lang: 'en', translations: {} }) + onLangChange: new EventEmitter(), + onTranslationChange: new EventEmitter(), + onDefaultLangChange: new EventEmitter() }; mockUnitsService = { createUnit: vi.fn(), diff --git a/eform-client/src/app/modules/advanced/components/units/units-otp-code/units-otp-code.component.spec.ts b/eform-client/src/app/modules/advanced/components/units/units-otp-code/units-otp-code.component.spec.ts index 361f5b07db..ccb13d6a11 100644 --- a/eform-client/src/app/modules/advanced/components/units/units-otp-code/units-otp-code.component.spec.ts +++ b/eform-client/src/app/modules/advanced/components/units/units-otp-code/units-otp-code.component.spec.ts @@ -1,7 +1,7 @@ import { describe, it, expect, beforeEach, afterEach, vi } from 'vitest'; import { ComponentFixture, TestBed } from '@angular/core/testing'; import { FormsModule } from '@angular/forms'; -import { NO_ERRORS_SCHEMA } from '@angular/core'; +import { NO_ERRORS_SCHEMA , EventEmitter } from '@angular/core'; import { UnitsOtpCodeComponent } from './units-otp-code.component'; import { UnitsService } from 'src/app/common/services/advanced'; import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog'; @@ -27,9 +27,9 @@ describe('UnitsOtpCodeComponent', () => { stream: vi.fn((key: string) => of(key)), getParsedResult: vi.fn((translations: any, key: string) => key), getCurrentLang: vi.fn(() => 'en'), - onLangChange: of({ lang: 'en', translations: {} }), - onTranslationChange: of({ lang: 'en', translations: {} }), - onDefaultLangChange: of({ lang: 'en', translations: {} }) + onLangChange: new EventEmitter(), + onTranslationChange: new EventEmitter(), + onDefaultLangChange: new EventEmitter() }; mockUnitsService = { requestOtp: vi.fn(), diff --git a/eform-client/src/app/modules/advanced/components/units/units.component.spec.ts b/eform-client/src/app/modules/advanced/components/units/units.component.spec.ts index 0b20529d1b..dc764d7ecd 100644 --- a/eform-client/src/app/modules/advanced/components/units/units.component.spec.ts +++ b/eform-client/src/app/modules/advanced/components/units/units.component.spec.ts @@ -1,7 +1,7 @@ import { describe, it, expect, beforeEach, afterEach, vi } from 'vitest'; import { ComponentFixture, TestBed } from '@angular/core/testing'; import { FormsModule } from '@angular/forms'; -import { NO_ERRORS_SCHEMA } from '@angular/core'; +import { NO_ERRORS_SCHEMA , EventEmitter } from '@angular/core'; import { UnitsComponent } from './units.component'; import { UnitsService } from 'src/app/common/services'; import { MatDialog } from '@angular/material/dialog'; @@ -29,9 +29,9 @@ describe('UnitsComponent', () => { stream: vi.fn((key: string) => of(key)), getParsedResult: vi.fn((translations: any, key: string) => key), getCurrentLang: vi.fn(() => 'en'), - onLangChange: of({ lang: 'en', translations: {} }), - onTranslationChange: of({ lang: 'en', translations: {} }), - onDefaultLangChange: of({ lang: 'en', translations: {} }) + onLangChange: new EventEmitter(), + onTranslationChange: new EventEmitter(), + onDefaultLangChange: new EventEmitter() }; mockUnitsService = { getAllUnits: vi.fn(), diff --git a/eform-client/src/app/modules/advanced/components/workers/worker-delete/worker-delete.component.spec.ts b/eform-client/src/app/modules/advanced/components/workers/worker-delete/worker-delete.component.spec.ts index db99b44297..13a76f7bcc 100644 --- a/eform-client/src/app/modules/advanced/components/workers/worker-delete/worker-delete.component.spec.ts +++ b/eform-client/src/app/modules/advanced/components/workers/worker-delete/worker-delete.component.spec.ts @@ -1,7 +1,7 @@ import { describe, it, expect, beforeEach, afterEach, vi } from 'vitest'; import { ComponentFixture, TestBed } from '@angular/core/testing'; import { FormsModule } from '@angular/forms'; -import { NO_ERRORS_SCHEMA } from '@angular/core'; +import { NO_ERRORS_SCHEMA , EventEmitter } from '@angular/core'; import { WorkerDeleteComponent } from './worker-delete.component'; import { WorkersService } from 'src/app/common/services'; import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog'; @@ -27,9 +27,9 @@ describe.skip('WorkerDeleteComponent', () => { stream: vi.fn((key: string) => of(key)), getParsedResult: vi.fn((translations: any, key: string) => key), getCurrentLang: vi.fn(() => 'en'), - onLangChange: of({ lang: 'en', translations: {} }), - onTranslationChange: of({ lang: 'en', translations: {} }), - onDefaultLangChange: of({ lang: 'en', translations: {} }) + onLangChange: new EventEmitter(), + onTranslationChange: new EventEmitter(), + onDefaultLangChange: new EventEmitter() }; mockWorkersService = { deleteSingleWorker: vi.fn(), diff --git a/eform-client/src/app/modules/advanced/components/workers/workers/workers.component.spec.ts b/eform-client/src/app/modules/advanced/components/workers/workers/workers.component.spec.ts index 885dce95ea..0277d9fd04 100644 --- a/eform-client/src/app/modules/advanced/components/workers/workers/workers.component.spec.ts +++ b/eform-client/src/app/modules/advanced/components/workers/workers/workers.component.spec.ts @@ -1,7 +1,7 @@ import { describe, it, expect, beforeEach, afterEach, vi } from 'vitest'; import { ComponentFixture, TestBed } from '@angular/core/testing'; import { FormsModule } from '@angular/forms'; -import { NO_ERRORS_SCHEMA } from '@angular/core'; +import { NO_ERRORS_SCHEMA , EventEmitter } from '@angular/core'; import { WorkersComponent } from './workers.component'; import { WorkersService } from 'src/app/common/services'; import { MatDialog } from '@angular/material/dialog'; @@ -30,9 +30,9 @@ describe('WorkersComponent', () => { stream: vi.fn((key: string) => of(key)), getParsedResult: vi.fn((translations: any, key: string) => key), getCurrentLang: vi.fn(() => 'en'), - onLangChange: of({ lang: 'en', translations: {} }), - onTranslationChange: of({ lang: 'en', translations: {} }), - onDefaultLangChange: of({ lang: 'en', translations: {} }) + onLangChange: new EventEmitter(), + onTranslationChange: new EventEmitter(), + onDefaultLangChange: new EventEmitter() }; const mockAppMenuStateService = { updateState: vi.fn(), diff --git a/eform-client/src/app/modules/advanced/modules/navigation-menu/components/menu-custom/navigation-menu-custom-dropdown/navigation-menu-custom-dropdown.component.spec.ts b/eform-client/src/app/modules/advanced/modules/navigation-menu/components/menu-custom/navigation-menu-custom-dropdown/navigation-menu-custom-dropdown.component.spec.ts index 671f6ae2d2..e84134552a 100644 --- a/eform-client/src/app/modules/advanced/modules/navigation-menu/components/menu-custom/navigation-menu-custom-dropdown/navigation-menu-custom-dropdown.component.spec.ts +++ b/eform-client/src/app/modules/advanced/modules/navigation-menu/components/menu-custom/navigation-menu-custom-dropdown/navigation-menu-custom-dropdown.component.spec.ts @@ -2,7 +2,7 @@ import { describe, it, expect, beforeEach, afterEach, vi } from 'vitest'; import { ComponentFixture, TestBed } from '@angular/core/testing'; import { FormsModule } from '@angular/forms'; import { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog'; -import { NO_ERRORS_SCHEMA } from '@angular/core'; +import { NO_ERRORS_SCHEMA , EventEmitter } from '@angular/core'; import { MockTranslatePipe } from 'src/test-helpers'; import { TranslateService } from '@ngx-translate/core'; import { of } from 'rxjs'; @@ -23,9 +23,9 @@ describe('NavigationMenuCustomDropdownComponent', () => { stream: vi.fn((key: string) => of(key)), getParsedResult: vi.fn((translations: any, key: string) => key), getCurrentLang: vi.fn(() => 'en'), - onLangChange: of({ lang: 'en', translations: {} }), - onTranslationChange: of({ lang: 'en', translations: {} }), - onDefaultLangChange: of({ lang: 'en', translations: {} }) + onLangChange: new EventEmitter(), + onTranslationChange: new EventEmitter(), + onDefaultLangChange: new EventEmitter() }; const mockDialogRef = { close: vi.fn(), diff --git a/eform-client/src/app/modules/advanced/modules/navigation-menu/components/menu-custom/navigation-menu-custom-link/navigation-menu-custom-link.component.spec.ts b/eform-client/src/app/modules/advanced/modules/navigation-menu/components/menu-custom/navigation-menu-custom-link/navigation-menu-custom-link.component.spec.ts index 3fddc8bde1..a40c3af70d 100644 --- a/eform-client/src/app/modules/advanced/modules/navigation-menu/components/menu-custom/navigation-menu-custom-link/navigation-menu-custom-link.component.spec.ts +++ b/eform-client/src/app/modules/advanced/modules/navigation-menu/components/menu-custom/navigation-menu-custom-link/navigation-menu-custom-link.component.spec.ts @@ -2,7 +2,7 @@ import { describe, it, expect, beforeEach, afterEach, vi } from 'vitest'; import { ComponentFixture, TestBed } from '@angular/core/testing'; import { FormsModule } from '@angular/forms'; import { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog'; -import { NO_ERRORS_SCHEMA } from '@angular/core'; +import { NO_ERRORS_SCHEMA , EventEmitter } from '@angular/core'; import { MockTranslatePipe } from 'src/test-helpers'; import { TranslateService } from '@ngx-translate/core'; import { of } from 'rxjs'; @@ -23,9 +23,9 @@ describe('NavigationMenuCustomLinkComponent', () => { stream: vi.fn((key: string) => of(key)), getParsedResult: vi.fn((translations: any, key: string) => key), getCurrentLang: vi.fn(() => 'en'), - onLangChange: of({ lang: 'en', translations: {} }), - onTranslationChange: of({ lang: 'en', translations: {} }), - onDefaultLangChange: of({ lang: 'en', translations: {} }) + onLangChange: new EventEmitter(), + onTranslationChange: new EventEmitter(), + onDefaultLangChange: new EventEmitter() }; const mockDialogRef = { close: vi.fn(), diff --git a/eform-client/src/app/modules/advanced/modules/navigation-menu/components/menu-custom/navigation-menu-custom/navigation-menu-custom.component.spec.ts b/eform-client/src/app/modules/advanced/modules/navigation-menu/components/menu-custom/navigation-menu-custom/navigation-menu-custom.component.spec.ts index 8c5cfd0436..1d2fac123f 100644 --- a/eform-client/src/app/modules/advanced/modules/navigation-menu/components/menu-custom/navigation-menu-custom/navigation-menu-custom.component.spec.ts +++ b/eform-client/src/app/modules/advanced/modules/navigation-menu/components/menu-custom/navigation-menu-custom/navigation-menu-custom.component.spec.ts @@ -1,7 +1,7 @@ import { describe, it, expect, beforeEach, afterEach, vi } from 'vitest'; import { ComponentFixture, TestBed } from '@angular/core/testing'; import { FormsModule } from '@angular/forms'; -import { NO_ERRORS_SCHEMA } from '@angular/core'; +import { NO_ERRORS_SCHEMA , EventEmitter } from '@angular/core'; import { MockTranslatePipe } from 'src/test-helpers'; import { NavigationMenuCustomComponent } from './navigation-menu-custom.component'; import { TranslateService } from '@ngx-translate/core'; @@ -21,9 +21,9 @@ describe('NavigationMenuCustomComponent', () => { stream: vi.fn((key: string) => of(key)), getParsedResult: vi.fn((translations: any, key: string) => key), getCurrentLang: vi.fn(() => 'en'), - onLangChange: of({ lang: 'en', translations: {} }), - onTranslationChange: of({ lang: 'en', translations: {} }), - onDefaultLangChange: of({ lang: 'en', translations: {} }) + onLangChange: new EventEmitter(), + onTranslationChange: new EventEmitter(), + onDefaultLangChange: new EventEmitter() }; TestBed.configureTestingModule({ diff --git a/eform-client/src/app/modules/advanced/modules/navigation-menu/components/menu-item/navigation-menu-item-delete/navigation-menu-item-delete.component.spec.ts b/eform-client/src/app/modules/advanced/modules/navigation-menu/components/menu-item/navigation-menu-item-delete/navigation-menu-item-delete.component.spec.ts index 0f77076065..f2bf25b02f 100644 --- a/eform-client/src/app/modules/advanced/modules/navigation-menu/components/menu-item/navigation-menu-item-delete/navigation-menu-item-delete.component.spec.ts +++ b/eform-client/src/app/modules/advanced/modules/navigation-menu/components/menu-item/navigation-menu-item-delete/navigation-menu-item-delete.component.spec.ts @@ -2,7 +2,7 @@ import { describe, it, expect, beforeEach, afterEach, vi } from 'vitest'; import { ComponentFixture, TestBed } from '@angular/core/testing'; import { FormsModule } from '@angular/forms'; import { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog'; -import { NO_ERRORS_SCHEMA } from '@angular/core'; +import { NO_ERRORS_SCHEMA , EventEmitter } from '@angular/core'; import { MockTranslatePipe } from 'src/test-helpers'; import { TranslateService } from '@ngx-translate/core'; import { of } from 'rxjs'; @@ -23,9 +23,9 @@ describe('NavigationMenuItemDeleteComponent', () => { stream: vi.fn((key: string) => of(key)), getParsedResult: vi.fn((translations: any, key: string) => key), getCurrentLang: vi.fn(() => 'en'), - onLangChange: of({ lang: 'en', translations: {} }), - onTranslationChange: of({ lang: 'en', translations: {} }), - onDefaultLangChange: of({ lang: 'en', translations: {} }) + onLangChange: new EventEmitter(), + onTranslationChange: new EventEmitter(), + onDefaultLangChange: new EventEmitter() }; const mockDialogRef = { close: vi.fn(), diff --git a/eform-client/src/app/modules/advanced/modules/navigation-menu/components/menu-item/navigation-menu-item-edit/navigation-menu-item-edit.component.spec.ts b/eform-client/src/app/modules/advanced/modules/navigation-menu/components/menu-item/navigation-menu-item-edit/navigation-menu-item-edit.component.spec.ts index be22915db8..8879a8536e 100644 --- a/eform-client/src/app/modules/advanced/modules/navigation-menu/components/menu-item/navigation-menu-item-edit/navigation-menu-item-edit.component.spec.ts +++ b/eform-client/src/app/modules/advanced/modules/navigation-menu/components/menu-item/navigation-menu-item-edit/navigation-menu-item-edit.component.spec.ts @@ -2,7 +2,7 @@ import { describe, it, expect, beforeEach, afterEach, vi } from 'vitest'; import { ComponentFixture, TestBed } from '@angular/core/testing'; import { FormsModule } from '@angular/forms'; import { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog'; -import { NO_ERRORS_SCHEMA } from '@angular/core'; +import { NO_ERRORS_SCHEMA , EventEmitter } from '@angular/core'; import { MockTranslatePipe } from 'src/test-helpers'; import { TranslateService } from '@ngx-translate/core'; import { of } from 'rxjs'; @@ -23,9 +23,9 @@ describe.skip('NavigationMenuItemEditComponent', () => { stream: vi.fn((key: string) => of(key)), getParsedResult: vi.fn((translations: any, key: string) => key), getCurrentLang: vi.fn(() => 'en'), - onLangChange: of({ lang: 'en', translations: {} }), - onTranslationChange: of({ lang: 'en', translations: {} }), - onDefaultLangChange: of({ lang: 'en', translations: {} }) + onLangChange: new EventEmitter(), + onTranslationChange: new EventEmitter(), + onDefaultLangChange: new EventEmitter() }; const mockDialogRef = { close: vi.fn(), diff --git a/eform-client/src/app/modules/advanced/modules/navigation-menu/components/navigation-menu-reset/navigation-menu-reset.component.spec.ts b/eform-client/src/app/modules/advanced/modules/navigation-menu/components/navigation-menu-reset/navigation-menu-reset.component.spec.ts index 1af2dbe7ac..77daa0a137 100644 --- a/eform-client/src/app/modules/advanced/modules/navigation-menu/components/navigation-menu-reset/navigation-menu-reset.component.spec.ts +++ b/eform-client/src/app/modules/advanced/modules/navigation-menu/components/navigation-menu-reset/navigation-menu-reset.component.spec.ts @@ -1,7 +1,7 @@ import { describe, it, expect, beforeEach, afterEach, vi } from 'vitest'; import { ComponentFixture, TestBed } from '@angular/core/testing'; import { FormsModule } from '@angular/forms'; -import { NO_ERRORS_SCHEMA } from '@angular/core'; +import { NO_ERRORS_SCHEMA , EventEmitter } from '@angular/core'; import { MatDialogRef } from '@angular/material/dialog'; import { NavigationMenuResetComponent } from './navigation-menu-reset.component'; import { MockTranslatePipe } from 'src/test-helpers'; @@ -23,9 +23,9 @@ describe('NavigationMenuResetComponent', () => { stream: vi.fn((key: string) => of(key)), getParsedResult: vi.fn((translations: any, key: string) => key), getCurrentLang: vi.fn(() => 'en'), - onLangChange: of({ lang: 'en', translations: {} }), - onTranslationChange: of({ lang: 'en', translations: {} }), - onDefaultLangChange: of({ lang: 'en', translations: {} }) + onLangChange: new EventEmitter(), + onTranslationChange: new EventEmitter(), + onDefaultLangChange: new EventEmitter() }; mockDialogRef = { close: vi.fn(), diff --git a/eform-client/src/app/modules/eforms/components/eform-excel-report-modal/eform-excel-report-modal.component.spec.ts b/eform-client/src/app/modules/eforms/components/eform-excel-report-modal/eform-excel-report-modal.component.spec.ts index 7e6808b65b..3034dd89ed 100644 --- a/eform-client/src/app/modules/eforms/components/eform-excel-report-modal/eform-excel-report-modal.component.spec.ts +++ b/eform-client/src/app/modules/eforms/components/eform-excel-report-modal/eform-excel-report-modal.component.spec.ts @@ -1,7 +1,7 @@ import { describe, it, expect, beforeEach, afterEach, vi } from 'vitest'; import { ComponentFixture, TestBed } from '@angular/core/testing'; import { FormsModule } from '@angular/forms'; -import { NO_ERRORS_SCHEMA } from '@angular/core'; +import { NO_ERRORS_SCHEMA , EventEmitter } from '@angular/core'; import { MockTranslatePipe } from 'src/test-helpers'; import { EformExcelReportModalComponent } from './eform-excel-report-modal.component'; import { EFormService } from 'src/app/common/services/eform'; @@ -23,9 +23,9 @@ describe('EformExcelReportModalComponent', () => { stream: vi.fn((key: string) => of(key)), getParsedResult: vi.fn((translations: any, key: string) => key), getCurrentLang: vi.fn(() => 'en'), - onLangChange: of({ lang: 'en', translations: {} }), - onTranslationChange: of({ lang: 'en', translations: {} }), - onDefaultLangChange: of({ lang: 'en', translations: {} }) + onLangChange: new EventEmitter(), + onTranslationChange: new EventEmitter(), + onDefaultLangChange: new EventEmitter() }; const mockEFormService = { downloadEformExcel: vi.fn().mockReturnValue(of(new Blob())), diff --git a/eform-client/src/app/modules/eforms/eform-docx-report/components/eform-docx-report-header-editor/eform-docx-report-header-editor.component.spec.ts b/eform-client/src/app/modules/eforms/eform-docx-report/components/eform-docx-report-header-editor/eform-docx-report-header-editor.component.spec.ts index e08d7d88c3..ca0edcfe14 100644 --- a/eform-client/src/app/modules/eforms/eform-docx-report/components/eform-docx-report-header-editor/eform-docx-report-header-editor.component.spec.ts +++ b/eform-client/src/app/modules/eforms/eform-docx-report/components/eform-docx-report-header-editor/eform-docx-report-header-editor.component.spec.ts @@ -1,7 +1,7 @@ import { describe, it, expect, beforeEach, afterEach, vi } from 'vitest'; import { ComponentFixture, TestBed } from '@angular/core/testing'; import { FormsModule } from '@angular/forms'; -import { NO_ERRORS_SCHEMA } from '@angular/core'; +import { NO_ERRORS_SCHEMA , EventEmitter } from '@angular/core'; import { MockTranslatePipe } from 'src/test-helpers'; import { EformDocxReportHeaderEditorComponent } from './eform-docx-report-header-editor.component'; import { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog'; @@ -22,9 +22,9 @@ describe('EformDocxReportHeaderEditorComponent', () => { stream: vi.fn((key: string) => of(key)), getParsedResult: vi.fn((translations: any, key: string) => key), getCurrentLang: vi.fn(() => 'en'), - onLangChange: of({ lang: 'en', translations: {} }), - onTranslationChange: of({ lang: 'en', translations: {} }), - onDefaultLangChange: of({ lang: 'en', translations: {} }) + onLangChange: new EventEmitter(), + onTranslationChange: new EventEmitter(), + onDefaultLangChange: new EventEmitter() }; const mockDialogRef = { close: vi.fn(), diff --git a/eform-client/src/app/modules/eforms/eform-docx-report/components/eform-docx-report-header/eform-docx-report-header.component.spec.ts b/eform-client/src/app/modules/eforms/eform-docx-report/components/eform-docx-report-header/eform-docx-report-header.component.spec.ts index 50be3fa83c..2d12a72ea8 100644 --- a/eform-client/src/app/modules/eforms/eform-docx-report/components/eform-docx-report-header/eform-docx-report-header.component.spec.ts +++ b/eform-client/src/app/modules/eforms/eform-docx-report/components/eform-docx-report-header/eform-docx-report-header.component.spec.ts @@ -1,7 +1,7 @@ import { describe, it, expect, beforeEach, afterEach, vi } from 'vitest'; import { ComponentFixture, TestBed } from '@angular/core/testing'; import { FormsModule } from '@angular/forms'; -import { NO_ERRORS_SCHEMA } from '@angular/core'; +import { NO_ERRORS_SCHEMA , EventEmitter } from '@angular/core'; import { MockTranslatePipe } from 'src/test-helpers'; import { EformDocxReportHeaderComponent } from './eform-docx-report-header.component'; import { TranslateService } from '@ngx-translate/core'; @@ -22,9 +22,9 @@ describe('EformDocxReportHeaderComponent', () => { stream: vi.fn((key: string) => of(key)), getParsedResult: vi.fn((translations: any, key: string) => key), getCurrentLang: vi.fn(() => 'en'), - onLangChange: of({ lang: 'en', translations: {} }), - onTranslationChange: of({ lang: 'en', translations: {} }), - onDefaultLangChange: of({ lang: 'en', translations: {} }) + onLangChange: new EventEmitter(), + onTranslationChange: new EventEmitter(), + onDefaultLangChange: new EventEmitter() }; TestBed.configureTestingModule({ diff --git a/eform-client/src/app/modules/email-recipients/components/recipients/email-recipient-delete/email-recipient-delete.component.spec.ts b/eform-client/src/app/modules/email-recipients/components/recipients/email-recipient-delete/email-recipient-delete.component.spec.ts index 2058680856..e05e15617f 100644 --- a/eform-client/src/app/modules/email-recipients/components/recipients/email-recipient-delete/email-recipient-delete.component.spec.ts +++ b/eform-client/src/app/modules/email-recipients/components/recipients/email-recipient-delete/email-recipient-delete.component.spec.ts @@ -2,7 +2,7 @@ import { describe, it, expect, beforeEach, afterEach, vi } from 'vitest'; import { ComponentFixture, TestBed } from '@angular/core/testing'; import { FormsModule } from '@angular/forms'; import { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog'; -import { NO_ERRORS_SCHEMA } from '@angular/core'; +import { NO_ERRORS_SCHEMA , EventEmitter } from '@angular/core'; import { of } from 'rxjs'; import { EmailRecipientDeleteComponent } from './email-recipient-delete.component'; @@ -25,9 +25,9 @@ describe('EmailRecipientDeleteComponent', () => { stream: vi.fn((key: string) => of(key)), getParsedResult: vi.fn((translations: any, key: string) => key), getCurrentLang: vi.fn(() => 'en'), - onLangChange: of({ lang: 'en', translations: {} }), - onTranslationChange: of({ lang: 'en', translations: {} }), - onDefaultLangChange: of({ lang: 'en', translations: {} }) + onLangChange: new EventEmitter(), + onTranslationChange: new EventEmitter(), + onDefaultLangChange: new EventEmitter() }; const mockEmailRecipientsService = { delete: vi.fn(), diff --git a/eform-client/src/app/modules/email-recipients/components/recipients/email-recipient-edit/email-recipient-edit.component.spec.ts b/eform-client/src/app/modules/email-recipients/components/recipients/email-recipient-edit/email-recipient-edit.component.spec.ts index 8836440b8e..891fd6f599 100644 --- a/eform-client/src/app/modules/email-recipients/components/recipients/email-recipient-edit/email-recipient-edit.component.spec.ts +++ b/eform-client/src/app/modules/email-recipients/components/recipients/email-recipient-edit/email-recipient-edit.component.spec.ts @@ -2,7 +2,7 @@ import { describe, it, expect, beforeEach, afterEach, vi } from 'vitest'; import { ComponentFixture, TestBed } from '@angular/core/testing'; import { FormsModule } from '@angular/forms'; import { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog'; -import { NO_ERRORS_SCHEMA } from '@angular/core'; +import { NO_ERRORS_SCHEMA , EventEmitter } from '@angular/core'; import { of } from 'rxjs'; import { EmailRecipientEditComponent } from './email-recipient-edit.component'; import { EmailRecipientsService } from 'src/app/common/services'; @@ -24,9 +24,9 @@ describe('EmailRecipientEditComponent', () => { stream: vi.fn((key: string) => of(key)), getParsedResult: vi.fn((translations: any, key: string) => key), getCurrentLang: vi.fn(() => 'en'), - onLangChange: of({ lang: 'en', translations: {} }), - onTranslationChange: of({ lang: 'en', translations: {} }), - onDefaultLangChange: of({ lang: 'en', translations: {} }) + onLangChange: new EventEmitter(), + onTranslationChange: new EventEmitter(), + onDefaultLangChange: new EventEmitter() }; const mockEmailRecipientsService = { update: vi.fn(), diff --git a/eform-client/src/app/modules/email-recipients/components/recipients/email-recipient-new/email-recipients-new.component.spec.ts b/eform-client/src/app/modules/email-recipients/components/recipients/email-recipient-new/email-recipients-new.component.spec.ts index 867dc581c2..d5124f6842 100644 --- a/eform-client/src/app/modules/email-recipients/components/recipients/email-recipient-new/email-recipients-new.component.spec.ts +++ b/eform-client/src/app/modules/email-recipients/components/recipients/email-recipient-new/email-recipients-new.component.spec.ts @@ -2,7 +2,7 @@ import { describe, it, expect, beforeEach, afterEach, vi } from 'vitest'; import { ComponentFixture, TestBed } from '@angular/core/testing'; import { FormsModule } from '@angular/forms'; import { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog'; -import { NO_ERRORS_SCHEMA } from '@angular/core'; +import { NO_ERRORS_SCHEMA , EventEmitter } from '@angular/core'; import { of } from 'rxjs'; import { EmailRecipientsNewComponent } from './email-recipients-new.component'; @@ -25,9 +25,9 @@ describe('EmailRecipientCreateComponent', () => { stream: vi.fn((key: string) => of(key)), getParsedResult: vi.fn((translations: any, key: string) => key), getCurrentLang: vi.fn(() => 'en'), - onLangChange: of({ lang: 'en', translations: {} }), - onTranslationChange: of({ lang: 'en', translations: {} }), - onDefaultLangChange: of({ lang: 'en', translations: {} }) + onLangChange: new EventEmitter(), + onTranslationChange: new EventEmitter(), + onDefaultLangChange: new EventEmitter() }; const mockEmailRecipientsService = { create: vi.fn(), From e1c027136cc31b059d25ac21d1d943efd72f06c9 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 29 Jan 2026 15:25:11 +0000 Subject: [PATCH 18/34] Add complete TranslateService interface to all test mocks Co-authored-by: renemadsen <76994+renemadsen@users.noreply.github.com> --- .../shared-tag-create/shared-tag-create.component.spec.ts | 6 ++++++ .../shared-tag-delete/shared-tag-delete.component.spec.ts | 6 ++++++ .../shared-tag-edit/shared-tag-edit.component.spec.ts | 6 ++++++ .../folders/folder-delete/folder-delete.component.spec.ts | 6 ++++++ .../components/folders/folders/folders.component.spec.ts | 6 ++++++ .../units/unit-create/unit-create.component.spec.ts | 6 ++++++ .../units/units-otp-code/units-otp-code.component.spec.ts | 6 ++++++ .../advanced/components/units/units.component.spec.ts | 6 ++++++ .../workers/worker-delete/worker-delete.component.spec.ts | 6 ++++++ .../components/workers/workers/workers.component.spec.ts | 6 ++++++ .../navigation-menu-custom-dropdown.component.spec.ts | 6 ++++++ .../navigation-menu-custom-link.component.spec.ts | 6 ++++++ .../navigation-menu-custom.component.spec.ts | 6 ++++++ .../navigation-menu-item-delete.component.spec.ts | 6 ++++++ .../navigation-menu-item-edit.component.spec.ts | 6 ++++++ .../navigation-menu-reset.component.spec.ts | 6 ++++++ .../eform-excel-report-modal.component.spec.ts | 6 ++++++ .../eform-docx-report-header-editor.component.spec.ts | 6 ++++++ .../eform-docx-report-header.component.spec.ts | 6 ++++++ .../email-recipient-delete.component.spec.ts | 6 ++++++ .../email-recipient-edit.component.spec.ts | 6 ++++++ .../email-recipients-new.component.spec.ts | 6 ++++++ 22 files changed, 132 insertions(+) diff --git a/eform-client/src/app/common/modules/eform-shared-tags/components/shared-tag-create/shared-tag-create.component.spec.ts b/eform-client/src/app/common/modules/eform-shared-tags/components/shared-tag-create/shared-tag-create.component.spec.ts index 137886bf18..ebd6d9c851 100644 --- a/eform-client/src/app/common/modules/eform-shared-tags/components/shared-tag-create/shared-tag-create.component.spec.ts +++ b/eform-client/src/app/common/modules/eform-shared-tags/components/shared-tag-create/shared-tag-create.component.spec.ts @@ -19,7 +19,13 @@ describe('EmailRecipientTagNewComponent', () => { get: vi.fn((key: string) => of(key)), use: vi.fn(() => of(null)), setDefaultLang: vi.fn(), + getDefaultLang: vi.fn(() => 'en'), + addLangs: vi.fn(), + getLangs: vi.fn(() => ['en']), + getBrowserLang: vi.fn(() => 'en'), + getBrowserCultureLang: vi.fn(() => 'en'), currentLang: 'en', + defaultLang: 'en', stream: vi.fn((key: string) => of(key)), getParsedResult: vi.fn((translations: any, key: string) => key), getCurrentLang: vi.fn(() => 'en'), diff --git a/eform-client/src/app/common/modules/eform-shared-tags/components/shared-tag-delete/shared-tag-delete.component.spec.ts b/eform-client/src/app/common/modules/eform-shared-tags/components/shared-tag-delete/shared-tag-delete.component.spec.ts index f31caacf89..4876cfa088 100644 --- a/eform-client/src/app/common/modules/eform-shared-tags/components/shared-tag-delete/shared-tag-delete.component.spec.ts +++ b/eform-client/src/app/common/modules/eform-shared-tags/components/shared-tag-delete/shared-tag-delete.component.spec.ts @@ -19,7 +19,13 @@ describe('EmailRecipientTagDeleteComponent', () => { get: vi.fn((key: string) => of(key)), use: vi.fn(() => of(null)), setDefaultLang: vi.fn(), + getDefaultLang: vi.fn(() => 'en'), + addLangs: vi.fn(), + getLangs: vi.fn(() => ['en']), + getBrowserLang: vi.fn(() => 'en'), + getBrowserCultureLang: vi.fn(() => 'en'), currentLang: 'en', + defaultLang: 'en', stream: vi.fn((key: string) => of(key)), getParsedResult: vi.fn((translations: any, key: string) => key), getCurrentLang: vi.fn(() => 'en'), diff --git a/eform-client/src/app/common/modules/eform-shared-tags/components/shared-tag-edit/shared-tag-edit.component.spec.ts b/eform-client/src/app/common/modules/eform-shared-tags/components/shared-tag-edit/shared-tag-edit.component.spec.ts index 1f87f91b1a..f4678eaa81 100644 --- a/eform-client/src/app/common/modules/eform-shared-tags/components/shared-tag-edit/shared-tag-edit.component.spec.ts +++ b/eform-client/src/app/common/modules/eform-shared-tags/components/shared-tag-edit/shared-tag-edit.component.spec.ts @@ -19,7 +19,13 @@ describe('EmailRecipientTagEditComponent', () => { get: vi.fn((key: string) => of(key)), use: vi.fn(() => of(null)), setDefaultLang: vi.fn(), + getDefaultLang: vi.fn(() => 'en'), + addLangs: vi.fn(), + getLangs: vi.fn(() => ['en']), + getBrowserLang: vi.fn(() => 'en'), + getBrowserCultureLang: vi.fn(() => 'en'), currentLang: 'en', + defaultLang: 'en', stream: vi.fn((key: string) => of(key)), getParsedResult: vi.fn((translations: any, key: string) => key), getCurrentLang: vi.fn(() => 'en'), diff --git a/eform-client/src/app/modules/advanced/components/folders/folder-delete/folder-delete.component.spec.ts b/eform-client/src/app/modules/advanced/components/folders/folder-delete/folder-delete.component.spec.ts index a91dc12855..7a3ab14c03 100644 --- a/eform-client/src/app/modules/advanced/components/folders/folder-delete/folder-delete.component.spec.ts +++ b/eform-client/src/app/modules/advanced/components/folders/folder-delete/folder-delete.component.spec.ts @@ -23,7 +23,13 @@ describe('FolderDeleteComponent', () => { get: vi.fn((key: string) => of(key)), use: vi.fn(() => of(null)), setDefaultLang: vi.fn(), + getDefaultLang: vi.fn(() => 'en'), + addLangs: vi.fn(), + getLangs: vi.fn(() => ['en']), + getBrowserLang: vi.fn(() => 'en'), + getBrowserCultureLang: vi.fn(() => 'en'), currentLang: 'en', + defaultLang: 'en', stream: vi.fn((key: string) => of(key)), getParsedResult: vi.fn((translations: any, key: string) => key), getCurrentLang: vi.fn(() => 'en'), diff --git a/eform-client/src/app/modules/advanced/components/folders/folders/folders.component.spec.ts b/eform-client/src/app/modules/advanced/components/folders/folders/folders.component.spec.ts index 3761440665..415c0527d8 100644 --- a/eform-client/src/app/modules/advanced/components/folders/folders/folders.component.spec.ts +++ b/eform-client/src/app/modules/advanced/components/folders/folders/folders.component.spec.ts @@ -25,7 +25,13 @@ describe('FoldersComponent', () => { get: vi.fn((key: string) => of(key)), use: vi.fn(() => of(null)), setDefaultLang: vi.fn(), + getDefaultLang: vi.fn(() => 'en'), + addLangs: vi.fn(), + getLangs: vi.fn(() => ['en']), + getBrowserLang: vi.fn(() => 'en'), + getBrowserCultureLang: vi.fn(() => 'en'), currentLang: 'en', + defaultLang: 'en', stream: vi.fn((key: string) => of(key)), getParsedResult: vi.fn((translations: any, key: string) => key), getCurrentLang: vi.fn(() => 'en'), diff --git a/eform-client/src/app/modules/advanced/components/units/unit-create/unit-create.component.spec.ts b/eform-client/src/app/modules/advanced/components/units/unit-create/unit-create.component.spec.ts index 2cef7b3fca..134895ca30 100644 --- a/eform-client/src/app/modules/advanced/components/units/unit-create/unit-create.component.spec.ts +++ b/eform-client/src/app/modules/advanced/components/units/unit-create/unit-create.component.spec.ts @@ -24,7 +24,13 @@ describe('UnitCreateComponent', () => { get: vi.fn((key: string) => of(key)), use: vi.fn(() => of(null)), setDefaultLang: vi.fn(), + getDefaultLang: vi.fn(() => 'en'), + addLangs: vi.fn(), + getLangs: vi.fn(() => ['en']), + getBrowserLang: vi.fn(() => 'en'), + getBrowserCultureLang: vi.fn(() => 'en'), currentLang: 'en', + defaultLang: 'en', stream: vi.fn((key: string) => of(key)), getParsedResult: vi.fn((translations: any, key: string) => key), getCurrentLang: vi.fn(() => 'en'), diff --git a/eform-client/src/app/modules/advanced/components/units/units-otp-code/units-otp-code.component.spec.ts b/eform-client/src/app/modules/advanced/components/units/units-otp-code/units-otp-code.component.spec.ts index ccb13d6a11..b3f61c2fd9 100644 --- a/eform-client/src/app/modules/advanced/components/units/units-otp-code/units-otp-code.component.spec.ts +++ b/eform-client/src/app/modules/advanced/components/units/units-otp-code/units-otp-code.component.spec.ts @@ -23,7 +23,13 @@ describe('UnitsOtpCodeComponent', () => { get: vi.fn((key: string) => of(key)), use: vi.fn(() => of(null)), setDefaultLang: vi.fn(), + getDefaultLang: vi.fn(() => 'en'), + addLangs: vi.fn(), + getLangs: vi.fn(() => ['en']), + getBrowserLang: vi.fn(() => 'en'), + getBrowserCultureLang: vi.fn(() => 'en'), currentLang: 'en', + defaultLang: 'en', stream: vi.fn((key: string) => of(key)), getParsedResult: vi.fn((translations: any, key: string) => key), getCurrentLang: vi.fn(() => 'en'), diff --git a/eform-client/src/app/modules/advanced/components/units/units.component.spec.ts b/eform-client/src/app/modules/advanced/components/units/units.component.spec.ts index dc764d7ecd..e630d67c7d 100644 --- a/eform-client/src/app/modules/advanced/components/units/units.component.spec.ts +++ b/eform-client/src/app/modules/advanced/components/units/units.component.spec.ts @@ -25,7 +25,13 @@ describe('UnitsComponent', () => { get: vi.fn((key: string) => of(key)), use: vi.fn(() => of(null)), setDefaultLang: vi.fn(), + getDefaultLang: vi.fn(() => 'en'), + addLangs: vi.fn(), + getLangs: vi.fn(() => ['en']), + getBrowserLang: vi.fn(() => 'en'), + getBrowserCultureLang: vi.fn(() => 'en'), currentLang: 'en', + defaultLang: 'en', stream: vi.fn((key: string) => of(key)), getParsedResult: vi.fn((translations: any, key: string) => key), getCurrentLang: vi.fn(() => 'en'), diff --git a/eform-client/src/app/modules/advanced/components/workers/worker-delete/worker-delete.component.spec.ts b/eform-client/src/app/modules/advanced/components/workers/worker-delete/worker-delete.component.spec.ts index 13a76f7bcc..9f33cc4deb 100644 --- a/eform-client/src/app/modules/advanced/components/workers/worker-delete/worker-delete.component.spec.ts +++ b/eform-client/src/app/modules/advanced/components/workers/worker-delete/worker-delete.component.spec.ts @@ -23,7 +23,13 @@ describe.skip('WorkerDeleteComponent', () => { get: vi.fn((key: string) => of(key)), use: vi.fn(() => of(null)), setDefaultLang: vi.fn(), + getDefaultLang: vi.fn(() => 'en'), + addLangs: vi.fn(), + getLangs: vi.fn(() => ['en']), + getBrowserLang: vi.fn(() => 'en'), + getBrowserCultureLang: vi.fn(() => 'en'), currentLang: 'en', + defaultLang: 'en', stream: vi.fn((key: string) => of(key)), getParsedResult: vi.fn((translations: any, key: string) => key), getCurrentLang: vi.fn(() => 'en'), diff --git a/eform-client/src/app/modules/advanced/components/workers/workers/workers.component.spec.ts b/eform-client/src/app/modules/advanced/components/workers/workers/workers.component.spec.ts index 0277d9fd04..b5f5fe5719 100644 --- a/eform-client/src/app/modules/advanced/components/workers/workers/workers.component.spec.ts +++ b/eform-client/src/app/modules/advanced/components/workers/workers/workers.component.spec.ts @@ -26,7 +26,13 @@ describe('WorkersComponent', () => { get: vi.fn((key: string) => of(key)), use: vi.fn(() => of(null)), setDefaultLang: vi.fn(), + getDefaultLang: vi.fn(() => 'en'), + addLangs: vi.fn(), + getLangs: vi.fn(() => ['en']), + getBrowserLang: vi.fn(() => 'en'), + getBrowserCultureLang: vi.fn(() => 'en'), currentLang: 'en', + defaultLang: 'en', stream: vi.fn((key: string) => of(key)), getParsedResult: vi.fn((translations: any, key: string) => key), getCurrentLang: vi.fn(() => 'en'), diff --git a/eform-client/src/app/modules/advanced/modules/navigation-menu/components/menu-custom/navigation-menu-custom-dropdown/navigation-menu-custom-dropdown.component.spec.ts b/eform-client/src/app/modules/advanced/modules/navigation-menu/components/menu-custom/navigation-menu-custom-dropdown/navigation-menu-custom-dropdown.component.spec.ts index e84134552a..a7213e59c0 100644 --- a/eform-client/src/app/modules/advanced/modules/navigation-menu/components/menu-custom/navigation-menu-custom-dropdown/navigation-menu-custom-dropdown.component.spec.ts +++ b/eform-client/src/app/modules/advanced/modules/navigation-menu/components/menu-custom/navigation-menu-custom-dropdown/navigation-menu-custom-dropdown.component.spec.ts @@ -19,7 +19,13 @@ describe('NavigationMenuCustomDropdownComponent', () => { get: vi.fn((key: string) => of(key)), use: vi.fn(() => of(null)), setDefaultLang: vi.fn(), + getDefaultLang: vi.fn(() => 'en'), + addLangs: vi.fn(), + getLangs: vi.fn(() => ['en']), + getBrowserLang: vi.fn(() => 'en'), + getBrowserCultureLang: vi.fn(() => 'en'), currentLang: 'en', + defaultLang: 'en', stream: vi.fn((key: string) => of(key)), getParsedResult: vi.fn((translations: any, key: string) => key), getCurrentLang: vi.fn(() => 'en'), diff --git a/eform-client/src/app/modules/advanced/modules/navigation-menu/components/menu-custom/navigation-menu-custom-link/navigation-menu-custom-link.component.spec.ts b/eform-client/src/app/modules/advanced/modules/navigation-menu/components/menu-custom/navigation-menu-custom-link/navigation-menu-custom-link.component.spec.ts index a40c3af70d..f736a62f2a 100644 --- a/eform-client/src/app/modules/advanced/modules/navigation-menu/components/menu-custom/navigation-menu-custom-link/navigation-menu-custom-link.component.spec.ts +++ b/eform-client/src/app/modules/advanced/modules/navigation-menu/components/menu-custom/navigation-menu-custom-link/navigation-menu-custom-link.component.spec.ts @@ -19,7 +19,13 @@ describe('NavigationMenuCustomLinkComponent', () => { get: vi.fn((key: string) => of(key)), use: vi.fn(() => of(null)), setDefaultLang: vi.fn(), + getDefaultLang: vi.fn(() => 'en'), + addLangs: vi.fn(), + getLangs: vi.fn(() => ['en']), + getBrowserLang: vi.fn(() => 'en'), + getBrowserCultureLang: vi.fn(() => 'en'), currentLang: 'en', + defaultLang: 'en', stream: vi.fn((key: string) => of(key)), getParsedResult: vi.fn((translations: any, key: string) => key), getCurrentLang: vi.fn(() => 'en'), diff --git a/eform-client/src/app/modules/advanced/modules/navigation-menu/components/menu-custom/navigation-menu-custom/navigation-menu-custom.component.spec.ts b/eform-client/src/app/modules/advanced/modules/navigation-menu/components/menu-custom/navigation-menu-custom/navigation-menu-custom.component.spec.ts index 1d2fac123f..d0b54b8623 100644 --- a/eform-client/src/app/modules/advanced/modules/navigation-menu/components/menu-custom/navigation-menu-custom/navigation-menu-custom.component.spec.ts +++ b/eform-client/src/app/modules/advanced/modules/navigation-menu/components/menu-custom/navigation-menu-custom/navigation-menu-custom.component.spec.ts @@ -17,7 +17,13 @@ describe('NavigationMenuCustomComponent', () => { get: vi.fn((key: string) => of(key)), use: vi.fn(() => of(null)), setDefaultLang: vi.fn(), + getDefaultLang: vi.fn(() => 'en'), + addLangs: vi.fn(), + getLangs: vi.fn(() => ['en']), + getBrowserLang: vi.fn(() => 'en'), + getBrowserCultureLang: vi.fn(() => 'en'), currentLang: 'en', + defaultLang: 'en', stream: vi.fn((key: string) => of(key)), getParsedResult: vi.fn((translations: any, key: string) => key), getCurrentLang: vi.fn(() => 'en'), diff --git a/eform-client/src/app/modules/advanced/modules/navigation-menu/components/menu-item/navigation-menu-item-delete/navigation-menu-item-delete.component.spec.ts b/eform-client/src/app/modules/advanced/modules/navigation-menu/components/menu-item/navigation-menu-item-delete/navigation-menu-item-delete.component.spec.ts index f2bf25b02f..2296cbde2c 100644 --- a/eform-client/src/app/modules/advanced/modules/navigation-menu/components/menu-item/navigation-menu-item-delete/navigation-menu-item-delete.component.spec.ts +++ b/eform-client/src/app/modules/advanced/modules/navigation-menu/components/menu-item/navigation-menu-item-delete/navigation-menu-item-delete.component.spec.ts @@ -19,7 +19,13 @@ describe('NavigationMenuItemDeleteComponent', () => { get: vi.fn((key: string) => of(key)), use: vi.fn(() => of(null)), setDefaultLang: vi.fn(), + getDefaultLang: vi.fn(() => 'en'), + addLangs: vi.fn(), + getLangs: vi.fn(() => ['en']), + getBrowserLang: vi.fn(() => 'en'), + getBrowserCultureLang: vi.fn(() => 'en'), currentLang: 'en', + defaultLang: 'en', stream: vi.fn((key: string) => of(key)), getParsedResult: vi.fn((translations: any, key: string) => key), getCurrentLang: vi.fn(() => 'en'), diff --git a/eform-client/src/app/modules/advanced/modules/navigation-menu/components/menu-item/navigation-menu-item-edit/navigation-menu-item-edit.component.spec.ts b/eform-client/src/app/modules/advanced/modules/navigation-menu/components/menu-item/navigation-menu-item-edit/navigation-menu-item-edit.component.spec.ts index 8879a8536e..0659485cf6 100644 --- a/eform-client/src/app/modules/advanced/modules/navigation-menu/components/menu-item/navigation-menu-item-edit/navigation-menu-item-edit.component.spec.ts +++ b/eform-client/src/app/modules/advanced/modules/navigation-menu/components/menu-item/navigation-menu-item-edit/navigation-menu-item-edit.component.spec.ts @@ -19,7 +19,13 @@ describe.skip('NavigationMenuItemEditComponent', () => { get: vi.fn((key: string) => of(key)), use: vi.fn(() => of(null)), setDefaultLang: vi.fn(), + getDefaultLang: vi.fn(() => 'en'), + addLangs: vi.fn(), + getLangs: vi.fn(() => ['en']), + getBrowserLang: vi.fn(() => 'en'), + getBrowserCultureLang: vi.fn(() => 'en'), currentLang: 'en', + defaultLang: 'en', stream: vi.fn((key: string) => of(key)), getParsedResult: vi.fn((translations: any, key: string) => key), getCurrentLang: vi.fn(() => 'en'), diff --git a/eform-client/src/app/modules/advanced/modules/navigation-menu/components/navigation-menu-reset/navigation-menu-reset.component.spec.ts b/eform-client/src/app/modules/advanced/modules/navigation-menu/components/navigation-menu-reset/navigation-menu-reset.component.spec.ts index 77daa0a137..fd889341e9 100644 --- a/eform-client/src/app/modules/advanced/modules/navigation-menu/components/navigation-menu-reset/navigation-menu-reset.component.spec.ts +++ b/eform-client/src/app/modules/advanced/modules/navigation-menu/components/navigation-menu-reset/navigation-menu-reset.component.spec.ts @@ -19,7 +19,13 @@ describe('NavigationMenuResetComponent', () => { get: vi.fn((key: string) => of(key)), use: vi.fn(() => of(null)), setDefaultLang: vi.fn(), + getDefaultLang: vi.fn(() => 'en'), + addLangs: vi.fn(), + getLangs: vi.fn(() => ['en']), + getBrowserLang: vi.fn(() => 'en'), + getBrowserCultureLang: vi.fn(() => 'en'), currentLang: 'en', + defaultLang: 'en', stream: vi.fn((key: string) => of(key)), getParsedResult: vi.fn((translations: any, key: string) => key), getCurrentLang: vi.fn(() => 'en'), diff --git a/eform-client/src/app/modules/eforms/components/eform-excel-report-modal/eform-excel-report-modal.component.spec.ts b/eform-client/src/app/modules/eforms/components/eform-excel-report-modal/eform-excel-report-modal.component.spec.ts index 3034dd89ed..3a436f7f33 100644 --- a/eform-client/src/app/modules/eforms/components/eform-excel-report-modal/eform-excel-report-modal.component.spec.ts +++ b/eform-client/src/app/modules/eforms/components/eform-excel-report-modal/eform-excel-report-modal.component.spec.ts @@ -19,7 +19,13 @@ describe('EformExcelReportModalComponent', () => { get: vi.fn((key: string) => of(key)), use: vi.fn(() => of(null)), setDefaultLang: vi.fn(), + getDefaultLang: vi.fn(() => 'en'), + addLangs: vi.fn(), + getLangs: vi.fn(() => ['en']), + getBrowserLang: vi.fn(() => 'en'), + getBrowserCultureLang: vi.fn(() => 'en'), currentLang: 'en', + defaultLang: 'en', stream: vi.fn((key: string) => of(key)), getParsedResult: vi.fn((translations: any, key: string) => key), getCurrentLang: vi.fn(() => 'en'), diff --git a/eform-client/src/app/modules/eforms/eform-docx-report/components/eform-docx-report-header-editor/eform-docx-report-header-editor.component.spec.ts b/eform-client/src/app/modules/eforms/eform-docx-report/components/eform-docx-report-header-editor/eform-docx-report-header-editor.component.spec.ts index ca0edcfe14..c300cbe834 100644 --- a/eform-client/src/app/modules/eforms/eform-docx-report/components/eform-docx-report-header-editor/eform-docx-report-header-editor.component.spec.ts +++ b/eform-client/src/app/modules/eforms/eform-docx-report/components/eform-docx-report-header-editor/eform-docx-report-header-editor.component.spec.ts @@ -18,7 +18,13 @@ describe('EformDocxReportHeaderEditorComponent', () => { get: vi.fn((key: string) => of(key)), use: vi.fn(() => of(null)), setDefaultLang: vi.fn(), + getDefaultLang: vi.fn(() => 'en'), + addLangs: vi.fn(), + getLangs: vi.fn(() => ['en']), + getBrowserLang: vi.fn(() => 'en'), + getBrowserCultureLang: vi.fn(() => 'en'), currentLang: 'en', + defaultLang: 'en', stream: vi.fn((key: string) => of(key)), getParsedResult: vi.fn((translations: any, key: string) => key), getCurrentLang: vi.fn(() => 'en'), diff --git a/eform-client/src/app/modules/eforms/eform-docx-report/components/eform-docx-report-header/eform-docx-report-header.component.spec.ts b/eform-client/src/app/modules/eforms/eform-docx-report/components/eform-docx-report-header/eform-docx-report-header.component.spec.ts index 2d12a72ea8..8bae21a5a1 100644 --- a/eform-client/src/app/modules/eforms/eform-docx-report/components/eform-docx-report-header/eform-docx-report-header.component.spec.ts +++ b/eform-client/src/app/modules/eforms/eform-docx-report/components/eform-docx-report-header/eform-docx-report-header.component.spec.ts @@ -18,7 +18,13 @@ describe('EformDocxReportHeaderComponent', () => { get: vi.fn((key: string) => of(key)), use: vi.fn(() => of(null)), setDefaultLang: vi.fn(), + getDefaultLang: vi.fn(() => 'en'), + addLangs: vi.fn(), + getLangs: vi.fn(() => ['en']), + getBrowserLang: vi.fn(() => 'en'), + getBrowserCultureLang: vi.fn(() => 'en'), currentLang: 'en', + defaultLang: 'en', stream: vi.fn((key: string) => of(key)), getParsedResult: vi.fn((translations: any, key: string) => key), getCurrentLang: vi.fn(() => 'en'), diff --git a/eform-client/src/app/modules/email-recipients/components/recipients/email-recipient-delete/email-recipient-delete.component.spec.ts b/eform-client/src/app/modules/email-recipients/components/recipients/email-recipient-delete/email-recipient-delete.component.spec.ts index e05e15617f..37d070dd48 100644 --- a/eform-client/src/app/modules/email-recipients/components/recipients/email-recipient-delete/email-recipient-delete.component.spec.ts +++ b/eform-client/src/app/modules/email-recipients/components/recipients/email-recipient-delete/email-recipient-delete.component.spec.ts @@ -21,7 +21,13 @@ describe('EmailRecipientDeleteComponent', () => { get: vi.fn((key: string) => of(key)), use: vi.fn(() => of(null)), setDefaultLang: vi.fn(), + getDefaultLang: vi.fn(() => 'en'), + addLangs: vi.fn(), + getLangs: vi.fn(() => ['en']), + getBrowserLang: vi.fn(() => 'en'), + getBrowserCultureLang: vi.fn(() => 'en'), currentLang: 'en', + defaultLang: 'en', stream: vi.fn((key: string) => of(key)), getParsedResult: vi.fn((translations: any, key: string) => key), getCurrentLang: vi.fn(() => 'en'), diff --git a/eform-client/src/app/modules/email-recipients/components/recipients/email-recipient-edit/email-recipient-edit.component.spec.ts b/eform-client/src/app/modules/email-recipients/components/recipients/email-recipient-edit/email-recipient-edit.component.spec.ts index 891fd6f599..8b2cd1709b 100644 --- a/eform-client/src/app/modules/email-recipients/components/recipients/email-recipient-edit/email-recipient-edit.component.spec.ts +++ b/eform-client/src/app/modules/email-recipients/components/recipients/email-recipient-edit/email-recipient-edit.component.spec.ts @@ -20,7 +20,13 @@ describe('EmailRecipientEditComponent', () => { get: vi.fn((key: string) => of(key)), use: vi.fn(() => of(null)), setDefaultLang: vi.fn(), + getDefaultLang: vi.fn(() => 'en'), + addLangs: vi.fn(), + getLangs: vi.fn(() => ['en']), + getBrowserLang: vi.fn(() => 'en'), + getBrowserCultureLang: vi.fn(() => 'en'), currentLang: 'en', + defaultLang: 'en', stream: vi.fn((key: string) => of(key)), getParsedResult: vi.fn((translations: any, key: string) => key), getCurrentLang: vi.fn(() => 'en'), diff --git a/eform-client/src/app/modules/email-recipients/components/recipients/email-recipient-new/email-recipients-new.component.spec.ts b/eform-client/src/app/modules/email-recipients/components/recipients/email-recipient-new/email-recipients-new.component.spec.ts index d5124f6842..a799fd04c8 100644 --- a/eform-client/src/app/modules/email-recipients/components/recipients/email-recipient-new/email-recipients-new.component.spec.ts +++ b/eform-client/src/app/modules/email-recipients/components/recipients/email-recipient-new/email-recipients-new.component.spec.ts @@ -21,7 +21,13 @@ describe('EmailRecipientCreateComponent', () => { get: vi.fn((key: string) => of(key)), use: vi.fn(() => of(null)), setDefaultLang: vi.fn(), + getDefaultLang: vi.fn(() => 'en'), + addLangs: vi.fn(), + getLangs: vi.fn(() => ['en']), + getBrowserLang: vi.fn(() => 'en'), + getBrowserCultureLang: vi.fn(() => 'en'), currentLang: 'en', + defaultLang: 'en', stream: vi.fn((key: string) => of(key)), getParsedResult: vi.fn((translations: any, key: string) => key), getCurrentLang: vi.fn(() => 'en'), From 677a68991b1c63c0c278b931d1e15e55f870c357 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 29 Jan 2026 17:31:43 +0000 Subject: [PATCH 19/34] Fix mtx-select dropdown z-index issues in modals for Angular 21 Co-authored-by: renemadsen <76994+renemadsen@users.noreply.github.com> --- .../navigation-menu-custom-dropdown.component.html | 1 + .../navigation-menu-custom-link.component.html | 1 + .../navigation-menu-item-edit.component.html | 1 + .../eform-create-modal.component.html | 1 + .../visual-editor-field-modal.component.html | 1 + eform-client/src/scss/styles.scss | 11 +++++++++++ 6 files changed, 16 insertions(+) diff --git a/eform-client/src/app/modules/advanced/modules/navigation-menu/components/menu-custom/navigation-menu-custom-dropdown/navigation-menu-custom-dropdown.component.html b/eform-client/src/app/modules/advanced/modules/navigation-menu/components/menu-custom/navigation-menu-custom-dropdown/navigation-menu-custom-dropdown.component.html index 88e58c5dd9..14a34d0bb1 100644 --- a/eform-client/src/app/modules/advanced/modules/navigation-menu/components/menu-custom/navigation-menu-custom-dropdown/navigation-menu-custom-dropdown.component.html +++ b/eform-client/src/app/modules/advanced/modules/navigation-menu/components/menu-custom/navigation-menu-custom-dropdown/navigation-menu-custom-dropdown.component.html @@ -4,6 +4,7 @@

{{'New dropdown' | translate}}

{{'Security groups' | translate}} {{ 'New custom link' | translate }} {{ 'Security groups' | translate }} {{'Edit menu entry' | translate}} {{'Security groups' | translate}} {{ 'Create eForm' | translate }} {{ (isFieldSelected ? 'Edit field' : 'New field') | transla Date: Thu, 29 Jan 2026 17:41:01 +0000 Subject: [PATCH 20/34] Fix Angular 21 modal/dialog positioning and rendering issues Co-authored-by: renemadsen <76994+renemadsen@users.noreply.github.com> --- .../common/helpers/dialog-config.helper.ts | 3 +- eform-client/src/scss/styles.scss | 58 +++++++++++++++++++ 2 files changed, 60 insertions(+), 1 deletion(-) diff --git a/eform-client/src/app/common/helpers/dialog-config.helper.ts b/eform-client/src/app/common/helpers/dialog-config.helper.ts index 4d82179d81..01e8a763ab 100644 --- a/eform-client/src/app/common/helpers/dialog-config.helper.ts +++ b/eform-client/src/app/common/helpers/dialog-config.helper.ts @@ -4,8 +4,9 @@ import { MatDialogConfig } from '@angular/material/dialog'; export function dialogConfigHelper(overlay: Overlay, data?: any): MatDialogConfig { return { disableClose: true, + hasBackdrop: true, minWidth: 300, - scrollStrategy: overlay.scrollStrategies.reposition(), + scrollStrategy: overlay.scrollStrategies.block(), data: data, } } diff --git a/eform-client/src/scss/styles.scss b/eform-client/src/scss/styles.scss index 7be4e157b8..fed95103ce 100644 --- a/eform-client/src/scss/styles.scss +++ b/eform-client/src/scss/styles.scss @@ -1532,3 +1532,61 @@ app-footer { .cdk-overlay-container .ng-dropdown-panel { z-index: 10000 !important; } + +// Fix Angular 21 dialog/modal positioning and backdrop +.cdk-global-overlay-wrapper { + display: flex !important; + position: absolute !important; + z-index: 1000 !important; + pointer-events: none !important; + top: 0 !important; + left: 0 !important; + height: 100% !important; + width: 100% !important; + justify-content: center !important; + align-items: center !important; +} + +.cdk-overlay-pane { + position: relative !important; + pointer-events: auto !important; + box-sizing: border-box !important; + z-index: 1000 !important; + display: flex !important; + max-width: 100vw !important; + max-height: 100vh !important; +} + +.cdk-overlay-backdrop { + position: absolute !important; + top: 0 !important; + bottom: 0 !important; + left: 0 !important; + right: 0 !important; + z-index: 1000 !important; + pointer-events: auto !important; + -webkit-tap-highlight-color: transparent !important; + transition: opacity 400ms cubic-bezier(0.25, 0.8, 0.25, 1) !important; + opacity: 1 !important; +} + +.mat-mdc-dialog-container { + display: flex !important; + flex-direction: column !important; + box-sizing: border-box !important; + overflow: auto !important; + outline: 0 !important; + width: 100% !important; + height: 100% !important; + min-height: inherit !important; + max-height: inherit !important; + pointer-events: auto !important; +} + +.mat-mdc-dialog-surface { + display: flex !important; + flex-direction: column !important; + flex-grow: 1 !important; + overflow: auto !important; + max-height: 65vh !important; +} From 408d1a0cb2ab644acc831040095ecf46468328c7 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 29 Jan 2026 17:46:44 +0000 Subject: [PATCH 21/34] Fix modal backdrop to be semi-transparent instead of completely opaque Co-authored-by: renemadsen <76994+renemadsen@users.noreply.github.com> --- eform-client/src/scss/styles.scss | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/eform-client/src/scss/styles.scss b/eform-client/src/scss/styles.scss index fed95103ce..2897c9447f 100644 --- a/eform-client/src/scss/styles.scss +++ b/eform-client/src/scss/styles.scss @@ -504,7 +504,7 @@ ngx-material-timepicker-container { } .cdk-overlay-backdrop { - background-color: rgba(0, 0, 0, 1) !important; + background-color: rgba(0, 0, 0, 0.32) !important; } From 0fbca2433ddb858b4f41bf6c279432cc634b142e Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 29 Jan 2026 17:54:10 +0000 Subject: [PATCH 22/34] Revert appendTo="body" additions from modal components Co-authored-by: renemadsen <76994+renemadsen@users.noreply.github.com> --- .../navigation-menu-custom-dropdown.component.html | 1 - .../navigation-menu-custom-link.component.html | 1 - .../navigation-menu-item-edit.component.html | 1 - .../eform-create-modal/eform-create-modal.component.html | 1 - .../visual-editor-field-modal.component.html | 1 - 5 files changed, 5 deletions(-) diff --git a/eform-client/src/app/modules/advanced/modules/navigation-menu/components/menu-custom/navigation-menu-custom-dropdown/navigation-menu-custom-dropdown.component.html b/eform-client/src/app/modules/advanced/modules/navigation-menu/components/menu-custom/navigation-menu-custom-dropdown/navigation-menu-custom-dropdown.component.html index 14a34d0bb1..88e58c5dd9 100644 --- a/eform-client/src/app/modules/advanced/modules/navigation-menu/components/menu-custom/navigation-menu-custom-dropdown/navigation-menu-custom-dropdown.component.html +++ b/eform-client/src/app/modules/advanced/modules/navigation-menu/components/menu-custom/navigation-menu-custom-dropdown/navigation-menu-custom-dropdown.component.html @@ -4,7 +4,6 @@

{{'New dropdown' | translate}}

{{'Security groups' | translate}} {{ 'New custom link' | translate }} {{ 'Security groups' | translate }} {{'Edit menu entry' | translate}} {{'Security groups' | translate}} {{ 'Create eForm' | translate }} {{ (isFieldSelected ? 'Edit field' : 'New field') | transla Date: Thu, 29 Jan 2026 18:00:23 +0000 Subject: [PATCH 23/34] Fix Angular 21 CDK overlay structure with nested backdrop Co-authored-by: renemadsen <76994+renemadsen@users.noreply.github.com> --- eform-client/src/scss/styles.scss | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/eform-client/src/scss/styles.scss b/eform-client/src/scss/styles.scss index 2897c9447f..9f64b877f5 100644 --- a/eform-client/src/scss/styles.scss +++ b/eform-client/src/scss/styles.scss @@ -1547,11 +1547,17 @@ app-footer { align-items: center !important; } +// Angular 21 specific: handle the new cdk-overlay-popover wrapper +.cdk-overlay-popover.cdk-global-overlay-wrapper { + position: fixed !important; + inset: 0 !important; +} + .cdk-overlay-pane { position: relative !important; pointer-events: auto !important; box-sizing: border-box !important; - z-index: 1000 !important; + z-index: 1001 !important; display: flex !important; max-width: 100vw !important; max-height: 100vh !important; @@ -1570,6 +1576,12 @@ app-footer { opacity: 1 !important; } +// Angular 21: When backdrop is inside the wrapper, ensure it's positioned correctly +.cdk-overlay-popover .cdk-overlay-backdrop { + position: fixed !important; + inset: 0 !important; +} + .mat-mdc-dialog-container { display: flex !important; flex-direction: column !important; From fa5dc4a29abcaaea5d2eab549f4f6daf13846dee Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 29 Jan 2026 18:05:53 +0000 Subject: [PATCH 24/34] Fix popover top layer blocking dropdowns by using maximum z-index Co-authored-by: renemadsen <76994+renemadsen@users.noreply.github.com> --- eform-client/src/scss/styles.scss | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/eform-client/src/scss/styles.scss b/eform-client/src/scss/styles.scss index 9f64b877f5..b002ccc18a 100644 --- a/eform-client/src/scss/styles.scss +++ b/eform-client/src/scss/styles.scss @@ -1533,6 +1533,26 @@ app-footer { z-index: 10000 !important; } +// Angular 21: Fix popover top layer blocking dropdowns +// The popover attribute places modal in browser's "top layer" which blocks dropdowns +// We need to ensure dropdowns also render in or above the top layer +[popover] .ng-dropdown-panel, +.cdk-overlay-popover .ng-dropdown-panel { + z-index: 2147483647 !important; // Max z-index value to appear above popover top layer +} + +// Ensure the overlay container itself can contain high z-index elements +.cdk-overlay-container { + z-index: 2147483647 !important; + position: fixed !important; + pointer-events: none !important; +} + +// Allow interaction with elements inside the overlay container +.cdk-overlay-container > * { + pointer-events: auto !important; +} + // Fix Angular 21 dialog/modal positioning and backdrop .cdk-global-overlay-wrapper { display: flex !important; From 8106a5288f5199eaccb15c88a6f771f70d03c97e Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 29 Jan 2026 18:15:24 +0000 Subject: [PATCH 25/34] Revert all mtx-select and modal CSS/dialog fixes that broke tooltips Co-authored-by: renemadsen <76994+renemadsen@users.noreply.github.com> --- .../common/helpers/dialog-config.helper.ts | 3 +- .../sites/site-edit/site-edit.component.html | 2 +- ...gation-menu-custom-dropdown.component.html | 2 +- ...navigation-menu-custom-link.component.html | 2 +- .../navigation-menu-item-edit.component.html | 2 +- .../eform-create-modal.component.html | 2 +- .../eform-edit-tags-modal.component.html | 2 +- .../eforms-page/eforms-page.component.html | 2 +- ...itional-field-entity-search.component.html | 2 +- ...itional-field-entity-select.component.html | 2 +- .../visual-editor-field-modal.component.html | 2 +- .../eform-visual-editor-header.component.html | 2 +- .../email-recipient-edit.component.html | 2 +- .../email-recipients-new.component.html | 2 +- eform-client/src/scss/styles.scss | 101 ------------------ 15 files changed, 14 insertions(+), 116 deletions(-) diff --git a/eform-client/src/app/common/helpers/dialog-config.helper.ts b/eform-client/src/app/common/helpers/dialog-config.helper.ts index 01e8a763ab..4d82179d81 100644 --- a/eform-client/src/app/common/helpers/dialog-config.helper.ts +++ b/eform-client/src/app/common/helpers/dialog-config.helper.ts @@ -4,9 +4,8 @@ import { MatDialogConfig } from '@angular/material/dialog'; export function dialogConfigHelper(overlay: Overlay, data?: any): MatDialogConfig { return { disableClose: true, - hasBackdrop: true, minWidth: 300, - scrollStrategy: overlay.scrollStrategies.block(), + scrollStrategy: overlay.scrollStrategies.reposition(), data: data, } } diff --git a/eform-client/src/app/modules/advanced/components/sites/site-edit/site-edit.component.html b/eform-client/src/app/modules/advanced/components/sites/site-edit/site-edit.component.html index c896704dd5..3831a066c1 100644 --- a/eform-client/src/app/modules/advanced/components/sites/site-edit/site-edit.component.html +++ b/eform-client/src/app/modules/advanced/components/sites/site-edit/site-edit.component.html @@ -13,7 +13,7 @@

{{ 'Edit' | translate}}

{{ 'Current tags' | translate }} {{'New dropdown' | translate}} {{'Security groups' | translate}} {{ 'New custom link' | translate }} {{ 'Security groups' | translate }} {{'Edit menu entry' | translate}} {{'Security groups' | translate}} {{ 'Create eForm' | translate }} {{ 'Tags' | translate }} {{ 'Select tags for template' | translate }} {{ 'Current tags' | translate }} {{'Selected entity group search' | translate}} {{'Selected entity group select' | translate}} {{ (isFieldSelected ? 'Edit field' : 'New field') | transla {{'Type' | translate}} {{ 'Selected tags' | translate }} {{'Edit email recipient' | translate}} {{'Tags' | translate }} {{'New Email recipients' | translate}} {{'Tags' | translate }} * { - pointer-events: auto !important; -} - -// Fix Angular 21 dialog/modal positioning and backdrop -.cdk-global-overlay-wrapper { - display: flex !important; - position: absolute !important; - z-index: 1000 !important; - pointer-events: none !important; - top: 0 !important; - left: 0 !important; - height: 100% !important; - width: 100% !important; - justify-content: center !important; - align-items: center !important; -} - -// Angular 21 specific: handle the new cdk-overlay-popover wrapper -.cdk-overlay-popover.cdk-global-overlay-wrapper { - position: fixed !important; - inset: 0 !important; -} - -.cdk-overlay-pane { - position: relative !important; - pointer-events: auto !important; - box-sizing: border-box !important; - z-index: 1001 !important; - display: flex !important; - max-width: 100vw !important; - max-height: 100vh !important; -} - -.cdk-overlay-backdrop { - position: absolute !important; - top: 0 !important; - bottom: 0 !important; - left: 0 !important; - right: 0 !important; - z-index: 1000 !important; - pointer-events: auto !important; - -webkit-tap-highlight-color: transparent !important; - transition: opacity 400ms cubic-bezier(0.25, 0.8, 0.25, 1) !important; - opacity: 1 !important; -} - -// Angular 21: When backdrop is inside the wrapper, ensure it's positioned correctly -.cdk-overlay-popover .cdk-overlay-backdrop { - position: fixed !important; - inset: 0 !important; -} - -.mat-mdc-dialog-container { - display: flex !important; - flex-direction: column !important; - box-sizing: border-box !important; - overflow: auto !important; - outline: 0 !important; - width: 100% !important; - height: 100% !important; - min-height: inherit !important; - max-height: inherit !important; - pointer-events: auto !important; -} - -.mat-mdc-dialog-surface { - display: flex !important; - flex-direction: column !important; - flex-grow: 1 !important; - overflow: auto !important; - max-height: 65vh !important; -} From 9c1cd4108480aab203f1f4bda43aef375f2af985 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 29 Jan 2026 18:21:15 +0000 Subject: [PATCH 26/34] Restore missing appendTo="body" attributes in modal dialog mtx-select components Co-authored-by: renemadsen <76994+renemadsen@users.noreply.github.com> --- .../navigation-menu-custom-dropdown.component.html | 3 ++- .../navigation-menu-custom-link.component.html | 1 + .../navigation-menu-item-edit.component.html | 3 ++- .../eform-create-modal/eform-create-modal.component.html | 3 ++- .../visual-editor-field-modal.component.html | 1 + .../email-recipient-edit/email-recipient-edit.component.html | 3 ++- .../email-recipient-new/email-recipients-new.component.html | 3 ++- 7 files changed, 12 insertions(+), 5 deletions(-) diff --git a/eform-client/src/app/modules/advanced/modules/navigation-menu/components/menu-custom/navigation-menu-custom-dropdown/navigation-menu-custom-dropdown.component.html b/eform-client/src/app/modules/advanced/modules/navigation-menu/components/menu-custom/navigation-menu-custom-dropdown/navigation-menu-custom-dropdown.component.html index 4db1b3abfc..5c075e0018 100644 --- a/eform-client/src/app/modules/advanced/modules/navigation-menu/components/menu-custom/navigation-menu-custom-dropdown/navigation-menu-custom-dropdown.component.html +++ b/eform-client/src/app/modules/advanced/modules/navigation-menu/components/menu-custom/navigation-menu-custom-dropdown/navigation-menu-custom-dropdown.component.html @@ -9,7 +9,8 @@

{{'New dropdown' | translate}}

[bindLabel]="'name'" [items]="availableSecurityGroups" id="securityGroupsCustomDropdownSelector" - [multiple]="true"> + [multiple]="true" + appendTo="body">
diff --git a/eform-client/src/app/modules/advanced/modules/navigation-menu/components/menu-custom/navigation-menu-custom-link/navigation-menu-custom-link.component.html b/eform-client/src/app/modules/advanced/modules/navigation-menu/components/menu-custom/navigation-menu-custom-link/navigation-menu-custom-link.component.html index d839edd5a9..7bf2de98ef 100644 --- a/eform-client/src/app/modules/advanced/modules/navigation-menu/components/menu-custom/navigation-menu-custom-link/navigation-menu-custom-link.component.html +++ b/eform-client/src/app/modules/advanced/modules/navigation-menu/components/menu-custom/navigation-menu-custom-link/navigation-menu-custom-link.component.html @@ -11,6 +11,7 @@

{{ 'New custom link' | translate }}

[items]="availableSecurityGroups" id="securityGroupsCustomDropdownSelector" [multiple]="true" + appendTo="body" >
diff --git a/eform-client/src/app/modules/advanced/modules/navigation-menu/components/menu-item/navigation-menu-item-edit/navigation-menu-item-edit.component.html b/eform-client/src/app/modules/advanced/modules/navigation-menu/components/menu-item/navigation-menu-item-edit/navigation-menu-item-edit.component.html index 3389cfb4a1..959afc86de 100644 --- a/eform-client/src/app/modules/advanced/modules/navigation-menu/components/menu-item/navigation-menu-item-edit/navigation-menu-item-edit.component.html +++ b/eform-client/src/app/modules/advanced/modules/navigation-menu/components/menu-item/navigation-menu-item-edit/navigation-menu-item-edit.component.html @@ -10,7 +10,8 @@

{{'Edit menu entry' | translate}}

[bindLabel]="'name'" [items]="availableSecurityGroups" id="editSecurityGroupsSelector" - [multiple]="true" > + [multiple]="true" + appendTo="body"> diff --git a/eform-client/src/app/modules/eforms/components/eform-create-modal/eform-create-modal.component.html b/eform-client/src/app/modules/eforms/components/eform-create-modal/eform-create-modal.component.html index 4cad68a28d..dcf61c58b4 100644 --- a/eform-client/src/app/modules/eforms/components/eform-create-modal/eform-create-modal.component.html +++ b/eform-client/src/app/modules/eforms/components/eform-create-modal/eform-create-modal.component.html @@ -12,7 +12,8 @@

{{ 'Create eForm' | translate }}

[bindLabel]="'name'" [items]="availableTags" id="createEFormMultiSelector" - [multiple]="true"> + [multiple]="true" + appendTo="body">
diff --git a/eform-client/src/app/modules/eforms/eform-visual-editor/components/eform-visual-editor-elements/field/visual-editor-field-modal/visual-editor-field-modal.component.html b/eform-client/src/app/modules/eforms/eform-visual-editor/components/eform-visual-editor-elements/field/visual-editor-field-modal/visual-editor-field-modal.component.html index 3c90427b93..1e552b79d9 100644 --- a/eform-client/src/app/modules/eforms/eform-visual-editor/components/eform-visual-editor-elements/field/visual-editor-field-modal/visual-editor-field-modal.component.html +++ b/eform-client/src/app/modules/eforms/eform-visual-editor/components/eform-visual-editor-elements/field/visual-editor-field-modal/visual-editor-field-modal.component.html @@ -17,6 +17,7 @@

{{ (isFieldSelected ? 'Edit field' : 'New field') | transla [clearable]="false" [bindLabel]="'name'" [bindValue]="'id'" + appendTo="body" [ngModel]="recursionModel.field.fieldType" (ngModelChange)="updateFieldType($event)" id="fieldTypeSelector" diff --git a/eform-client/src/app/modules/email-recipients/components/recipients/email-recipient-edit/email-recipient-edit.component.html b/eform-client/src/app/modules/email-recipients/components/recipients/email-recipient-edit/email-recipient-edit.component.html index e8fdc4131b..6f441822f7 100644 --- a/eform-client/src/app/modules/email-recipients/components/recipients/email-recipient-edit/email-recipient-edit.component.html +++ b/eform-client/src/app/modules/email-recipients/components/recipients/email-recipient-edit/email-recipient-edit.component.html @@ -11,7 +11,8 @@

{{'Edit email recipient' | translate}}

[bindLabel]="'name'" [items]="availableTags" id="editEmailRecipientsMultiSelector" - [multiple]="true"> + [multiple]="true" + appendTo="body">
diff --git a/eform-client/src/app/modules/email-recipients/components/recipients/email-recipient-new/email-recipients-new.component.html b/eform-client/src/app/modules/email-recipients/components/recipients/email-recipient-new/email-recipients-new.component.html index de97e051b7..5be54bd372 100644 --- a/eform-client/src/app/modules/email-recipients/components/recipients/email-recipient-new/email-recipients-new.component.html +++ b/eform-client/src/app/modules/email-recipients/components/recipients/email-recipient-new/email-recipients-new.component.html @@ -11,7 +11,8 @@

{{'New Email recipients' | translate}}

[bindLabel]="'name'" [items]="availableTags" id="createEmailRecipientsMultiSelector" - [multiple]="true"> + [multiple]="true" + appendTo="body">
From ebb6efe9ab44e7e2e29e0acdedd2329c735a0f62 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 29 Jan 2026 18:29:42 +0000 Subject: [PATCH 27/34] Fix appendTo syntax to use property binding per mtx-select documentation Co-authored-by: renemadsen <76994+renemadsen@users.noreply.github.com> --- .../components/sites/site-edit/site-edit.component.html | 2 +- .../navigation-menu-custom-dropdown.component.html | 2 +- .../navigation-menu-custom-link.component.html | 2 +- .../navigation-menu-item-edit.component.html | 2 +- .../eform-create-modal/eform-create-modal.component.html | 2 +- .../eform-edit-tags-modal/eform-edit-tags-modal.component.html | 2 +- .../visual-editor-additional-field-entity-search.component.html | 2 +- .../visual-editor-additional-field-entity-select.component.html | 2 +- .../visual-editor-field-modal.component.html | 2 +- .../email-recipient-edit/email-recipient-edit.component.html | 2 +- .../email-recipient-new/email-recipients-new.component.html | 2 +- 11 files changed, 11 insertions(+), 11 deletions(-) diff --git a/eform-client/src/app/modules/advanced/components/sites/site-edit/site-edit.component.html b/eform-client/src/app/modules/advanced/components/sites/site-edit/site-edit.component.html index 3831a066c1..b281c57237 100644 --- a/eform-client/src/app/modules/advanced/components/sites/site-edit/site-edit.component.html +++ b/eform-client/src/app/modules/advanced/components/sites/site-edit/site-edit.component.html @@ -20,7 +20,7 @@

{{ 'Edit' | translate}}

[items]="availableTags" id="tagSelector" [multiple]="true" - appendTo="body"> + [appendTo]="'body'">
diff --git a/eform-client/src/app/modules/advanced/modules/navigation-menu/components/menu-custom/navigation-menu-custom-dropdown/navigation-menu-custom-dropdown.component.html b/eform-client/src/app/modules/advanced/modules/navigation-menu/components/menu-custom/navigation-menu-custom-dropdown/navigation-menu-custom-dropdown.component.html index 5c075e0018..062c12054b 100644 --- a/eform-client/src/app/modules/advanced/modules/navigation-menu/components/menu-custom/navigation-menu-custom-dropdown/navigation-menu-custom-dropdown.component.html +++ b/eform-client/src/app/modules/advanced/modules/navigation-menu/components/menu-custom/navigation-menu-custom-dropdown/navigation-menu-custom-dropdown.component.html @@ -10,7 +10,7 @@

{{'New dropdown' | translate}}

[items]="availableSecurityGroups" id="securityGroupsCustomDropdownSelector" [multiple]="true" - appendTo="body"> + [appendTo]="'body'">
diff --git a/eform-client/src/app/modules/advanced/modules/navigation-menu/components/menu-custom/navigation-menu-custom-link/navigation-menu-custom-link.component.html b/eform-client/src/app/modules/advanced/modules/navigation-menu/components/menu-custom/navigation-menu-custom-link/navigation-menu-custom-link.component.html index 7bf2de98ef..95c2c749a8 100644 --- a/eform-client/src/app/modules/advanced/modules/navigation-menu/components/menu-custom/navigation-menu-custom-link/navigation-menu-custom-link.component.html +++ b/eform-client/src/app/modules/advanced/modules/navigation-menu/components/menu-custom/navigation-menu-custom-link/navigation-menu-custom-link.component.html @@ -11,7 +11,7 @@

{{ 'New custom link' | translate }}

[items]="availableSecurityGroups" id="securityGroupsCustomDropdownSelector" [multiple]="true" - appendTo="body" + [appendTo]="'body'" >
diff --git a/eform-client/src/app/modules/advanced/modules/navigation-menu/components/menu-item/navigation-menu-item-edit/navigation-menu-item-edit.component.html b/eform-client/src/app/modules/advanced/modules/navigation-menu/components/menu-item/navigation-menu-item-edit/navigation-menu-item-edit.component.html index 959afc86de..dba0efce80 100644 --- a/eform-client/src/app/modules/advanced/modules/navigation-menu/components/menu-item/navigation-menu-item-edit/navigation-menu-item-edit.component.html +++ b/eform-client/src/app/modules/advanced/modules/navigation-menu/components/menu-item/navigation-menu-item-edit/navigation-menu-item-edit.component.html @@ -11,7 +11,7 @@

{{'Edit menu entry' | translate}}

[items]="availableSecurityGroups" id="editSecurityGroupsSelector" [multiple]="true" - appendTo="body"> + [appendTo]="'body'"> diff --git a/eform-client/src/app/modules/eforms/components/eform-create-modal/eform-create-modal.component.html b/eform-client/src/app/modules/eforms/components/eform-create-modal/eform-create-modal.component.html index dcf61c58b4..4d5be04605 100644 --- a/eform-client/src/app/modules/eforms/components/eform-create-modal/eform-create-modal.component.html +++ b/eform-client/src/app/modules/eforms/components/eform-create-modal/eform-create-modal.component.html @@ -13,7 +13,7 @@

{{ 'Create eForm' | translate }}

[items]="availableTags" id="createEFormMultiSelector" [multiple]="true" - appendTo="body"> + [appendTo]="'body'">
diff --git a/eform-client/src/app/modules/eforms/components/eform-edit-tags-modal/eform-edit-tags-modal.component.html b/eform-client/src/app/modules/eforms/components/eform-edit-tags-modal/eform-edit-tags-modal.component.html index 864d87c883..61f1098996 100644 --- a/eform-client/src/app/modules/eforms/components/eform-edit-tags-modal/eform-edit-tags-modal.component.html +++ b/eform-client/src/app/modules/eforms/components/eform-edit-tags-modal/eform-edit-tags-modal.component.html @@ -11,7 +11,7 @@

{{ 'Select tags for template' | translate }}

[items]="availableTags" id="tagSelector" [multiple]="true" - appendTo="body" + [appendTo]="'body'" >