diff --git a/apps/red-ui/src/app/models/audit.model.ts b/apps/red-ui/src/app/models/audit.model.ts index 3fab0969d..d653e3099 100644 --- a/apps/red-ui/src/app/models/audit.model.ts +++ b/apps/red-ui/src/app/models/audit.model.ts @@ -2,12 +2,12 @@ import { IAudit } from '@redaction/red-ui-http'; import { IListable } from '@iqser/common-ui'; export class Audit implements IAudit, IListable { + readonly recordId?: number; readonly category?: string; readonly details?: unknown; readonly message?: string; readonly objectId?: string; readonly recordDate?: string; - readonly recordId?: string; readonly userId?: string; constructor(audit: IAudit) { diff --git a/apps/red-ui/src/app/modules/admin/screens/default-colors/default-colors-screen.component.ts b/apps/red-ui/src/app/modules/admin/screens/default-colors/default-colors-screen.component.ts index 82f2a8533..384cda27c 100644 --- a/apps/red-ui/src/app/modules/admin/screens/default-colors/default-colors-screen.component.ts +++ b/apps/red-ui/src/app/modules/admin/screens/default-colors/default-colors-screen.component.ts @@ -1,14 +1,21 @@ -import {ChangeDetectionStrategy, Component, forwardRef, Injector, OnInit, TemplateRef, ViewChild} from '@angular/core'; -import {AppStateService} from '@state/app-state.service'; -import {Colors} from '@redaction/red-ui-http'; -import {ActivatedRoute} from '@angular/router'; -import {AdminDialogService} from '../../services/admin-dialog.service'; -import {CircleButtonTypes, DefaultListingServices, IListable, ListingComponent, LoadingService, TableColumnConfig} from '@iqser/common-ui'; -import {DefaultColorType} from '@models/default-color-key.model'; -import {defaultColorsTranslations} from '../../translations/default-colors-translations'; -import {marker as _} from '@biesbjerg/ngx-translate-extract-marker'; -import {UserService} from '@services/user.service'; -import {DictionaryService} from '@shared/services/dictionary.service'; +import { ChangeDetectionStrategy, Component, forwardRef, Injector, OnInit, TemplateRef, ViewChild } from '@angular/core'; +import { AppStateService } from '@state/app-state.service'; +import { Colors } from '@redaction/red-ui-http'; +import { ActivatedRoute } from '@angular/router'; +import { AdminDialogService } from '../../services/admin-dialog.service'; +import { + CircleButtonTypes, + DefaultListingServices, + IListable, + ListingComponent, + LoadingService, + TableColumnConfig +} from '@iqser/common-ui'; +import { DefaultColorType } from '@models/default-color-key.model'; +import { defaultColorsTranslations } from '../../translations/default-colors-translations'; +import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker'; +import { UserService } from '@services/user.service'; +import { DictionaryService } from '@shared/services/dictionary.service'; interface ListItem extends IListable { readonly key: string; @@ -19,11 +26,11 @@ interface ListItem extends IListable { templateUrl: './default-colors-screen.component.html', styleUrls: ['./default-colors-screen.component.scss'], changeDetection: ChangeDetectionStrategy.OnPush, - providers: [...DefaultListingServices, {provide: ListingComponent, useExisting: forwardRef(() => DefaultColorsScreenComponent)}] + providers: [...DefaultListingServices, { provide: ListingComponent, useExisting: forwardRef(() => DefaultColorsScreenComponent) }] }) export class DefaultColorsScreenComponent extends ListingComponent implements OnInit { - @ViewChild('nameTemplate', {static: true}) nameTemplate: TemplateRef; - @ViewChild('colorTemplate', {static: true}) colorTemplate: TemplateRef; + @ViewChild('nameTemplate', { static: true }) nameTemplate: TemplateRef; + @ViewChild('colorTemplate', { static: true }) colorTemplate: TemplateRef; readonly circleButtonTypes = CircleButtonTypes; readonly currentUser = this._userService.currentUser; readonly translations = defaultColorsTranslations; @@ -89,6 +96,7 @@ export class DefaultColorsScreenComponent extends ListingComponent imp .map(key => ({ id: key, key, + searchKey: key, value: data[key] })) .filter(entry => entry.id !== 'dossierTemplateId'); diff --git a/apps/red-ui/src/app/modules/admin/screens/trash/trash-screen.component.ts b/apps/red-ui/src/app/modules/admin/screens/trash/trash-screen.component.ts index 160771cf1..bed1882f5 100644 --- a/apps/red-ui/src/app/modules/admin/screens/trash/trash-screen.component.ts +++ b/apps/red-ui/src/app/modules/admin/screens/trash/trash-screen.component.ts @@ -23,7 +23,6 @@ import { RouterHistoryService } from '@services/router-history.service'; interface DossierListItem extends IDossier, IListable { readonly canRestore: boolean; readonly restoreDate: string; - readonly [key: string]: any; } @Component({ @@ -142,7 +141,7 @@ export class TrashScreenComponent extends ListingComponent impl private _toListItem(dossier: IDossier): DossierListItem { const restoreDate = this._getRestoreDate(dossier.softDeletedTime); return { - id: dossier.id, + id: dossier.dossierId, ...dossier, searchKey: dossier.dossierName, restoreDate, diff --git a/apps/red-ui/src/app/modules/dossier/screens/dossier-overview-screen/dossier-overview-screen.component.ts b/apps/red-ui/src/app/modules/dossier/screens/dossier-overview-screen/dossier-overview-screen.component.ts index c0baae2e0..f54adcb99 100644 --- a/apps/red-ui/src/app/modules/dossier/screens/dossier-overview-screen/dossier-overview-screen.component.ts +++ b/apps/red-ui/src/app/modules/dossier/screens/dossier-overview-screen/dossier-overview-screen.component.ts @@ -10,26 +10,26 @@ import { TemplateRef, ViewChild } from '@angular/core'; -import {FileStatus, FileStatuses, IFileAttributeConfig} from '@redaction/red-ui-http'; -import {AppStateService} from '@state/app-state.service'; -import {FileDropOverlayService} from '@upload-download/services/file-drop-overlay.service'; -import {FileUploadModel} from '@upload-download/model/file-upload.model'; -import {FileUploadService} from '@upload-download/services/file-upload.service'; -import {StatusOverlayService} from '@upload-download/services/status-overlay.service'; -import {TranslateService} from '@ngx-translate/core'; +import { FileStatus, FileStatuses, IFileAttributeConfig } from '@redaction/red-ui-http'; +import { AppStateService } from '@state/app-state.service'; +import { FileDropOverlayService } from '@upload-download/services/file-drop-overlay.service'; +import { FileUploadModel } from '@upload-download/model/file-upload.model'; +import { FileUploadService } from '@upload-download/services/file-upload.service'; +import { StatusOverlayService } from '@upload-download/services/status-overlay.service'; +import { TranslateService } from '@ngx-translate/core'; import * as moment from 'moment'; -import {DossierDetailsComponent} from '../../components/dossier-details/dossier-details.component'; -import {File} from '@models/file/file'; -import {UserService} from '@services/user.service'; -import {timer} from 'rxjs'; -import {tap} from 'rxjs/operators'; -import {RedactionFilterSorter} from '@utils/sorters/redaction-filter-sorter'; -import {StatusSorter} from '@utils/sorters/status-sorter'; -import {convertFiles, Files, handleFileDrop} from '@utils/file-drop-utils'; -import {DossiersDialogService} from '../../services/dossiers-dialog.service'; -import {OnAttach, OnDetach} from '@utils/custom-route-reuse.strategy'; -import {ConfigService} from '@services/config.service'; -import {ActionConfig} from '@shared/components/page-header/models/action-config.model'; +import { DossierDetailsComponent } from '../../components/dossier-details/dossier-details.component'; +import { File } from '@models/file/file'; +import { UserService } from '@services/user.service'; +import { timer } from 'rxjs'; +import { tap } from 'rxjs/operators'; +import { RedactionFilterSorter } from '@utils/sorters/redaction-filter-sorter'; +import { StatusSorter } from '@utils/sorters/status-sorter'; +import { convertFiles, Files, handleFileDrop } from '@utils/file-drop-utils'; +import { DossiersDialogService } from '../../services/dossiers-dialog.service'; +import { OnAttach, OnDetach } from '@utils/custom-route-reuse.strategy'; +import { ConfigService } from '@services/config.service'; +import { ActionConfig } from '@shared/components/page-header/models/action-config.model'; import { CircleButtonTypes, DefaultListingServices, @@ -44,22 +44,22 @@ import { Toaster, WorkflowConfig } from '@iqser/common-ui'; -import {DossierAttributesService} from '@shared/services/controller-wrappers/dossier-attributes.service'; -import {DossierAttributeWithValue} from '@models/dossier-attributes.model'; -import {workloadTranslations} from '../../translations/workload-translations'; -import {fileStatusTranslations} from '../../translations/file-status-translations'; -import {marker as _} from '@biesbjerg/ngx-translate-extract-marker'; -import {annotationFilterChecker} from '@utils/filter-utils'; -import {PermissionsService} from '@services/permissions.service'; -import {RouterHistoryService} from '@services/router-history.service'; -import {Dossier} from '@state/model/dossier'; -import {Router} from '@angular/router'; -import {FileActionService} from '../../services/file-action.service'; +import { DossierAttributesService } from '@shared/services/controller-wrappers/dossier-attributes.service'; +import { DossierAttributeWithValue } from '@models/dossier-attributes.model'; +import { workloadTranslations } from '../../translations/workload-translations'; +import { fileStatusTranslations } from '../../translations/file-status-translations'; +import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker'; +import { annotationFilterChecker } from '@utils/filter-utils'; +import { PermissionsService } from '@services/permissions.service'; +import { RouterHistoryService } from '@services/router-history.service'; +import { Dossier } from '@state/model/dossier'; +import { Router } from '@angular/router'; +import { FileActionService } from '../../services/file-action.service'; @Component({ templateUrl: './dossier-overview-screen.component.html', styleUrls: ['./dossier-overview-screen.component.scss'], - providers: [...DefaultListingServices, {provide: ListingComponent, useExisting: forwardRef(() => DossierOverviewScreenComponent)}] + providers: [...DefaultListingServices, { provide: ListingComponent, useExisting: forwardRef(() => DossierOverviewScreenComponent) }] }) export class DossierOverviewScreenComponent extends ListingComponent implements OnInit, OnDestroy, OnDetach, OnAttach { readonly listingModes = ListingModes; @@ -79,18 +79,18 @@ export class DossierOverviewScreenComponent extends ListingComponent imple collapsedDetails = false; dossierAttributes: DossierAttributeWithValue[] = []; fileAttributeConfigs: IFileAttributeConfig[]; - @ViewChild('filenameTemplate', {static: true}) filenameTemplate: TemplateRef; - @ViewChild('addedOnTemplate', {static: true}) addedOnTemplate: TemplateRef; - @ViewChild('attributeTemplate', {static: true}) attributeTemplate: TemplateRef; - @ViewChild('needsWorkTemplate', {static: true}) needsWorkTemplate: TemplateRef; - @ViewChild('reviewerTemplate', {static: true}) reviewerTemplate: TemplateRef; - @ViewChild('pagesTemplate', {static: true}) pagesTemplate: TemplateRef; - @ViewChild('statusTemplate', {static: true}) statusTemplate: TemplateRef; + @ViewChild('filenameTemplate', { static: true }) filenameTemplate: TemplateRef; + @ViewChild('addedOnTemplate', { static: true }) addedOnTemplate: TemplateRef; + @ViewChild('attributeTemplate', { static: true }) attributeTemplate: TemplateRef; + @ViewChild('needsWorkTemplate', { static: true }) needsWorkTemplate: TemplateRef; + @ViewChild('reviewerTemplate', { static: true }) reviewerTemplate: TemplateRef; + @ViewChild('pagesTemplate', { static: true }) pagesTemplate: TemplateRef; + @ViewChild('statusTemplate', { static: true }) statusTemplate: TemplateRef; readonly workflowConfig: WorkflowConfig; - @ViewChild(DossierDetailsComponent, {static: false}) + @ViewChild(DossierDetailsComponent, { static: false }) private readonly _dossierDetailsComponent: DossierDetailsComponent; private _lastScrolledIndex: number; - @ViewChild('needsWorkFilterTemplate', {read: TemplateRef, static: true}) + @ViewChild('needsWorkFilterTemplate', { read: TemplateRef, static: true }) private readonly _needsWorkFilterTemplate: TemplateRef; @ViewChild('fileInput') private readonly _fileInput: ElementRef; @ViewChild(TableComponent) private readonly _tableComponent: TableComponent; @@ -127,7 +127,7 @@ export class DossierOverviewScreenComponent extends ListingComponent imple label: fileStatusTranslations[FileStatuses.UNASSIGNED], key: FileStatuses.UNASSIGNED, enterFn: this.unassignFn, - enterPredicate: (entity: File) => false, + enterPredicate: () => false, color: '#D3D5DA' }, { @@ -315,12 +315,12 @@ export class DossierOverviewScreenComponent extends ListingComponent imple } openAssignDossierMembersDialog(): void { - const data = {dossier: this.currentDossier, section: 'members'}; + const data = { dossier: this.currentDossier, section: 'members' }; this._dialogService.openDialog('editDossier', null, data, async () => await this.reloadDossiers()); } openDossierDictionaryDialog() { - const data = {dossier: this.currentDossier, section: 'dossierDictionary'}; + const data = { dossier: this.currentDossier, section: 'dossierDictionary' }; this._dialogService.openDialog('editDossier', null, data, async () => { await this.reloadDossiers(); }); @@ -337,7 +337,7 @@ export class DossierOverviewScreenComponent extends ListingComponent imple const dynamicColumns: TableColumnConfig[] = []; for (const config of this.displayedInFileListAttributes) { if (config.displayedInFileList) { - dynamicColumns.push({label: config.label, notTranslatable: true, template: this.attributeTemplate, extra: config}); + dynamicColumns.push({ label: config.label, notTranslatable: true, template: this.attributeTemplate, extra: config }); } } this.tableColumnConfigs = [ diff --git a/apps/red-ui/src/app/modules/dossier/screens/file-preview-screen/file-preview-screen.component.ts b/apps/red-ui/src/app/modules/dossier/screens/file-preview-screen/file-preview-screen.component.ts index ff59c35c1..cb769ebad 100644 --- a/apps/red-ui/src/app/modules/dossier/screens/file-preview-screen/file-preview-screen.component.ts +++ b/apps/red-ui/src/app/modules/dossier/screens/file-preview-screen/file-preview-screen.component.ts @@ -496,7 +496,7 @@ export class FilePreviewScreenComponent extends AutoUnsubscribe implements OnIni const reviewerName = this.userService.getNameForId(reviewerId); const { dossierId, fileId, filename } = this.fileData.file; - await this._statusControllerService.setFileReviewer({ value: reviewerId }, dossierId, fileId).toPromise(); + await this._filesService.setReviewerFor([fileId], dossierId, reviewerId).toPromise(); this._toaster.info(_('assignment.reviewer'), { params: { reviewerName, filename } }); await this.appStateService.reloadActiveFile(); diff --git a/apps/red-ui/src/app/modules/shared/services/controller-wrappers/dossier-attributes.service.ts b/apps/red-ui/src/app/modules/shared/services/controller-wrappers/dossier-attributes.service.ts index 4c671f4ef..b6fa9b25e 100644 --- a/apps/red-ui/src/app/modules/shared/services/controller-wrappers/dossier-attributes.service.ts +++ b/apps/red-ui/src/app/modules/shared/services/controller-wrappers/dossier-attributes.service.ts @@ -1,16 +1,10 @@ -import {Injectable} from '@angular/core'; -import { - DossierAttribute, - DossierAttributeConfig, - DossierAttributes, - DossierAttributesControllerService, - IDossierAttributeConfig -} from '@redaction/red-ui-http'; -import {Dossier} from '@state/model/dossier'; -import {DossierAttributeWithValue} from '@models/dossier-attributes.model'; -import {AppStateService} from '@state/app-state.service'; -import {Observable} from 'rxjs'; -import {DossierAttributeConfig} from '@state/model/dossier-attribute-config'; +import { Injectable } from '@angular/core'; +import { DossierAttribute, DossierAttributes, DossierAttributesControllerService, IDossierAttributeConfig } from '@redaction/red-ui-http'; +import { Dossier } from '@state/model/dossier'; +import { DossierAttributeWithValue } from '@models/dossier-attributes.model'; +import { AppStateService } from '@state/app-state.service'; +import { Observable } from 'rxjs'; +import { DossierAttributeConfig } from '@state/model/dossier-attribute-config'; @Injectable({ providedIn: 'root' @@ -19,8 +13,7 @@ export class DossierAttributesService { constructor( private readonly _dossierAttributesControllerService: DossierAttributesControllerService, private readonly _appStateService: AppStateService - ) { - } + ) {} async getValues(dossier: Dossier): Promise { const attributes = await this._dossierAttributesControllerService.getDossierAttributes(dossier.id).toPromise(); @@ -35,7 +28,7 @@ export class DossierAttributesService { } setValues(dossier: Dossier, dossierAttributeList: DossierAttribute[]): Promise { - return this._dossierAttributesControllerService.setDossierAttributes({dossierAttributeList}, dossier.id).toPromise(); + return this._dossierAttributesControllerService.setDossierAttributes({ dossierAttributeList }, dossier.id).toPromise(); } deleteConfigs(ids: string[], dossierTemplateId = this._appStateService.activeDossierTemplateId): Promise { diff --git a/apps/red-ui/src/app/state/app-state.service.ts b/apps/red-ui/src/app/state/app-state.service.ts index c1f087951..d02eae4e9 100644 --- a/apps/red-ui/src/app/state/app-state.service.ts +++ b/apps/red-ui/src/app/state/app-state.service.ts @@ -1,4 +1,4 @@ -import {Injectable} from '@angular/core'; +import { Injectable } from '@angular/core'; import { Colors, DossierTemplateControllerService, @@ -8,22 +8,22 @@ import { IFile, ReanalysisControllerService } from '@redaction/red-ui-http'; -import {Toaster} from '@iqser/common-ui'; -import {TranslateService} from '@ngx-translate/core'; -import {Event, NavigationEnd, ResolveStart, Router} from '@angular/router'; -import {UserService} from '@services/user.service'; -import {forkJoin, Observable, of, Subject} from 'rxjs'; -import {catchError, map, tap} from 'rxjs/operators'; -import {FALLBACK_COLOR, hexToRgb} from '@utils/functions'; -import {File} from '@models/file/file'; -import {Dossier} from './model/dossier'; -import {TypeValue} from '@models/file/type-value'; -import {DossierTemplate} from '@models/file/dossier-template'; -import {DossiersService} from '../modules/dossier/services/dossiers.service'; -import {marker as _} from '@biesbjerg/ngx-translate-extract-marker'; -import {UserPreferenceService} from '@services/user-preference.service'; -import {FilesService} from '../modules/dossier/services/files.service'; -import {DictionaryService} from '@shared/services/dictionary.service'; +import { Toaster } from '@iqser/common-ui'; +import { TranslateService } from '@ngx-translate/core'; +import { Event, NavigationEnd, ResolveStart, Router } from '@angular/router'; +import { UserService } from '@services/user.service'; +import { forkJoin, Observable, of, Subject } from 'rxjs'; +import { catchError, map, tap } from 'rxjs/operators'; +import { FALLBACK_COLOR, hexToRgb } from '@utils/functions'; +import { File } from '@models/file/file'; +import { Dossier } from './model/dossier'; +import { TypeValue } from '@models/file/type-value'; +import { DossierTemplate } from '@models/file/dossier-template'; +import { DossiersService } from '../modules/dossier/services/dossiers.service'; +import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker'; +import { UserPreferenceService } from '@services/user-preference.service'; +import { FilesService } from '../modules/dossier/services/files.service'; +import { DictionaryService } from '@shared/services/dictionary.service'; export interface AppState { dossiers: Dossier[]; @@ -92,7 +92,7 @@ export class AppStateService { } get aggregatedFiles(): File[] { - return this.allDossiers.reduce((acc, {files}) => [...acc, ...files], []); + return this.allDossiers.reduce((acc, { files }) => [...acc, ...files], []); } get activeDossierTemplateId(): string { @@ -263,7 +263,7 @@ export class AppStateService { return this._processFiles(dossier, files, emitEvents); } - async reanalyzeDossier({id}: Dossier = this.activeDossier) { + async reanalyzeDossier({ id }: Dossier = this.activeDossier) { await this._reanalysisControllerService.reanalyzeDossier(id, true).toPromise(); } @@ -340,7 +340,7 @@ export class AppStateService { const index = this.allDossiers.findIndex(p => p.id === dossier.id); this._appState.dossiers.splice(index, 1); }, - () => this._toaster.error(_('dossier-listing.delete.delete-failed'), {params: dossier}) + () => this._toaster.error(_('dossier-listing.delete.delete-failed'), { params: dossier }) ); } @@ -440,7 +440,7 @@ export class AppStateService { } loadColors(dossierTemplateId: string) { - return this._dictionaryControllerService.getColors(dossierTemplateId).pipe( + return this._dictionaryService.getColors(dossierTemplateId).pipe( catchError(() => of({ analysisColor: FALLBACK_COLOR, diff --git a/libs/red-ui-http/src/lib/model/file.ts b/libs/red-ui-http/src/lib/model/file.ts index 520cbfc8a..1d5212519 100644 --- a/libs/red-ui-http/src/lib/model/file.ts +++ b/libs/red-ui-http/src/lib/model/file.ts @@ -168,6 +168,6 @@ export const FileStatuses = { UNDER_APPROVAL: 'UNDER_APPROVAL', UNDER_REVIEW: 'UNDER_REVIEW', UNPROCESSED: 'UNPROCESSED' -}; +} as const; export type FileStatus = keyof typeof FileStatuses;