almost unfuck circular imports

This commit is contained in:
Dan Percic 2024-06-19 13:06:20 +03:00
parent ffd02c787d
commit 04e3f5b522
49 changed files with 368 additions and 353 deletions

View File

@ -2,11 +2,16 @@ import { APP_BASE_HREF, DatePipe as BaseDatePipe } from '@angular/common';
import { HTTP_INTERCEPTORS } from '@angular/common/http'; import { HTTP_INTERCEPTORS } from '@angular/common/http';
import { ENVIRONMENT_INITIALIZER, ErrorHandler, inject, NgModule } from '@angular/core'; import { ENVIRONMENT_INITIALIZER, ErrorHandler, inject, NgModule } from '@angular/core';
import { MatDividerModule } from '@angular/material/divider'; 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 { MAT_TOOLTIP_DEFAULT_OPTIONS, MatTooltip } from '@angular/material/tooltip';
import { BrowserModule } from '@angular/platform-browser'; import { BrowserModule } from '@angular/platform-browser';
import { BrowserAnimationsModule } from '@angular/platform-browser/animations'; import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
import { ServiceWorkerModule } from '@angular/service-worker'; 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 { 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 { BaseScreenComponent } from '@components/base-screen/base-screen.component';
import { BreadcrumbsComponent } from '@components/breadcrumbs/breadcrumbs.component'; import { BreadcrumbsComponent } from '@components/breadcrumbs/breadcrumbs.component';
import { DownloadsListScreenComponent } from '@components/downloads-list-screen/downloads-list-screen.component'; import { DownloadsListScreenComponent } from '@components/downloads-list-screen/downloads-list-screen.component';
@ -26,7 +31,6 @@ import {
EmptyStateComponent, EmptyStateComponent,
HelpButtonComponent, HelpButtonComponent,
HelpModeComponent, HelpModeComponent,
HelpModeKey,
HiddenActionDirective, HiddenActionDirective,
IconButtonComponent, IconButtonComponent,
InputWithActionComponent, InputWithActionComponent,
@ -43,6 +47,7 @@ import {
StopPropagationDirective, StopPropagationDirective,
} from '@iqser/common-ui'; } from '@iqser/common-ui';
import { CommonUiModule } from '@iqser/common-ui/lib/common-ui.module'; 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 { LogoComponent, SkeletonComponent, ToastComponent } from '@iqser/common-ui/lib/shared';
import { TenantsModule } from '@iqser/common-ui/lib/tenants'; import { TenantsModule } from '@iqser/common-ui/lib/tenants';
import { InitialsAvatarComponent, IqserUsersModule } from '@iqser/common-ui/lib/users'; 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 { ArchivedDossiersService } from '@services/dossiers/archived-dossiers.service';
import { GlobalErrorHandler } from '@services/global-error-handler.service'; import { GlobalErrorHandler } from '@services/global-error-handler.service';
import { LoggerRulesService } from '@services/logger-rules.service'; import { LoggerRulesService } from '@services/logger-rules.service';
import { provideCustomDateFormatter } from '@shared/custom-date-formatting.provider';
import { DatePipe } from '@shared/pipes/date.pipe'; import { DatePipe } from '@shared/pipes/date.pipe';
import { RedRoleGuard } from '@users/red-role.guard'; import { RedRoleGuard } from '@users/red-role.guard';
import { UserPreferenceService } from '@users/user-preference.service'; 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 * as helpModeKeys from '../assets/help-mode/help-mode-keys.json';
import { AppRoutingModule } from './app-routing.module'; import { AppRoutingModule } from './app-routing.module';
import { AppComponent } from './app.component'; import { AppComponent } from './app.component';
import { IconsModule } from './modules/icons/icons.module';
import { PdfViewerModule } from './modules/pdf-viewer/pdf-viewer.module'; import { PdfViewerModule } from './modules/pdf-viewer/pdf-viewer.module';
import { ACTIVE_DOSSIERS_SERVICE, ARCHIVED_DOSSIERS_SERVICE } from './tokens'; 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) => { export const appModuleFactory = (config: AppConfig) => {
@NgModule({ @NgModule({

View File

@ -1,7 +1,7 @@
import { Injectable } from '@angular/core'; import { Injectable } from '@angular/core';
import { ActivatedRouteSnapshot, CanActivate } from '@angular/router'; import { ActivatedRouteSnapshot, CanActivate } from '@angular/router';
import { firstValueFrom } from 'rxjs';
import { EntityPermissionsService } from '@services/entity-permissions/entity-permissions.service'; import { EntityPermissionsService } from '@services/entity-permissions/entity-permissions.service';
import { firstValueFrom } from 'rxjs';
@Injectable({ providedIn: 'root' }) @Injectable({ providedIn: 'root' })
export class PermissionsGuard implements CanActivate { export class PermissionsGuard implements CanActivate {

View File

@ -1,14 +1,20 @@
import { NgForOf, NgIf } from '@angular/common';
import { ChangeDetectorRef, Component, inject } from '@angular/core'; import { ChangeDetectorRef, Component, inject } from '@angular/core';
import { BaseFormComponent } from '@common-ui/form';
import { FormBuilder, FormGroup, ReactiveFormsModule } from '@angular/forms'; 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 { import {
RedactOrHintOption, RedactOrHintOption,
RedactOrHintOptions, RedactOrHintOptions,
RemoveRedactionOption, RemoveRedactionOption,
RemoveRedactionOptions, RemoveRedactionOptions,
} from '../../../../file-preview/utils/dialog-options'; } from '../../../../file-preview/utils/dialog-types';
import { PreferencesKeys, UserPreferenceService } from '@users/user-preference.service';
import { AsControl } from '@common-ui/utils';
import { import {
hintAddOptions, hintAddOptions,
recommendationRemoveOptions, recommendationRemoveOptions,
@ -17,12 +23,6 @@ import {
removeOptions, removeOptions,
SystemDefaultType, SystemDefaultType,
} from '../../../utils/dialog-defaults'; } 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 { interface DefaultOptionsForm {
addRedaction: RedactOrHintOption | SystemDefaultType; addRedaction: RedactOrHintOption | SystemDefaultType;
@ -68,6 +68,10 @@ export class DialogDefaultsComponent extends BaseFormComponent {
readonly redactionRemoveOptions = redactionRemoveOptions; readonly redactionRemoveOptions = redactionRemoveOptions;
readonly recommendationRemoveOptions = recommendationRemoveOptions; readonly recommendationRemoveOptions = recommendationRemoveOptions;
constructor() {
super();
}
get displayExtraOptionAddRedaction() { get displayExtraOptionAddRedaction() {
return RedactOrHintOptions.IN_DOSSIER === this.form.controls.addRedaction.value; 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; return RemoveRedactionOptions.DO_NOT_RECOMMEND === this.form.controls.removeRecommendation.value;
} }
constructor() {
super();
}
async save(): Promise<any> { async save(): Promise<any> {
const formValue = this.form.value; const formValue = this.form.value;

View File

@ -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 { 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 = { export const SystemDefaults = {
ADD_REDACTION_DEFAULT: RedactOrHintOptions.IN_DOSSIER, ADD_REDACTION_DEFAULT: RedactOrHintOptions.IN_DOSSIER,

View File

@ -1,10 +1,9 @@
import { Component, Inject, ViewChild } from '@angular/core'; import { Component, Inject, ViewChild } from '@angular/core';
import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog'; 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 { BaseDialogComponent, CircleButtonComponent } from '@iqser/common-ui';
import { User } from '@red/domain';
import { ResetPasswordComponent } from './reset-password/reset-password.component'; import { ResetPasswordComponent } from './reset-password/reset-password.component';
import { AdminDialogService } from '../../services/admin-dialog.service'; import { UserDetailsComponent } from './user-details/user-details.component';
@Component({ @Component({
selector: 'redaction-add-edit-user-dialog', selector: 'redaction-add-edit-user-dialog',
@ -13,8 +12,8 @@ import { AdminDialogService } from '../../services/admin-dialog.service';
imports: [UserDetailsComponent, ResetPasswordComponent, CircleButtonComponent], imports: [UserDetailsComponent, ResetPasswordComponent, CircleButtonComponent],
}) })
export class AddEditUserDialogComponent extends BaseDialogComponent { export class AddEditUserDialogComponent extends BaseDialogComponent {
resettingPassword = false;
@ViewChild(UserDetailsComponent) private readonly _userDetailsComponent: UserDetailsComponent; @ViewChild(UserDetailsComponent) private readonly _userDetailsComponent: UserDetailsComponent;
resettingPassword = false;
constructor( constructor(
protected readonly _dialogRef: MatDialogRef<AddEditUserDialogComponent>, protected readonly _dialogRef: MatDialogRef<AddEditUserDialogComponent>,

View File

@ -1,5 +1,9 @@
import { AsyncPipe, NgClass, NgIf } from '@angular/common';
import { Component, inject, OnInit } from '@angular/core'; 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 { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';
import { InitialsAvatarComponent } from '@common-ui/users';
import { import {
ButtonConfig, ButtonConfig,
CircleButtonComponent, CircleButtonComponent,
@ -24,12 +28,9 @@ import { UserService } from '@users/user.service';
import { firstValueFrom, Observable } from 'rxjs'; import { firstValueFrom, Observable } from 'rxjs';
import { map } from 'rxjs/operators'; import { map } from 'rxjs/operators';
import { userTypeChecker, userTypeFilters } from '../../../../utils'; import { userTypeChecker, userTypeFilters } from '../../../../utils';
import { AdminDialogService } from '../../services/admin-dialog.service';
import { UsersStatsComponent } from '../../components/users-stats/users-stats.component'; import { UsersStatsComponent } from '../../components/users-stats/users-stats.component';
import { AsyncPipe, NgClass, NgIf } from '@angular/common'; import { AddEditUserDialogComponent } from '../../dialogs/add-edit-user-dialog/add-edit-user-dialog.component';
import { InitialsAvatarComponent } from '@common-ui/users'; import { AdminDialogService } from '../../services/admin-dialog.service';
import { MatSlideToggle } from '@angular/material/slide-toggle';
import { MatIcon } from '@angular/material/icon';
function configToFilter({ key, label }: DonutChartConfig) { function configToFilter({ key, label }: DonutChartConfig) {
return new NestedFilter({ return new NestedFilter({
@ -112,7 +113,7 @@ export class UserListingScreenComponent extends ListingComponent<User> implement
} }
openAddEditUserDialog(user?: User) { openAddEditUserDialog(user?: User) {
this._dialogService.openDialog('addEditUser', user, async () => { this._dialogService.open(AddEditUserDialogComponent, user, { autoFocus: true }, async () => {
await this.#loadData(); await this.#loadData();
}); });
} }

View File

@ -1,9 +1,6 @@
import { Injectable, TemplateRef } from '@angular/core'; import { Injectable, TemplateRef } from '@angular/core';
import { MatDialog } from '@angular/material/dialog'; import { MatDialog } from '@angular/material/dialog';
import { AddEntityDialogComponent } from '../dialogs/add-entity-dialog/add-entity-dialog.component'; import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';
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 { import {
ConfirmationDialogComponent, ConfirmationDialogComponent,
ConfirmOptions, ConfirmOptions,
@ -13,22 +10,23 @@ import {
LoadingService, LoadingService,
TitleColors, TitleColors,
} from '@iqser/common-ui'; } 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 { IDossierAttributeConfig, IFileAttributeConfig, IReportTemplate } from '@red/domain';
import { ActiveDossiersService } from '@services/dossiers/active-dossiers.service';
import { ReportTemplateService } from '@services/report-template.service'; import { ReportTemplateService } from '@services/report-template.service';
import { ConfigureCertificateDialogComponent } from '../dialogs/configure-digital-signature-dialog/configure-certificate-dialog.component'; import { UserService } from '@users/user.service';
import { AuditInfoDialogComponent } from '../dialogs/audit-info-dialog/audit-info-dialog.component'; import { firstValueFrom, forkJoin } from 'rxjs';
import { AddCloneDossierTemplateDialogComponent } from '../dialogs/add-clone-dossier-template-dialog/add-clone-dossier-template-dialog.component'; 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 = type DialogType =
| 'confirm' | 'confirm'
| 'addEntity' | 'addEntity'
| 'editColor' | 'editColor'
| 'addEditUser'
| 'smtpAuthConfig' | 'smtpAuthConfig'
| 'addCloneDossierTemplate' | 'addCloneDossierTemplate'
| 'auditInfo' | 'auditInfo'
@ -50,10 +48,6 @@ export class AdminDialogService extends DialogService<DialogType> {
component: EditColorDialogComponent, component: EditColorDialogComponent,
dialogConfig: { autoFocus: true }, dialogConfig: { autoFocus: true },
}, },
addEditUser: {
component: AddEditUserDialogComponent,
dialogConfig: { autoFocus: true },
},
smtpAuthConfig: { smtpAuthConfig: {
component: SmtpAuthDialogComponent, component: SmtpAuthDialogComponent,
dialogConfig: { autoFocus: true }, dialogConfig: { autoFocus: true },

View File

@ -1,15 +1,16 @@
import { AsyncPipe, DecimalPipe, NgForOf, NgIf } from '@angular/common';
import { Component, Input, OnInit } from '@angular/core'; 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 { Dossier, DossierAttributeWithValue, DossierStats } from '@red/domain';
import { DossierTemplatesService } from '@services/dossier-templates/dossier-templates.service'; 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 { DossierStatsService } from '@services/dossiers/dossier-stats.service';
import { DossiersDialogService } from '../../../shared-dossiers/services/dossiers-dialog.service'; import { FilesService } from '@services/files/files.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 { DatePipe } from '@shared/pipes/date.pipe'; 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({ @Component({
selector: 'redaction-dossier-details-stats', selector: 'redaction-dossier-details-stats',
@ -41,7 +42,7 @@ export class DossierDetailsStatsComponent implements OnInit {
openEditDossierDialog(section: string): void { openEditDossierDialog(section: string): void {
const data = { dossierId: this.dossier.id, section }; 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)); await firstValueFrom(this._filesService.loadAll(this.dossier.id));
}); });
} }

View File

@ -4,6 +4,7 @@ import {
ActionConfig, ActionConfig,
getConfig, getConfig,
IqserPermissionsService, IqserPermissionsService,
largeDialogConfig,
ListingMode, ListingMode,
ListingModes, ListingModes,
TableColumnConfig, TableColumnConfig,
@ -41,7 +42,8 @@ import { UserService } from '@users/user.service';
import dayjs from 'dayjs'; import dayjs from 'dayjs';
import { BehaviorSubject, Observable } from 'rxjs'; import { BehaviorSubject, Observable } from 'rxjs';
import { map } from 'rxjs/operators'; 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 { DossiersDialogService } from '../shared-dossiers/services/dossiers-dialog.service';
import { BulkActionsService } from './services/bulk-actions.service'; import { BulkActionsService } from './services/bulk-actions.service';
@ -472,6 +474,6 @@ export class ConfigService {
} }
#openEditDossierDialog(dossierId: string) { #openEditDossierDialog(dossierId: string) {
this._dialogService.openDialog('editDossier', { dossierId }); this._dialogService.open(EditDossierDialogComponent, { dossierId }, { ...largeDialogConfig, width: '98vw', maxWidth: '98vw' });
} }
} }

View File

@ -1,6 +1,11 @@
import { NgIf } from '@angular/common';
import { Component, OnInit } from '@angular/core'; import { Component, OnInit } from '@angular/core';
import { takeUntilDestroyed } from '@angular/core/rxjs-interop'; import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
import { FormBuilder, ReactiveFormsModule, UntypedFormGroup } from '@angular/forms'; 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 { import {
CircleButtonComponent, CircleButtonComponent,
DetailsRadioComponent, DetailsRadioComponent,
@ -12,22 +17,17 @@ import {
IqserDialogComponent, IqserDialogComponent,
IqserPermissionsService, IqserPermissionsService,
} from '@iqser/common-ui'; } from '@iqser/common-ui';
import { TranslateModule } from '@ngx-translate/core';
import { Dictionary, Dossier, IAddRedactionRequest } from '@red/domain'; import { Dictionary, Dossier, IAddRedactionRequest } from '@red/domain';
import { ActiveDossiersService } from '@services/dossiers/active-dossiers.service'; import { ActiveDossiersService } from '@services/dossiers/active-dossiers.service';
import { DictionaryService } from '@services/entity-services/dictionary.service'; import { DictionaryService } from '@services/entity-services/dictionary.service';
import { Roles } from '@users/roles'; 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 { UserPreferenceService } from '@users/user-preference.service';
import { SystemDefaultOption, SystemDefaults } from '../../../account/utils/dialog-defaults';
import { stringToBoolean } from '@utils/functions'; import { stringToBoolean } from '@utils/functions';
import { MatFormField } from '@angular/material/form-field'; import { tap } from 'rxjs/operators';
import { MatOption, MatSelect, MatSelectTrigger } from '@angular/material/select'; import { SystemDefaultOption, SystemDefaults } from '../../../account/utils/dialog-defaults';
import { MatTooltip } from '@angular/material/tooltip'; import { getRedactOrHintOptions } from '../../utils/dialog-options';
import { NgIf } from '@angular/common'; import { AddHintData, AddHintResult, RedactOrHintOption, RedactOrHintOptions } from '../../utils/dialog-types';
import { TranslateModule } from '@ngx-translate/core';
import { MatDialogClose } from '@angular/material/dialog';
@Component({ @Component({
templateUrl: './add-hint-dialog.component.html', templateUrl: './add-hint-dialog.component.html',

View File

@ -1,4 +1,9 @@
import { CdkFixedSizeVirtualScroll, CdkVirtualForOf } from '@angular/cdk/scrolling';
import { NgIf, NgStyle } from '@angular/common';
import { Component } from '@angular/core'; 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 { import {
CircleButtonComponent, CircleButtonComponent,
DetailsRadioComponent, DetailsRadioComponent,
@ -8,14 +13,9 @@ import {
IconButtonTypes, IconButtonTypes,
IqserDialogComponent, IqserDialogComponent,
} from '@iqser/common-ui'; } 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 { TranslateModule } from '@ngx-translate/core';
import { CdkFixedSizeVirtualScroll, CdkVirtualForOf } from '@angular/cdk/scrolling'; import { getRemoveRedactionOptions } from '../../../utils/dialog-options';
import { NgIf, NgStyle } from '@angular/common'; import { RemoveAnnotationData, RemoveAnnotationOption, RemoveAnnotationOptions, RemoveAnnotationResult } from '../../../utils/dialog-types';
import { ReplaceNbspPipe } from '@common-ui/pipes/replace-nbsp.pipe';
import { MatDialogClose } from '@angular/material/dialog';
@Component({ @Component({
templateUrl: 'remove-annotation-dialog.component.html', templateUrl: 'remove-annotation-dialog.component.html',
@ -47,6 +47,13 @@ export class RemoveAnnotationDialogComponent extends IqserDialogComponent<
form!: UntypedFormGroup; 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 { get isFalsePositive(): boolean {
return this.form.get('option').value.value === RemoveAnnotationOptions.FALSE_POSITIVE; 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; 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 { save(): void {
this.dialogRef.close({ ...this.form.getRawValue(), applyToAllDossiers: this.#applyToAllDossiers }); this.dialogRef.close({ ...this.form.getRawValue(), applyToAllDossiers: this.#applyToAllDossiers });
} }

View File

@ -1,5 +1,10 @@
import { NgForOf, NgIf } from '@angular/common';
import { Component, inject, OnInit } from '@angular/core'; import { Component, inject, OnInit } from '@angular/core';
import { FormControl, FormGroup, ReactiveFormsModule } from '@angular/forms'; 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 { import {
CircleButtonComponent, CircleButtonComponent,
DetailsRadioOption, DetailsRadioOption,
@ -10,26 +15,21 @@ import {
IqserDenyDirective, IqserDenyDirective,
IqserDialogComponent, IqserDialogComponent,
} from '@iqser/common-ui'; } from '@iqser/common-ui';
import { TranslateModule } from '@ngx-translate/core';
import { Dictionary, SuperTypes } from '@red/domain'; import { Dictionary, SuperTypes } from '@red/domain';
import { ActiveDossiersService } from '@services/dossiers/active-dossiers.service'; import { ActiveDossiersService } from '@services/dossiers/active-dossiers.service';
import { DictionaryService } from '@services/entity-services/dictionary.service'; import { DictionaryService } from '@services/entity-services/dictionary.service';
import { JustificationsService } from '@services/entity-services/justifications.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 { Roles } from '@users/roles';
import { DialogHelpModeKeys } from '../../utils/constants'; import { firstValueFrom } from 'rxjs';
import { import {
SelectedAnnotationsTableComponent, SelectedAnnotationsTableComponent,
ValueColumn, ValueColumn,
} from '../../components/selected-annotations-table/selected-annotations-table.component'; } from '../../components/selected-annotations-table/selected-annotations-table.component';
import { TranslateModule } from '@ngx-translate/core'; import { DialogHelpModeKeys } from '../../utils/constants';
import { MatFormField } from '@angular/material/form-field'; import { getEditRedactionOptions } from '../../utils/dialog-options';
import { NgForOf, NgIf } from '@angular/common'; import { EditRedactionData, EditRedactResult, RedactOrHintOption } from '../../utils/dialog-types';
import { MatOption, MatSelect, MatSelectTrigger } from '@angular/material/select'; import { LegalBasisOption } from '../manual-redaction-dialog/manual-annotation-dialog.component';
import { MatTooltip } from '@angular/material/tooltip';
import { MatDialogClose } from '@angular/material/dialog';
interface TypeSelectOptions { interface TypeSelectOptions {
type: string; type: string;
@ -66,6 +66,7 @@ export class EditRedactionDialogComponent
{ {
readonly #dossier = inject(ActiveDossiersService).find(this.data.dossierId); readonly #dossier = inject(ActiveDossiersService).find(this.data.dossierId);
readonly #applyToAllDossiers = this.data.applyToAllDossiers; readonly #applyToAllDossiers = this.data.applyToAllDossiers;
protected readonly roles = Roles;
readonly annotations = this.data.annotations; readonly annotations = this.data.annotations;
readonly iconButtonTypes = IconButtonTypes; readonly iconButtonTypes = IconButtonTypes;
readonly isModifyDictionary = this.annotations.every(annotation => annotation.isModifyDictionary); readonly isModifyDictionary = this.annotations.every(annotation => annotation.isModifyDictionary);
@ -90,8 +91,6 @@ export class EditRedactionDialogComponent
{ label: redaction.value, show: true, bold: true }, { label: redaction.value, show: true, bold: true },
{ label: redaction.typeLabel, show: true }, { label: redaction.typeLabel, show: true },
]); ]);
protected readonly roles = Roles;
options: DetailsRadioOption<RedactOrHintOption>[] | undefined; options: DetailsRadioOption<RedactOrHintOption>[] | undefined;
legalOptions: LegalBasisOption[] = []; legalOptions: LegalBasisOption[] = [];
dictionaries: Dictionary[] = []; dictionaries: Dictionary[] = [];

View File

@ -1,6 +1,11 @@
import { NgForOf, NgIf } from '@angular/common';
import { Component, inject, OnInit } from '@angular/core'; import { Component, inject, OnInit } from '@angular/core';
import { takeUntilDestroyed } from '@angular/core/rxjs-interop'; import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
import { FormBuilder, ReactiveFormsModule } from '@angular/forms'; 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 { import {
CircleButtonComponent, CircleButtonComponent,
DetailsRadioComponent, DetailsRadioComponent,
@ -11,25 +16,20 @@ import {
IqserDialogComponent, IqserDialogComponent,
} from '@iqser/common-ui'; } from '@iqser/common-ui';
import { AnnotationWrapper } from '@models/file/annotation.wrapper'; import { AnnotationWrapper } from '@models/file/annotation.wrapper';
import { TranslateModule } from '@ngx-translate/core';
import { Dictionary, IAddRedactionRequest, SuperTypes } from '@red/domain'; import { Dictionary, IAddRedactionRequest, SuperTypes } from '@red/domain';
import { ActiveDossiersService } from '@services/dossiers/active-dossiers.service'; import { ActiveDossiersService } from '@services/dossiers/active-dossiers.service';
import { DictionaryService } from '@services/entity-services/dictionary.service'; import { DictionaryService } from '@services/entity-services/dictionary.service';
import { JustificationsService } from '@services/entity-services/justifications.service'; import { JustificationsService } from '@services/entity-services/justifications.service';
import { firstValueFrom } from 'rxjs'; import { firstValueFrom } from 'rxjs';
import { tap } from 'rxjs/operators'; 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 { import {
SelectedAnnotationsTableComponent, SelectedAnnotationsTableComponent,
ValueColumn, ValueColumn,
} from '../../components/selected-annotations-table/selected-annotations-table.component'; } from '../../components/selected-annotations-table/selected-annotations-table.component';
import { MatFormField } from '@angular/material/form-field'; import { getRedactOrHintOptions } from '../../utils/dialog-options';
import { NgForOf, NgIf } from '@angular/common'; import { RedactOrHintOption, RedactOrHintOptions, RedactRecommendationData, RedactRecommendationResult } from '../../utils/dialog-types';
import { MatOption, MatSelect, MatSelectTrigger } from '@angular/material/select'; import { LegalBasisOption } from '../manual-redaction-dialog/manual-annotation-dialog.component';
import { MatTooltip } from '@angular/material/tooltip';
import { TranslateModule } from '@ngx-translate/core';
import { MatDialogClose } from '@angular/material/dialog';
@Component({ @Component({
templateUrl: './redact-recommendation-dialog.component.html', templateUrl: './redact-recommendation-dialog.component.html',

View File

@ -1,6 +1,11 @@
import { AsyncPipe, NgClass, NgForOf, NgIf, NgStyle } from '@angular/common';
import { Component, inject, OnInit } from '@angular/core'; import { Component, inject, OnInit } from '@angular/core';
import { takeUntilDestroyed } from '@angular/core/rxjs-interop'; import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
import { FormBuilder, FormGroup, ReactiveFormsModule, Validators } from '@angular/forms'; 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 { import {
CircleButtonComponent, CircleButtonComponent,
DetailsRadioComponent, DetailsRadioComponent,
@ -10,25 +15,20 @@ import {
IconButtonTypes, IconButtonTypes,
IqserDialogComponent, IqserDialogComponent,
} from '@iqser/common-ui'; } from '@iqser/common-ui';
import { TranslateModule } from '@ngx-translate/core';
import { Dictionary, IAddRedactionRequest, SuperTypes } from '@red/domain'; import { Dictionary, IAddRedactionRequest, SuperTypes } from '@red/domain';
import { ActiveDossiersService } from '@services/dossiers/active-dossiers.service'; import { ActiveDossiersService } from '@services/dossiers/active-dossiers.service';
import { DictionaryService } from '@services/entity-services/dictionary.service'; import { DictionaryService } from '@services/entity-services/dictionary.service';
import { JustificationsService } from '@services/entity-services/justifications.service'; import { JustificationsService } from '@services/entity-services/justifications.service';
import { Roles } from '@users/roles'; import { Roles } from '@users/roles';
import { UserPreferenceService } from '@users/user-preference.service';
import { calcTextWidthInPixels, stringToBoolean } from '@utils/functions'; import { calcTextWidthInPixels, stringToBoolean } from '@utils/functions';
import { firstValueFrom, Observable } from 'rxjs'; import { firstValueFrom, Observable } from 'rxjs';
import { map, tap } from 'rxjs/operators'; 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 { SystemDefaultOption, SystemDefaults } from '../../../account/utils/dialog-defaults';
import { AsyncPipe, NgClass, NgForOf, NgIf, NgStyle } from '@angular/common'; import { getRedactOrHintOptions } from '../../utils/dialog-options';
import { MatFormField } from '@angular/material/form-field'; import { RedactOrHintOption, RedactOrHintOptions, RedactTextData, RedactTextResult } from '../../utils/dialog-types';
import { MatOption, MatSelect, MatSelectTrigger } from '@angular/material/select'; import { LegalBasisOption } from '../manual-redaction-dialog/manual-annotation-dialog.component';
import { MatTooltip } from '@angular/material/tooltip';
import { TranslateModule } from '@ngx-translate/core';
import { MatDialogClose } from '@angular/material/dialog';
const MAXIMUM_TEXT_AREA_WIDTH = 421; const MAXIMUM_TEXT_AREA_WIDTH = 421;
@ -60,6 +60,9 @@ export class RedactTextDialogComponent
extends IqserDialogComponent<RedactTextDialogComponent, RedactTextData, RedactTextResult> extends IqserDialogComponent<RedactTextDialogComponent, RedactTextData, RedactTextResult>
implements OnInit 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 roles = Roles;
readonly iconButtonTypes = IconButtonTypes; readonly iconButtonTypes = IconButtonTypes;
readonly initialText = this.data?.manualRedactionEntryWrapper?.manualRedactionEntry?.value; readonly initialText = this.data?.manualRedactionEntryWrapper?.manualRedactionEntry?.value;
@ -72,36 +75,11 @@ export class RedactTextDialogComponent
selectedTextRows = 1; selectedTextRows = 1;
readonly options: DetailsRadioOption<RedactOrHintOption>[]; readonly options: DetailsRadioOption<RedactOrHintOption>[];
readonly displayedDictionaryLabel$: Observable<string>; readonly displayedDictionaryLabel$: Observable<string>;
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 maximumTextAreaWidth = MAXIMUM_TEXT_AREA_WIDTH;
readonly maximumSelectedTextWidth = 567; readonly maximumSelectedTextWidth = 567;
textWidth: number; 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( constructor(
private readonly _justificationsService: JustificationsService, private readonly _justificationsService: JustificationsService,
private readonly _dictionaryService: DictionaryService, 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<void> { async ngOnInit(): Promise<void> {
const data = await firstValueFrom(this._justificationsService.getForDossierTemplate(this.#dossier.dossierTemplateId)); const data = await firstValueFrom(this._justificationsService.getForDossierTemplate(this.#dossier.dossierTemplateId));
this.legalOptions = data.map(lbm => ({ this.legalOptions = data.map(lbm => ({

View File

@ -1,5 +1,8 @@
import { NgStyle } from '@angular/common';
import { Component, computed } from '@angular/core'; import { Component, computed } from '@angular/core';
import { toSignal } from '@angular/core/rxjs-interop';
import { FormBuilder, ReactiveFormsModule, UntypedFormGroup } from '@angular/forms'; import { FormBuilder, ReactiveFormsModule, UntypedFormGroup } from '@angular/forms';
import { MatDialogClose } from '@angular/material/dialog';
import { import {
CircleButtonComponent, CircleButtonComponent,
DetailsRadioComponent, DetailsRadioComponent,
@ -11,22 +14,19 @@ import {
IqserDenyDirective, IqserDenyDirective,
IqserDialogComponent, IqserDialogComponent,
} from '@iqser/common-ui'; } from '@iqser/common-ui';
import { getRemoveRedactionOptions, RemoveRedactionOption, RemoveRedactionOptions } from '../../utils/dialog-options'; import { TranslateModule } from '@ngx-translate/core';
import { RemoveRedactionData, RemoveRedactionResult } from '../../utils/dialog-types';
import { Roles } from '@users/roles'; import { Roles } from '@users/roles';
import { DialogHelpModeKeys } from '../../utils/constants'; import { UserPreferenceService } from '@users/user-preference.service';
import { toSignal } from '@angular/core/rxjs-interop'; import { stringToBoolean } from '@utils/functions';
import { map } from 'rxjs/operators'; import { map } from 'rxjs/operators';
import { SystemDefaultOption, SystemDefaults } from '../../../account/utils/dialog-defaults';
import { import {
SelectedAnnotationsTableComponent, SelectedAnnotationsTableComponent,
ValueColumn, ValueColumn,
} from '../../components/selected-annotations-table/selected-annotations-table.component'; } from '../../components/selected-annotations-table/selected-annotations-table.component';
import { UserPreferenceService } from '@users/user-preference.service'; import { DialogHelpModeKeys } from '../../utils/constants';
import { SystemDefaultOption, SystemDefaults } from '../../../account/utils/dialog-defaults'; import { getRemoveRedactionOptions } from '../../utils/dialog-options';
import { stringToBoolean } from '@utils/functions'; import { RemoveRedactionData, RemoveRedactionOption, RemoveRedactionOptions, RemoveRedactionResult } from '../../utils/dialog-types';
import { TranslateModule } from '@ngx-translate/core';
import { NgStyle } from '@angular/common';
import { MatDialogClose } from '@angular/material/dialog';
@Component({ @Component({
templateUrl: './remove-redaction-dialog.component.html', templateUrl: './remove-redaction-dialog.component.html',
@ -51,12 +51,11 @@ export class RemoveRedactionDialogComponent extends IqserDialogComponent<
RemoveRedactionData, RemoveRedactionData,
RemoveRedactionResult RemoveRedactionResult
> { > {
protected readonly roles = Roles;
readonly iconButtonTypes = IconButtonTypes; readonly iconButtonTypes = IconButtonTypes;
readonly recommendation = this.data.redactions.every(redaction => redaction.isRecommendation); readonly recommendation = this.data.redactions.every(redaction => redaction.isRecommendation);
readonly hint = this.data.redactions.every(redaction => redaction.isHint); readonly hint = this.data.redactions.every(redaction => redaction.isHint);
readonly annotationsType = this.hint ? 'hint' : this.recommendation ? 'recommendation' : 'redaction'; readonly annotationsType = this.hint ? 'hint' : this.recommendation ? 'recommendation' : 'redaction';
readonly optionByType = { readonly optionByType = {
recommendation: { recommendation: {
main: this._userPreferences.getRemoveRecommendationDefaultOption(), main: this._userPreferences.getRemoveRecommendationDefaultOption(),
@ -71,7 +70,6 @@ export class RemoveRedactionDialogComponent extends IqserDialogComponent<
extra: this._userPreferences.getRemoveRedactionDefaultExtraOption(), extra: this._userPreferences.getRemoveRedactionDefaultExtraOption(),
}, },
}; };
readonly systemDefaultByType = { readonly systemDefaultByType = {
recommendation: { recommendation: {
main: SystemDefaults.REMOVE_RECOMMENDATION_DEFAULT, main: SystemDefaults.REMOVE_RECOMMENDATION_DEFAULT,
@ -86,24 +84,19 @@ export class RemoveRedactionDialogComponent extends IqserDialogComponent<
extra: false, extra: false,
}, },
}; };
readonly #applyToAllDossiers = this.systemDefaultByType[this.annotationsType].extra;
readonly isSystemDefault = this.optionByType[this.annotationsType].main === SystemDefaultOption.SYSTEM_DEFAULT; readonly isSystemDefault = this.optionByType[this.annotationsType].main === SystemDefaultOption.SYSTEM_DEFAULT;
readonly isExtraOptionSystemDefault = this.optionByType[this.annotationsType].extra === 'undefined'; readonly isExtraOptionSystemDefault = this.optionByType[this.annotationsType].extra === 'undefined';
readonly defaultOptionPreference = this.isSystemDefault readonly defaultOptionPreference = this.isSystemDefault
? this.systemDefaultByType[this.annotationsType].main ? this.systemDefaultByType[this.annotationsType].main
: this.optionByType[this.annotationsType].main; : this.optionByType[this.annotationsType].main;
readonly extraOptionPreference = stringToBoolean(this.optionByType[this.annotationsType].extra); readonly extraOptionPreference = stringToBoolean(this.optionByType[this.annotationsType].extra);
readonly #applyToAllDossiers = this.systemDefaultByType[this.annotationsType].extra;
readonly options: DetailsRadioOption<RemoveRedactionOption>[] = getRemoveRedactionOptions( readonly options: DetailsRadioOption<RemoveRedactionOption>[] = getRemoveRedactionOptions(
this.data, this.data,
this.isSystemDefault || this.isExtraOptionSystemDefault ? this.#applyToAllDossiers : this.extraOptionPreference, this.isSystemDefault || this.isExtraOptionSystemDefault ? this.#applyToAllDossiers : this.extraOptionPreference,
); );
readonly skipped = this.data.redactions.some(annotation => annotation.isSkipped); readonly skipped = this.data.redactions.some(annotation => annotation.isSkipped);
readonly redactedTexts = this.data.redactions.map(annotation => annotation.value); readonly redactedTexts = this.data.redactions.map(annotation => annotation.value);
protected readonly roles = Roles;
form: UntypedFormGroup = this._formBuilder.group({ form: UntypedFormGroup = this._formBuilder.group({
comment: [null], comment: [null],
option: [this.defaultOption], option: [this.defaultOption],

View File

@ -1,5 +1,9 @@
import { NgIf } from '@angular/common';
import { Component, inject } from '@angular/core'; import { Component, inject } from '@angular/core';
import { FormBuilder, FormControl, FormGroup, ReactiveFormsModule } from '@angular/forms'; 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 { import {
CircleButtonComponent, CircleButtonComponent,
DetailsRadioComponent, DetailsRadioComponent,
@ -9,15 +13,11 @@ import {
IconButtonTypes, IconButtonTypes,
IqserDialogComponent, IqserDialogComponent,
} from '@iqser/common-ui'; } from '@iqser/common-ui';
import { TranslateModule } from '@ngx-translate/core';
import { ActiveDossiersService } from '@services/dossiers/active-dossiers.service'; import { ActiveDossiersService } from '@services/dossiers/active-dossiers.service';
import { DictionariesMapService } from '@services/entity-services/dictionaries-map.service'; import { DictionariesMapService } from '@services/entity-services/dictionaries-map.service';
import { getResizeRedactionOptions, ResizeOptions, ResizeRedactionOption } from '../../utils/dialog-options'; import { getResizeRedactionOptions } from '../../utils/dialog-options';
import { ResizeRedactionData, ResizeRedactionResult } from '../../utils/dialog-types'; import { ResizeOptions, ResizeRedactionData, ResizeRedactionOption, 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';
@Component({ @Component({
templateUrl: './resize-redaction-dialog.component.html', templateUrl: './resize-redaction-dialog.component.html',

View File

@ -29,11 +29,11 @@ import { EditRedactionDialogComponent } from '../dialogs/edit-redaction-dialog/e
import { RedactRecommendationDialogComponent } from '../dialogs/redact-recommendation-dialog/redact-recommendation-dialog.component'; import { RedactRecommendationDialogComponent } from '../dialogs/redact-recommendation-dialog/redact-recommendation-dialog.component';
import { RemoveRedactionDialogComponent } from '../dialogs/remove-redaction-dialog/remove-redaction-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 { ResizeRedactionDialogComponent } from '../dialogs/resize-redaction-dialog/resize-redaction-dialog.component';
import { RemoveRedactionOptions } from '../utils/dialog-options';
import { import {
EditRedactionData, EditRedactionData,
EditRedactResult, EditRedactResult,
RemoveRedactionData, RemoveRedactionData,
RemoveRedactionOptions,
RemoveRedactionPermissions, RemoveRedactionPermissions,
RemoveRedactionResult, RemoveRedactionResult,
ResizeRedactionData, ResizeRedactionData,

View File

@ -1,10 +1,9 @@
import { effect, Injectable, Signal, signal } from '@angular/core'; import { effect, Injectable, Signal, signal } from '@angular/core';
import { bool } from '@iqser/common-ui/lib/utils'; 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'; import { getLocalStorageDataByFileId, setLocalStorageDataByFileId } from '@utils/local-storage';
import { REDAnnotationManager } from '../../pdf-viewer/services/annotation-manager.service';
export const HIDE_SKIPPED = 'hide-skipped'; import { HIDE_SKIPPED } from '../utils/constants';
import { FilePreviewStateService } from './file-preview-state.service';
@Injectable() @Injectable()
export class SkippedService { export class SkippedService {

View File

@ -53,3 +53,5 @@ export const TextPopups = {
ADD_RECTANGLE: 'add-rectangle', ADD_RECTANGLE: 'add-rectangle',
ADD_FALSE_POSITIVE: 'add-false-positive', ADD_FALSE_POSITIVE: 'add-false-positive',
} as const; } as const;
export const HIDE_SKIPPED = 'hide-skipped';

View File

@ -6,33 +6,20 @@ import { editRedactionTranslations, redactTextTranslations } from '@translations
import { removeAnnotationTranslations } from '@translations/remove-annotation-translations'; import { removeAnnotationTranslations } from '@translations/remove-annotation-translations';
import { removeRedactionTranslations } from '@translations/remove-redaction-translations'; import { removeRedactionTranslations } from '@translations/remove-redaction-translations';
import { resizeRedactionTranslations } from '@translations/resize-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 PIN_ICON = 'red:push-pin';
const FOLDER_ICON = 'red:folder'; const FOLDER_ICON = 'red:folder';
const REMOVE_FROM_DICT_ICON = 'red:remove-from-dict'; 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 = ( export const getEditRedactionOptions = (
dossierName: string, dossierName: string,
applyToAllDossiers: boolean, applyToAllDossiers: boolean,

View File

@ -2,7 +2,27 @@ import { DetailsRadioOption } from '@iqser/common-ui';
import { AnnotationWrapper } from '@models/file/annotation.wrapper'; import { AnnotationWrapper } from '@models/file/annotation.wrapper';
import { ManualRedactionEntryWrapper } from '@models/file/manual-redaction-entry.wrapper'; import { ManualRedactionEntryWrapper } from '@models/file/manual-redaction-entry.wrapper';
import { Dictionary, Dossier, File, IAddRedactionRequest, IManualRedactionEntry } from '@red/domain'; 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 { export interface RedactTextData {
manualRedactionEntryWrapper: ManualRedactionEntryWrapper; manualRedactionEntryWrapper: ManualRedactionEntryWrapper;

View File

@ -3,15 +3,15 @@ import { bool, List } from '@iqser/common-ui/lib/utils';
import { AnnotationWrapper } from '@models/file/annotation.wrapper'; import { AnnotationWrapper } from '@models/file/annotation.wrapper';
import { Core } from '@pdftron/webviewer'; import { Core } from '@pdftron/webviewer';
import { getLast, urlFileId } from '@utils/functions'; import { getLast, urlFileId } from '@utils/functions';
import { getLocalStorageDataByFileId } from '@utils/local-storage';
import { NGXLogger } from 'ngx-logger'; import { NGXLogger } from 'ngx-logger';
import { Subject } from 'rxjs'; import { Subject } from 'rxjs';
import { HIDE_SKIPPED } from '../../file-preview/utils/constants';
import { AnnotationToolNames } from '../utils/constants'; import { AnnotationToolNames } from '../utils/constants';
import { asList, getId, isStringOrWrapper } from '../utils/functions'; import { asList, getId, isStringOrWrapper } from '../utils/functions';
import { AnnotationPredicate, DeleteAnnotationsOptions } from '../utils/types'; import { AnnotationPredicate, DeleteAnnotationsOptions } from '../utils/types';
import AnnotationManager = Core.AnnotationManager; import AnnotationManager = Core.AnnotationManager;
import Annotation = Core.Annotations.Annotation; 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 MODIFY_ACTION = 'modify';
const RESIZE_OPTION = 'resize'; const RESIZE_OPTION = 'resize';

View File

@ -1,17 +1,18 @@
import { AsyncPipe, NgIf } from '@angular/common';
import { Component, Input, OnChanges } from '@angular/core'; 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 { getCurrentUser } from '@iqser/common-ui/lib/users';
import { TranslateModule } from '@ngx-translate/core';
import type { Dossier, File, User } from '@red/domain'; import type { Dossier, File, User } from '@red/domain';
import { FilesMapService } from '@services/files/files-map.service'; import { FilesMapService } from '@services/files/files-map.service';
import { PermissionsService } from '@services/permissions.service'; import { PermissionsService } from '@services/permissions.service';
import { ReanalysisService } from '@services/reanalysis.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 { LongPressDirective, LongPressEvent } from '@shared/directives/long-press.directive';
import { Roles } from '@users/roles'; import { Roles } from '@users/roles';
import { UserPreferenceService } from '@users/user-preference.service'; 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 { 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({ @Component({
selector: 'redaction-dossiers-listing-actions [dossier]', selector: 'redaction-dossiers-listing-actions [dossier]',
@ -54,7 +55,7 @@ export class DossiersListingActionsComponent implements OnChanges {
} }
openEditDossierDialog(dossierId: string): void { openEditDossierDialog(dossierId: string): void {
this._dialogService.openDialog('editDossier', { dossierId }); this._dialogService.open(EditDossierDialogComponent, { dossierId }, { ...largeDialogConfig, width: '98vw', maxWidth: '98vw' });
} }
async reanalyseDossier(dossier: Dossier): Promise<void> { async reanalyseDossier(dossier: Dossier): Promise<void> {

View File

@ -42,12 +42,13 @@
[dossier]="dossier()" [dossier]="dossier()"
></redaction-edit-dossier-download-package> ></redaction-edit-dossier-download-package>
<redaction-edit-dossier-dictionary @defer (when activeNav() === 'dossierDictionary') {
*ngIf="activeNav() === 'dossierDictionary'" <redaction-edit-dossier-dictionary [dossier]="dossier()"></redaction-edit-dossier-dictionary>
[dossier]="dossier()" }
></redaction-edit-dossier-dictionary>
<redaction-edit-dossier-team *ngIf="activeNav() === 'members'" [dossier]="dossier()"></redaction-edit-dossier-team> @if (activeNav() === 'members') {
<redaction-edit-dossier-team [dossier]="dossier()"></redaction-edit-dossier-team>
}
<redaction-edit-dossier-attributes <redaction-edit-dossier-attributes
*ngIf="activeNav() === 'dossierAttributes'" *ngIf="activeNav() === 'dossierAttributes'"

View File

@ -1,9 +1,10 @@
import { NgForOf, NgIf } from '@angular/common';
import { AfterViewInit, Component, computed, Inject, Signal, signal, untracked, viewChild, WritableSignal } from '@angular/core'; import { AfterViewInit, Component, computed, Inject, Signal, signal, untracked, viewChild, WritableSignal } from '@angular/core';
import { toSignal } from '@angular/core/rxjs-interop';
import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog'; import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';
import { Dossier } from '@red/domain'; import { MatIcon } from '@angular/material/icon';
import { EditDossierGeneralInfoComponent } from './general-info/edit-dossier-general-info.component'; import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';
import { EditDossierDownloadPackageComponent } from './download-package/edit-dossier-download-package.component'; import { SideNavComponent } from '@common-ui/shared';
import { EditDossierSectionInterface } from './edit-dossier-section.interface';
import { import {
BaseDialogComponent, BaseDialogComponent,
CircleButtonComponent, CircleButtonComponent,
@ -14,20 +15,20 @@ import {
IqserDenyDirective, IqserDenyDirective,
SaveOptions, SaveOptions,
} from '@iqser/common-ui'; } from '@iqser/common-ui';
import { EditDossierDictionaryComponent } from './dictionary/edit-dossier-dictionary.component'; import { TranslateModule } from '@ngx-translate/core';
import { EditDossierAttributesComponent } from './attributes/edit-dossier-attributes.component'; import { Dossier } from '@red/domain';
import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker'; import { ConfigService } from '@services/config.service';
import { EditDossierTeamComponent } from './edit-dossier-team/edit-dossier-team.component';
import { PermissionsService } from '@services/permissions.service';
import { DossiersService } from '@services/dossiers/dossiers.service'; import { DossiersService } from '@services/dossiers/dossiers.service';
import { dossiersServiceProvider } from '@services/entity-services/dossiers.service.provider'; import { dossiersServiceProvider } from '@services/entity-services/dossiers.service.provider';
import { PermissionsService } from '@services/permissions.service';
import { Roles } from '@users/roles'; import { Roles } from '@users/roles';
import { ConfigService } from '@services/config.service'; import { EditDossierAttributesComponent } from './attributes/edit-dossier-attributes.component';
import { toSignal } from '@angular/core/rxjs-interop'; import { EditDossierDictionaryComponent } from './dictionary/edit-dossier-dictionary.component';
import { TranslateModule } from '@ngx-translate/core'; import { EditDossierDownloadPackageComponent } from './download-package/edit-dossier-download-package.component';
import { SideNavComponent } from '@common-ui/shared'; import { EditDossierSectionInterface } from './edit-dossier-section.interface';
import { NgForOf, NgIf } from '@angular/common'; import { EditDossierTeamComponent } from './edit-dossier-team/edit-dossier-team.component';
import { MatIcon } from '@angular/material/icon'; import { EditDossierTeamModule } from './edit-dossier-team/edit-dossier-team.module';
import { EditDossierGeneralInfoComponent } from './general-info/edit-dossier-general-info.component';
type Section = 'dossierInfo' | 'downloadPackage' | 'dossierDictionary' | 'members' | 'dossierAttributes'; type Section = 'dossierInfo' | 'downloadPackage' | 'dossierDictionary' | 'members' | 'dossierAttributes';
@ -54,7 +55,7 @@ interface NavItem {
EditDossierGeneralInfoComponent, EditDossierGeneralInfoComponent,
EditDossierDownloadPackageComponent, EditDossierDownloadPackageComponent,
EditDossierDictionaryComponent, EditDossierDictionaryComponent,
EditDossierTeamComponent, EditDossierTeamModule,
EditDossierAttributesComponent, EditDossierAttributesComponent,
IconButtonComponent, IconButtonComponent,
HelpButtonComponent, HelpButtonComponent,
@ -75,11 +76,11 @@ export class EditDossierDialogComponent extends BaseDialogComponent implements A
readonly showHeading: Signal<boolean>; readonly showHeading: Signal<boolean>;
readonly showActionButtons: Signal<boolean>; readonly showActionButtons: Signal<boolean>;
generalInfoComponent = viewChild(EditDossierGeneralInfoComponent); readonly generalInfoComponent = viewChild(EditDossierGeneralInfoComponent);
downloadPackageComponent = viewChild(EditDossierDownloadPackageComponent); readonly downloadPackageComponent = viewChild(EditDossierDownloadPackageComponent);
dictionaryComponent = viewChild(EditDossierDictionaryComponent); readonly dictionaryComponent = viewChild(EditDossierDictionaryComponent);
membersComponent = viewChild(EditDossierTeamComponent); readonly membersComponent = viewChild(EditDossierTeamComponent);
attributesComponent = viewChild(EditDossierAttributesComponent); readonly attributesComponent = viewChild(EditDossierAttributesComponent);
constructor( constructor(
private readonly _dossiersService: DossiersService, private readonly _dossiersService: DossiersService,

View File

@ -1,6 +1,6 @@
import { ChangeDetectionStrategy, Component, inject, Input, OnChanges, SimpleChanges } from '@angular/core'; import { ChangeDetectionStrategy, Component, inject, Input, OnChanges, SimpleChanges } from '@angular/core';
import { FormControl, FormGroup, ReactiveFormsModule, Validators } from '@angular/forms'; import { FormControl, FormGroup, Validators } from '@angular/forms';
import { getConfig, InputWithActionComponent, RoundCheckboxComponent, StopPropagationDirective } from '@iqser/common-ui'; import { getConfig } from '@iqser/common-ui';
import { Debounce } from '@iqser/common-ui/lib/utils'; import { Debounce } from '@iqser/common-ui/lib/utils';
import { Dossier, IDossierRequest } from '@red/domain'; import { Dossier, IDossierRequest } from '@red/domain';
import { DossiersService } from '@services/dossiers/dossiers.service'; import { DossiersService } from '@services/dossiers/dossiers.service';
@ -11,51 +11,25 @@ import { compareLists } from '@utils/functions';
import { firstValueFrom } from 'rxjs'; import { firstValueFrom } from 'rxjs';
import { map } from 'rxjs/operators'; import { map } from 'rxjs/operators';
import { EditDossierSaveResult, EditDossierSectionInterface } from '../edit-dossier-section.interface'; 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({ @Component({
selector: 'redaction-edit-dossier-team', selector: 'redaction-edit-dossier-team',
templateUrl: './edit-dossier-team.component.html', templateUrl: './edit-dossier-team.component.html',
styleUrls: ['./edit-dossier-team.component.scss'], styleUrls: ['./edit-dossier-team.component.scss'],
changeDetection: ChangeDetectionStrategy.OnPush, 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 { 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(); form = this.#getForm();
readonly #formValue$ = this.form.valueChanges;
searchQuery = ''; searchQuery = '';
@Input() dossier: Dossier; @Input() dossier: Dossier;
membersSelectOptions: string[] = []; membersSelectOptions: string[] = [];
readonly isDocumine = getConfig().IS_DOCUMINE; readonly isDocumine = getConfig().IS_DOCUMINE;
readonly #userService = inject(UserService);
readonly ownersSelectOptions = this.#userService.all.filter(u => u.isManager).map(m => m.id); 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 selectedReviewers$ = this.#formValue$.pipe(map(v => v.members.filter(m => !v.approvers.includes(m))));
readonly selectedApprovers$ = this.#formValue$.pipe(map(v => v.approvers)); readonly selectedApprovers$ = this.#formValue$.pipe(map(v => v.approvers));

View File

@ -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 {}

View File

@ -1,12 +1,16 @@
import { NgForOf, NgIf } from '@angular/common';
import { ChangeDetectionStrategy, Component, Input, OnInit } from '@angular/core'; import { ChangeDetectionStrategy, Component, Input, OnInit } from '@angular/core';
import { ReactiveFormsModule, UntypedFormBuilder, UntypedFormGroup, Validators } from '@angular/forms'; import { ReactiveFormsModule, UntypedFormBuilder, UntypedFormGroup, Validators } from '@angular/forms';
import { Dossier, DOSSIER_TEMPLATE_ID, IDossierRequest, IDossierTemplate } from '@red/domain'; import { MatCheckbox } from '@angular/material/checkbox';
import { EditDossierSaveResult, EditDossierSectionInterface } from '../edit-dossier-section.interface'; import { MatDatepickerModule } from '@angular/material/datepicker';
import { DossiersDialogService } from '../../../services/dossiers-dialog.service';
import { PermissionsService } from '@services/permissions.service';
import { Router } from '@angular/router';
import { MatDialogRef } from '@angular/material/dialog'; 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 { import {
ConfirmOptions, ConfirmOptions,
HasScrollbarDirective, HasScrollbarDirective,
@ -17,25 +21,21 @@ import {
TitleColors, TitleColors,
Toaster, Toaster,
} from '@iqser/common-ui'; } 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 { TranslateModule, TranslateService } from '@ngx-translate/core';
import { DossiersService } from '@services/dossiers/dossiers.service'; import { Dossier, DOSSIER_TEMPLATE_ID, IDossierRequest, IDossierTemplate } from '@red/domain';
import { TrashService } from '@services/entity-services/trash.service'; import { DossierTemplatesService } from '@services/dossier-templates/dossier-templates.service';
import { ArchivedDossiersService } from '@services/dossiers/archived-dossiers.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 { 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 { dateWithoutTime } from '@utils/functions';
import { MatFormField, MatSuffix } from '@angular/material/form-field'; import dayjs from 'dayjs';
import { MatOption, MatSelect } from '@angular/material/select'; import { firstValueFrom } from 'rxjs';
import { NgForOf, NgIf } from '@angular/common'; import { DossiersDialogService } from '../../../services/dossiers-dialog.service';
import { MatTooltip } from '@angular/material/tooltip'; import { type EditDossierDialogComponent } from '../edit-dossier-dialog.component';
import { SmallChipComponent } from '@common-ui/shared'; import { EditDossierSaveResult, EditDossierSectionInterface } from '../edit-dossier-section.interface';
import { MatCheckbox } from '@angular/material/checkbox';
import { MatDatepickerModule } from '@angular/material/datepicker';
import { MatIcon } from '@angular/material/icon';
@Component({ @Component({
selector: 'redaction-edit-dossier-general-info', selector: 'redaction-edit-dossier-general-info',

View File

@ -1,10 +1,9 @@
import { Injectable } from '@angular/core'; import { Injectable } from '@angular/core';
import { MatDialog } from '@angular/material/dialog'; 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 { 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({ @Injectable({
providedIn: 'root', providedIn: 'root',
@ -15,10 +14,6 @@ export class DossiersDialogService extends DialogService<DialogType> {
component: ConfirmationDialogComponent, component: ConfirmationDialogComponent,
dialogConfig: { disableClose: false }, dialogConfig: { disableClose: false },
}, },
editDossier: {
component: EditDossierDialogComponent,
dialogConfig: { ...largeDialogConfig, width: '98vw', maxWidth: '98vw' },
},
importRedactions: { importRedactions: {
component: ImportRedactionsDialogComponent, component: ImportRedactionsDialogComponent,
dialogConfig: { disableClose: false }, dialogConfig: { disableClose: false },

View File

@ -1,21 +1,17 @@
import { Component, ElementRef, EventEmitter, inject, Input, OnChanges, Output, ViewChild } from '@angular/core'; import { Component, ElementRef, EventEmitter, inject, Input, OnChanges, Output, ViewChild } from '@angular/core';
import { CircleButtonComponent, CircleButtonTypes, IqserAllowDirective } from '@iqser/common-ui'; import { CircleButtonTypes, largeDialogConfig } from '@iqser/common-ui';
import { DossiersDialogService } from '../../../shared-dossiers/services/dossiers-dialog.service'; import { getCurrentUser } from '@iqser/common-ui/lib/users';
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 { List } from '@iqser/common-ui/lib/utils'; import { List } from '@iqser/common-ui/lib/utils';
import { NgForOf, NgIf } from '@angular/common'; import { User } from '@red/domain';
import { MatIcon } from '@angular/material/icon'; import { Roles } from '@users/roles';
import { TranslateModule } from '@ngx-translate/core'; 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({ @Component({
selector: 'redaction-team-members', selector: 'redaction-team-members',
templateUrl: './team-members.component.html', templateUrl: './team-members.component.html',
styleUrls: ['./team-members.component.scss'], styleUrls: ['./team-members.component.scss'],
standalone: true,
imports: [NgForOf, MatIcon, NgIf, CircleButtonComponent, IqserAllowDirective, TranslateModule, InitialsAvatarComponent],
}) })
export class TeamMembersComponent implements OnChanges { export class TeamMembersComponent implements OnChanges {
readonly circleButtonTypes = CircleButtonTypes; readonly circleButtonTypes = CircleButtonTypes;
@ -65,6 +61,6 @@ export class TeamMembersComponent implements OnChanges {
openEditDossierDialog(): void { openEditDossierDialog(): void {
const data = { dossierId: this.dossierId, section: 'members' }; const data = { dossierId: this.dossierId, section: 'members' };
this._dialogService.openDialog('editDossier', data); this._dialogService.open(EditDossierDialogComponent, data, { ...largeDialogConfig, width: '98vw', maxWidth: '98vw' });
} }
} }

View File

@ -1,6 +1,13 @@
import { NgForOf, NgIf } from '@angular/common';
import { Component, Inject, OnInit } from '@angular/core'; import { Component, Inject, OnInit } from '@angular/core';
import { ReactiveFormsModule, Validators } from '@angular/forms'; 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 { 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 { Router } from '@angular/router';
import { import {
BaseDialogComponent, BaseDialogComponent,
@ -12,27 +19,22 @@ import {
IconButtonTypes, IconButtonTypes,
IqserDenyDirective, IqserDenyDirective,
IqserPermissionsService, IqserPermissionsService,
largeDialogConfig,
SaveOptions, SaveOptions,
} from '@iqser/common-ui'; } from '@iqser/common-ui';
import { TranslateModule } from '@ngx-translate/core';
import { DOSSIER_TEMPLATE_ID, DownloadFileType, IDossierRequest, IDossierTemplate, IReportTemplate } from '@red/domain'; import { DOSSIER_TEMPLATE_ID, DownloadFileType, IDossierRequest, IDossierTemplate, IReportTemplate } from '@red/domain';
import { DossierTemplatesService } from '@services/dossier-templates/dossier-templates.service'; import { DossierTemplatesService } from '@services/dossier-templates/dossier-templates.service';
import { ActiveDossiersService } from '@services/dossiers/active-dossiers.service'; import { ActiveDossiersService } from '@services/dossiers/active-dossiers.service';
import { ReportTemplateService } from '@services/report-template.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 { downloadTypesTranslations } from '@translations/download-types-translations';
import { Roles } from '@users/roles'; import { Roles } from '@users/roles';
import dayjs from 'dayjs'; import dayjs from 'dayjs';
import { firstValueFrom } from 'rxjs'; 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 { 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 { interface DialogData {
readonly dossierTemplateId?: string; readonly dossierTemplateId?: string;
@ -123,10 +125,14 @@ export class AddDossierDialogComponent extends BaseDialogComponent implements On
if (savedDossier) { if (savedDossier) {
await this._router.navigate([savedDossier.routerLink]); await this._router.navigate([savedDossier.routerLink]);
if (options?.nextAction) { if (options?.nextAction) {
this._dialogService.openDialog('editDossier', { this._dialogService.open(
dossierId: savedDossier.id, EditDossierDialogComponent,
section: 'members', {
}); dossierId: savedDossier.id,
section: 'members',
},
{ ...largeDialogConfig, width: '98vw', maxWidth: '98vw' },
);
} }
this._dialogRef.close(savedDossier); this._dialogRef.close(savedDossier);
} }

View File

@ -1,6 +1,6 @@
import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker'; 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 { DialogOption } from '@translations/redact-text-translations';
import { RemoveAnnotationOption } from '../modules/file-preview/utils/dialog-types';
export const removeAnnotationTranslations: { [key in RemoveAnnotationOption]: DialogOption } = { export const removeAnnotationTranslations: { [key in RemoveAnnotationOption]: DialogOption } = {
ONLY_HERE: { ONLY_HERE: {

View File

@ -1,6 +1,6 @@
import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker'; 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 { DialogOption } from '@translations/redact-text-translations';
import { RemoveRedactionOption } from '../modules/file-preview/utils/dialog-types';
export const removeRedactionTranslations: { [key in RemoveRedactionOption]: DialogOption } = { export const removeRedactionTranslations: { [key in RemoveRedactionOption]: DialogOption } = {
ONLY_HERE: { ONLY_HERE: {

View File

@ -1,7 +1,7 @@
import { Injectable } from '@angular/core'; import { Injectable } from '@angular/core';
import { IqserUserPreferenceService, ListingMode } from '@iqser/common-ui'; 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 { SystemDefaultOption, SystemDefaultType } from '../modules/account/utils/dialog-defaults';
import { RedactOrHintOption, RemoveRedactionOption } from '../modules/file-preview/utils/dialog-types';
export const PreferencesKeys = { export const PreferencesKeys = {
dossierRecent: 'Dossier-Recent', dossierRecent: 'Dossier-Recent',

View File

@ -1,5 +1,5 @@
import { handleCheckedValue, INestedFilter } from '@iqser/common-ui/lib/filtering'; 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[]) { export function handleFilterDelta(oldFilters: INestedFilter[], newFilters: INestedFilter[], allFilters: INestedFilter[]) {
const newFiltersDelta = {}; const newFiltersDelta = {};

@ -1 +1 @@
Subproject commit 04ae68891c9298b92327868006d1e7c79529c7e6 Subproject commit d595a22db164ec8669da572fdd49a28b464eb61a

View File

@ -1,6 +1,5 @@
import { IListable } from '@iqser/common-ui'; import { IListable } from '@iqser/common-ui';
import { IDossierAttributeConfig } from './dossier-attribute-config'; import { DossierAttributeConfigType, IDossierAttributeConfig } from './dossier-attribute-config';
import { DossierAttributeConfigType } from './types';
export class DossierAttributeConfig implements IDossierAttributeConfig, IListable { export class DossierAttributeConfig implements IDossierAttributeConfig, IListable {
readonly id: string; readonly id: string;

View File

@ -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 { export interface IDossierAttributeConfig {
readonly id: string; readonly id: string;

View File

@ -1,4 +1,3 @@
export * from './types';
export * from './dossier-attribute-config'; export * from './dossier-attribute-config';
export * from './dossier-attribute-config.model'; export * from './dossier-attribute-config.model';
export * from './dossier-attribute'; export * from './dossier-attribute';

View File

@ -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 };

View File

@ -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 { IDossierStats } from './dossier-stats';
import { FileCountPerProcessingStatus, FileCountPerWorkflowStatus } from './types'; import { FileCountPerProcessingStatus, FileCountPerWorkflowStatus } from './types';

View File

@ -1,4 +1,4 @@
import { ProcessingFileStatus, WorkflowFileStatus } from '../files'; import { ProcessingFileStatus, WorkflowFileStatus } from '../files/types';
export type FileCountPerWorkflowStatus = { [key in WorkflowFileStatus]?: number }; export type FileCountPerWorkflowStatus = { [key in WorkflowFileStatus]?: number };
export type FileCountPerProcessingStatus = { [key in ProcessingFileStatus]?: number }; export type FileCountPerProcessingStatus = { [key in ProcessingFileStatus]?: number };

View File

@ -1,6 +1,6 @@
import { IListable } from '@iqser/common-ui'; import { IListable } from '@iqser/common-ui';
import { List } from '@iqser/common-ui/lib/utils'; 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 { ARCHIVE_ROUTE, DOSSIERS_ROUTE } from './constants';
import { IDossier } from './dossier'; import { IDossier } from './dossier';

View File

@ -1,5 +1,5 @@
import { DownloadFileType } from '../shared';
import { List } from '@iqser/common-ui/lib/utils'; import { List } from '@iqser/common-ui/lib/utils';
import { DownloadFileType } from '../shared/types';
export interface IDossier { export interface IDossier {
readonly approverIds: List; readonly approverIds: List;

View File

@ -1,8 +1,8 @@
import { Entity } from '@iqser/common-ui'; import { Entity } from '@iqser/common-ui';
import { ProcessingType, ProcessingTypes } from '../dossier-stats'; import { ProcessingType, ProcessingTypes } from '../dossier-stats/dossier-stats.model';
import { ARCHIVE_ROUTE, DOSSIERS_ROUTE } from '../dossiers'; import { ARCHIVE_ROUTE, DOSSIERS_ROUTE } from '../dossiers/constants';
import { FileAttributes } from '../file-attributes'; import { FileAttributes } from '../file-attributes/file-attributes';
import { StatusSorter } from '../shared'; import { StatusSorter } from '../shared/sorters/status-sorter';
import { IFile } from './file'; import { IFile } from './file';
import { import {
isFullProcessingStatuses, isFullProcessingStatuses,

View File

@ -1,5 +1,5 @@
import { Entity } from '@iqser/common-ui'; import { Entity } from '@iqser/common-ui';
import { IViewedPage } from '.'; import { IViewedPage } from './viewed-page';
export class ViewedPage extends Entity<IViewedPage, number> { export class ViewedPage extends Entity<IViewedPage, number> {
readonly fileId: string; readonly fileId: string;

View File

@ -1,3 +1,3 @@
import { WorkflowFileStatus } from '../files'; import { WorkflowFileStatus } from '../files/types';
export type Color = WorkflowFileStatus | string; export type Color = WorkflowFileStatus | string;

View File

@ -1,7 +1,7 @@
import { Observable } from 'rxjs';
import { CircleButtonType, ITrackable } from '@iqser/common-ui'; import { CircleButtonType, ITrackable } from '@iqser/common-ui';
import { type File } from '../files'; import { Observable } from 'rxjs';
import { type Dossier } from '../dossiers'; import { Dossier } from '../dossiers/dossier.model';
import { File } from '../files/file.model';
export const ActionTypes = { export const ActionTypes = {
circleBtn: 'circleBtn', circleBtn: 'circleBtn',

View File

@ -1,4 +1,4 @@
import { WorkflowFileStatus } from '../../files'; import { WorkflowFileStatus } from '../../files/types';
type StatusSorterItem = { key: WorkflowFileStatus } | WorkflowFileStatus | string; type StatusSorterItem = { key: WorkflowFileStatus } | WorkflowFileStatus | string;
type Sorter = Record<WorkflowFileStatus, number> & { type Sorter = Record<WorkflowFileStatus, number> & {