From 28edb9f6d6cfbc669aeffbb57d44dac41c06b031 Mon Sep 17 00:00:00 2001 From: Sebastian Leidig Date: Fri, 31 Jan 2025 12:10:36 +0100 Subject: [PATCH 1/5] fix: fix error syncing while uploading a file --- src/app/core/database/database-resolver.service.ts | 4 ++-- src/app/core/database/pouchdb/synced-pouch-database.ts | 4 +--- src/app/features/file/couchdb-file.service.ts | 7 ++++--- 3 files changed, 7 insertions(+), 8 deletions(-) diff --git a/src/app/core/database/database-resolver.service.ts b/src/app/core/database/database-resolver.service.ts index 14cdea2d99..35b517db07 100644 --- a/src/app/core/database/database-resolver.service.ts +++ b/src/app/core/database/database-resolver.service.ts @@ -41,8 +41,8 @@ export class DatabaseResolverService { } private registerDatabase(dbName: string) { - const newDb = this.databaseFactory.createDatabase(Entity.DATABASE); - this.databases.set(Entity.DATABASE, newDb); + const newDb = this.databaseFactory.createDatabase(dbName); + this.databases.set(dbName, newDb); newDb.changes().subscribe((change) => this._changesFeed.next(change)); } diff --git a/src/app/core/database/pouchdb/synced-pouch-database.ts b/src/app/core/database/pouchdb/synced-pouch-database.ts index 2ddfab60e8..046c321c58 100644 --- a/src/app/core/database/pouchdb/synced-pouch-database.ts +++ b/src/app/core/database/pouchdb/synced-pouch-database.ts @@ -16,8 +16,6 @@ import { SyncStateSubject, } from "../../session/session-type"; import { from, interval, merge, of, Subject } from "rxjs"; -import { Inject } from "@angular/core"; -import { NAVIGATOR_TOKEN } from "../../../utils/di-tokens"; import { LoginState } from "../../session/session-states/login-state.enum"; /** @@ -46,7 +44,7 @@ export class SyncedPouchDatabase extends PouchDatabase { dbName: string, authService: KeycloakAuthService, private syncStateSubject: SyncStateSubject, - @Inject(NAVIGATOR_TOKEN) private navigator: Navigator, + private navigator: Navigator, private loginStateSubject: LoginStateSubject, ) { super(dbName); diff --git a/src/app/features/file/couchdb-file.service.ts b/src/app/features/file/couchdb-file.service.ts index 01c3ae4607..96210263e5 100644 --- a/src/app/features/file/couchdb-file.service.ts +++ b/src/app/features/file/couchdb-file.service.ts @@ -86,9 +86,10 @@ export class CouchdbFileService extends FileService { * @private */ private ensureDocIsSynced(): Observable { - let sync: () => Promise = - (this.databaseResolver.getDatabase() as SyncedPouchDatabase).sync ?? - (() => Promise.resolve()); + const mainDb = this.databaseResolver.getDatabase(); + let sync: () => Promise = (mainDb as SyncedPouchDatabase).sync + ? () => (mainDb as SyncedPouchDatabase).sync() + : () => Promise.resolve(); return from(sync()).pipe(map(() => this.syncState.value)); } From a403d53b3cda9333a74d77e9982b4e49c4dbe6a6 Mon Sep 17 00:00:00 2001 From: Abhinegi2 Date: Wed, 5 Feb 2025 13:26:30 +0530 Subject: [PATCH 2/5] Add focus event listener to show autocomplete when tab is re-open --- .../basic-autocomplete/basic-autocomplete.component.ts | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/app/core/common-components/basic-autocomplete/basic-autocomplete.component.ts b/src/app/core/common-components/basic-autocomplete/basic-autocomplete.component.ts index 7d9609b69d..7b1fce0e0d 100644 --- a/src/app/core/common-components/basic-autocomplete/basic-autocomplete.component.ts +++ b/src/app/core/common-components/basic-autocomplete/basic-autocomplete.component.ts @@ -241,6 +241,16 @@ export class BasicAutocompleteComponent } } + ngAfterViewInit() { + window.addEventListener("focus", () => { + if (this.autocomplete && this.autocomplete.panelOpen) { + if (this.autocomplete?.panelOpen) { + this.showAutocomplete(); + } + } + }); + } + drop(event: CdkDragDrop) { if (event.previousContainer === event.container) { moveItemInArray( From 73cd732ac85cc49a44dc800071bd9649dd336625 Mon Sep 17 00:00:00 2001 From: Abhinegi2 Date: Wed, 5 Feb 2025 14:02:13 +0530 Subject: [PATCH 3/5] optimize the code --- .../basic-autocomplete/basic-autocomplete.component.ts | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/app/core/common-components/basic-autocomplete/basic-autocomplete.component.ts b/src/app/core/common-components/basic-autocomplete/basic-autocomplete.component.ts index 7b1fce0e0d..e9f7ccd3cc 100644 --- a/src/app/core/common-components/basic-autocomplete/basic-autocomplete.component.ts +++ b/src/app/core/common-components/basic-autocomplete/basic-autocomplete.component.ts @@ -243,10 +243,8 @@ export class BasicAutocompleteComponent ngAfterViewInit() { window.addEventListener("focus", () => { - if (this.autocomplete && this.autocomplete.panelOpen) { - if (this.autocomplete?.panelOpen) { - this.showAutocomplete(); - } + if (this.autocomplete && this.autocomplete?.panelOpen) { + this.showAutocomplete(); } }); } From ab3d7d6eb842cba9826cf4e2b210658793ba580a Mon Sep 17 00:00:00 2001 From: Abhinegi2 Date: Wed, 5 Feb 2025 14:29:22 +0530 Subject: [PATCH 4/5] Refactor --- .../readonly-after-set.validator.ts | 24 +++++++++---------- 1 file changed, 11 insertions(+), 13 deletions(-) diff --git a/src/app/core/common-components/entity-form/dynamic-form-validators/readonly-after-set.validator.ts b/src/app/core/common-components/entity-form/dynamic-form-validators/readonly-after-set.validator.ts index b1bc9c6be6..f8e070c229 100644 --- a/src/app/core/common-components/entity-form/dynamic-form-validators/readonly-after-set.validator.ts +++ b/src/app/core/common-components/entity-form/dynamic-form-validators/readonly-after-set.validator.ts @@ -15,24 +15,22 @@ export function buildReadonlyValidator(entity: Entity): { async: true; fn: AsyncPromiseValidatorFn; } { - let keepDisabled: boolean = !entity.isNew; + let isDisabled = !entity.isNew; return { async: true, fn: async (control: FormControl): Promise => { - control.statusChanges.subscribe((status: FormControlStatus) => { - if (status === "DISABLED") { - // after the form was disabled once, keep this disabled now - keepDisabled = true; - } + // Disable if already flagged + if (isDisabled) { + control.disable({ onlySelf: true, emitEvent: false }); + return null; + } - if (keepDisabled) { - control.disable({ - onlySelf: true, - emitEvent: false, - }); - } - }); + // For new entities, disable upon setting a value + if (entity.isNew && control.value) { + isDisabled = true; + control.disable({ onlySelf: true, emitEvent: false }); + } return null; }, From 9bb169a8c600cf09b41e31cd7a369f9c05b7a46c Mon Sep 17 00:00:00 2001 From: Abhinegi2 Date: Wed, 5 Feb 2025 14:31:09 +0530 Subject: [PATCH 5/5] refactor and revert changes --- .../basic-autocomplete.component.ts | 2 +- .../readonly-after-set.validator.ts | 24 ++++++++++--------- 2 files changed, 14 insertions(+), 12 deletions(-) diff --git a/src/app/core/common-components/basic-autocomplete/basic-autocomplete.component.ts b/src/app/core/common-components/basic-autocomplete/basic-autocomplete.component.ts index e9f7ccd3cc..9ff9dec99c 100644 --- a/src/app/core/common-components/basic-autocomplete/basic-autocomplete.component.ts +++ b/src/app/core/common-components/basic-autocomplete/basic-autocomplete.component.ts @@ -243,7 +243,7 @@ export class BasicAutocompleteComponent ngAfterViewInit() { window.addEventListener("focus", () => { - if (this.autocomplete && this.autocomplete?.panelOpen) { + if (this.autocomplete?.panelOpen) { this.showAutocomplete(); } }); diff --git a/src/app/core/common-components/entity-form/dynamic-form-validators/readonly-after-set.validator.ts b/src/app/core/common-components/entity-form/dynamic-form-validators/readonly-after-set.validator.ts index f8e070c229..b1bc9c6be6 100644 --- a/src/app/core/common-components/entity-form/dynamic-form-validators/readonly-after-set.validator.ts +++ b/src/app/core/common-components/entity-form/dynamic-form-validators/readonly-after-set.validator.ts @@ -15,22 +15,24 @@ export function buildReadonlyValidator(entity: Entity): { async: true; fn: AsyncPromiseValidatorFn; } { - let isDisabled = !entity.isNew; + let keepDisabled: boolean = !entity.isNew; return { async: true, fn: async (control: FormControl): Promise => { - // Disable if already flagged - if (isDisabled) { - control.disable({ onlySelf: true, emitEvent: false }); - return null; - } + control.statusChanges.subscribe((status: FormControlStatus) => { + if (status === "DISABLED") { + // after the form was disabled once, keep this disabled now + keepDisabled = true; + } - // For new entities, disable upon setting a value - if (entity.isNew && control.value) { - isDisabled = true; - control.disable({ onlySelf: true, emitEvent: false }); - } + if (keepDisabled) { + control.disable({ + onlySelf: true, + emitEvent: false, + }); + } + }); return null; },