diff --git a/apps/red-ui/src/app/modules/admin/screens/permissions/permissions-screen/permissions-screen.component.html b/apps/red-ui/src/app/modules/admin/screens/permissions/permissions-screen/permissions-screen.component.html index 472c6388b..c2ae06648 100644 --- a/apps/red-ui/src/app/modules/admin/screens/permissions/permissions-screen/permissions-screen.component.html +++ b/apps/red-ui/src/app/modules/admin/screens/permissions/permissions-screen/permissions-screen.component.html @@ -1,6 +1,6 @@ diff --git a/apps/red-ui/src/app/modules/admin/screens/permissions/permissions-screen/permissions-screen.component.ts b/apps/red-ui/src/app/modules/admin/screens/permissions/permissions-screen/permissions-screen.component.ts index 05d293fe1..4dcf15a27 100644 --- a/apps/red-ui/src/app/modules/admin/screens/permissions/permissions-screen/permissions-screen.component.ts +++ b/apps/red-ui/src/app/modules/admin/screens/permissions/permissions-screen/permissions-screen.component.ts @@ -1,4 +1,4 @@ -import { ChangeDetectionStrategy, Component } from '@angular/core'; +import { ChangeDetectionStrategy, Component, OnDestroy } from '@angular/core'; import { getCurrentUser, IqserPermissionsService, @@ -15,21 +15,19 @@ import { EntityPermissionsService } from '@services/entity-permissions/entity-pe import { ActivatedRoute } from '@angular/router'; import { PermissionsMapService } from '@services/entity-permissions/permissions-map.service'; import { PermissionsConfigurationMapService } from '@services/entity-permissions/permissions-configuration-map.service'; -import { firstValueFrom } from 'rxjs'; -import { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy'; +import { Subscription } from 'rxjs'; import { tap } from 'rxjs/operators'; import { permissionsTranslations } from '@translations/permissions-translations'; import { RouterHistoryService } from '@services/router-history.service'; import { ROLES } from '@users/roles'; -@UntilDestroy() @Component({ templateUrl: './permissions-screen.component.html', styleUrls: ['./permissions-screen.component.scss'], providers: listingProvidersFactory(PermissionsScreenComponent), changeDetection: ChangeDetectionStrategy.OnPush, }) -export class PermissionsScreenComponent extends ListingComponent { +export class PermissionsScreenComponent extends ListingComponent implements OnDestroy { readonly roles = ROLES; readonly currentUser = getCurrentUser(); readonly translations = permissionsTranslations; @@ -37,6 +35,7 @@ export class PermissionsScreenComponent extends ListingComponent this.entitiesService.setEntities(permissions))) - .pipe(untilDestroyed(this)) .subscribe(); } async togglePermission(targetPermission: string, changedPermission: string): Promise { this._loadingService.start(); - await firstValueFrom(this._entityPermissionsService.togglePermission(this.targetObject, targetPermission, changedPermission)); + await this._entityPermissionsService.togglePermission(this.targetObject, targetPermission, changedPermission); this._loadingService.stop(); } + + ngOnDestroy(): void { + this.#subscription.unsubscribe(); + } } diff --git a/apps/red-ui/src/app/modules/admin/screens/permissions/permissions.module.ts b/apps/red-ui/src/app/modules/admin/screens/permissions/permissions.module.ts index 1d2a4f0d0..f83e6ad48 100644 --- a/apps/red-ui/src/app/modules/admin/screens/permissions/permissions.module.ts +++ b/apps/red-ui/src/app/modules/admin/screens/permissions/permissions.module.ts @@ -1,17 +1,24 @@ import { NgModule } from '@angular/core'; import { CommonModule } from '@angular/common'; import { RouterModule } from '@angular/router'; -import { SharedModule } from '@shared/shared.module'; import { PermissionsScreenComponent } from './permissions-screen/permissions-screen.component'; import { ConfigService } from './config.service'; import { TranslateModule } from '@ngx-translate/core'; import { IqserHelpModeModule, IqserListingModule } from '@iqser/common-ui'; +import { MatLegacySlideToggleModule } from '@angular/material/legacy-slide-toggle'; const routes = [{ path: '', component: PermissionsScreenComponent }]; @NgModule({ declarations: [PermissionsScreenComponent], - imports: [RouterModule.forChild(routes), CommonModule, SharedModule, TranslateModule, IqserListingModule, IqserHelpModeModule], + imports: [ + RouterModule.forChild(routes), + CommonModule, + TranslateModule, + IqserListingModule, + IqserHelpModeModule, + MatLegacySlideToggleModule, + ], providers: [ConfigService], }) export class PermissionsModule {} diff --git a/apps/red-ui/src/app/modules/file-preview/components/annotation-reference/annotation-reference.component.ts b/apps/red-ui/src/app/modules/file-preview/components/annotation-reference/annotation-reference.component.ts index 3b050659c..b1296d397 100644 --- a/apps/red-ui/src/app/modules/file-preview/components/annotation-reference/annotation-reference.component.ts +++ b/apps/red-ui/src/app/modules/file-preview/components/annotation-reference/annotation-reference.component.ts @@ -1,23 +1,22 @@ -import { ChangeDetectionStrategy, ChangeDetectorRef, Component, HostBinding, Input, OnChanges } from '@angular/core'; +import { ChangeDetectionStrategy, ChangeDetectorRef, Component, HostBinding, Input, OnChanges, OnDestroy } from '@angular/core'; import { AnnotationWrapper } from '@models/file/annotation.wrapper'; -import { BehaviorSubject, filter } from 'rxjs'; +import { BehaviorSubject, filter, Subscription } from 'rxjs'; import { switchMap, tap } from 'rxjs/operators'; -import { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy'; import { AnnotationsListingService } from '../../services/annotations-listing.service'; -@UntilDestroy() @Component({ selector: 'redaction-annotation-reference [annotation]', templateUrl: './annotation-reference.component.html', changeDetection: ChangeDetectionStrategy.OnPush, }) -export class AnnotationReferenceComponent implements OnChanges { +export class AnnotationReferenceComponent implements OnChanges, OnDestroy { @Input() annotation: AnnotationWrapper; @HostBinding('class.active') isSelected = false; - private readonly _annotationChanged$ = new BehaviorSubject(undefined); + readonly #annotationChanged$ = new BehaviorSubject(undefined); + readonly #subscription: Subscription; constructor(private readonly _listingService: AnnotationsListingService, private readonly _changeRef: ChangeDetectorRef) { - this._annotationChanged$ + this.#subscription = this.#annotationChanged$ .pipe( filter(annotation => !!annotation), switchMap(annotation => this._listingService.isSelected$(annotation)), @@ -26,11 +25,14 @@ export class AnnotationReferenceComponent implements OnChanges { this._changeRef.markForCheck(); }), ) - .pipe(untilDestroyed(this)) .subscribe(); } ngOnChanges(): void { - this._annotationChanged$.next(this.annotation); + this.#annotationChanged$.next(this.annotation); + } + + ngOnDestroy(): void { + this.#subscription.unsubscribe(); } } diff --git a/apps/red-ui/src/app/services/entity-permissions/entity-permissions.service.ts b/apps/red-ui/src/app/services/entity-permissions/entity-permissions.service.ts index da9756a7f..a1a2d0cb6 100644 --- a/apps/red-ui/src/app/services/entity-permissions/entity-permissions.service.ts +++ b/apps/red-ui/src/app/services/entity-permissions/entity-permissions.service.ts @@ -1,7 +1,7 @@ import { inject, Injectable } from '@angular/core'; import { GenericService, mapEach } from '@iqser/common-ui'; import { IPermissionsMapping, PermissionsMapping } from '@red/domain'; -import { Observable } from 'rxjs'; +import { firstValueFrom, Observable } from 'rxjs'; import { switchMap, tap } from 'rxjs/operators'; import { PermissionsConfigurationMapService } from './permissions-configuration-map.service'; import { PermissionsMapService } from './permissions-map.service'; @@ -32,7 +32,7 @@ export class EntityPermissionsService extends GenericService { + async togglePermission(targetObject: string, targetPermission: string, changedPermission: string): Promise { const config = this.#permissionsConfigurationMapService.get(targetObject); const targetPermissionConfig = config.find(p => p.searchKey === targetPermission); const permissions = this.#permissionsMapService.get(targetObject); @@ -44,7 +44,8 @@ export class EntityPermissionsService extends GenericService p.name === changedPermission); currentTargetPermissionValues.mappedPermissions.push(permission); } - return this._post(permissions, `${this._defaultModelPath}/${targetObject}`).pipe(switchMap(() => this.loadFor(targetObject))); + const request = this._post(permissions, `${this._defaultModelPath}/${targetObject}`); + return firstValueFrom(request.pipe(switchMap(() => this.loadFor(targetObject)))); } #addMissingPermissions(mappings: PermissionsMapping[], targetObject: string): void { diff --git a/libs/common-ui b/libs/common-ui index bf325c2c0..36c74bd8a 160000 --- a/libs/common-ui +++ b/libs/common-ui @@ -1 +1 @@ -Subproject commit bf325c2c09da901aebafa7794997a3d3cfb8765d +Subproject commit 36c74bd8a2a04bcfdf487668910eac386ae2e4eb diff --git a/package.json b/package.json index 926b387b4..d3ffb810d 100644 --- a/package.json +++ b/package.json @@ -36,7 +36,6 @@ "@biesbjerg/ngx-translate-extract-marker": "^1.0.0", "@materia-ui/ngx-monaco-editor": "^6.0.0", "@messageformat/core": "^3.0.1", - "@ngneat/until-destroy": "^9.2.0", "@ngx-translate/core": "^14.0.0", "@ngx-translate/http-loader": "^7.0.0", "@nrwl/angular": "15.3.3", diff --git a/yarn.lock b/yarn.lock index 1c9f36879..ece21d1fd 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2722,13 +2722,6 @@ dependencies: make-plural "^7.0.0" -"@ngneat/until-destroy@^9.2.0": - version "9.2.2" - resolved "https://registry.yarnpkg.com/@ngneat/until-destroy/-/until-destroy-9.2.2.tgz#ac6f954610fc7ea5d4a094ed4de9db59513b810f" - integrity sha512-pD5idTgUdF0XZMuaV1n0BZTnE2BvxymutoXhwfZbO3uxjh63wS6Pzzzwv+pkXalKhuSwdf6uA1gRx7DOvlj/Kw== - dependencies: - tslib "^2.3.0" - "@ngtools/webpack@15.0.4": version "15.0.4" resolved "https://registry.yarnpkg.com/@ngtools/webpack/-/webpack-15.0.4.tgz#c1fe2feeab9f7933ef3e76682b26e11d8cd02423"