From 04e3f5b5226cec7c8238aa02aef5d8ce1a3fa009 Mon Sep 17 00:00:00 2001 From: Dan Percic Date: Wed, 19 Jun 2024 13:06:20 +0300 Subject: [PATCH] almost unfuck circular imports --- apps/red-ui/src/app/app.module.ts | 16 ++--- .../src/app/guards/permissions-guard.ts | 2 +- .../dialog-defaults.component.ts | 28 ++++---- .../modules/account/utils/dialog-defaults.ts | 8 +-- .../add-edit-user-dialog.component.ts | 7 +- .../user-listing-screen.component.ts | 13 ++-- .../admin/services/admin-dialog.service.ts | 26 +++---- .../dossier-details-stats.component.ts | 17 ++--- .../dossier-overview/config.service.ts | 6 +- .../add-hint-dialog.component.ts | 20 +++--- .../remove-annotation-dialog.component.ts | 28 ++++---- .../edit-redaction-dialog.component.ts | 25 ++++--- .../redact-recommendation-dialog.component.ts | 18 ++--- .../redact-text-dialog.component.ts | 70 +++++++++---------- .../remove-redaction-dialog.component.ts | 31 ++++---- .../resize-redaction-dialog.component.ts | 14 ++-- .../services/annotation-actions.service.ts | 2 +- .../file-preview/services/skipped.service.ts | 7 +- .../modules/file-preview/utils/constants.ts | 2 + .../file-preview/utils/dialog-options.ts | 31 +++----- .../file-preview/utils/dialog-types.ts | 22 +++++- .../services/annotation-manager.service.ts | 4 +- .../dossiers-listing-actions.component.ts | 11 +-- .../edit-dossier-dialog.component.html | 11 +-- .../edit-dossier-dialog.component.ts | 43 ++++++------ .../edit-dossier-team.component.ts | 40 ++--------- .../edit-dossier-team.module.ts | 42 +++++++++++ .../edit-dossier-general-info.component.ts | 42 +++++------ .../services/dossiers-dialog.service.ts | 9 +-- .../team-members/team-members.component.ts | 20 +++--- .../add-dossier-dialog.component.ts | 34 +++++---- .../remove-annotation-translations.ts | 2 +- .../remove-redaction-translations.ts | 2 +- .../src/app/users/user-preference.service.ts | 2 +- apps/red-ui/src/app/utils/filter-utils.ts | 2 +- libs/common-ui | 2 +- .../dossier-attribute-config.model.ts | 3 +- .../dossier-attribute-config.ts | 11 ++- .../src/lib/dossier-attributes/index.ts | 1 - .../src/lib/dossier-attributes/types.ts | 12 ---- .../lib/dossier-stats/dossier-stats.model.ts | 9 ++- .../red-domain/src/lib/dossier-stats/types.ts | 2 +- .../src/lib/dossiers/dossier.model.ts | 2 +- libs/red-domain/src/lib/dossiers/dossier.ts | 2 +- libs/red-domain/src/lib/files/file.model.ts | 8 +-- .../src/lib/pages/viewed-page.model.ts | 2 +- libs/red-domain/src/lib/shared/colors.ts | 2 +- .../src/lib/shared/expandable-file-actions.ts | 6 +- .../src/lib/shared/sorters/status-sorter.ts | 2 +- 49 files changed, 368 insertions(+), 353 deletions(-) create mode 100644 apps/red-ui/src/app/modules/shared-dossiers/dialogs/edit-dossier-dialog/edit-dossier-team/edit-dossier-team.module.ts delete mode 100644 libs/red-domain/src/lib/dossier-attributes/types.ts diff --git a/apps/red-ui/src/app/app.module.ts b/apps/red-ui/src/app/app.module.ts index 59523873b..105678bf6 100644 --- a/apps/red-ui/src/app/app.module.ts +++ b/apps/red-ui/src/app/app.module.ts @@ -2,11 +2,16 @@ import { APP_BASE_HREF, DatePipe as BaseDatePipe } from '@angular/common'; import { HTTP_INTERCEPTORS } from '@angular/common/http'; import { ENVIRONMENT_INITIALIZER, ErrorHandler, inject, NgModule } from '@angular/core'; import { MatDividerModule } from '@angular/material/divider'; +import { MatIcon } from '@angular/material/icon'; +import { MatMenu, MatMenuContent, MatMenuItem, MatMenuTrigger } from '@angular/material/menu'; +import { MatProgressSpinner } from '@angular/material/progress-spinner'; import { MAT_TOOLTIP_DEFAULT_OPTIONS, MatTooltip } from '@angular/material/tooltip'; import { BrowserModule } from '@angular/platform-browser'; import { BrowserAnimationsModule } from '@angular/platform-browser/animations'; import { ServiceWorkerModule } from '@angular/service-worker'; +import { HelpModeKey } from '@common-ui/help-mode/types'; import { GET_TENANT_FROM_PATH_FN, UI_ROOT } from '@common-ui/utils'; +import { AuthErrorComponent } from '@components/auth-error/auth-error.component'; import { BaseScreenComponent } from '@components/base-screen/base-screen.component'; import { BreadcrumbsComponent } from '@components/breadcrumbs/breadcrumbs.component'; import { DownloadsListScreenComponent } from '@components/downloads-list-screen/downloads-list-screen.component'; @@ -26,7 +31,6 @@ import { EmptyStateComponent, HelpButtonComponent, HelpModeComponent, - HelpModeKey, HiddenActionDirective, IconButtonComponent, InputWithActionComponent, @@ -43,6 +47,7 @@ import { StopPropagationDirective, } from '@iqser/common-ui'; import { CommonUiModule } from '@iqser/common-ui/lib/common-ui.module'; +import { provideHelpMode } from '@iqser/common-ui/lib/help-mode/utils/help-mode.provider'; import { LogoComponent, SkeletonComponent, ToastComponent } from '@iqser/common-ui/lib/shared'; import { TenantsModule } from '@iqser/common-ui/lib/tenants'; import { InitialsAvatarComponent, IqserUsersModule } from '@iqser/common-ui/lib/users'; @@ -54,6 +59,7 @@ import { ActiveDossiersService } from '@services/dossiers/active-dossiers.servic import { ArchivedDossiersService } from '@services/dossiers/archived-dossiers.service'; import { GlobalErrorHandler } from '@services/global-error-handler.service'; import { LoggerRulesService } from '@services/logger-rules.service'; +import { provideCustomDateFormatter } from '@shared/custom-date-formatting.provider'; import { DatePipe } from '@shared/pipes/date.pipe'; import { RedRoleGuard } from '@users/red-role.guard'; import { UserPreferenceService } from '@users/user-preference.service'; @@ -65,15 +71,9 @@ import { ToastrModule } from 'ngx-toastr'; import * as helpModeKeys from '../assets/help-mode/help-mode-keys.json'; import { AppRoutingModule } from './app-routing.module'; import { AppComponent } from './app.component'; +import { IconsModule } from './modules/icons/icons.module'; import { PdfViewerModule } from './modules/pdf-viewer/pdf-viewer.module'; import { ACTIVE_DOSSIERS_SERVICE, ARCHIVED_DOSSIERS_SERVICE } from './tokens'; -import { AuthErrorComponent } from '@components/auth-error/auth-error.component'; -import { provideCustomDateFormatter } from '@shared/custom-date-formatting.provider'; -import { provideHelpMode } from '@iqser/common-ui/lib/help-mode/utils/help-mode.provider'; -import { MatMenu, MatMenuContent, MatMenuItem, MatMenuTrigger } from '@angular/material/menu'; -import { MatIcon } from '@angular/material/icon'; -import { MatProgressSpinner } from '@angular/material/progress-spinner'; -import { IconsModule } from './modules/icons/icons.module'; export const appModuleFactory = (config: AppConfig) => { @NgModule({ diff --git a/apps/red-ui/src/app/guards/permissions-guard.ts b/apps/red-ui/src/app/guards/permissions-guard.ts index a53249937..6744f0cbe 100644 --- a/apps/red-ui/src/app/guards/permissions-guard.ts +++ b/apps/red-ui/src/app/guards/permissions-guard.ts @@ -1,7 +1,7 @@ import { Injectable } from '@angular/core'; import { ActivatedRouteSnapshot, CanActivate } from '@angular/router'; -import { firstValueFrom } from 'rxjs'; import { EntityPermissionsService } from '@services/entity-permissions/entity-permissions.service'; +import { firstValueFrom } from 'rxjs'; @Injectable({ providedIn: 'root' }) export class PermissionsGuard implements CanActivate { diff --git a/apps/red-ui/src/app/modules/account/screens/preferences/dialog-defaults/dialog-defaults.component.ts b/apps/red-ui/src/app/modules/account/screens/preferences/dialog-defaults/dialog-defaults.component.ts index ece1976bc..85ff67c63 100644 --- a/apps/red-ui/src/app/modules/account/screens/preferences/dialog-defaults/dialog-defaults.component.ts +++ b/apps/red-ui/src/app/modules/account/screens/preferences/dialog-defaults/dialog-defaults.component.ts @@ -1,14 +1,20 @@ +import { NgForOf, NgIf } from '@angular/common'; import { ChangeDetectorRef, Component, inject } from '@angular/core'; -import { BaseFormComponent } from '@common-ui/form'; import { FormBuilder, FormGroup, ReactiveFormsModule } from '@angular/forms'; +import { MatCheckbox } from '@angular/material/checkbox'; +import { MatFormField } from '@angular/material/form-field'; +import { MatOption, MatSelect } from '@angular/material/select'; +import { BaseFormComponent } from '@common-ui/form'; +import { AsControl } from '@common-ui/utils'; +import { IconButtonComponent } from '@iqser/common-ui'; +import { TranslateModule } from '@ngx-translate/core'; +import { PreferencesKeys, UserPreferenceService } from '@users/user-preference.service'; import { RedactOrHintOption, RedactOrHintOptions, RemoveRedactionOption, RemoveRedactionOptions, -} from '../../../../file-preview/utils/dialog-options'; -import { PreferencesKeys, UserPreferenceService } from '@users/user-preference.service'; -import { AsControl } from '@common-ui/utils'; +} from '../../../../file-preview/utils/dialog-types'; import { hintAddOptions, recommendationRemoveOptions, @@ -17,12 +23,6 @@ import { removeOptions, SystemDefaultType, } from '../../../utils/dialog-defaults'; -import { TranslateModule } from '@ngx-translate/core'; -import { MatFormField } from '@angular/material/form-field'; -import { MatOption, MatSelect } from '@angular/material/select'; -import { NgForOf, NgIf } from '@angular/common'; -import { MatCheckbox } from '@angular/material/checkbox'; -import { IconButtonComponent } from '@iqser/common-ui'; interface DefaultOptionsForm { addRedaction: RedactOrHintOption | SystemDefaultType; @@ -68,6 +68,10 @@ export class DialogDefaultsComponent extends BaseFormComponent { readonly redactionRemoveOptions = redactionRemoveOptions; readonly recommendationRemoveOptions = recommendationRemoveOptions; + constructor() { + super(); + } + get displayExtraOptionAddRedaction() { return RedactOrHintOptions.IN_DOSSIER === this.form.controls.addRedaction.value; } @@ -92,10 +96,6 @@ export class DialogDefaultsComponent extends BaseFormComponent { return RemoveRedactionOptions.DO_NOT_RECOMMEND === this.form.controls.removeRecommendation.value; } - constructor() { - super(); - } - async save(): Promise { const formValue = this.form.value; diff --git a/apps/red-ui/src/app/modules/account/utils/dialog-defaults.ts b/apps/red-ui/src/app/modules/account/utils/dialog-defaults.ts index e91793bff..a723d5878 100644 --- a/apps/red-ui/src/app/modules/account/utils/dialog-defaults.ts +++ b/apps/red-ui/src/app/modules/account/utils/dialog-defaults.ts @@ -1,8 +1,8 @@ -import { redactTextTranslations } from '@translations/redact-text-translations'; -import { RedactOrHintOptions, RemoveRedactionOptions } from '../../file-preview/utils/dialog-options'; -import { removeRedactionTranslations } from '@translations/remove-redaction-translations'; -import { addHintTranslations } from '@translations/add-hint-translations'; import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker'; +import { addHintTranslations } from '@translations/add-hint-translations'; +import { redactTextTranslations } from '@translations/redact-text-translations'; +import { removeRedactionTranslations } from '@translations/remove-redaction-translations'; +import { RedactOrHintOptions, RemoveRedactionOptions } from '../../file-preview/utils/dialog-types'; export const SystemDefaults = { ADD_REDACTION_DEFAULT: RedactOrHintOptions.IN_DOSSIER, diff --git a/apps/red-ui/src/app/modules/admin/dialogs/add-edit-user-dialog/add-edit-user-dialog.component.ts b/apps/red-ui/src/app/modules/admin/dialogs/add-edit-user-dialog/add-edit-user-dialog.component.ts index 9a17d38f9..ec5b7761b 100644 --- a/apps/red-ui/src/app/modules/admin/dialogs/add-edit-user-dialog/add-edit-user-dialog.component.ts +++ b/apps/red-ui/src/app/modules/admin/dialogs/add-edit-user-dialog/add-edit-user-dialog.component.ts @@ -1,10 +1,9 @@ import { Component, Inject, ViewChild } from '@angular/core'; import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog'; -import { User } from '@red/domain'; -import { UserDetailsComponent } from './user-details/user-details.component'; import { BaseDialogComponent, CircleButtonComponent } from '@iqser/common-ui'; +import { User } from '@red/domain'; import { ResetPasswordComponent } from './reset-password/reset-password.component'; -import { AdminDialogService } from '../../services/admin-dialog.service'; +import { UserDetailsComponent } from './user-details/user-details.component'; @Component({ selector: 'redaction-add-edit-user-dialog', @@ -13,8 +12,8 @@ import { AdminDialogService } from '../../services/admin-dialog.service'; imports: [UserDetailsComponent, ResetPasswordComponent, CircleButtonComponent], }) export class AddEditUserDialogComponent extends BaseDialogComponent { - resettingPassword = false; @ViewChild(UserDetailsComponent) private readonly _userDetailsComponent: UserDetailsComponent; + resettingPassword = false; constructor( protected readonly _dialogRef: MatDialogRef, 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 ac0a427a4..942cfbfbf 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 @@ -1,5 +1,9 @@ +import { AsyncPipe, NgClass, NgIf } from '@angular/common'; import { Component, inject, OnInit } from '@angular/core'; +import { MatIcon } from '@angular/material/icon'; +import { MatSlideToggle } from '@angular/material/slide-toggle'; import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker'; +import { InitialsAvatarComponent } from '@common-ui/users'; import { ButtonConfig, CircleButtonComponent, @@ -24,12 +28,9 @@ import { UserService } from '@users/user.service'; import { firstValueFrom, Observable } from 'rxjs'; import { map } from 'rxjs/operators'; import { userTypeChecker, userTypeFilters } from '../../../../utils'; -import { AdminDialogService } from '../../services/admin-dialog.service'; import { UsersStatsComponent } from '../../components/users-stats/users-stats.component'; -import { AsyncPipe, NgClass, NgIf } from '@angular/common'; -import { InitialsAvatarComponent } from '@common-ui/users'; -import { MatSlideToggle } from '@angular/material/slide-toggle'; -import { MatIcon } from '@angular/material/icon'; +import { AddEditUserDialogComponent } from '../../dialogs/add-edit-user-dialog/add-edit-user-dialog.component'; +import { AdminDialogService } from '../../services/admin-dialog.service'; function configToFilter({ key, label }: DonutChartConfig) { return new NestedFilter({ @@ -112,7 +113,7 @@ export class UserListingScreenComponent extends ListingComponent implement } openAddEditUserDialog(user?: User) { - this._dialogService.openDialog('addEditUser', user, async () => { + this._dialogService.open(AddEditUserDialogComponent, user, { autoFocus: true }, async () => { await this.#loadData(); }); } diff --git a/apps/red-ui/src/app/modules/admin/services/admin-dialog.service.ts b/apps/red-ui/src/app/modules/admin/services/admin-dialog.service.ts index 7eb857064..1ba3e00fc 100644 --- a/apps/red-ui/src/app/modules/admin/services/admin-dialog.service.ts +++ b/apps/red-ui/src/app/modules/admin/services/admin-dialog.service.ts @@ -1,9 +1,6 @@ import { Injectable, TemplateRef } from '@angular/core'; import { MatDialog } from '@angular/material/dialog'; -import { AddEntityDialogComponent } from '../dialogs/add-entity-dialog/add-entity-dialog.component'; -import { EditColorDialogComponent } from '../dialogs/edit-color-dialog/edit-color-dialog.component'; -import { SmtpAuthDialogComponent } from '../dialogs/smtp-auth-dialog/smtp-auth-dialog.component'; -import { AddEditUserDialogComponent } from '../dialogs/add-edit-user-dialog/add-edit-user-dialog.component'; +import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker'; import { ConfirmationDialogComponent, ConfirmOptions, @@ -13,22 +10,23 @@ import { LoadingService, TitleColors, } from '@iqser/common-ui'; -import { UploadDictionaryDialogComponent } from '../dialogs/upload-dictionary-dialog/upload-dictionary-dialog.component'; -import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker'; -import { firstValueFrom, forkJoin } from 'rxjs'; -import { ActiveDossiersService } from '@services/dossiers/active-dossiers.service'; -import { UserService } from '@users/user.service'; import { IDossierAttributeConfig, IFileAttributeConfig, IReportTemplate } from '@red/domain'; +import { ActiveDossiersService } from '@services/dossiers/active-dossiers.service'; import { ReportTemplateService } from '@services/report-template.service'; -import { ConfigureCertificateDialogComponent } from '../dialogs/configure-digital-signature-dialog/configure-certificate-dialog.component'; -import { AuditInfoDialogComponent } from '../dialogs/audit-info-dialog/audit-info-dialog.component'; +import { UserService } from '@users/user.service'; +import { firstValueFrom, forkJoin } from 'rxjs'; import { AddCloneDossierTemplateDialogComponent } from '../dialogs/add-clone-dossier-template-dialog/add-clone-dossier-template-dialog.component'; +import { AddEntityDialogComponent } from '../dialogs/add-entity-dialog/add-entity-dialog.component'; +import { AuditInfoDialogComponent } from '../dialogs/audit-info-dialog/audit-info-dialog.component'; +import { ConfigureCertificateDialogComponent } from '../dialogs/configure-digital-signature-dialog/configure-certificate-dialog.component'; +import { EditColorDialogComponent } from '../dialogs/edit-color-dialog/edit-color-dialog.component'; +import { SmtpAuthDialogComponent } from '../dialogs/smtp-auth-dialog/smtp-auth-dialog.component'; +import { UploadDictionaryDialogComponent } from '../dialogs/upload-dictionary-dialog/upload-dictionary-dialog.component'; type DialogType = | 'confirm' | 'addEntity' | 'editColor' - | 'addEditUser' | 'smtpAuthConfig' | 'addCloneDossierTemplate' | 'auditInfo' @@ -50,10 +48,6 @@ export class AdminDialogService extends DialogService { component: EditColorDialogComponent, dialogConfig: { autoFocus: true }, }, - addEditUser: { - component: AddEditUserDialogComponent, - dialogConfig: { autoFocus: true }, - }, smtpAuthConfig: { component: SmtpAuthDialogComponent, dialogConfig: { autoFocus: true }, diff --git a/apps/red-ui/src/app/modules/dossier-overview/components/dossier-details-stats/dossier-details-stats.component.ts b/apps/red-ui/src/app/modules/dossier-overview/components/dossier-details-stats/dossier-details-stats.component.ts index 98c6d3579..2760a6842 100644 --- a/apps/red-ui/src/app/modules/dossier-overview/components/dossier-details-stats/dossier-details-stats.component.ts +++ b/apps/red-ui/src/app/modules/dossier-overview/components/dossier-details-stats/dossier-details-stats.component.ts @@ -1,15 +1,16 @@ +import { AsyncPipe, DecimalPipe, NgForOf, NgIf } from '@angular/common'; import { Component, Input, OnInit } from '@angular/core'; +import { MatIcon } from '@angular/material/icon'; +import { getConfig, largeDialogConfig } from '@iqser/common-ui'; +import { TranslateModule } from '@ngx-translate/core'; import { Dossier, DossierAttributeWithValue, DossierStats } from '@red/domain'; import { DossierTemplatesService } from '@services/dossier-templates/dossier-templates.service'; -import { FilesService } from '@services/files/files.service'; -import { firstValueFrom, Observable } from 'rxjs'; import { DossierStatsService } from '@services/dossiers/dossier-stats.service'; -import { DossiersDialogService } from '../../../shared-dossiers/services/dossiers-dialog.service'; -import { getConfig } from '@iqser/common-ui'; -import { MatIcon } from '@angular/material/icon'; -import { AsyncPipe, DecimalPipe, NgForOf, NgIf } from '@angular/common'; -import { TranslateModule } from '@ngx-translate/core'; +import { FilesService } from '@services/files/files.service'; import { DatePipe } from '@shared/pipes/date.pipe'; +import { firstValueFrom, Observable } from 'rxjs'; +import { EditDossierDialogComponent } from '../../../shared-dossiers/dialogs/edit-dossier-dialog/edit-dossier-dialog.component'; +import { DossiersDialogService } from '../../../shared-dossiers/services/dossiers-dialog.service'; @Component({ selector: 'redaction-dossier-details-stats', @@ -41,7 +42,7 @@ export class DossierDetailsStatsComponent implements OnInit { openEditDossierDialog(section: string): void { const data = { dossierId: this.dossier.id, section }; - this._dialogService.openDialog('editDossier', data, async () => { + this._dialogService.open(EditDossierDialogComponent, data, { ...largeDialogConfig, width: '98vw', maxWidth: '98vw' }, async () => { await firstValueFrom(this._filesService.loadAll(this.dossier.id)); }); } diff --git a/apps/red-ui/src/app/modules/dossier-overview/config.service.ts b/apps/red-ui/src/app/modules/dossier-overview/config.service.ts index fd367c7e6..7cc0dfb85 100644 --- a/apps/red-ui/src/app/modules/dossier-overview/config.service.ts +++ b/apps/red-ui/src/app/modules/dossier-overview/config.service.ts @@ -4,6 +4,7 @@ import { ActionConfig, getConfig, IqserPermissionsService, + largeDialogConfig, ListingMode, ListingModes, TableColumnConfig, @@ -41,7 +42,8 @@ import { UserService } from '@users/user.service'; import dayjs from 'dayjs'; import { BehaviorSubject, Observable } from 'rxjs'; import { map } from 'rxjs/operators'; -import { annotationFilterChecker, RedactionFilterSorter, sortByName, sortArray } from '../../utils'; +import { annotationFilterChecker, RedactionFilterSorter, sortArray, sortByName } from '../../utils'; +import { EditDossierDialogComponent } from '../shared-dossiers/dialogs/edit-dossier-dialog/edit-dossier-dialog.component'; import { DossiersDialogService } from '../shared-dossiers/services/dossiers-dialog.service'; import { BulkActionsService } from './services/bulk-actions.service'; @@ -472,6 +474,6 @@ export class ConfigService { } #openEditDossierDialog(dossierId: string) { - this._dialogService.openDialog('editDossier', { dossierId }); + this._dialogService.open(EditDossierDialogComponent, { dossierId }, { ...largeDialogConfig, width: '98vw', maxWidth: '98vw' }); } } diff --git a/apps/red-ui/src/app/modules/file-preview/dialogs/add-hint-dialog/add-hint-dialog.component.ts b/apps/red-ui/src/app/modules/file-preview/dialogs/add-hint-dialog/add-hint-dialog.component.ts index bf9a731e6..8958053c5 100644 --- a/apps/red-ui/src/app/modules/file-preview/dialogs/add-hint-dialog/add-hint-dialog.component.ts +++ b/apps/red-ui/src/app/modules/file-preview/dialogs/add-hint-dialog/add-hint-dialog.component.ts @@ -1,6 +1,11 @@ +import { NgIf } from '@angular/common'; import { Component, OnInit } from '@angular/core'; import { takeUntilDestroyed } from '@angular/core/rxjs-interop'; import { FormBuilder, ReactiveFormsModule, UntypedFormGroup } from '@angular/forms'; +import { MatDialogClose } from '@angular/material/dialog'; +import { MatFormField } from '@angular/material/form-field'; +import { MatOption, MatSelect, MatSelectTrigger } from '@angular/material/select'; +import { MatTooltip } from '@angular/material/tooltip'; import { CircleButtonComponent, DetailsRadioComponent, @@ -12,22 +17,17 @@ import { IqserDialogComponent, IqserPermissionsService, } from '@iqser/common-ui'; +import { TranslateModule } from '@ngx-translate/core'; import { Dictionary, Dossier, IAddRedactionRequest } from '@red/domain'; import { ActiveDossiersService } from '@services/dossiers/active-dossiers.service'; import { DictionaryService } from '@services/entity-services/dictionary.service'; import { Roles } from '@users/roles'; -import { tap } from 'rxjs/operators'; -import { getRedactOrHintOptions, RedactOrHintOption, RedactOrHintOptions } from '../../utils/dialog-options'; -import { AddHintData, AddHintResult } from '../../utils/dialog-types'; import { UserPreferenceService } from '@users/user-preference.service'; -import { SystemDefaultOption, SystemDefaults } from '../../../account/utils/dialog-defaults'; import { stringToBoolean } from '@utils/functions'; -import { MatFormField } from '@angular/material/form-field'; -import { MatOption, MatSelect, MatSelectTrigger } from '@angular/material/select'; -import { MatTooltip } from '@angular/material/tooltip'; -import { NgIf } from '@angular/common'; -import { TranslateModule } from '@ngx-translate/core'; -import { MatDialogClose } from '@angular/material/dialog'; +import { tap } from 'rxjs/operators'; +import { SystemDefaultOption, SystemDefaults } from '../../../account/utils/dialog-defaults'; +import { getRedactOrHintOptions } from '../../utils/dialog-options'; +import { AddHintData, AddHintResult, RedactOrHintOption, RedactOrHintOptions } from '../../utils/dialog-types'; @Component({ templateUrl: './add-hint-dialog.component.html', diff --git a/apps/red-ui/src/app/modules/file-preview/dialogs/docu-mine/remove-annotation-dialog/remove-annotation-dialog.component.ts b/apps/red-ui/src/app/modules/file-preview/dialogs/docu-mine/remove-annotation-dialog/remove-annotation-dialog.component.ts index 62b19bb22..7fe6b97ab 100644 --- a/apps/red-ui/src/app/modules/file-preview/dialogs/docu-mine/remove-annotation-dialog/remove-annotation-dialog.component.ts +++ b/apps/red-ui/src/app/modules/file-preview/dialogs/docu-mine/remove-annotation-dialog/remove-annotation-dialog.component.ts @@ -1,4 +1,9 @@ +import { CdkFixedSizeVirtualScroll, CdkVirtualForOf } from '@angular/cdk/scrolling'; +import { NgIf, NgStyle } from '@angular/common'; import { Component } from '@angular/core'; +import { FormBuilder, ReactiveFormsModule, UntypedFormGroup } from '@angular/forms'; +import { MatDialogClose } from '@angular/material/dialog'; +import { ReplaceNbspPipe } from '@common-ui/pipes/replace-nbsp.pipe'; import { CircleButtonComponent, DetailsRadioComponent, @@ -8,14 +13,9 @@ import { IconButtonTypes, IqserDialogComponent, } from '@iqser/common-ui'; -import { FormBuilder, ReactiveFormsModule, UntypedFormGroup } from '@angular/forms'; -import { RemoveAnnotationData, RemoveAnnotationResult } from '../../../utils/dialog-types'; -import { getRemoveRedactionOptions, RemoveAnnotationOption, RemoveAnnotationOptions } from '../../../utils/dialog-options'; import { TranslateModule } from '@ngx-translate/core'; -import { CdkFixedSizeVirtualScroll, CdkVirtualForOf } from '@angular/cdk/scrolling'; -import { NgIf, NgStyle } from '@angular/common'; -import { ReplaceNbspPipe } from '@common-ui/pipes/replace-nbsp.pipe'; -import { MatDialogClose } from '@angular/material/dialog'; +import { getRemoveRedactionOptions } from '../../../utils/dialog-options'; +import { RemoveAnnotationData, RemoveAnnotationOption, RemoveAnnotationOptions, RemoveAnnotationResult } from '../../../utils/dialog-types'; @Component({ templateUrl: 'remove-annotation-dialog.component.html', @@ -47,6 +47,13 @@ export class RemoveAnnotationDialogComponent extends IqserDialogComponent< form!: UntypedFormGroup; + constructor(private readonly _formBuilder: FormBuilder) { + super(); + this.options = getRemoveRedactionOptions(this.data, this.data.applyToAllDossiers, true); + this.redactedTexts = this.data.redactions.map(annotation => annotation.value); + this.form = this.#getForm(); + } + get isFalsePositive(): boolean { return this.form.get('option').value.value === RemoveAnnotationOptions.FALSE_POSITIVE; } @@ -56,13 +63,6 @@ export class RemoveAnnotationDialogComponent extends IqserDialogComponent< return selectedOption === RemoveAnnotationOptions.IN_DOSSIER || selectedOption === RemoveAnnotationOptions.FALSE_POSITIVE; } - constructor(private readonly _formBuilder: FormBuilder) { - super(); - this.options = getRemoveRedactionOptions(this.data, this.data.applyToAllDossiers, true); - this.redactedTexts = this.data.redactions.map(annotation => annotation.value); - this.form = this.#getForm(); - } - save(): void { this.dialogRef.close({ ...this.form.getRawValue(), applyToAllDossiers: this.#applyToAllDossiers }); } diff --git a/apps/red-ui/src/app/modules/file-preview/dialogs/edit-redaction-dialog/edit-redaction-dialog.component.ts b/apps/red-ui/src/app/modules/file-preview/dialogs/edit-redaction-dialog/edit-redaction-dialog.component.ts index 714aa1db4..3f200a38a 100644 --- a/apps/red-ui/src/app/modules/file-preview/dialogs/edit-redaction-dialog/edit-redaction-dialog.component.ts +++ b/apps/red-ui/src/app/modules/file-preview/dialogs/edit-redaction-dialog/edit-redaction-dialog.component.ts @@ -1,5 +1,10 @@ +import { NgForOf, NgIf } from '@angular/common'; import { Component, inject, OnInit } from '@angular/core'; import { FormControl, FormGroup, ReactiveFormsModule } from '@angular/forms'; +import { MatDialogClose } from '@angular/material/dialog'; +import { MatFormField } from '@angular/material/form-field'; +import { MatOption, MatSelect, MatSelectTrigger } from '@angular/material/select'; +import { MatTooltip } from '@angular/material/tooltip'; import { CircleButtonComponent, DetailsRadioOption, @@ -10,26 +15,21 @@ import { IqserDenyDirective, IqserDialogComponent, } from '@iqser/common-ui'; +import { TranslateModule } from '@ngx-translate/core'; import { Dictionary, SuperTypes } from '@red/domain'; import { ActiveDossiersService } from '@services/dossiers/active-dossiers.service'; import { DictionaryService } from '@services/entity-services/dictionary.service'; import { JustificationsService } from '@services/entity-services/justifications.service'; -import { firstValueFrom } from 'rxjs'; -import { getEditRedactionOptions, RedactOrHintOption } from '../../utils/dialog-options'; -import { EditRedactionData, EditRedactResult } from '../../utils/dialog-types'; -import { LegalBasisOption } from '../manual-redaction-dialog/manual-annotation-dialog.component'; import { Roles } from '@users/roles'; -import { DialogHelpModeKeys } from '../../utils/constants'; +import { firstValueFrom } from 'rxjs'; import { SelectedAnnotationsTableComponent, ValueColumn, } from '../../components/selected-annotations-table/selected-annotations-table.component'; -import { TranslateModule } from '@ngx-translate/core'; -import { MatFormField } from '@angular/material/form-field'; -import { NgForOf, NgIf } from '@angular/common'; -import { MatOption, MatSelect, MatSelectTrigger } from '@angular/material/select'; -import { MatTooltip } from '@angular/material/tooltip'; -import { MatDialogClose } from '@angular/material/dialog'; +import { DialogHelpModeKeys } from '../../utils/constants'; +import { getEditRedactionOptions } from '../../utils/dialog-options'; +import { EditRedactionData, EditRedactResult, RedactOrHintOption } from '../../utils/dialog-types'; +import { LegalBasisOption } from '../manual-redaction-dialog/manual-annotation-dialog.component'; interface TypeSelectOptions { type: string; @@ -66,6 +66,7 @@ export class EditRedactionDialogComponent { readonly #dossier = inject(ActiveDossiersService).find(this.data.dossierId); readonly #applyToAllDossiers = this.data.applyToAllDossiers; + protected readonly roles = Roles; readonly annotations = this.data.annotations; readonly iconButtonTypes = IconButtonTypes; readonly isModifyDictionary = this.annotations.every(annotation => annotation.isModifyDictionary); @@ -90,8 +91,6 @@ export class EditRedactionDialogComponent { label: redaction.value, show: true, bold: true }, { label: redaction.typeLabel, show: true }, ]); - protected readonly roles = Roles; - options: DetailsRadioOption[] | undefined; legalOptions: LegalBasisOption[] = []; dictionaries: Dictionary[] = []; diff --git a/apps/red-ui/src/app/modules/file-preview/dialogs/redact-recommendation-dialog/redact-recommendation-dialog.component.ts b/apps/red-ui/src/app/modules/file-preview/dialogs/redact-recommendation-dialog/redact-recommendation-dialog.component.ts index dc2063bca..3be29be9d 100644 --- a/apps/red-ui/src/app/modules/file-preview/dialogs/redact-recommendation-dialog/redact-recommendation-dialog.component.ts +++ b/apps/red-ui/src/app/modules/file-preview/dialogs/redact-recommendation-dialog/redact-recommendation-dialog.component.ts @@ -1,6 +1,11 @@ +import { NgForOf, NgIf } from '@angular/common'; import { Component, inject, OnInit } from '@angular/core'; import { takeUntilDestroyed } from '@angular/core/rxjs-interop'; import { FormBuilder, ReactiveFormsModule } from '@angular/forms'; +import { MatDialogClose } from '@angular/material/dialog'; +import { MatFormField } from '@angular/material/form-field'; +import { MatOption, MatSelect, MatSelectTrigger } from '@angular/material/select'; +import { MatTooltip } from '@angular/material/tooltip'; import { CircleButtonComponent, DetailsRadioComponent, @@ -11,25 +16,20 @@ import { IqserDialogComponent, } from '@iqser/common-ui'; import { AnnotationWrapper } from '@models/file/annotation.wrapper'; +import { TranslateModule } from '@ngx-translate/core'; import { Dictionary, IAddRedactionRequest, SuperTypes } from '@red/domain'; import { ActiveDossiersService } from '@services/dossiers/active-dossiers.service'; import { DictionaryService } from '@services/entity-services/dictionary.service'; import { JustificationsService } from '@services/entity-services/justifications.service'; import { firstValueFrom } from 'rxjs'; import { tap } from 'rxjs/operators'; -import { getRedactOrHintOptions, RedactOrHintOption, RedactOrHintOptions } from '../../utils/dialog-options'; -import { RedactRecommendationData, RedactRecommendationResult } from '../../utils/dialog-types'; -import { LegalBasisOption } from '../manual-redaction-dialog/manual-annotation-dialog.component'; import { SelectedAnnotationsTableComponent, ValueColumn, } from '../../components/selected-annotations-table/selected-annotations-table.component'; -import { MatFormField } from '@angular/material/form-field'; -import { NgForOf, NgIf } from '@angular/common'; -import { MatOption, MatSelect, MatSelectTrigger } from '@angular/material/select'; -import { MatTooltip } from '@angular/material/tooltip'; -import { TranslateModule } from '@ngx-translate/core'; -import { MatDialogClose } from '@angular/material/dialog'; +import { getRedactOrHintOptions } from '../../utils/dialog-options'; +import { RedactOrHintOption, RedactOrHintOptions, RedactRecommendationData, RedactRecommendationResult } from '../../utils/dialog-types'; +import { LegalBasisOption } from '../manual-redaction-dialog/manual-annotation-dialog.component'; @Component({ templateUrl: './redact-recommendation-dialog.component.html', diff --git a/apps/red-ui/src/app/modules/file-preview/dialogs/redact-text-dialog/redact-text-dialog.component.ts b/apps/red-ui/src/app/modules/file-preview/dialogs/redact-text-dialog/redact-text-dialog.component.ts index 006433bee..ecf2eba9f 100644 --- a/apps/red-ui/src/app/modules/file-preview/dialogs/redact-text-dialog/redact-text-dialog.component.ts +++ b/apps/red-ui/src/app/modules/file-preview/dialogs/redact-text-dialog/redact-text-dialog.component.ts @@ -1,6 +1,11 @@ +import { AsyncPipe, NgClass, NgForOf, NgIf, NgStyle } from '@angular/common'; import { Component, inject, OnInit } from '@angular/core'; import { takeUntilDestroyed } from '@angular/core/rxjs-interop'; import { FormBuilder, FormGroup, ReactiveFormsModule, Validators } from '@angular/forms'; +import { MatDialogClose } from '@angular/material/dialog'; +import { MatFormField } from '@angular/material/form-field'; +import { MatOption, MatSelect, MatSelectTrigger } from '@angular/material/select'; +import { MatTooltip } from '@angular/material/tooltip'; import { CircleButtonComponent, DetailsRadioComponent, @@ -10,25 +15,20 @@ import { IconButtonTypes, IqserDialogComponent, } from '@iqser/common-ui'; +import { TranslateModule } from '@ngx-translate/core'; import { Dictionary, IAddRedactionRequest, SuperTypes } from '@red/domain'; import { ActiveDossiersService } from '@services/dossiers/active-dossiers.service'; import { DictionaryService } from '@services/entity-services/dictionary.service'; import { JustificationsService } from '@services/entity-services/justifications.service'; import { Roles } from '@users/roles'; +import { UserPreferenceService } from '@users/user-preference.service'; import { calcTextWidthInPixels, stringToBoolean } from '@utils/functions'; import { firstValueFrom, Observable } from 'rxjs'; import { map, tap } from 'rxjs/operators'; -import { getRedactOrHintOptions, RedactOrHintOption, RedactOrHintOptions } from '../../utils/dialog-options'; -import { RedactTextData, RedactTextResult } from '../../utils/dialog-types'; -import { LegalBasisOption } from '../manual-redaction-dialog/manual-annotation-dialog.component'; -import { UserPreferenceService } from '@users/user-preference.service'; import { SystemDefaultOption, SystemDefaults } from '../../../account/utils/dialog-defaults'; -import { AsyncPipe, NgClass, NgForOf, NgIf, NgStyle } from '@angular/common'; -import { MatFormField } from '@angular/material/form-field'; -import { MatOption, MatSelect, MatSelectTrigger } from '@angular/material/select'; -import { MatTooltip } from '@angular/material/tooltip'; -import { TranslateModule } from '@ngx-translate/core'; -import { MatDialogClose } from '@angular/material/dialog'; +import { getRedactOrHintOptions } from '../../utils/dialog-options'; +import { RedactOrHintOption, RedactOrHintOptions, RedactTextData, RedactTextResult } from '../../utils/dialog-types'; +import { LegalBasisOption } from '../manual-redaction-dialog/manual-annotation-dialog.component'; const MAXIMUM_TEXT_AREA_WIDTH = 421; @@ -60,6 +60,9 @@ export class RedactTextDialogComponent extends IqserDialogComponent implements OnInit { + readonly #dossier = inject(ActiveDossiersService).find(this.data.dossierId); + readonly #manualRedactionTypeExists = inject(DictionaryService).hasManualType(this.#dossier.dossierTemplateId); + #applyToAllDossiers = this.applyToAll; readonly roles = Roles; readonly iconButtonTypes = IconButtonTypes; readonly initialText = this.data?.manualRedactionEntryWrapper?.manualRedactionEntry?.value; @@ -72,36 +75,11 @@ export class RedactTextDialogComponent selectedTextRows = 1; readonly options: DetailsRadioOption[]; readonly displayedDictionaryLabel$: Observable; - readonly #dossier = inject(ActiveDossiersService).find(this.data.dossierId); - readonly #manualRedactionTypeExists = inject(DictionaryService).hasManualType(this.#dossier.dossierTemplateId); - #applyToAllDossiers = this.applyToAll; readonly maximumTextAreaWidth = MAXIMUM_TEXT_AREA_WIDTH; readonly maximumSelectedTextWidth = 567; textWidth: number; - get isSystemDefault(): boolean { - return this._userPreferences.getAddRedactionDefaultOption() === SystemDefaultOption.SYSTEM_DEFAULT; - } - - get defaultOption() { - const defaultOption = this.isSystemDefault - ? this.#getOption(SystemDefaults.ADD_REDACTION_DEFAULT) - : this.#getOption(this._userPreferences.getAddRedactionDefaultOption() as RedactOrHintOption); - this.dictionaryRequest = defaultOption.value === RedactOrHintOptions.IN_DOSSIER; - if (this.dictionaryRequest) { - this.#setDictionaries(); - return defaultOption; - } - return defaultOption ?? this.options[0]; - } - - get applyToAll() { - return this.isSystemDefault || this._userPreferences.getAddRedactionDefaultExtraOption() === 'undefined' - ? this.data.applyToAllDossiers ?? true - : stringToBoolean(this._userPreferences.getAddRedactionDefaultExtraOption()); - } - constructor( private readonly _justificationsService: JustificationsService, private readonly _dictionaryService: DictionaryService, @@ -137,6 +115,28 @@ export class RedactTextDialogComponent ); } + get isSystemDefault(): boolean { + return this._userPreferences.getAddRedactionDefaultOption() === SystemDefaultOption.SYSTEM_DEFAULT; + } + + get defaultOption() { + const defaultOption = this.isSystemDefault + ? this.#getOption(SystemDefaults.ADD_REDACTION_DEFAULT) + : this.#getOption(this._userPreferences.getAddRedactionDefaultOption() as RedactOrHintOption); + this.dictionaryRequest = defaultOption.value === RedactOrHintOptions.IN_DOSSIER; + if (this.dictionaryRequest) { + this.#setDictionaries(); + return defaultOption; + } + return defaultOption ?? this.options[0]; + } + + get applyToAll() { + return this.isSystemDefault || this._userPreferences.getAddRedactionDefaultExtraOption() === 'undefined' + ? this.data.applyToAllDossiers ?? true + : stringToBoolean(this._userPreferences.getAddRedactionDefaultExtraOption()); + } + async ngOnInit(): Promise { const data = await firstValueFrom(this._justificationsService.getForDossierTemplate(this.#dossier.dossierTemplateId)); this.legalOptions = data.map(lbm => ({ diff --git a/apps/red-ui/src/app/modules/file-preview/dialogs/remove-redaction-dialog/remove-redaction-dialog.component.ts b/apps/red-ui/src/app/modules/file-preview/dialogs/remove-redaction-dialog/remove-redaction-dialog.component.ts index c6eed1d89..7bd965137 100644 --- a/apps/red-ui/src/app/modules/file-preview/dialogs/remove-redaction-dialog/remove-redaction-dialog.component.ts +++ b/apps/red-ui/src/app/modules/file-preview/dialogs/remove-redaction-dialog/remove-redaction-dialog.component.ts @@ -1,5 +1,8 @@ +import { NgStyle } from '@angular/common'; import { Component, computed } from '@angular/core'; +import { toSignal } from '@angular/core/rxjs-interop'; import { FormBuilder, ReactiveFormsModule, UntypedFormGroup } from '@angular/forms'; +import { MatDialogClose } from '@angular/material/dialog'; import { CircleButtonComponent, DetailsRadioComponent, @@ -11,22 +14,19 @@ import { IqserDenyDirective, IqserDialogComponent, } from '@iqser/common-ui'; -import { getRemoveRedactionOptions, RemoveRedactionOption, RemoveRedactionOptions } from '../../utils/dialog-options'; -import { RemoveRedactionData, RemoveRedactionResult } from '../../utils/dialog-types'; +import { TranslateModule } from '@ngx-translate/core'; import { Roles } from '@users/roles'; -import { DialogHelpModeKeys } from '../../utils/constants'; -import { toSignal } from '@angular/core/rxjs-interop'; +import { UserPreferenceService } from '@users/user-preference.service'; +import { stringToBoolean } from '@utils/functions'; import { map } from 'rxjs/operators'; +import { SystemDefaultOption, SystemDefaults } from '../../../account/utils/dialog-defaults'; import { SelectedAnnotationsTableComponent, ValueColumn, } from '../../components/selected-annotations-table/selected-annotations-table.component'; -import { UserPreferenceService } from '@users/user-preference.service'; -import { SystemDefaultOption, SystemDefaults } from '../../../account/utils/dialog-defaults'; -import { stringToBoolean } from '@utils/functions'; -import { TranslateModule } from '@ngx-translate/core'; -import { NgStyle } from '@angular/common'; -import { MatDialogClose } from '@angular/material/dialog'; +import { DialogHelpModeKeys } from '../../utils/constants'; +import { getRemoveRedactionOptions } from '../../utils/dialog-options'; +import { RemoveRedactionData, RemoveRedactionOption, RemoveRedactionOptions, RemoveRedactionResult } from '../../utils/dialog-types'; @Component({ templateUrl: './remove-redaction-dialog.component.html', @@ -51,12 +51,11 @@ export class RemoveRedactionDialogComponent extends IqserDialogComponent< RemoveRedactionData, RemoveRedactionResult > { + protected readonly roles = Roles; readonly iconButtonTypes = IconButtonTypes; - readonly recommendation = this.data.redactions.every(redaction => redaction.isRecommendation); readonly hint = this.data.redactions.every(redaction => redaction.isHint); readonly annotationsType = this.hint ? 'hint' : this.recommendation ? 'recommendation' : 'redaction'; - readonly optionByType = { recommendation: { main: this._userPreferences.getRemoveRecommendationDefaultOption(), @@ -71,7 +70,6 @@ export class RemoveRedactionDialogComponent extends IqserDialogComponent< extra: this._userPreferences.getRemoveRedactionDefaultExtraOption(), }, }; - readonly systemDefaultByType = { recommendation: { main: SystemDefaults.REMOVE_RECOMMENDATION_DEFAULT, @@ -86,24 +84,19 @@ export class RemoveRedactionDialogComponent extends IqserDialogComponent< extra: false, }, }; - + readonly #applyToAllDossiers = this.systemDefaultByType[this.annotationsType].extra; readonly isSystemDefault = this.optionByType[this.annotationsType].main === SystemDefaultOption.SYSTEM_DEFAULT; readonly isExtraOptionSystemDefault = this.optionByType[this.annotationsType].extra === 'undefined'; readonly defaultOptionPreference = this.isSystemDefault ? this.systemDefaultByType[this.annotationsType].main : this.optionByType[this.annotationsType].main; readonly extraOptionPreference = stringToBoolean(this.optionByType[this.annotationsType].extra); - - readonly #applyToAllDossiers = this.systemDefaultByType[this.annotationsType].extra; - readonly options: DetailsRadioOption[] = getRemoveRedactionOptions( this.data, this.isSystemDefault || this.isExtraOptionSystemDefault ? this.#applyToAllDossiers : this.extraOptionPreference, ); readonly skipped = this.data.redactions.some(annotation => annotation.isSkipped); readonly redactedTexts = this.data.redactions.map(annotation => annotation.value); - - protected readonly roles = Roles; form: UntypedFormGroup = this._formBuilder.group({ comment: [null], option: [this.defaultOption], diff --git a/apps/red-ui/src/app/modules/file-preview/dialogs/resize-redaction-dialog/resize-redaction-dialog.component.ts b/apps/red-ui/src/app/modules/file-preview/dialogs/resize-redaction-dialog/resize-redaction-dialog.component.ts index d0ab2de9d..34f7a90bd 100644 --- a/apps/red-ui/src/app/modules/file-preview/dialogs/resize-redaction-dialog/resize-redaction-dialog.component.ts +++ b/apps/red-ui/src/app/modules/file-preview/dialogs/resize-redaction-dialog/resize-redaction-dialog.component.ts @@ -1,5 +1,9 @@ +import { NgIf } from '@angular/common'; import { Component, inject } from '@angular/core'; import { FormBuilder, FormControl, FormGroup, ReactiveFormsModule } from '@angular/forms'; +import { MatDialogClose } from '@angular/material/dialog'; +import { MatFormField } from '@angular/material/form-field'; +import { MatOption, MatSelect, MatSelectTrigger } from '@angular/material/select'; import { CircleButtonComponent, DetailsRadioComponent, @@ -9,15 +13,11 @@ import { IconButtonTypes, IqserDialogComponent, } from '@iqser/common-ui'; +import { TranslateModule } from '@ngx-translate/core'; import { ActiveDossiersService } from '@services/dossiers/active-dossiers.service'; import { DictionariesMapService } from '@services/entity-services/dictionaries-map.service'; -import { getResizeRedactionOptions, ResizeOptions, ResizeRedactionOption } from '../../utils/dialog-options'; -import { ResizeRedactionData, ResizeRedactionResult } from '../../utils/dialog-types'; -import { TranslateModule } from '@ngx-translate/core'; -import { MatFormField } from '@angular/material/form-field'; -import { MatOption, MatSelect, MatSelectTrigger } from '@angular/material/select'; -import { MatDialogClose } from '@angular/material/dialog'; -import { NgIf } from '@angular/common'; +import { getResizeRedactionOptions } from '../../utils/dialog-options'; +import { ResizeOptions, ResizeRedactionData, ResizeRedactionOption, ResizeRedactionResult } from '../../utils/dialog-types'; @Component({ templateUrl: './resize-redaction-dialog.component.html', diff --git a/apps/red-ui/src/app/modules/file-preview/services/annotation-actions.service.ts b/apps/red-ui/src/app/modules/file-preview/services/annotation-actions.service.ts index 566b20797..7673762e6 100644 --- a/apps/red-ui/src/app/modules/file-preview/services/annotation-actions.service.ts +++ b/apps/red-ui/src/app/modules/file-preview/services/annotation-actions.service.ts @@ -29,11 +29,11 @@ import { EditRedactionDialogComponent } from '../dialogs/edit-redaction-dialog/e import { RedactRecommendationDialogComponent } from '../dialogs/redact-recommendation-dialog/redact-recommendation-dialog.component'; import { RemoveRedactionDialogComponent } from '../dialogs/remove-redaction-dialog/remove-redaction-dialog.component'; import { ResizeRedactionDialogComponent } from '../dialogs/resize-redaction-dialog/resize-redaction-dialog.component'; -import { RemoveRedactionOptions } from '../utils/dialog-options'; import { EditRedactionData, EditRedactResult, RemoveRedactionData, + RemoveRedactionOptions, RemoveRedactionPermissions, RemoveRedactionResult, ResizeRedactionData, diff --git a/apps/red-ui/src/app/modules/file-preview/services/skipped.service.ts b/apps/red-ui/src/app/modules/file-preview/services/skipped.service.ts index 7f76753b6..2711ce122 100644 --- a/apps/red-ui/src/app/modules/file-preview/services/skipped.service.ts +++ b/apps/red-ui/src/app/modules/file-preview/services/skipped.service.ts @@ -1,10 +1,9 @@ import { effect, Injectable, Signal, signal } from '@angular/core'; import { bool } from '@iqser/common-ui/lib/utils'; -import { REDAnnotationManager } from '../../pdf-viewer/services/annotation-manager.service'; -import { FilePreviewStateService } from './file-preview-state.service'; import { getLocalStorageDataByFileId, setLocalStorageDataByFileId } from '@utils/local-storage'; - -export const HIDE_SKIPPED = 'hide-skipped'; +import { REDAnnotationManager } from '../../pdf-viewer/services/annotation-manager.service'; +import { HIDE_SKIPPED } from '../utils/constants'; +import { FilePreviewStateService } from './file-preview-state.service'; @Injectable() export class SkippedService { diff --git a/apps/red-ui/src/app/modules/file-preview/utils/constants.ts b/apps/red-ui/src/app/modules/file-preview/utils/constants.ts index ad73a214b..57787e87b 100644 --- a/apps/red-ui/src/app/modules/file-preview/utils/constants.ts +++ b/apps/red-ui/src/app/modules/file-preview/utils/constants.ts @@ -53,3 +53,5 @@ export const TextPopups = { ADD_RECTANGLE: 'add-rectangle', ADD_FALSE_POSITIVE: 'add-false-positive', } as const; + +export const HIDE_SKIPPED = 'hide-skipped'; diff --git a/apps/red-ui/src/app/modules/file-preview/utils/dialog-options.ts b/apps/red-ui/src/app/modules/file-preview/utils/dialog-options.ts index a3f00e808..3f9cb2e40 100644 --- a/apps/red-ui/src/app/modules/file-preview/utils/dialog-options.ts +++ b/apps/red-ui/src/app/modules/file-preview/utils/dialog-options.ts @@ -6,33 +6,20 @@ import { editRedactionTranslations, redactTextTranslations } from '@translations import { removeAnnotationTranslations } from '@translations/remove-annotation-translations'; import { removeRedactionTranslations } from '@translations/remove-redaction-translations'; import { resizeRedactionTranslations } from '@translations/resize-redaction-translations'; -import { RemoveRedactionData } from './dialog-types'; +import { + RedactOrHintOption, + RedactOrHintOptions, + RemoveRedactionData, + RemoveRedactionOption, + RemoveRedactionOptions, + ResizeOptions, + ResizeRedactionOption, +} from './dialog-types'; const PIN_ICON = 'red:push-pin'; const FOLDER_ICON = 'red:folder'; const REMOVE_FROM_DICT_ICON = 'red:remove-from-dict'; -export const RedactOrHintOptions = { - ONLY_HERE: 'ONLY_HERE', - IN_DOSSIER: 'IN_DOSSIER', -} as const; - -export type RedactOrHintOption = keyof typeof RedactOrHintOptions; - -export const ResizeOptions = RedactOrHintOptions; -export type ResizeRedactionOption = RedactOrHintOption; - -export const RemoveRedactionOptions = { - ONLY_HERE: 'ONLY_HERE', - IN_DOSSIER: 'IN_DOSSIER', - FALSE_POSITIVE: 'FALSE_POSITIVE', - DO_NOT_RECOMMEND: 'DO_NOT_RECOMMEND', -} as const; -export const RemoveAnnotationOptions = RemoveRedactionOptions; - -export type RemoveRedactionOption = keyof typeof RemoveRedactionOptions; -export type RemoveAnnotationOption = RemoveRedactionOption; - export const getEditRedactionOptions = ( dossierName: string, applyToAllDossiers: boolean, diff --git a/apps/red-ui/src/app/modules/file-preview/utils/dialog-types.ts b/apps/red-ui/src/app/modules/file-preview/utils/dialog-types.ts index ff6228d21..90b48b1dd 100644 --- a/apps/red-ui/src/app/modules/file-preview/utils/dialog-types.ts +++ b/apps/red-ui/src/app/modules/file-preview/utils/dialog-types.ts @@ -2,7 +2,27 @@ import { DetailsRadioOption } from '@iqser/common-ui'; import { AnnotationWrapper } from '@models/file/annotation.wrapper'; import { ManualRedactionEntryWrapper } from '@models/file/manual-redaction-entry.wrapper'; import { Dictionary, Dossier, File, IAddRedactionRequest, IManualRedactionEntry } from '@red/domain'; -import { RemoveRedactionOption } from './dialog-options'; + +export const RedactOrHintOptions = { + ONLY_HERE: 'ONLY_HERE', + IN_DOSSIER: 'IN_DOSSIER', +} as const; + +export type RedactOrHintOption = keyof typeof RedactOrHintOptions; + +export const ResizeOptions = RedactOrHintOptions; +export type ResizeRedactionOption = RedactOrHintOption; + +export const RemoveRedactionOptions = { + ONLY_HERE: 'ONLY_HERE', + IN_DOSSIER: 'IN_DOSSIER', + FALSE_POSITIVE: 'FALSE_POSITIVE', + DO_NOT_RECOMMEND: 'DO_NOT_RECOMMEND', +} as const; +export const RemoveAnnotationOptions = RemoveRedactionOptions; + +export type RemoveRedactionOption = keyof typeof RemoveRedactionOptions; +export type RemoveAnnotationOption = RemoveRedactionOption; export interface RedactTextData { manualRedactionEntryWrapper: ManualRedactionEntryWrapper; diff --git a/apps/red-ui/src/app/modules/pdf-viewer/services/annotation-manager.service.ts b/apps/red-ui/src/app/modules/pdf-viewer/services/annotation-manager.service.ts index 897fccf87..2d9efa7cd 100644 --- a/apps/red-ui/src/app/modules/pdf-viewer/services/annotation-manager.service.ts +++ b/apps/red-ui/src/app/modules/pdf-viewer/services/annotation-manager.service.ts @@ -3,15 +3,15 @@ import { bool, List } from '@iqser/common-ui/lib/utils'; import { AnnotationWrapper } from '@models/file/annotation.wrapper'; import { Core } from '@pdftron/webviewer'; import { getLast, urlFileId } from '@utils/functions'; +import { getLocalStorageDataByFileId } from '@utils/local-storage'; import { NGXLogger } from 'ngx-logger'; import { Subject } from 'rxjs'; +import { HIDE_SKIPPED } from '../../file-preview/utils/constants'; import { AnnotationToolNames } from '../utils/constants'; import { asList, getId, isStringOrWrapper } from '../utils/functions'; import { AnnotationPredicate, DeleteAnnotationsOptions } from '../utils/types'; import AnnotationManager = Core.AnnotationManager; import Annotation = Core.Annotations.Annotation; -import { getLocalStorageDataByFileId } from '@utils/local-storage'; -import { HIDE_SKIPPED } from '../../file-preview/services/skipped.service'; const MODIFY_ACTION = 'modify'; const RESIZE_OPTION = 'resize'; diff --git a/apps/red-ui/src/app/modules/shared-dossiers/components/dossiers-listing-actions/dossiers-listing-actions.component.ts b/apps/red-ui/src/app/modules/shared-dossiers/components/dossiers-listing-actions/dossiers-listing-actions.component.ts index 0d2aea09d..60e39799a 100644 --- a/apps/red-ui/src/app/modules/shared-dossiers/components/dossiers-listing-actions/dossiers-listing-actions.component.ts +++ b/apps/red-ui/src/app/modules/shared-dossiers/components/dossiers-listing-actions/dossiers-listing-actions.component.ts @@ -1,17 +1,18 @@ +import { AsyncPipe, NgIf } from '@angular/common'; import { Component, Input, OnChanges } from '@angular/core'; -import { CircleButtonComponent, IqserAllowDirective, IqserPermissionsService } from '@iqser/common-ui'; +import { CircleButtonComponent, IqserAllowDirective, IqserPermissionsService, largeDialogConfig } from '@iqser/common-ui'; import { getCurrentUser } from '@iqser/common-ui/lib/users'; +import { TranslateModule } from '@ngx-translate/core'; import type { Dossier, File, User } from '@red/domain'; import { FilesMapService } from '@services/files/files-map.service'; import { PermissionsService } from '@services/permissions.service'; import { ReanalysisService } from '@services/reanalysis.service'; +import { FileDownloadBtnComponent } from '@shared/components/buttons/file-download-btn/file-download-btn.component'; import { LongPressDirective, LongPressEvent } from '@shared/directives/long-press.directive'; import { Roles } from '@users/roles'; import { UserPreferenceService } from '@users/user-preference.service'; +import { EditDossierDialogComponent } from '../../dialogs/edit-dossier-dialog/edit-dossier-dialog.component'; import { DossiersDialogService } from '../../services/dossiers-dialog.service'; -import { TranslateModule } from '@ngx-translate/core'; -import { AsyncPipe, NgIf } from '@angular/common'; -import { FileDownloadBtnComponent } from '@shared/components/buttons/file-download-btn/file-download-btn.component'; @Component({ selector: 'redaction-dossiers-listing-actions [dossier]', @@ -54,7 +55,7 @@ export class DossiersListingActionsComponent implements OnChanges { } openEditDossierDialog(dossierId: string): void { - this._dialogService.openDialog('editDossier', { dossierId }); + this._dialogService.open(EditDossierDialogComponent, { dossierId }, { ...largeDialogConfig, width: '98vw', maxWidth: '98vw' }); } async reanalyseDossier(dossier: Dossier): Promise { diff --git a/apps/red-ui/src/app/modules/shared-dossiers/dialogs/edit-dossier-dialog/edit-dossier-dialog.component.html b/apps/red-ui/src/app/modules/shared-dossiers/dialogs/edit-dossier-dialog/edit-dossier-dialog.component.html index 82dc74088..d95562996 100644 --- a/apps/red-ui/src/app/modules/shared-dossiers/dialogs/edit-dossier-dialog/edit-dossier-dialog.component.html +++ b/apps/red-ui/src/app/modules/shared-dossiers/dialogs/edit-dossier-dialog/edit-dossier-dialog.component.html @@ -42,12 +42,13 @@ [dossier]="dossier()" > - + @defer (when activeNav() === 'dossierDictionary') { + + } - + @if (activeNav() === 'members') { + + } ; readonly showActionButtons: Signal; - generalInfoComponent = viewChild(EditDossierGeneralInfoComponent); - downloadPackageComponent = viewChild(EditDossierDownloadPackageComponent); - dictionaryComponent = viewChild(EditDossierDictionaryComponent); - membersComponent = viewChild(EditDossierTeamComponent); - attributesComponent = viewChild(EditDossierAttributesComponent); + readonly generalInfoComponent = viewChild(EditDossierGeneralInfoComponent); + readonly downloadPackageComponent = viewChild(EditDossierDownloadPackageComponent); + readonly dictionaryComponent = viewChild(EditDossierDictionaryComponent); + readonly membersComponent = viewChild(EditDossierTeamComponent); + readonly attributesComponent = viewChild(EditDossierAttributesComponent); constructor( private readonly _dossiersService: DossiersService, diff --git a/apps/red-ui/src/app/modules/shared-dossiers/dialogs/edit-dossier-dialog/edit-dossier-team/edit-dossier-team.component.ts b/apps/red-ui/src/app/modules/shared-dossiers/dialogs/edit-dossier-dialog/edit-dossier-team/edit-dossier-team.component.ts index 8bc3dc239..f8ec75908 100644 --- a/apps/red-ui/src/app/modules/shared-dossiers/dialogs/edit-dossier-dialog/edit-dossier-team/edit-dossier-team.component.ts +++ b/apps/red-ui/src/app/modules/shared-dossiers/dialogs/edit-dossier-dialog/edit-dossier-team/edit-dossier-team.component.ts @@ -1,6 +1,6 @@ import { ChangeDetectionStrategy, Component, inject, Input, OnChanges, SimpleChanges } from '@angular/core'; -import { FormControl, FormGroup, ReactiveFormsModule, Validators } from '@angular/forms'; -import { getConfig, InputWithActionComponent, RoundCheckboxComponent, StopPropagationDirective } from '@iqser/common-ui'; +import { FormControl, FormGroup, Validators } from '@angular/forms'; +import { getConfig } from '@iqser/common-ui'; import { Debounce } from '@iqser/common-ui/lib/utils'; import { Dossier, IDossierRequest } from '@red/domain'; import { DossiersService } from '@services/dossiers/dossiers.service'; @@ -11,51 +11,25 @@ import { compareLists } from '@utils/functions'; import { firstValueFrom } from 'rxjs'; import { map } from 'rxjs/operators'; import { EditDossierSaveResult, EditDossierSectionInterface } from '../edit-dossier-section.interface'; -import { MatFormField } from '@angular/material/form-field'; -import { MatOption, MatSelect } from '@angular/material/select'; -import { NamePipe } from '@common-ui/users/name.pipe'; -import { AsyncPipe, NgForOf, NgIf } from '@angular/common'; -import { TeamMembersComponent } from '@shared/components/team-members/team-members.component'; -import { TranslateModule } from '@ngx-translate/core'; -import { InitialsAvatarComponent } from '@common-ui/users'; -import { MatIcon } from '@angular/material/icon'; @Component({ selector: 'redaction-edit-dossier-team', templateUrl: './edit-dossier-team.component.html', styleUrls: ['./edit-dossier-team.component.scss'], changeDetection: ChangeDetectionStrategy.OnPush, - standalone: true, - imports: [ - ReactiveFormsModule, - MatFormField, - MatSelect, - MatOption, - NamePipe, - NgForOf, - NgIf, - AsyncPipe, - TeamMembersComponent, - TranslateModule, - InputWithActionComponent, - InitialsAvatarComponent, - StopPropagationDirective, - RoundCheckboxComponent, - MatIcon, - ], }) export class EditDossierTeamComponent implements EditDossierSectionInterface, OnChanges { + readonly #userService = inject(UserService); + readonly #dossiersService = inject(DossiersService); + readonly #permissionsService = inject(PermissionsService); + readonly #filesService = inject(FilesService); form = this.#getForm(); + readonly #formValue$ = this.form.valueChanges; searchQuery = ''; @Input() dossier: Dossier; membersSelectOptions: string[] = []; readonly isDocumine = getConfig().IS_DOCUMINE; - readonly #userService = inject(UserService); readonly ownersSelectOptions = this.#userService.all.filter(u => u.isManager).map(m => m.id); - readonly #dossiersService = inject(DossiersService); - readonly #permissionsService = inject(PermissionsService); - readonly #filesService = inject(FilesService); - readonly #formValue$ = this.form.valueChanges; readonly selectedReviewers$ = this.#formValue$.pipe(map(v => v.members.filter(m => !v.approvers.includes(m)))); readonly selectedApprovers$ = this.#formValue$.pipe(map(v => v.approvers)); diff --git a/apps/red-ui/src/app/modules/shared-dossiers/dialogs/edit-dossier-dialog/edit-dossier-team/edit-dossier-team.module.ts b/apps/red-ui/src/app/modules/shared-dossiers/dialogs/edit-dossier-dialog/edit-dossier-team/edit-dossier-team.module.ts new file mode 100644 index 000000000..8e0569827 --- /dev/null +++ b/apps/red-ui/src/app/modules/shared-dossiers/dialogs/edit-dossier-dialog/edit-dossier-team/edit-dossier-team.module.ts @@ -0,0 +1,42 @@ +import { AsyncPipe, NgForOf, NgIf } from '@angular/common'; +import { NgModule } from '@angular/core'; +import { ReactiveFormsModule } from '@angular/forms'; +import { MatFormField } from '@angular/material/form-field'; +import { MatIcon } from '@angular/material/icon'; +import { MatOption, MatSelect } from '@angular/material/select'; +import { InitialsAvatarComponent } from '@common-ui/users'; +import { NamePipe } from '@common-ui/users/name.pipe'; +import { + CircleButtonComponent, + InputWithActionComponent, + IqserAllowDirective, + RoundCheckboxComponent, + StopPropagationDirective, +} from '@iqser/common-ui'; +import { TranslateModule } from '@ngx-translate/core'; +import { TeamMembersComponent } from '@shared/components/team-members/team-members.component'; +import { EditDossierTeamComponent } from './edit-dossier-team.component'; + +@NgModule({ + declarations: [EditDossierTeamComponent, TeamMembersComponent], + exports: [EditDossierTeamComponent, TeamMembersComponent], + imports: [ + ReactiveFormsModule, + MatFormField, + MatSelect, + MatOption, + NamePipe, + NgForOf, + NgIf, + AsyncPipe, + TranslateModule, + InputWithActionComponent, + InitialsAvatarComponent, + StopPropagationDirective, + RoundCheckboxComponent, + MatIcon, + CircleButtonComponent, + IqserAllowDirective, + ], +}) +export class EditDossierTeamModule {} diff --git a/apps/red-ui/src/app/modules/shared-dossiers/dialogs/edit-dossier-dialog/general-info/edit-dossier-general-info.component.ts b/apps/red-ui/src/app/modules/shared-dossiers/dialogs/edit-dossier-dialog/general-info/edit-dossier-general-info.component.ts index 9eff96343..cc63d8f11 100644 --- a/apps/red-ui/src/app/modules/shared-dossiers/dialogs/edit-dossier-dialog/general-info/edit-dossier-general-info.component.ts +++ b/apps/red-ui/src/app/modules/shared-dossiers/dialogs/edit-dossier-dialog/general-info/edit-dossier-general-info.component.ts @@ -1,12 +1,16 @@ +import { NgForOf, NgIf } from '@angular/common'; import { ChangeDetectionStrategy, Component, Input, OnInit } from '@angular/core'; import { ReactiveFormsModule, UntypedFormBuilder, UntypedFormGroup, Validators } from '@angular/forms'; -import { Dossier, DOSSIER_TEMPLATE_ID, IDossierRequest, IDossierTemplate } from '@red/domain'; -import { EditDossierSaveResult, EditDossierSectionInterface } from '../edit-dossier-section.interface'; -import { DossiersDialogService } from '../../../services/dossiers-dialog.service'; -import { PermissionsService } from '@services/permissions.service'; -import { Router } from '@angular/router'; +import { MatCheckbox } from '@angular/material/checkbox'; +import { MatDatepickerModule } from '@angular/material/datepicker'; import { MatDialogRef } from '@angular/material/dialog'; -import { EditDossierDialogComponent } from '../edit-dossier-dialog.component'; +import { MatFormField, MatSuffix } from '@angular/material/form-field'; +import { MatIcon } from '@angular/material/icon'; +import { MatOption, MatSelect } from '@angular/material/select'; +import { MatTooltip } from '@angular/material/tooltip'; +import { Router } from '@angular/router'; +import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker'; +import { SmallChipComponent } from '@common-ui/shared'; import { ConfirmOptions, HasScrollbarDirective, @@ -17,25 +21,21 @@ import { TitleColors, Toaster, } from '@iqser/common-ui'; -import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker'; -import { DossierTemplatesService } from '@services/dossier-templates/dossier-templates.service'; -import { DossierStatsService } from '@services/dossiers/dossier-stats.service'; -import { firstValueFrom } from 'rxjs'; import { TranslateModule, TranslateService } from '@ngx-translate/core'; -import { DossiersService } from '@services/dossiers/dossiers.service'; -import { TrashService } from '@services/entity-services/trash.service'; +import { Dossier, DOSSIER_TEMPLATE_ID, IDossierRequest, IDossierTemplate } from '@red/domain'; +import { DossierTemplatesService } from '@services/dossier-templates/dossier-templates.service'; import { ArchivedDossiersService } from '@services/dossiers/archived-dossiers.service'; +import { DossierStatsService } from '@services/dossiers/dossier-stats.service'; +import { DossiersService } from '@services/dossiers/dossiers.service'; import { DossierStatesMapService } from '@services/entity-services/dossier-states-map.service'; -import dayjs from 'dayjs'; +import { TrashService } from '@services/entity-services/trash.service'; +import { PermissionsService } from '@services/permissions.service'; import { dateWithoutTime } from '@utils/functions'; -import { MatFormField, MatSuffix } from '@angular/material/form-field'; -import { MatOption, MatSelect } from '@angular/material/select'; -import { NgForOf, NgIf } from '@angular/common'; -import { MatTooltip } from '@angular/material/tooltip'; -import { SmallChipComponent } from '@common-ui/shared'; -import { MatCheckbox } from '@angular/material/checkbox'; -import { MatDatepickerModule } from '@angular/material/datepicker'; -import { MatIcon } from '@angular/material/icon'; +import dayjs from 'dayjs'; +import { firstValueFrom } from 'rxjs'; +import { DossiersDialogService } from '../../../services/dossiers-dialog.service'; +import { type EditDossierDialogComponent } from '../edit-dossier-dialog.component'; +import { EditDossierSaveResult, EditDossierSectionInterface } from '../edit-dossier-section.interface'; @Component({ selector: 'redaction-edit-dossier-general-info', diff --git a/apps/red-ui/src/app/modules/shared-dossiers/services/dossiers-dialog.service.ts b/apps/red-ui/src/app/modules/shared-dossiers/services/dossiers-dialog.service.ts index 24c67d4a9..e2cb02fac 100644 --- a/apps/red-ui/src/app/modules/shared-dossiers/services/dossiers-dialog.service.ts +++ b/apps/red-ui/src/app/modules/shared-dossiers/services/dossiers-dialog.service.ts @@ -1,10 +1,9 @@ import { Injectable } from '@angular/core'; import { MatDialog } from '@angular/material/dialog'; -import { ConfirmationDialogComponent, DialogConfig, DialogService, largeDialogConfig } from '@iqser/common-ui'; +import { ConfirmationDialogComponent, DialogConfig, DialogService } from '@iqser/common-ui'; import { ImportRedactionsDialogComponent } from '../../file-preview/dialogs/import-redactions-dialog/import-redactions-dialog'; -import { EditDossierDialogComponent } from '../dialogs/edit-dossier-dialog/edit-dossier-dialog.component'; -type DialogType = 'confirm' | 'editDossier' | 'importRedactions'; +type DialogType = 'confirm' | 'importRedactions'; @Injectable({ providedIn: 'root', @@ -15,10 +14,6 @@ export class DossiersDialogService extends DialogService { component: ConfirmationDialogComponent, dialogConfig: { disableClose: false }, }, - editDossier: { - component: EditDossierDialogComponent, - dialogConfig: { ...largeDialogConfig, width: '98vw', maxWidth: '98vw' }, - }, importRedactions: { component: ImportRedactionsDialogComponent, dialogConfig: { disableClose: false }, diff --git a/apps/red-ui/src/app/modules/shared/components/team-members/team-members.component.ts b/apps/red-ui/src/app/modules/shared/components/team-members/team-members.component.ts index 90e0701f3..792eabee1 100644 --- a/apps/red-ui/src/app/modules/shared/components/team-members/team-members.component.ts +++ b/apps/red-ui/src/app/modules/shared/components/team-members/team-members.component.ts @@ -1,21 +1,17 @@ import { Component, ElementRef, EventEmitter, inject, Input, OnChanges, Output, ViewChild } from '@angular/core'; -import { CircleButtonComponent, CircleButtonTypes, IqserAllowDirective } from '@iqser/common-ui'; -import { DossiersDialogService } from '../../../shared-dossiers/services/dossiers-dialog.service'; -import { Roles } from '@users/roles'; -import { User } from '@red/domain'; -import { UserService } from '@users/user.service'; -import { getCurrentUser, InitialsAvatarComponent } from '@iqser/common-ui/lib/users'; +import { CircleButtonTypes, largeDialogConfig } from '@iqser/common-ui'; +import { getCurrentUser } from '@iqser/common-ui/lib/users'; import { List } from '@iqser/common-ui/lib/utils'; -import { NgForOf, NgIf } from '@angular/common'; -import { MatIcon } from '@angular/material/icon'; -import { TranslateModule } from '@ngx-translate/core'; +import { User } from '@red/domain'; +import { Roles } from '@users/roles'; +import { UserService } from '@users/user.service'; +import { EditDossierDialogComponent } from '../../../shared-dossiers/dialogs/edit-dossier-dialog/edit-dossier-dialog.component'; +import { DossiersDialogService } from '../../../shared-dossiers/services/dossiers-dialog.service'; @Component({ selector: 'redaction-team-members', templateUrl: './team-members.component.html', styleUrls: ['./team-members.component.scss'], - standalone: true, - imports: [NgForOf, MatIcon, NgIf, CircleButtonComponent, IqserAllowDirective, TranslateModule, InitialsAvatarComponent], }) export class TeamMembersComponent implements OnChanges { readonly circleButtonTypes = CircleButtonTypes; @@ -65,6 +61,6 @@ export class TeamMembersComponent implements OnChanges { openEditDossierDialog(): void { const data = { dossierId: this.dossierId, section: 'members' }; - this._dialogService.openDialog('editDossier', data); + this._dialogService.open(EditDossierDialogComponent, data, { ...largeDialogConfig, width: '98vw', maxWidth: '98vw' }); } } diff --git a/apps/red-ui/src/app/modules/shared/dialogs/add-dossier-dialog/add-dossier-dialog.component.ts b/apps/red-ui/src/app/modules/shared/dialogs/add-dossier-dialog/add-dossier-dialog.component.ts index f1e15ae5b..b79ea0e3d 100644 --- a/apps/red-ui/src/app/modules/shared/dialogs/add-dossier-dialog/add-dossier-dialog.component.ts +++ b/apps/red-ui/src/app/modules/shared/dialogs/add-dossier-dialog/add-dossier-dialog.component.ts @@ -1,6 +1,13 @@ +import { NgForOf, NgIf } from '@angular/common'; import { Component, Inject, OnInit } from '@angular/core'; import { ReactiveFormsModule, Validators } from '@angular/forms'; +import { MatCheckbox } from '@angular/material/checkbox'; +import { MatDatepickerModule } from '@angular/material/datepicker'; import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog'; +import { MatFormField, MatSuffix } from '@angular/material/form-field'; +import { MatIcon } from '@angular/material/icon'; +import { MatOption, MatSelect } from '@angular/material/select'; +import { MatTooltip } from '@angular/material/tooltip'; import { Router } from '@angular/router'; import { BaseDialogComponent, @@ -12,27 +19,22 @@ import { IconButtonTypes, IqserDenyDirective, IqserPermissionsService, + largeDialogConfig, SaveOptions, } from '@iqser/common-ui'; +import { TranslateModule } from '@ngx-translate/core'; import { DOSSIER_TEMPLATE_ID, DownloadFileType, IDossierRequest, IDossierTemplate, IReportTemplate } from '@red/domain'; import { DossierTemplatesService } from '@services/dossier-templates/dossier-templates.service'; import { ActiveDossiersService } from '@services/dossiers/active-dossiers.service'; import { ReportTemplateService } from '@services/report-template.service'; +import { WatermarkSelectorComponent } from '@shared/components/dossier-watermark-selector/watermark-selector.component'; +import { SelectComponent } from '@shared/components/select/select.component'; import { downloadTypesTranslations } from '@translations/download-types-translations'; import { Roles } from '@users/roles'; import dayjs from 'dayjs'; import { firstValueFrom } from 'rxjs'; +import { EditDossierDialogComponent } from '../../../shared-dossiers/dialogs/edit-dossier-dialog/edit-dossier-dialog.component'; import { DossiersDialogService } from '../../../shared-dossiers/services/dossiers-dialog.service'; -import { NgForOf, NgIf } from '@angular/common'; -import { TranslateModule } from '@ngx-translate/core'; -import { MatFormField, MatSuffix } from '@angular/material/form-field'; -import { MatOption, MatSelect } from '@angular/material/select'; -import { MatTooltip } from '@angular/material/tooltip'; -import { WatermarkSelectorComponent } from '@shared/components/dossier-watermark-selector/watermark-selector.component'; -import { MatCheckbox } from '@angular/material/checkbox'; -import { MatDatepickerModule } from '@angular/material/datepicker'; -import { MatIcon } from '@angular/material/icon'; -import { SelectComponent } from '@shared/components/select/select.component'; interface DialogData { readonly dossierTemplateId?: string; @@ -123,10 +125,14 @@ export class AddDossierDialogComponent extends BaseDialogComponent implements On if (savedDossier) { await this._router.navigate([savedDossier.routerLink]); if (options?.nextAction) { - this._dialogService.openDialog('editDossier', { - dossierId: savedDossier.id, - section: 'members', - }); + this._dialogService.open( + EditDossierDialogComponent, + { + dossierId: savedDossier.id, + section: 'members', + }, + { ...largeDialogConfig, width: '98vw', maxWidth: '98vw' }, + ); } this._dialogRef.close(savedDossier); } diff --git a/apps/red-ui/src/app/translations/remove-annotation-translations.ts b/apps/red-ui/src/app/translations/remove-annotation-translations.ts index 491bb10c9..478c9de8d 100644 --- a/apps/red-ui/src/app/translations/remove-annotation-translations.ts +++ b/apps/red-ui/src/app/translations/remove-annotation-translations.ts @@ -1,6 +1,6 @@ import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker'; -import { RemoveAnnotationOption } from '../modules/file-preview/utils/dialog-options'; import { DialogOption } from '@translations/redact-text-translations'; +import { RemoveAnnotationOption } from '../modules/file-preview/utils/dialog-types'; export const removeAnnotationTranslations: { [key in RemoveAnnotationOption]: DialogOption } = { ONLY_HERE: { diff --git a/apps/red-ui/src/app/translations/remove-redaction-translations.ts b/apps/red-ui/src/app/translations/remove-redaction-translations.ts index 615cb7bb9..41d5f8b86 100644 --- a/apps/red-ui/src/app/translations/remove-redaction-translations.ts +++ b/apps/red-ui/src/app/translations/remove-redaction-translations.ts @@ -1,6 +1,6 @@ import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker'; -import { RemoveRedactionOption } from '../modules/file-preview/utils/dialog-options'; import { DialogOption } from '@translations/redact-text-translations'; +import { RemoveRedactionOption } from '../modules/file-preview/utils/dialog-types'; export const removeRedactionTranslations: { [key in RemoveRedactionOption]: DialogOption } = { ONLY_HERE: { diff --git a/apps/red-ui/src/app/users/user-preference.service.ts b/apps/red-ui/src/app/users/user-preference.service.ts index 6f2f85211..4b05ce78c 100644 --- a/apps/red-ui/src/app/users/user-preference.service.ts +++ b/apps/red-ui/src/app/users/user-preference.service.ts @@ -1,7 +1,7 @@ import { Injectable } from '@angular/core'; import { IqserUserPreferenceService, ListingMode } from '@iqser/common-ui'; -import { RedactOrHintOption, RemoveRedactionOption } from '../modules/file-preview/utils/dialog-options'; import { SystemDefaultOption, SystemDefaultType } from '../modules/account/utils/dialog-defaults'; +import { RedactOrHintOption, RemoveRedactionOption } from '../modules/file-preview/utils/dialog-types'; export const PreferencesKeys = { dossierRecent: 'Dossier-Recent', diff --git a/apps/red-ui/src/app/utils/filter-utils.ts b/apps/red-ui/src/app/utils/filter-utils.ts index c7b1439fd..68bf58595 100644 --- a/apps/red-ui/src/app/utils/filter-utils.ts +++ b/apps/red-ui/src/app/utils/filter-utils.ts @@ -1,5 +1,5 @@ import { handleCheckedValue, INestedFilter } from '@iqser/common-ui/lib/filtering'; -import { ComponentLogEntry, Dossier, File, User, UserType } from '@red/domain'; +import { Dossier, File, User, UserType } from '@red/domain'; export function handleFilterDelta(oldFilters: INestedFilter[], newFilters: INestedFilter[], allFilters: INestedFilter[]) { const newFiltersDelta = {}; diff --git a/libs/common-ui b/libs/common-ui index 04ae68891..d595a22db 160000 --- a/libs/common-ui +++ b/libs/common-ui @@ -1 +1 @@ -Subproject commit 04ae68891c9298b92327868006d1e7c79529c7e6 +Subproject commit d595a22db164ec8669da572fdd49a28b464eb61a diff --git a/libs/red-domain/src/lib/dossier-attributes/dossier-attribute-config.model.ts b/libs/red-domain/src/lib/dossier-attributes/dossier-attribute-config.model.ts index 552640799..9fa724999 100644 --- a/libs/red-domain/src/lib/dossier-attributes/dossier-attribute-config.model.ts +++ b/libs/red-domain/src/lib/dossier-attributes/dossier-attribute-config.model.ts @@ -1,6 +1,5 @@ import { IListable } from '@iqser/common-ui'; -import { IDossierAttributeConfig } from './dossier-attribute-config'; -import { DossierAttributeConfigType } from './types'; +import { DossierAttributeConfigType, IDossierAttributeConfig } from './dossier-attribute-config'; export class DossierAttributeConfig implements IDossierAttributeConfig, IListable { readonly id: string; diff --git a/libs/red-domain/src/lib/dossier-attributes/dossier-attribute-config.ts b/libs/red-domain/src/lib/dossier-attributes/dossier-attribute-config.ts index 43687f835..d80dd873b 100644 --- a/libs/red-domain/src/lib/dossier-attributes/dossier-attribute-config.ts +++ b/libs/red-domain/src/lib/dossier-attributes/dossier-attribute-config.ts @@ -1,4 +1,13 @@ -import { DossierAttributeConfigType } from './types'; +export const DossierAttributeConfigTypes = { + DATE: 'DATE', + IMAGE: 'IMAGE', + NUMBER: 'NUMBER', + TEXT: 'TEXT', +} as const; + +export type DossierAttributeConfigType = keyof typeof DossierAttributeConfigTypes; + +export type DossierAttributeWithValue = IDossierAttributeConfig & { value: string }; export interface IDossierAttributeConfig { readonly id: string; diff --git a/libs/red-domain/src/lib/dossier-attributes/index.ts b/libs/red-domain/src/lib/dossier-attributes/index.ts index f13a671ec..536fd9261 100644 --- a/libs/red-domain/src/lib/dossier-attributes/index.ts +++ b/libs/red-domain/src/lib/dossier-attributes/index.ts @@ -1,4 +1,3 @@ -export * from './types'; export * from './dossier-attribute-config'; export * from './dossier-attribute-config.model'; export * from './dossier-attribute'; diff --git a/libs/red-domain/src/lib/dossier-attributes/types.ts b/libs/red-domain/src/lib/dossier-attributes/types.ts deleted file mode 100644 index 475eb38ee..000000000 --- a/libs/red-domain/src/lib/dossier-attributes/types.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { IDossierAttributeConfig } from './dossier-attribute-config'; - -export const DossierAttributeConfigTypes = { - DATE: 'DATE', - IMAGE: 'IMAGE', - NUMBER: 'NUMBER', - TEXT: 'TEXT', -} as const; - -export type DossierAttributeConfigType = keyof typeof DossierAttributeConfigTypes; - -export type DossierAttributeWithValue = IDossierAttributeConfig & { value: string }; diff --git a/libs/red-domain/src/lib/dossier-stats/dossier-stats.model.ts b/libs/red-domain/src/lib/dossier-stats/dossier-stats.model.ts index bf53edf95..7a9a2e4ea 100644 --- a/libs/red-domain/src/lib/dossier-stats/dossier-stats.model.ts +++ b/libs/red-domain/src/lib/dossier-stats/dossier-stats.model.ts @@ -1,4 +1,11 @@ -import { isProcessingStatuses, OCR_STATES, PENDING_STATES, PROCESSED_STATES, PROCESSING_STATES, ProcessingFileStatus } from '../files'; +import { + isProcessingStatuses, + OCR_STATES, + PENDING_STATES, + PROCESSED_STATES, + PROCESSING_STATES, + ProcessingFileStatus, +} from '../files/types'; import { IDossierStats } from './dossier-stats'; import { FileCountPerProcessingStatus, FileCountPerWorkflowStatus } from './types'; diff --git a/libs/red-domain/src/lib/dossier-stats/types.ts b/libs/red-domain/src/lib/dossier-stats/types.ts index 54a188567..b57ca4ecd 100644 --- a/libs/red-domain/src/lib/dossier-stats/types.ts +++ b/libs/red-domain/src/lib/dossier-stats/types.ts @@ -1,4 +1,4 @@ -import { ProcessingFileStatus, WorkflowFileStatus } from '../files'; +import { ProcessingFileStatus, WorkflowFileStatus } from '../files/types'; export type FileCountPerWorkflowStatus = { [key in WorkflowFileStatus]?: number }; export type FileCountPerProcessingStatus = { [key in ProcessingFileStatus]?: number }; diff --git a/libs/red-domain/src/lib/dossiers/dossier.model.ts b/libs/red-domain/src/lib/dossiers/dossier.model.ts index 859694fd2..e3aae5b61 100644 --- a/libs/red-domain/src/lib/dossiers/dossier.model.ts +++ b/libs/red-domain/src/lib/dossiers/dossier.model.ts @@ -1,6 +1,6 @@ import { IListable } from '@iqser/common-ui'; import { List } from '@iqser/common-ui/lib/utils'; -import { DownloadFileType } from '../shared'; +import { DownloadFileType } from '../shared/types'; import { ARCHIVE_ROUTE, DOSSIERS_ROUTE } from './constants'; import { IDossier } from './dossier'; diff --git a/libs/red-domain/src/lib/dossiers/dossier.ts b/libs/red-domain/src/lib/dossiers/dossier.ts index 0c8a48f10..af6762120 100644 --- a/libs/red-domain/src/lib/dossiers/dossier.ts +++ b/libs/red-domain/src/lib/dossiers/dossier.ts @@ -1,5 +1,5 @@ -import { DownloadFileType } from '../shared'; import { List } from '@iqser/common-ui/lib/utils'; +import { DownloadFileType } from '../shared/types'; export interface IDossier { readonly approverIds: List; diff --git a/libs/red-domain/src/lib/files/file.model.ts b/libs/red-domain/src/lib/files/file.model.ts index 8222de8ce..5146f18fb 100644 --- a/libs/red-domain/src/lib/files/file.model.ts +++ b/libs/red-domain/src/lib/files/file.model.ts @@ -1,8 +1,8 @@ import { Entity } from '@iqser/common-ui'; -import { ProcessingType, ProcessingTypes } from '../dossier-stats'; -import { ARCHIVE_ROUTE, DOSSIERS_ROUTE } from '../dossiers'; -import { FileAttributes } from '../file-attributes'; -import { StatusSorter } from '../shared'; +import { ProcessingType, ProcessingTypes } from '../dossier-stats/dossier-stats.model'; +import { ARCHIVE_ROUTE, DOSSIERS_ROUTE } from '../dossiers/constants'; +import { FileAttributes } from '../file-attributes/file-attributes'; +import { StatusSorter } from '../shared/sorters/status-sorter'; import { IFile } from './file'; import { isFullProcessingStatuses, diff --git a/libs/red-domain/src/lib/pages/viewed-page.model.ts b/libs/red-domain/src/lib/pages/viewed-page.model.ts index 21fb8bc6f..5a8f0fef0 100644 --- a/libs/red-domain/src/lib/pages/viewed-page.model.ts +++ b/libs/red-domain/src/lib/pages/viewed-page.model.ts @@ -1,5 +1,5 @@ import { Entity } from '@iqser/common-ui'; -import { IViewedPage } from '.'; +import { IViewedPage } from './viewed-page'; export class ViewedPage extends Entity { readonly fileId: string; diff --git a/libs/red-domain/src/lib/shared/colors.ts b/libs/red-domain/src/lib/shared/colors.ts index 86f5d289d..a58af7fb5 100644 --- a/libs/red-domain/src/lib/shared/colors.ts +++ b/libs/red-domain/src/lib/shared/colors.ts @@ -1,3 +1,3 @@ -import { WorkflowFileStatus } from '../files'; +import { WorkflowFileStatus } from '../files/types'; export type Color = WorkflowFileStatus | string; diff --git a/libs/red-domain/src/lib/shared/expandable-file-actions.ts b/libs/red-domain/src/lib/shared/expandable-file-actions.ts index ec27e0575..5293615bb 100644 --- a/libs/red-domain/src/lib/shared/expandable-file-actions.ts +++ b/libs/red-domain/src/lib/shared/expandable-file-actions.ts @@ -1,7 +1,7 @@ -import { Observable } from 'rxjs'; import { CircleButtonType, ITrackable } from '@iqser/common-ui'; -import { type File } from '../files'; -import { type Dossier } from '../dossiers'; +import { Observable } from 'rxjs'; +import { Dossier } from '../dossiers/dossier.model'; +import { File } from '../files/file.model'; export const ActionTypes = { circleBtn: 'circleBtn', diff --git a/libs/red-domain/src/lib/shared/sorters/status-sorter.ts b/libs/red-domain/src/lib/shared/sorters/status-sorter.ts index 52d7c1377..1b9ff671f 100644 --- a/libs/red-domain/src/lib/shared/sorters/status-sorter.ts +++ b/libs/red-domain/src/lib/shared/sorters/status-sorter.ts @@ -1,4 +1,4 @@ -import { WorkflowFileStatus } from '../../files'; +import { WorkflowFileStatus } from '../../files/types'; type StatusSorterItem = { key: WorkflowFileStatus } | WorkflowFileStatus | string; type Sorter = Record & {