diff --git a/CHANGELOG.md b/CHANGELOG.md
index 251a51d93..717cf2813 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -5,6 +5,12 @@ All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
+## Unreleased
+
+### Changed
+
+- Migrated the login with access token dialog from `ngModel` to form control
+
## 2.193.0 - 2025-08-22
### Added
diff --git a/apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.component.ts b/apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.component.ts
index 9ee0adcdc..4f11f1025 100644
--- a/apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.component.ts
+++ b/apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.component.ts
@@ -6,6 +6,7 @@ import {
import { TokenStorageService } from '@ghostfolio/client/services/token-storage.service';
import { ChangeDetectionStrategy, Component, Inject } from '@angular/core';
+import { FormControl, Validators } from '@angular/forms';
import { MatCheckboxChange } from '@angular/material/checkbox';
import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';
import { Router } from '@angular/router';
@@ -20,6 +21,10 @@ import { eyeOffOutline, eyeOutline } from 'ionicons/icons';
standalone: false
})
export class LoginWithAccessTokenDialog {
+ public accessTokenFormControl = new FormControl(
+ this.data.accessToken,
+ Validators.required
+ );
public isAccessTokenHidden = true;
public constructor(
@@ -45,8 +50,10 @@ export class LoginWithAccessTokenDialog {
}
public onLoginWithAccessToken() {
- if (this.data.accessToken) {
- this.dialogRef.close(this.data);
+ if (this.accessTokenFormControl.valid) {
+ this.dialogRef.close({
+ accessToken: this.accessTokenFormControl.value
+ });
}
}
diff --git a/apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html b/apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html
index 77191db8e..dca06f970 100644
--- a/apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html
+++ b/apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html
@@ -11,9 +11,8 @@
Security Token
diff --git a/apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.module.ts b/apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.module.ts
index d6035ae52..fcced81aa 100644
--- a/apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.module.ts
+++ b/apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.module.ts
@@ -1,7 +1,7 @@
import { TextFieldModule } from '@angular/cdk/text-field';
import { CommonModule } from '@angular/common';
import { CUSTOM_ELEMENTS_SCHEMA, NgModule } from '@angular/core';
-import { FormsModule, ReactiveFormsModule } from '@angular/forms';
+import { ReactiveFormsModule } from '@angular/forms';
import { MatButtonModule } from '@angular/material/button';
import { MatCheckboxModule } from '@angular/material/checkbox';
import { MatDialogModule } from '@angular/material/dialog';
@@ -16,7 +16,6 @@ import { LoginWithAccessTokenDialog } from './login-with-access-token-dialog.com
declarations: [LoginWithAccessTokenDialog],
imports: [
CommonModule,
- FormsModule,
GfDialogHeaderModule,
IonIcon,
MatButtonModule,