From 13b013c7360f155f9157a54ee2b5415835668ac0 Mon Sep 17 00:00:00 2001 From: Edi Cziszter Date: Thu, 20 Jan 2022 14:00:38 +0200 Subject: [PATCH] firstValueFrom instead of toPromise() in admin module --- .../add-edit-dictionary-dialog.component.ts | 5 +- ...-edit-dossier-template-dialog.component.ts | 1 + .../reset-password.component.ts | 9 +- .../user-details/user-details.component.ts | 7 +- .../confirm-delete-users-dialog.component.ts | 3 +- .../edit-color-dialog.component.ts | 3 +- ...-attributes-csv-import-dialog.component.ts | 20 ++-- .../screens/audit/audit-screen.component.ts | 23 ++--- .../default-colors-screen.component.ts | 3 +- .../dictionary-listing-screen.component.ts | 4 +- .../dictionary-overview-screen.component.ts | 7 +- ...ier-attributes-listing-screen.component.ts | 5 +- ...sier-templates-listing-screen.component.ts | 81 ----------------- ...ile-attributes-listing-screen.component.ts | 38 ++++---- .../general-config-form.component.ts | 49 +++++----- .../smtp-form/smtp-form.component.ts | 91 ++++++++++--------- ...add-edit-justification-dialog.component.ts | 5 +- .../justifications-dialog.service.ts | 5 +- .../justifications-screen.component.ts | 3 +- .../license-information-screen.component.ts | 15 +-- .../reports/reports-screen.component.ts | 25 ++--- .../screens/rules/rules-screen.component.ts | 45 +++++---- .../user-listing-screen.component.ts | 6 +- .../watermark/watermark-screen.component.ts | 3 +- .../dossier-template-actions.component.ts | 7 +- .../src/app/modules/auth/auth.module.ts | 14 ++- 26 files changed, 201 insertions(+), 276 deletions(-) delete mode 100644 apps/red-ui/src/app/modules/admin/screens/dossier-templates-listing/dossier-templates-listing-screen/dossier-templates-listing-screen.component.ts diff --git a/apps/red-ui/src/app/modules/admin/dialogs/add-edit-dictionary-dialog/add-edit-dictionary-dialog.component.ts b/apps/red-ui/src/app/modules/admin/dialogs/add-edit-dictionary-dialog/add-edit-dictionary-dialog.component.ts index 0c80cb245..3e1ec0ec1 100644 --- a/apps/red-ui/src/app/modules/admin/dialogs/add-edit-dictionary-dialog/add-edit-dictionary-dialog.component.ts +++ b/apps/red-ui/src/app/modules/admin/dialogs/add-edit-dictionary-dialog/add-edit-dictionary-dialog.component.ts @@ -1,7 +1,7 @@ import { ChangeDetectionStrategy, Component, Inject, Injector } from '@angular/core'; import { FormBuilder, FormGroup, Validators } from '@angular/forms'; import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog'; -import { Observable } from 'rxjs'; +import { firstValueFrom, Observable } from 'rxjs'; import { BaseDialogComponent, shareDistinctLast, Toaster } from '@iqser/common-ui'; import { TranslateService } from '@ngx-translate/core'; import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker'; @@ -77,8 +77,7 @@ export class AddEditDictionaryDialogComponent extends BaseDialogComponent { observable = this._dictionaryService.addDictionary({ ...dictionary, dossierTemplateId }); } - return observable - .toPromise() + return firstValueFrom(observable) .then(() => this._dialogRef.close(true)) .catch(error => { if (error.status === HttpStatusCode.Conflict) { diff --git a/apps/red-ui/src/app/modules/admin/dialogs/add-edit-dossier-template-dialog/add-edit-dossier-template-dialog.component.ts b/apps/red-ui/src/app/modules/admin/dialogs/add-edit-dossier-template-dialog/add-edit-dossier-template-dialog.component.ts index 4d6b575bd..778150cc5 100644 --- a/apps/red-ui/src/app/modules/admin/dialogs/add-edit-dossier-template-dialog/add-edit-dossier-template-dialog.component.ts +++ b/apps/red-ui/src/app/modules/admin/dialogs/add-edit-dossier-template-dialog/add-edit-dossier-template-dialog.component.ts @@ -11,6 +11,7 @@ import { BaseDialogComponent, LoadingService, Toaster } from '@iqser/common-ui'; import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker'; import { DownloadFileType, IDossierTemplate } from '@red/domain'; import { HttpStatusCode } from '@angular/common/http'; +import { firstValueFrom } from 'rxjs'; @Component({ templateUrl: './add-edit-dossier-template-dialog.component.html', diff --git a/apps/red-ui/src/app/modules/admin/dialogs/add-edit-user-dialog/reset-password/reset-password.component.ts b/apps/red-ui/src/app/modules/admin/dialogs/add-edit-user-dialog/reset-password/reset-password.component.ts index 1839e3bfe..441249ef4 100644 --- a/apps/red-ui/src/app/modules/admin/dialogs/add-edit-user-dialog/reset-password/reset-password.component.ts +++ b/apps/red-ui/src/app/modules/admin/dialogs/add-edit-user-dialog/reset-password/reset-password.component.ts @@ -4,6 +4,7 @@ import { UserService } from '@services/user.service'; import { LoadingService, Toaster } from '@iqser/common-ui'; import { User } from '@red/domain'; import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker'; +import { firstValueFrom } from 'rxjs'; @Component({ selector: 'redaction-reset-password', @@ -25,15 +26,15 @@ export class ResetPasswordComponent { async save() { this._loadingService.start(); try { - await this._userService - .resetPassword( + await firstValueFrom( + this._userService.resetPassword( { password: this.form.get('temporaryPassword').value, temporary: true, }, this.user.id, - ) - .toPromise(); + ), + ); this.toggleResetPassword.emit(); } catch (error) { this._toaster.error(_('reset-password-dialog.error.password-policy')); diff --git a/apps/red-ui/src/app/modules/admin/dialogs/add-edit-user-dialog/user-details/user-details.component.ts b/apps/red-ui/src/app/modules/admin/dialogs/add-edit-user-dialog/user-details/user-details.component.ts index 0320cf449..689d3434b 100644 --- a/apps/red-ui/src/app/modules/admin/dialogs/add-edit-user-dialog/user-details/user-details.component.ts +++ b/apps/red-ui/src/app/modules/admin/dialogs/add-edit-user-dialog/user-details/user-details.component.ts @@ -7,6 +7,7 @@ import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker'; import { User } from '@red/domain'; import { UserService } from '@services/user.service'; import { HttpStatusCode } from '@angular/common/http'; +import { firstValueFrom } from 'rxjs'; @Component({ selector: 'redaction-user-details', @@ -107,9 +108,7 @@ export class UserDetailsComponent extends AutoUnsubscribe implements OnChanges, const userData = { ...this.form.getRawValue(), roles: this.activeRoles }; if (!this.user) { - await this.userService - .create(userData) - .toPromise() + await firstValueFrom(this.userService.create(userData)) .then(() => { this.closeDialog.emit(true); }) @@ -122,7 +121,7 @@ export class UserDetailsComponent extends AutoUnsubscribe implements OnChanges, this._loadingService.stop(); }); } else { - await this.userService.updateProfile(userData, this.user.id).toPromise(); + await firstValueFrom(this.userService.updateProfile(userData, this.user.id)); this.closeDialog.emit(true); } } diff --git a/apps/red-ui/src/app/modules/admin/dialogs/confirm-delete-users-dialog/confirm-delete-users-dialog.component.ts b/apps/red-ui/src/app/modules/admin/dialogs/confirm-delete-users-dialog/confirm-delete-users-dialog.component.ts index b437e57ec..62cf4cb8b 100644 --- a/apps/red-ui/src/app/modules/admin/dialogs/confirm-delete-users-dialog/confirm-delete-users-dialog.component.ts +++ b/apps/red-ui/src/app/modules/admin/dialogs/confirm-delete-users-dialog/confirm-delete-users-dialog.component.ts @@ -4,6 +4,7 @@ import { List, LoadingService } from '@iqser/common-ui'; import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker'; import { DossiersService } from '@services/entity-services/dossiers.service'; import { UserService } from '@services/user.service'; +import { firstValueFrom } from 'rxjs'; @Component({ selector: 'redaction-confirm-delete-users-dialog', @@ -40,7 +41,7 @@ export class ConfirmDeleteUsersDialogComponent { async deleteUser() { if (this.valid) { this._loadingService.start(); - await this._userService.delete(this.userIds).toPromise(); + await firstValueFrom(this._userService.delete(this.userIds)); this.dialogRef.close(true); } else { this.showToast = true; diff --git a/apps/red-ui/src/app/modules/admin/dialogs/edit-color-dialog/edit-color-dialog.component.ts b/apps/red-ui/src/app/modules/admin/dialogs/edit-color-dialog/edit-color-dialog.component.ts index 87fd53d62..2f544c1d0 100644 --- a/apps/red-ui/src/app/modules/admin/dialogs/edit-color-dialog/edit-color-dialog.component.ts +++ b/apps/red-ui/src/app/modules/admin/dialogs/edit-color-dialog/edit-color-dialog.component.ts @@ -7,6 +7,7 @@ import { TranslateService } from '@ngx-translate/core'; import { defaultColorsTranslations } from '../../translations/default-colors-translations'; import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker'; import { DictionaryService } from '@shared/services/dictionary.service'; +import { firstValueFrom } from 'rxjs'; interface IEditColorData { colors: IColors; @@ -46,7 +47,7 @@ export class EditColorDialogComponent extends BaseDialogComponent { }; try { - await this._dictionaryService.setColors(colors, this._dossierTemplateId).toPromise(); + await firstValueFrom(this._dictionaryService.setColors(colors, this._dossierTemplateId)); this._dialogRef.close(true); const color = this._translateService.instant(defaultColorsTranslations[this.data.colorKey]); this._toaster.info(_('edit-color-dialog.success'), { params: { color: color } }); diff --git a/apps/red-ui/src/app/modules/admin/dialogs/file-attributes-csv-import-dialog/file-attributes-csv-import-dialog.component.ts b/apps/red-ui/src/app/modules/admin/dialogs/file-attributes-csv-import-dialog/file-attributes-csv-import-dialog.component.ts index 5f95a12ad..0e718f1e6 100644 --- a/apps/red-ui/src/app/modules/admin/dialogs/file-attributes-csv-import-dialog/file-attributes-csv-import-dialog.component.ts +++ b/apps/red-ui/src/app/modules/admin/dialogs/file-attributes-csv-import-dialog/file-attributes-csv-import-dialog.component.ts @@ -2,7 +2,7 @@ import { ChangeDetectionStrategy, Component, Inject, Injector } from '@angular/c import { AbstractControl, FormBuilder, FormGroup, ValidatorFn, Validators } from '@angular/forms'; import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog'; import * as Papa from 'papaparse'; -import { Observable } from 'rxjs'; +import { firstValueFrom, Observable } from 'rxjs'; import { map, startWith } from 'rxjs/operators'; import { DefaultListingServices, ListingComponent, TableColumnConfig, Toaster, trackBy } from '@iqser/common-ui'; import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker'; @@ -56,14 +56,6 @@ export class FileAttributesCsvImportDialogComponent extends ListingComponent { @@ -183,7 +175,7 @@ export class FileAttributesCsvImportDialogComponent extends ListingComponent { if ((this.parseResult?.meta?.fields || []).indexOf(control.value) !== -1) { diff --git a/apps/red-ui/src/app/modules/admin/screens/audit/audit-screen.component.ts b/apps/red-ui/src/app/modules/admin/screens/audit/audit-screen.component.ts index b803e3549..1a0d3508c 100644 --- a/apps/red-ui/src/app/modules/admin/screens/audit/audit-screen.component.ts +++ b/apps/red-ui/src/app/modules/admin/screens/audit/audit-screen.component.ts @@ -8,6 +8,7 @@ import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker'; import { UserService } from '@services/user.service'; import { Audit, IAudit, IAuditResponse, IAuditSearchRequest } from '@red/domain'; import { AuditService } from '../../services/audit.service'; +import { firstValueFrom } from 'rxjs'; const PAGE_SIZE = 50; @@ -52,15 +53,6 @@ export class AuditScreenComponent extends ListingComponent implements OnD }); } - private _getForm(): FormGroup { - return this._formBuilder.group({ - category: [this.ALL_CATEGORIES], - userId: [this.ALL_USERS], - from: [], - to: [], - }); - } - get totalPages(): number { if (!this.logs) { return 0; @@ -76,6 +68,15 @@ export class AuditScreenComponent extends ListingComponent implements OnD await this._fetchData(); } + private _getForm(): FormGroup { + return this._formBuilder.group({ + category: [this.ALL_CATEGORIES], + userId: [this.ALL_USERS], + from: [], + to: [], + }); + } + private _updateDateFilters(value): boolean { if (applyIntervalConstraints(value, this._previousFrom, this._previousTo, this.form, 'from', 'to')) { return true; @@ -105,8 +106,8 @@ export class AuditScreenComponent extends ListingComponent implements OnD to, }; - promises.push(this._auditService.getCategories().toPromise()); - promises.push(this._auditService.searchAuditLog(logsRequestBody).toPromise()); + promises.push(firstValueFrom(this._auditService.getCategories())); + promises.push(firstValueFrom(this._auditService.searchAuditLog(logsRequestBody))); const data = await Promise.all(promises); this.categories = data[0].map(c => c.category); diff --git a/apps/red-ui/src/app/modules/admin/screens/default-colors/default-colors-screen.component.ts b/apps/red-ui/src/app/modules/admin/screens/default-colors/default-colors-screen.component.ts index 729330eb0..a81508f20 100644 --- a/apps/red-ui/src/app/modules/admin/screens/default-colors/default-colors-screen.component.ts +++ b/apps/red-ui/src/app/modules/admin/screens/default-colors/default-colors-screen.component.ts @@ -15,6 +15,7 @@ import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker'; import { UserService } from '@services/user.service'; import { DictionaryService } from '@shared/services/dictionary.service'; import { DossierTemplatesService } from '@services/entity-services/dossier-templates.service'; +import { firstValueFrom } from 'rxjs'; interface ListItem extends IListable { readonly key: string; @@ -72,7 +73,7 @@ export class DefaultColorsScreenComponent extends ListingComponent imp private async _loadColors() { this._loadingService.start(); - const data = await this._appStateService.loadColors(this._dossierTemplatesService.activeDossierTemplateId).toPromise(); + const data = await firstValueFrom(this._appStateService.loadColors(this._dossierTemplatesService.activeDossierTemplateId)); this._colorsObj = data; const entities = Object.keys(data) .map(key => ({ diff --git a/apps/red-ui/src/app/modules/admin/screens/dictionary-listing/dictionary-listing-screen.component.ts b/apps/red-ui/src/app/modules/admin/screens/dictionary-listing/dictionary-listing-screen.component.ts index b861512e8..478db4f4e 100644 --- a/apps/red-ui/src/app/modules/admin/screens/dictionary-listing/dictionary-listing-screen.component.ts +++ b/apps/red-ui/src/app/modules/admin/screens/dictionary-listing/dictionary-listing-screen.component.ts @@ -66,8 +66,8 @@ export class DictionaryListingScreenComponent extends ListingComponent { this._loadingService.start(); - await this._dictionaryService - .deleteDictionaries( + await firstValueFrom( + this._dictionaryService.deleteDictionaries( types.map(t => t.type), this._dossierTemplatesService.activeDossierTemplateId, ) diff --git a/apps/red-ui/src/app/modules/admin/screens/dictionary-overview/dictionary-overview-screen.component.ts b/apps/red-ui/src/app/modules/admin/screens/dictionary-overview/dictionary-overview-screen.component.ts index 6f32d193a..7f017178c 100644 --- a/apps/red-ui/src/app/modules/admin/screens/dictionary-overview/dictionary-overview-screen.component.ts +++ b/apps/red-ui/src/app/modules/admin/screens/dictionary-overview/dictionary-overview-screen.component.ts @@ -11,6 +11,7 @@ import { CircleButtonTypes, LoadingService } from '@iqser/common-ui'; import { UserService } from '@services/user.service'; import { DossierTemplatesService } from '@services/entity-services/dossier-templates.service'; import { Dictionary } from '@red/domain'; +import { firstValueFrom } from 'rxjs'; @Component({ templateUrl: './dictionary-overview-screen.component.html', @@ -72,7 +73,7 @@ export class DictionaryOverviewScreenComponent extends ComponentHasChanges imple $event?.stopPropagation(); this._dialogService.openDialog('confirm', $event, null, async () => { - await this._dictionaryService.deleteDictionaries([this.dictionary.type], this.dictionary.dossierTemplateId).toPromise(); + await firstValueFrom(this._dictionaryService.deleteDictionaries([this.dictionary.type], this.dictionary.dossierTemplateId)); await this._appStateService.loadDictionaryData(); await this._router.navigate([ '/main', @@ -149,9 +150,7 @@ export class DictionaryOverviewScreenComponent extends ComponentHasChanges imple private async _loadEntries() { this._loadingService.start(); - await this._dictionaryService - .getForType(this.dictionary.dossierTemplateId, this.dictionary.type) - .toPromise() + await firstValueFrom(this._dictionaryService.getForType(this.dictionary.dossierTemplateId, this.dictionary.type)) .then( data => { this._loadingService.stop(); diff --git a/apps/red-ui/src/app/modules/admin/screens/dossier-attributes-listing/dossier-attributes-listing-screen.component.ts b/apps/red-ui/src/app/modules/admin/screens/dossier-attributes-listing/dossier-attributes-listing-screen.component.ts index 66bb09192..490b4515e 100644 --- a/apps/red-ui/src/app/modules/admin/screens/dossier-attributes-listing/dossier-attributes-listing-screen.component.ts +++ b/apps/red-ui/src/app/modules/admin/screens/dossier-attributes-listing/dossier-attributes-listing-screen.component.ts @@ -15,6 +15,7 @@ import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker'; import { UserService } from '@services/user.service'; import { DossierAttributeConfig, IDossierAttributeConfig } from '@red/domain'; import { DossierTemplatesService } from '@services/entity-services/dossier-templates.service'; +import { firstValueFrom } from 'rxjs'; @Component({ templateUrl: './dossier-attributes-listing-screen.component.html', @@ -56,7 +57,7 @@ export class DossierAttributesListingScreenComponent extends ListingComponent { this._loadingService.start(); const ids = dossierAttribute ? [dossierAttribute.id] : this.listingService.selected.map(item => item.id); - await this._dossierAttributesService.delete(ids).toPromise(); + await firstValueFrom(this._dossierAttributesService.delete(ids)); await this._loadData(); }); } @@ -71,7 +72,7 @@ export class DossierAttributesListingScreenComponent extends ListingComponent DossierTemplatesListingScreenComponent) }, - ], -}) -export class DossierTemplatesListingScreenComponent extends ListingComponent { - readonly iconButtonTypes = IconButtonTypes; - readonly circleButtonTypes = CircleButtonTypes; - readonly currentUser = this._userService.currentUser; - readonly tableHeaderLabel = _('dossier-templates-listing.table-header.title'); - readonly tableColumnConfigs: TableColumnConfig[] = [ - { label: _('dossier-templates-listing.table-col-names.name'), sortByKey: 'searchKey' }, - { label: _('dossier-templates-listing.table-col-names.created-by'), class: 'user-column' }, - { label: _('dossier-templates-listing.table-col-names.created-on'), sortByKey: 'dateAdded' }, - { label: _('dossier-templates-listing.table-col-names.modified-on'), sortByKey: 'dateModified' }, - ]; - - constructor( - private readonly _toaster: Toaster, - protected readonly _injector: Injector, - private readonly _userService: UserService, - private readonly _loadingService: LoadingService, - private readonly _appStateService: AppStateService, - private readonly _dialogService: AdminDialogService, - readonly routerHistoryService: RouterHistoryService, - readonly userPreferenceService: UserPreferenceService, - private readonly _dossierTemplatesService: DossierTemplatesService, - ) { - super(_injector); - } - - openBulkDeleteTemplatesDialog($event?: MouseEvent) { - return this._dialogService.openDialog('confirm', $event, null, () => { - this._loadingService.loadWhile(this._deleteTemplates()); - }); - } - - openAddDossierTemplateDialog() { - this._dialogService.openDialog('addEditDossierTemplate', null, null); - } - - private async _deleteTemplates(templateIds = this.listingService.selected.map(d => d.dossierTemplateId)) { - await this._dossierTemplatesService - .delete(templateIds) - .toPromise() - .catch(error => { - if (error.status === HttpStatusCode.Conflict) { - this._toaster.error(_('dossier-templates-listing.error.conflict')); - } else { - this._toaster.error(_('dossier-templates-listing.error.generic')); - } - }); - await this._appStateService.loadDictionaryData(); - } -} diff --git a/apps/red-ui/src/app/modules/admin/screens/file-attributes-listing/file-attributes-listing-screen.component.ts b/apps/red-ui/src/app/modules/admin/screens/file-attributes-listing/file-attributes-listing-screen.component.ts index f2e07904d..d94729b50 100644 --- a/apps/red-ui/src/app/modules/admin/screens/file-attributes-listing/file-attributes-listing-screen.component.ts +++ b/apps/red-ui/src/app/modules/admin/screens/file-attributes-listing/file-attributes-listing-screen.component.ts @@ -17,6 +17,7 @@ import { FileAttributeConfig, IFileAttributeConfig, IFileAttributesConfig } from import { FileAttributesService } from '@services/entity-services/file-attributes.service'; import { DossierTemplatesService } from '@services/entity-services/dossier-templates.service'; import { HttpStatusCode } from '@angular/common/http'; +import { firstValueFrom } from 'rxjs'; @Component({ templateUrl: './file-attributes-listing-screen.component.html', @@ -92,14 +93,14 @@ export class FileAttributesListingScreenComponent extends ListingComponent f.id), dossierTemplateId, - ) - .toPromise(); + ), + ); } await this._appStateService.refreshDossierTemplate(dossierTemplateId); await this._loadData(); @@ -123,17 +124,16 @@ export class FileAttributesListingScreenComponent extends ListingComponent { - await this._fileAttributesService - .setFileAttributesConfig(newValue, this._dossierTemplatesService.activeDossierTemplateId) - .toPromise() - .catch(error => { - if (error.status === HttpStatusCode.Conflict) { - this._toaster.error(_('file-attributes-listing.error.conflict')); - } else { - this._toaster.error(_('file-attributes-listing.error.generic')); - } - this._loadingService.stop(); - }); + await firstValueFrom( + this._fileAttributesService.setFileAttributesConfig(newValue, this._dossierTemplatesService.activeDossierTemplateId), + ).catch(error => { + if (error.status === HttpStatusCode.Conflict) { + this._toaster.error(_('file-attributes-listing.error.conflict')); + } else { + this._toaster.error(_('file-attributes-listing.error.generic')); + } + this._loadingService.stop(); + }); await this._appStateService.refreshDossierTemplate(this._dossierTemplatesService.activeDossierTemplateId); await this._loadData(); } @@ -142,9 +142,9 @@ export class FileAttributesListingScreenComponent extends ListingComponent new FileAttributeConfig(item)) || []; this.entitiesService.setEntities(fileAttributeConfig); diff --git a/apps/red-ui/src/app/modules/admin/screens/general-config/general-config-form/general-config-form.component.ts b/apps/red-ui/src/app/modules/admin/screens/general-config/general-config-form/general-config-form.component.ts index 546b0b1ce..1a6b61772 100644 --- a/apps/red-ui/src/app/modules/admin/screens/general-config/general-config-form/general-config-form.component.ts +++ b/apps/red-ui/src/app/modules/admin/screens/general-config/general-config-form/general-config-form.component.ts @@ -4,6 +4,7 @@ import { GeneralSettingsService } from '@services/general-settings.service'; import { IGeneralConfiguration } from '@red/domain'; import { ConfigService } from '@services/config.service'; import { FormBuilder, FormGroup } from '@angular/forms'; +import { firstValueFrom } from 'rxjs'; @Component({ selector: 'redaction-general-config-form', @@ -11,8 +12,8 @@ import { FormBuilder, FormGroup } from '@angular/forms'; styleUrls: ['./general-config-form.component.scss'], }) export class GeneralConfigFormComponent extends AutoUnsubscribe implements OnInit, OnDestroy { - private _initialConfiguration: IGeneralConfiguration; readonly form: FormGroup = this._getForm(); + private _initialConfiguration: IGeneralConfiguration; constructor( private readonly _loadingService: LoadingService, @@ -23,28 +24,6 @@ export class GeneralConfigFormComponent extends AutoUnsubscribe implements OnIni super(); } - private _getForm(): FormGroup { - return this._formBuilder.group({ - forgotPasswordFunctionEnabled: [false], - auxiliaryName: [undefined], - }); - } - - async ngOnInit(): Promise { - await this._loadData(); - } - - async saveGeneralConfig() { - this._loadingService.start(); - - const configFormValues = this.form.getRawValue(); - - await this._generalSettingsService.updateGeneralConfigurations(configFormValues).toPromise(); - this._initialConfiguration = await this._generalSettingsService.getGeneralConfigurations().toPromise(); - this._configService.updateDisplayName(this._initialConfiguration.displayName); - this._loadingService.stop(); - } - get generalConfigurationChanged(): boolean { if (!this._initialConfiguration) { return true; @@ -59,10 +38,32 @@ export class GeneralConfigFormComponent extends AutoUnsubscribe implements OnIni return false; } + async ngOnInit(): Promise { + await this._loadData(); + } + + async saveGeneralConfig() { + this._loadingService.start(); + + const configFormValues = this.form.getRawValue(); + + await firstValueFrom(this._generalSettingsService.updateGeneralConfigurations(configFormValues)); + this._initialConfiguration = await firstValueFrom(this._generalSettingsService.getGeneralConfigurations()); + this._configService.updateDisplayName(this._initialConfiguration.displayName); + this._loadingService.stop(); + } + + private _getForm(): FormGroup { + return this._formBuilder.group({ + forgotPasswordFunctionEnabled: [false], + auxiliaryName: [undefined], + }); + } + private async _loadData() { this._loadingService.start(); try { - this._initialConfiguration = await this._generalSettingsService.getGeneralConfigurations().toPromise(); + this._initialConfiguration = await firstValueFrom(this._generalSettingsService.getGeneralConfigurations()); this.form.patchValue(this._initialConfiguration, { emitEvent: false }); } catch (e) {} diff --git a/apps/red-ui/src/app/modules/admin/screens/general-config/smtp-form/smtp-form.component.ts b/apps/red-ui/src/app/modules/admin/screens/general-config/smtp-form/smtp-form.component.ts index d2ce349de..102695006 100644 --- a/apps/red-ui/src/app/modules/admin/screens/general-config/smtp-form/smtp-form.component.ts +++ b/apps/red-ui/src/app/modules/admin/screens/general-config/smtp-form/smtp-form.component.ts @@ -5,6 +5,7 @@ import { AutoUnsubscribe, IconButtonTypes, LoadingService, Toaster } from '@iqse import { AdminDialogService } from '../../../services/admin-dialog.service'; import { SmtpConfigService } from '../../../services/smtp-config.service'; import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker'; +import { firstValueFrom } from 'rxjs'; @Component({ selector: 'redaction-smtp-form', @@ -13,8 +14,8 @@ import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker'; }) export class SmtpFormComponent extends AutoUnsubscribe implements OnInit, OnDestroy { readonly iconButtonTypes = IconButtonTypes; - private _initialConfiguration: ISmtpConfiguration; readonly form: FormGroup = this._getForm(); + private _initialConfiguration: ISmtpConfiguration; constructor( private readonly _formBuilder: FormBuilder, @@ -31,10 +32,53 @@ export class SmtpFormComponent extends AutoUnsubscribe implements OnInit, OnDest }); } + get smtpConfigurationChanged(): boolean { + if (!this._initialConfiguration) { + return true; + } + + for (const key of Object.keys(this.form.getRawValue())) { + if (this._initialConfiguration[key] !== this.form.get(key).value) { + return true; + } + } + + return false; + } + async ngOnInit(): Promise { await this._loadData(); } + openAuthConfigDialog(skipDisableOnCancel?: boolean) { + this._dialogService.openDialog('smtpAuthConfig', null, this.form.getRawValue(), null, authConfig => { + if (authConfig) { + this.form.patchValue(authConfig); + } else if (!skipDisableOnCancel) { + this.form.patchValue({ auth: false }, { emitEvent: false }); + } + }); + } + + async save() { + this._loadingService.start(); + await firstValueFrom(this._smtpConfigService.updateSMTPConfiguration(this.form.getRawValue())); + this._initialConfiguration = this.form.getRawValue(); + this._loadingService.stop(); + } + + async testConnection() { + this._loadingService.start(); + try { + await firstValueFrom(this._smtpConfigService.testSMTPConfiguration(this.form.getRawValue())); + this._toaster.success(_('general-config-screen.test.success')); + } catch (e) { + this._toaster.error(_('general-config-screen.test.error')); + } finally { + this._loadingService.stop(); + } + } + private _getForm(): FormGroup { return this._formBuilder.group({ host: [undefined, Validators.required], @@ -52,54 +96,11 @@ export class SmtpFormComponent extends AutoUnsubscribe implements OnInit, OnDest }); } - openAuthConfigDialog(skipDisableOnCancel?: boolean) { - this._dialogService.openDialog('smtpAuthConfig', null, this.form.getRawValue(), null, authConfig => { - if (authConfig) { - this.form.patchValue(authConfig); - } else if (!skipDisableOnCancel) { - this.form.patchValue({ auth: false }, { emitEvent: false }); - } - }); - } - - async save() { - this._loadingService.start(); - await this._smtpConfigService.updateSMTPConfiguration(this.form.getRawValue()).toPromise(); - this._initialConfiguration = this.form.getRawValue(); - this._loadingService.stop(); - } - - get smtpConfigurationChanged(): boolean { - if (!this._initialConfiguration) { - return true; - } - - for (const key of Object.keys(this.form.getRawValue())) { - if (this._initialConfiguration[key] !== this.form.get(key).value) { - return true; - } - } - - return false; - } - - async testConnection() { - this._loadingService.start(); - try { - await this._smtpConfigService.testSMTPConfiguration(this.form.getRawValue()).toPromise(); - this._toaster.success(_('general-config-screen.test.success')); - } catch (e) { - this._toaster.error(_('general-config-screen.test.error')); - } finally { - this._loadingService.stop(); - } - } - private async _loadData() { this._loadingService.start(); try { - this._initialConfiguration = await this._smtpConfigService.getCurrentSMTPConfiguration().toPromise(); + this._initialConfiguration = await firstValueFrom(this._smtpConfigService.getCurrentSMTPConfiguration()); this.form.patchValue(this._initialConfiguration, { emitEvent: false }); } catch (e) {} diff --git a/apps/red-ui/src/app/modules/admin/screens/justifications/add-edit-justification-dialog/add-edit-justification-dialog.component.ts b/apps/red-ui/src/app/modules/admin/screens/justifications/add-edit-justification-dialog/add-edit-justification-dialog.component.ts index f8048607f..6ee90987d 100644 --- a/apps/red-ui/src/app/modules/admin/screens/justifications/add-edit-justification-dialog/add-edit-justification-dialog.component.ts +++ b/apps/red-ui/src/app/modules/admin/screens/justifications/add-edit-justification-dialog/add-edit-justification-dialog.component.ts @@ -5,6 +5,7 @@ import { Justification } from '@red/domain'; import { JustificationsService } from '@services/entity-services/justifications.service'; import { DossierTemplatesService } from '@services/entity-services/dossier-templates.service'; import { LoadingService } from '@iqser/common-ui'; +import { firstValueFrom } from 'rxjs'; @Component({ selector: 'redaction-add-edit-justification-dialog', @@ -35,8 +36,8 @@ export class AddEditJustificationDialogComponent { const dossierTemplateId = this._dossierTemplatesService.activeDossierTemplateId; this._loadingService.start(); - await this._justificationService.createOrUpdate(this.form.getRawValue(), dossierTemplateId).toPromise(); - await this._justificationService.loadAll(dossierTemplateId).toPromise(); + await firstValueFrom(this._justificationService.createOrUpdate(this.form.getRawValue(), dossierTemplateId)); + await firstValueFrom(this._justificationService.loadAll(dossierTemplateId)); this._loadingService.stop(); this.dialogRef.close(true); } diff --git a/apps/red-ui/src/app/modules/admin/screens/justifications/justifications-dialog.service.ts b/apps/red-ui/src/app/modules/admin/screens/justifications/justifications-dialog.service.ts index a4ee07326..aa8295caa 100644 --- a/apps/red-ui/src/app/modules/admin/screens/justifications/justifications-dialog.service.ts +++ b/apps/red-ui/src/app/modules/admin/screens/justifications/justifications-dialog.service.ts @@ -13,6 +13,7 @@ import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker'; import { DossierTemplatesService } from '@services/entity-services/dossier-templates.service'; import { JustificationsService } from '@services/entity-services/justifications.service'; import { Justification } from '@red/domain'; +import { firstValueFrom } from 'rxjs'; type DialogType = 'confirm' | 'addEditJustification'; @@ -51,8 +52,8 @@ export class JustificationsDialogService extends DialogService { this._loadingService.start(); const dossierTemplateId = this._dossierTemplatesService.activeDossierTemplateId; const justificationIds = justifications.map(j => j.id); - await this._justificationService.delete(justificationIds, dossierTemplateId).toPromise(); - await this._justificationService.loadAll(dossierTemplateId).toPromise(); + await firstValueFrom(this._justificationService.delete(justificationIds, dossierTemplateId)); + await firstValueFrom(this._justificationService.loadAll(dossierTemplateId)); this._loadingService.stop(); }); } diff --git a/apps/red-ui/src/app/modules/admin/screens/justifications/justifications-screen/justifications-screen.component.ts b/apps/red-ui/src/app/modules/admin/screens/justifications/justifications-screen/justifications-screen.component.ts index 9d3f4f841..e002143c6 100644 --- a/apps/red-ui/src/app/modules/admin/screens/justifications/justifications-screen/justifications-screen.component.ts +++ b/apps/red-ui/src/app/modules/admin/screens/justifications/justifications-screen/justifications-screen.component.ts @@ -15,6 +15,7 @@ import { DossierTemplatesService } from '@services/entity-services/dossier-templ import { JustificationsDialogService } from '../justifications-dialog.service'; import { UserService } from '@services/user.service'; import { UserPreferenceService } from '@services/user-preference.service'; +import { firstValueFrom } from 'rxjs'; @Component({ selector: 'redaction-justifications-screen', @@ -52,7 +53,7 @@ export class JustificationsScreenComponent extends ListingComponent { this._loadingService.start(); - await this._justificationService.loadAll(this._dossierTemplatesService.activeDossierTemplateId).toPromise(); + await firstValueFrom(this._justificationService.loadAll(this._dossierTemplatesService.activeDossierTemplateId)); this._loadingService.stop(); } diff --git a/apps/red-ui/src/app/modules/admin/screens/license-information/license-information-screen.component.ts b/apps/red-ui/src/app/modules/admin/screens/license-information/license-information-screen.component.ts index 35abc60ff..095261402 100644 --- a/apps/red-ui/src/app/modules/admin/screens/license-information/license-information-screen.component.ts +++ b/apps/red-ui/src/app/modules/admin/screens/license-information/license-information-screen.component.ts @@ -9,6 +9,7 @@ import { RouterHistoryService } from '@services/router-history.service'; import { LicenseReportService } from '../../services/licence-report.service'; import { ILicenseReport } from '@red/domain'; import { Color, ScaleType } from '@swimlane/ngx-charts'; +import { firstValueFrom } from 'rxjs'; @Component({ selector: 'redaction-license-information-screen', @@ -72,15 +73,15 @@ export class LicenseInformationScreenComponent implements OnInit { endDate: endDate.toDate(), }; const promises = [ - this._licenseReportService.licenseReport(currentConfig).toPromise(), - this._licenseReportService.licenseReport({}).toPromise(), + firstValueFrom(this._licenseReportService.licenseReport(currentConfig)), + firstValueFrom(this._licenseReportService.licenseReport({})), ]; if (endDate.isBefore(moment())) { const unlicensedConfig = { startDate: endDate.toDate(), }; - promises.push(this._licenseReportService.licenseReport(unlicensedConfig).toPromise()); + promises.push(firstValueFrom(this._licenseReportService.licenseReport(unlicensedConfig))); } Promise.all(promises).then(reports => { @@ -135,12 +136,12 @@ export class LicenseInformationScreenComponent implements OnInit { } promises.push( - this._licenseReportService - .licenseReport({ + firstValueFrom( + this._licenseReportService.licenseReport({ startDate: moment(`01-${m + 1}-${y}`, 'DD-MM-YYYY').toDate(), endDate: moment(`01-${nm + 1}-${ny}`, 'DD-MM-YYYY').toDate(), - }) - .toPromise(), + }), + ), ); y = ny; diff --git a/apps/red-ui/src/app/modules/admin/screens/reports/reports-screen.component.ts b/apps/red-ui/src/app/modules/admin/screens/reports/reports-screen.component.ts index 791e5d5c1..a78562025 100644 --- a/apps/red-ui/src/app/modules/admin/screens/reports/reports-screen.component.ts +++ b/apps/red-ui/src/app/modules/admin/screens/reports/reports-screen.component.ts @@ -12,6 +12,7 @@ import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker'; import { AdminDialogService } from '../../services/admin-dialog.service'; import { DossierTemplatesService } from '@services/entity-services/dossier-templates.service'; import { ReportTemplateService } from '@services/report-template.service'; +import { firstValueFrom } from 'rxjs'; interface Placeholder { placeholder: string; @@ -56,9 +57,9 @@ export class ReportsScreenComponent implements OnInit { async download(template: IReportTemplate) { this._loadingService.start(); try { - const data = await this._reportTemplateService - .downloadReportTemplate(template.dossierTemplateId, template.templateId, 'response') - .toPromise(); + const data = await firstValueFrom( + this._reportTemplateService.downloadReportTemplate(template.dossierTemplateId, template.templateId, 'response'), + ); this._loadingService.stop(); download(data, template.fileName); } catch (e) { @@ -130,31 +131,31 @@ export class ReportsScreenComponent implements OnInit { }); this._dialogService.openDialog('confirm', null, data, null, async result => { if (result) { - await this._reportTemplateService.uploadTemplateForm(dossierTemplateId, result > 1, file).toPromise(); + await firstValueFrom(this._reportTemplateService.uploadTemplateForm(dossierTemplateId, result > 1, file)); await this._loadReportTemplates(); } }); } else { - await this._reportTemplateService.uploadTemplateForm(dossierTemplateId, false, file).toPromise(); + await firstValueFrom(this._reportTemplateService.uploadTemplateForm(dossierTemplateId, false, file)); await this._loadReportTemplates(); } } private async _deleteTemplate(template: IReportTemplate) { - await this._reportTemplateService.delete(template.dossierTemplateId, template.templateId).toPromise(); + await firstValueFrom(this._reportTemplateService.delete(template.dossierTemplateId, template.templateId)); await this._loadReportTemplates(); } private async _loadReportTemplates() { - this.availableTemplates = await this._reportTemplateService - .getAvailableReportTemplates(this._dossierTemplatesService.activeDossierTemplateId) - .toPromise(); + this.availableTemplates = await firstValueFrom( + this._reportTemplateService.getAvailableReportTemplates(this._dossierTemplatesService.activeDossierTemplateId), + ); } private async _loadPlaceholders() { - const placeholdersResponse: IPlaceholdersResponse = await this._reportTemplateService - .getAvailablePlaceholders(this._dossierTemplatesService.activeDossierTemplateId) - .toPromise(); + const placeholdersResponse: IPlaceholdersResponse = await firstValueFrom( + this._reportTemplateService.getAvailablePlaceholders(this._dossierTemplatesService.activeDossierTemplateId), + ); this.placeholders = placeholderTypes.flatMap(type => placeholdersResponse[type].map(placeholder => ({ placeholder, diff --git a/apps/red-ui/src/app/modules/admin/screens/rules/rules-screen.component.ts b/apps/red-ui/src/app/modules/admin/screens/rules/rules-screen.component.ts index 9e4809505..24de22cdb 100644 --- a/apps/red-ui/src/app/modules/admin/screens/rules/rules-screen.component.ts +++ b/apps/red-ui/src/app/modules/admin/screens/rules/rules-screen.component.ts @@ -7,6 +7,7 @@ import { ComponentHasChanges } from '@guards/can-deactivate.guard'; import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker'; import { DossierTemplatesService } from '@services/entity-services/dossier-templates.service'; import { RulesService } from '../../services/rules.service'; +import { firstValueFrom } from 'rxjs'; import ICodeEditor = monaco.editor.ICodeEditor; import IModelDeltaDecoration = monaco.editor.IModelDeltaDecoration; import IStandaloneEditorConstructionOptions = monaco.editor.IStandaloneEditorConstructionOptions; @@ -87,22 +88,21 @@ export class RulesScreenComponent extends ComponentHasChanges implements OnInit async save(): Promise { this._loadingService.start(); - await this._rulesService - .uploadRules({ + await firstValueFrom( + this._rulesService.uploadRules({ rules: this._codeEditor.getModel().getValue(), dossierTemplateId: this._dossierTemplatesService.activeDossierTemplateId, - }) - .toPromise() - .then( - async () => { - await this._initialize(); - this._toaster.success(_('rules-screen.success.generic')); - }, - () => { - this._loadingService.stop(); - this._toaster.error(_('rules-screen.error.generic')); - }, - ); + }), + ).then( + async () => { + await this._initialize(); + this._toaster.success(_('rules-screen.success.generic')); + }, + () => { + this._loadingService.stop(); + this._toaster.error(_('rules-screen.error.generic')); + }, + ); } revert(): void { @@ -148,15 +148,12 @@ export class RulesScreenComponent extends ComponentHasChanges implements OnInit private async _initialize() { this._loadingService.start(); - await this._rulesService - .download(this._dossierTemplatesService.activeDossierTemplateId) - .toPromise() - .then( - rules => { - this.currentLines = this.initialLines = rules.rules.split('\n'); - this.revert(); - }, - () => this._loadingService.stop(), - ); + await firstValueFrom(this._rulesService.download(this._dossierTemplatesService.activeDossierTemplateId)).then( + rules => { + this.currentLines = this.initialLines = rules.rules.split('\n'); + this.revert(); + }, + () => this._loadingService.stop(), + ); } } diff --git a/apps/red-ui/src/app/modules/admin/screens/user-listing/user-listing-screen.component.ts b/apps/red-ui/src/app/modules/admin/screens/user-listing/user-listing-screen.component.ts index e5cced318..20edea6f2 100644 --- a/apps/red-ui/src/app/modules/admin/screens/user-listing/user-listing-screen.component.ts +++ b/apps/red-ui/src/app/modules/admin/screens/user-listing/user-listing-screen.component.ts @@ -14,7 +14,7 @@ import { NestedFilter, TableColumnConfig, } from '@iqser/common-ui'; -import { Observable } from 'rxjs'; +import { firstValueFrom, Observable } from 'rxjs'; import { map } from 'rxjs/operators'; import { rolesTranslations } from '../../../../translations/roles-translations'; import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker'; @@ -96,7 +96,7 @@ export class UserListingScreenComponent extends ListingComponent implement async toggleActive(user: User) { this._loadingService.start(); const requestBody = { ...user, roles: user.isActive ? [] : ['RED_USER'] }; - await this.userService.updateProfile(requestBody, user.id).toPromise(); + await firstValueFrom(this.userService.updateProfile(requestBody, user.id)); await this._loadData(); } @@ -105,7 +105,7 @@ export class UserListingScreenComponent extends ListingComponent implement } private async _loadData() { - await this.userService.loadAll().toPromise(); + await firstValueFrom(this.userService.loadAll()); this._computeStats(); this._loadingService.stop(); } diff --git a/apps/red-ui/src/app/modules/admin/screens/watermark/watermark-screen.component.ts b/apps/red-ui/src/app/modules/admin/screens/watermark/watermark-screen.component.ts index 9d2d00fc3..607ef3ca4 100644 --- a/apps/red-ui/src/app/modules/admin/screens/watermark/watermark-screen.component.ts +++ b/apps/red-ui/src/app/modules/admin/screens/watermark/watermark-screen.component.ts @@ -11,6 +11,7 @@ import { stampPDFPage } from '@utils/page-stamper'; import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker'; import { DossierTemplatesService } from '@services/entity-services/dossier-templates.service'; import { WatermarkService } from '@shared/services/watermark.service'; +import { firstValueFrom } from 'rxjs'; export const DEFAULT_WATERMARK: IWatermark = { text: null, @@ -80,7 +81,7 @@ export class WatermarkScreenComponent implements OnInit { ? this._watermarkService.saveWatermark(watermark, dossierTemplateId) : this._watermarkService.deleteWatermark(dossierTemplateId); - observable.toPromise().then( + firstValueFrom(observable).then( () => { this._loadWatermark(); this._toaster.success( diff --git a/apps/red-ui/src/app/modules/admin/shared/components/dossier-template-actions/dossier-template-actions.component.ts b/apps/red-ui/src/app/modules/admin/shared/components/dossier-template-actions/dossier-template-actions.component.ts index ad67cb3f9..194abbecc 100644 --- a/apps/red-ui/src/app/modules/admin/shared/components/dossier-template-actions/dossier-template-actions.component.ts +++ b/apps/red-ui/src/app/modules/admin/shared/components/dossier-template-actions/dossier-template-actions.component.ts @@ -7,6 +7,7 @@ import { UserService } from '@services/user.service'; import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker'; import { DossierTemplatesService } from '@services/entity-services/dossier-templates.service'; import { HttpStatusCode } from '@angular/common/http'; +import { firstValueFrom } from 'rxjs'; @Component({ selector: 'redaction-dossier-template-actions', @@ -45,11 +46,9 @@ export class DossierTemplateActionsComponent implements OnInit { this._dialogService.openDialog('confirm', $event, null, async () => { this._loadingService.start(); - await this._dossierTemplatesService - .delete([this.dossierTemplateId]) - .toPromise() + await firstValueFrom(this._dossierTemplatesService.delete([this.dossierTemplateId])) .then(async () => { - await this._dossierTemplatesService.loadAll().toPromise(); + await firstValueFrom(this._dossierTemplatesService.loadAll()); await this._appStateService.loadDictionaryData(); await this._router.navigate(['main', 'admin']); }) diff --git a/apps/red-ui/src/app/modules/auth/auth.module.ts b/apps/red-ui/src/app/modules/auth/auth.module.ts index 1246d36fd..a71370167 100644 --- a/apps/red-ui/src/app/modules/auth/auth.module.ts +++ b/apps/red-ui/src/app/modules/auth/auth.module.ts @@ -5,6 +5,7 @@ import { HttpClientModule } from '@angular/common/http'; import { KeycloakAngularModule, KeycloakOptions, KeycloakService } from 'keycloak-angular'; import { ConfigService } from '@services/config.service'; import { BASE_HREF } from '../../tokens'; +import { firstValueFrom } from 'rxjs'; function getKeycloakOptions(configService: ConfigService, baseUrl: string) { let url: string = configService.values.OAUTH_URL; @@ -36,14 +37,11 @@ function configureAutomaticRedirectToLoginScreen(keyCloakService: KeycloakServic export function keycloakInitializer(keycloakService: KeycloakService, configService: ConfigService, baseUrl: string): () => Promise { return () => - configService - .loadAppConfig() - .toPromise() - .then(() => - keycloakService - .init(getKeycloakOptions(configService, baseUrl)) - .then(() => configureAutomaticRedirectToLoginScreen(keycloakService)), - ); + firstValueFrom(configService.loadAppConfig()).then(() => + keycloakService + .init(getKeycloakOptions(configService, baseUrl)) + .then(() => configureAutomaticRedirectToLoginScreen(keycloakService)), + ); } @NgModule({