From 02b71ed2e2963e3254a4f236ba2ba13a46bebe66 Mon Sep 17 00:00:00 2001 From: Timo Bejan Date: Tue, 24 Aug 2021 13:25:40 +0300 Subject: [PATCH] listable --- .../src/app/models/file/dossier-template-model.wrapper.ts | 7 ++++++- apps/red-ui/src/app/models/file/file-status.wrapper.ts | 7 ++++++- .../modules/admin/screens/trash/trash-screen.component.ts | 7 ++++--- .../screens/user-listing/user-listing-screen.component.ts | 2 +- .../edit-dossier-deleted-documents.component.ts | 7 ++++--- .../screens/search-screen/search-screen.component.ts | 5 +++-- .../upload-download/model/download-status.wrapper.ts | 7 ++++++- apps/red-ui/src/app/services/user.service.ts | 3 ++- apps/red-ui/src/app/state/model/dossier.wrapper.ts | 7 ++++++- libs/red-ui-http/src/lib/model/dossierAttributeConfig.ts | 2 +- libs/red-ui-http/src/lib/model/fileAttributeConfig.ts | 2 +- 11 files changed, 40 insertions(+), 16 deletions(-) diff --git a/apps/red-ui/src/app/models/file/dossier-template-model.wrapper.ts b/apps/red-ui/src/app/models/file/dossier-template-model.wrapper.ts index d1889902f..4feac23f7 100644 --- a/apps/red-ui/src/app/models/file/dossier-template-model.wrapper.ts +++ b/apps/red-ui/src/app/models/file/dossier-template-model.wrapper.ts @@ -1,11 +1,16 @@ import { DossierTemplateModel } from '@redaction/red-ui-http'; +import { Listable } from '@iqser/common-ui'; -export class DossierTemplateModelWrapper { +export class DossierTemplateModelWrapper implements Listable { dictionariesCount = 0; totalDictionaryEntries = 0; constructor(public dossierTemplateModel: DossierTemplateModel) {} + get id() { + return this.dossierTemplateModel.dossierTemplateId; + } + get createdBy() { return this.dossierTemplateModel.createdBy; } diff --git a/apps/red-ui/src/app/models/file/file-status.wrapper.ts b/apps/red-ui/src/app/models/file/file-status.wrapper.ts index 7fa0c93e6..aeb911d41 100644 --- a/apps/red-ui/src/app/models/file/file-status.wrapper.ts +++ b/apps/red-ui/src/app/models/file/file-status.wrapper.ts @@ -1,3 +1,4 @@ +import { Listable } from '@iqser/common-ui'; import { FileAttributesConfig, FileStatus } from '@redaction/red-ui-http'; import { StatusSorter } from '@utils/sorters/status-sorter'; @@ -9,7 +10,7 @@ const processingStatuses = [ FileStatus.StatusEnum.PROCESSING ] as const; -export class FileStatusWrapper implements FileStatus { +export class FileStatusWrapper implements FileStatus, Listable { readonly added = this.fileStatus.added; readonly allManualRedactionsApplied = this.fileStatus.allManualRedactionsApplied; readonly analysisDuration = this.fileStatus.analysisDuration; @@ -82,6 +83,10 @@ export class FileStatusWrapper implements FileStatus { readonly isWorkable = !this.isProcessing && this.canBeOpened; readonly canBeOCRed = !this.excluded && !this.lastOCRTime && ['UNASSIGNED', 'UNDER_REVIEW', 'UNDER_APPROVAL'].includes(this.status); + get id() { + return this.fileId; + } + private get _pages() { if (this.fileStatus.status === 'ERROR') { return -1; 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 9b5a836fa..782ba4c93 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 @@ -3,7 +3,7 @@ import { Dossier } from '@redaction/red-ui-http'; import { LoadingService } from '@services/loading.service'; import { AppConfigKey, AppConfigService } from '@app-config/app-config.service'; import * as moment from 'moment'; -import { CircleButtonTypes, DefaultListingServices, ListingComponent, TableColumnConfig } from '@iqser/common-ui'; +import { CircleButtonTypes, DefaultListingServices, Listable, ListingComponent, TableColumnConfig } from '@iqser/common-ui'; import { DossiersService } from '../../../dossier/services/dossiers.service'; import { AdminDialogService } from '../../services/admin-dialog.service'; import { ConfirmationDialogInput, TitleColors } from '@shared/dialogs/confirmation-dialog/confirmation-dialog.component'; @@ -12,7 +12,7 @@ import { Observable } from 'rxjs'; import { distinctUntilChanged, map } from 'rxjs/operators'; import { getLeftDateTime } from '@utils/functions'; -interface DossierListItem extends Dossier { +interface DossierListItem extends Dossier, Listable { readonly canRestore: boolean; readonly restoreDate: string; } @@ -60,7 +60,7 @@ export class TrashScreenComponent extends ListingComponent impl } private get _canRestoreSelected$(): Observable { - return this.entitiesService.selected$.pipe( + return this.entitiesService.selectedEntities$.pipe( map(entities => entities.length && !entities.find(dossier => !dossier.canRestore)), distinctUntilChanged() ); @@ -116,6 +116,7 @@ export class TrashScreenComponent extends ListingComponent impl private _toListItem(dossier: Dossier): DossierListItem { const restoreDate = this._getRestoreDate(dossier.softDeletedTime); return { + id: dossier.dossierId, ...dossier, restoreDate, canRestore: this._canRestoreDossier(restoreDate) diff --git a/apps/red-ui/src/app/modules/admin/screens/user-listing/user-listing-screen.component.ts b/apps/red-ui/src/app/modules/admin/screens/user-listing/user-listing-screen.component.ts index 783f2c31c..917b2e67d 100644 --- a/apps/red-ui/src/app/modules/admin/screens/user-listing/user-listing-screen.component.ts +++ b/apps/red-ui/src/app/modules/admin/screens/user-listing/user-listing-screen.component.ts @@ -50,7 +50,7 @@ export class UserListingScreenComponent extends ListingComponent im } private get _canDeleteSelected$(): Observable { - const entities$ = this.entitiesService.selected$; + const entities$ = this.entitiesService.selectedEntities$; return entities$.pipe(map(all => !all.find(u => u.id === this.currentUser.id))); } diff --git a/apps/red-ui/src/app/modules/dossier/dialogs/edit-dossier-dialog/deleted-documents/edit-dossier-deleted-documents.component.ts b/apps/red-ui/src/app/modules/dossier/dialogs/edit-dossier-dialog/deleted-documents/edit-dossier-deleted-documents.component.ts index 8794c15a5..1eb051288 100644 --- a/apps/red-ui/src/app/modules/dossier/dialogs/edit-dossier-dialog/deleted-documents/edit-dossier-deleted-documents.component.ts +++ b/apps/red-ui/src/app/modules/dossier/dialogs/edit-dossier-dialog/deleted-documents/edit-dossier-deleted-documents.component.ts @@ -1,7 +1,7 @@ import { Component, EventEmitter, Injector, Input, OnInit, Output } from '@angular/core'; import { EditDossierSectionInterface } from '../edit-dossier-section.interface'; import { DossierWrapper } from '@state/model/dossier.wrapper'; -import { CircleButtonTypes, DefaultListingServices, ListingComponent, TableColumnConfig } from '@iqser/common-ui'; +import { CircleButtonTypes, DefaultListingServices, Listable, ListingComponent, TableColumnConfig } from '@iqser/common-ui'; import { FileManagementControllerService, FileStatus, StatusControllerService } from '@redaction/red-ui-http'; import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker'; import { LoadingService } from '@services/loading.service'; @@ -14,7 +14,7 @@ import { ConfirmationDialogInput, TitleColors } from '@shared/dialogs/confirmati import { DossiersDialogService } from '../../../services/dossiers-dialog.service'; import { AppStateService } from '@state/app-state.service'; -interface FileListItem extends FileStatus { +interface FileListItem extends FileStatus, Listable { readonly canRestore: boolean; readonly restoreDate: string; } @@ -56,7 +56,7 @@ export class EditDossierDeletedDocumentsComponent extends ListingComponent { - return this.entitiesService.selected$.pipe( + return this.entitiesService.selectedEntities$.pipe( map(entities => entities.length && !entities.find(file => !file.canRestore)), distinctUntilChanged() ); @@ -123,6 +123,7 @@ export class EditDossierDeletedDocumentsComponent extends ListingComponent implements if (!fileWrapper) return undefined; return { + id: fileId, dossierId, unmatched: unmatchedTerms || null, highlights, diff --git a/apps/red-ui/src/app/modules/upload-download/model/download-status.wrapper.ts b/apps/red-ui/src/app/modules/upload-download/model/download-status.wrapper.ts index 9d1742de0..8c3c0f914 100644 --- a/apps/red-ui/src/app/modules/upload-download/model/download-status.wrapper.ts +++ b/apps/red-ui/src/app/modules/upload-download/model/download-status.wrapper.ts @@ -1,10 +1,15 @@ import { DownloadDetails, DownloadStatus } from '@redaction/red-ui-http'; +import { Listable } from '@iqser/common-ui'; -export class DownloadStatusWrapper { +export class DownloadStatusWrapper implements Listable { inProgress: boolean; constructor(private _downloadStatus: DownloadStatus) {} + get id() { + return this._downloadStatus.storageId; + } + get size() { const i = this._downloadStatus.fileSize === 0 ? 0 : Math.floor(Math.log(this._downloadStatus.fileSize) / Math.log(1024)); return (this._downloadStatus.fileSize / Math.pow(1024, i)).toFixed(2) + ' ' + ['B', 'kB', 'MB', 'GB', 'TB'][i]; diff --git a/apps/red-ui/src/app/services/user.service.ts b/apps/red-ui/src/app/services/user.service.ts index 8ab66e8c5..79bf005d0 100644 --- a/apps/red-ui/src/app/services/user.service.ts +++ b/apps/red-ui/src/app/services/user.service.ts @@ -6,6 +6,7 @@ import { User, UserControllerService } from '@redaction/red-ui-http'; import { wipeCaches } from '@redaction/red-cache'; import { BASE_HREF } from '../tokens'; import { Subject } from 'rxjs'; +import { Listable } from '@iqser/common-ui'; export interface ProfileModel { username?: string; @@ -15,7 +16,7 @@ export interface ProfileModel { language: string; } -export class UserWrapper { +export class UserWrapper implements Listable { constructor(private readonly _user: KeycloakProfile | User, public roles: string[], public id: string) {} email = this._user.email; diff --git a/apps/red-ui/src/app/state/model/dossier.wrapper.ts b/apps/red-ui/src/app/state/model/dossier.wrapper.ts index 55b92a9ea..b7cf48f4d 100644 --- a/apps/red-ui/src/app/state/model/dossier.wrapper.ts +++ b/apps/red-ui/src/app/state/model/dossier.wrapper.ts @@ -1,8 +1,9 @@ import { FileStatusWrapper } from '@models/file/file-status.wrapper'; import * as moment from 'moment'; import { Dictionary, Dossier } from '@redaction/red-ui-http'; +import { Listable } from '@iqser/common-ui'; -export class DossierWrapper implements Dossier { +export class DossierWrapper implements Dossier, Listable { readonly approverIds = this._dossier.approverIds; readonly date = this._dossier.date; readonly description = this._dossier.description; @@ -42,6 +43,10 @@ export class DossierWrapper implements Dossier { this._recomputeFileStatus(); } + get id() { + return this.dossierId; + } + get files() { return this._files; } diff --git a/libs/red-ui-http/src/lib/model/dossierAttributeConfig.ts b/libs/red-ui-http/src/lib/model/dossierAttributeConfig.ts index db5a38b26..16f90a718 100644 --- a/libs/red-ui-http/src/lib/model/dossierAttributeConfig.ts +++ b/libs/red-ui-http/src/lib/model/dossierAttributeConfig.ts @@ -11,8 +11,8 @@ */ export interface DossierAttributeConfig { + id: string; editable?: boolean; - id?: string; label?: string; placeholder?: string; type?: DossierAttributeConfig.TypeEnum; diff --git a/libs/red-ui-http/src/lib/model/fileAttributeConfig.ts b/libs/red-ui-http/src/lib/model/fileAttributeConfig.ts index ead5a338d..09e05543a 100644 --- a/libs/red-ui-http/src/lib/model/fileAttributeConfig.ts +++ b/libs/red-ui-http/src/lib/model/fileAttributeConfig.ts @@ -11,9 +11,9 @@ */ export interface FileAttributeConfig { + id: string; csvColumnHeader?: string; editable?: boolean; - id?: string; label?: string; placeholder?: string; primaryAttribute?: boolean;