diff --git a/apps/red-ui/src/app/components/base-screen/base-screen.component.ts b/apps/red-ui/src/app/components/base-screen/base-screen.component.ts index aa8b2cd4b..2fe3024e5 100644 --- a/apps/red-ui/src/app/components/base-screen/base-screen.component.ts +++ b/apps/red-ui/src/app/components/base-screen/base-screen.component.ts @@ -63,7 +63,7 @@ export class BaseScreenComponent { text: this._translateService.instant('search.this-dossier'), icon: 'red:enter', hide: (): boolean => !this.appStateService.activeDossier, - action: (query): void => this._search(query, this.appStateService.activeDossier.dossierId) + action: (query): void => this._search(query, this.appStateService.activeDossier.id) }, { text: this._translateService.instant('search.entire-platform'), diff --git a/apps/red-ui/src/app/models/audit-model-wrapper.model.ts b/apps/red-ui/src/app/models/audit-model-wrapper.model.ts index f14207327..6fef346cf 100644 --- a/apps/red-ui/src/app/models/audit-model-wrapper.model.ts +++ b/apps/red-ui/src/app/models/audit-model-wrapper.model.ts @@ -1,7 +1,7 @@ import { AuditModel } from '@redaction/red-ui-http'; -import { Listable } from '@iqser/common-ui'; +import { IListable } from '@iqser/common-ui'; -export class AuditModelWrapper implements Listable { +export class AuditModelWrapper implements IListable { constructor(public auditModel: AuditModel) {} get category(): string { 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 7c751350b..fdc531af3 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,7 +1,7 @@ import { DossierTemplateModel, FileAttributesConfig } from '@redaction/red-ui-http'; -import { Listable } from '@iqser/common-ui'; +import { IListable } from '@iqser/common-ui'; -export class DossierTemplateModelWrapper implements Listable { +export class DossierTemplateModelWrapper implements IListable { dictionariesCount = 0; totalDictionaryEntries = 0; 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 7caf8e6d7..5d45b7654 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,4 +1,4 @@ -import { Listable } from '@iqser/common-ui'; +import { IListable } from '@iqser/common-ui'; import { FileAttributesConfig, FileStatus } from '@redaction/red-ui-http'; import { StatusSorter } from '@utils/sorters/status-sorter'; @@ -10,7 +10,7 @@ const processingStatuses = [ FileStatus.StatusEnum.PROCESSING ] as const; -export class FileStatusWrapper implements FileStatus, Listable { +export class FileStatusWrapper implements FileStatus, IListable { readonly added = this.fileStatus.added; readonly allManualRedactionsApplied = this.fileStatus.allManualRedactionsApplied; readonly analysisDuration = this.fileStatus.analysisDuration; diff --git a/apps/red-ui/src/app/models/file/type-value.wrapper.ts b/apps/red-ui/src/app/models/file/type-value.wrapper.ts index ae93d08ab..1b19947dc 100644 --- a/apps/red-ui/src/app/models/file/type-value.wrapper.ts +++ b/apps/red-ui/src/app/models/file/type-value.wrapper.ts @@ -1,7 +1,7 @@ -import { Listable } from '@iqser/common-ui'; +import { IListable } from '@iqser/common-ui'; import { TypeValue } from '@redaction/red-ui-http'; -export class TypeValueWrapper implements Listable { +export class TypeValueWrapper implements IListable { entries: string[] = []; constructor(public typeValue: TypeValue, public label?: string, public virtual?: boolean) { diff --git a/apps/red-ui/src/app/modules/admin/dialogs/add-edit-dossier-template-dialog/add-edit-dossier-template-dialog.component.ts b/apps/red-ui/src/app/modules/admin/dialogs/add-edit-dossier-template-dialog/add-edit-dossier-template-dialog.component.ts index 305b6ddd6..60e155798 100644 --- a/apps/red-ui/src/app/modules/admin/dialogs/add-edit-dossier-template-dialog/add-edit-dossier-template-dialog.component.ts +++ b/apps/red-ui/src/app/modules/admin/dialogs/add-edit-dossier-template-dialog/add-edit-dossier-template-dialog.component.ts @@ -5,9 +5,9 @@ import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog'; import * as moment from 'moment'; import { Moment } from 'moment'; import { - Dossier, DossierTemplateControllerService, DossierTemplateModel, + DownloadFileType, ReportTemplate, ReportTemplateControllerService } from '@redaction/red-ui-http'; @@ -23,8 +23,8 @@ export class AddEditDossierTemplateDialogComponent implements OnInit { dossierTemplateForm: FormGroup; hasValidFrom: boolean; hasValidTo: boolean; - downloadTypesEnum: Dossier.DownloadFileTypesEnum[] = ['ORIGINAL', 'PREVIEW', 'REDACTED']; - downloadTypes: { key: Dossier.DownloadFileTypesEnum; label: string }[] = this.downloadTypesEnum.map(type => ({ + downloadTypesEnum: DownloadFileType[] = ['ORIGINAL', 'PREVIEW', 'REDACTED']; + downloadTypes: { key: DownloadFileType; label: string }[] = this.downloadTypesEnum.map(type => ({ key: type, label: downloadTypesTranslations[type] })); diff --git a/apps/red-ui/src/app/modules/admin/dialogs/file-attributes-csv-import-dialog/file-attributes-csv-import-dialog.component.ts b/apps/red-ui/src/app/modules/admin/dialogs/file-attributes-csv-import-dialog/file-attributes-csv-import-dialog.component.ts index 6c5f23c5b..1d026118d 100644 --- a/apps/red-ui/src/app/modules/admin/dialogs/file-attributes-csv-import-dialog/file-attributes-csv-import-dialog.component.ts +++ b/apps/red-ui/src/app/modules/admin/dialogs/file-attributes-csv-import-dialog/file-attributes-csv-import-dialog.component.ts @@ -5,10 +5,10 @@ import * as Papa from 'papaparse'; import { FileAttributeConfig, FileAttributesConfig, FileAttributesControllerService } from '@redaction/red-ui-http'; import { Observable } from 'rxjs'; import { map, startWith } from 'rxjs/operators'; -import { DefaultListingServices, Listable, ListingComponent, TableColumnConfig, Toaster } from '@iqser/common-ui'; +import { DefaultListingServices, IListable, ListingComponent, TableColumnConfig, Toaster } from '@iqser/common-ui'; import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker'; -export interface Field extends Listable { +export interface Field extends IListable { id: string; csvColumn: string; name: string; 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 65dd139b6..51d190d8e 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 @@ -3,13 +3,20 @@ import { AppStateService } from '@state/app-state.service'; import { Colors, DictionaryControllerService } from '@redaction/red-ui-http'; import { ActivatedRoute } from '@angular/router'; import { AdminDialogService } from '../../services/admin-dialog.service'; -import { CircleButtonTypes, DefaultListingServices, Listable, ListingComponent, LoadingService, TableColumnConfig } from '@iqser/common-ui'; +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'; -interface ListItem extends Listable { +interface ListItem extends IListable { readonly key: string; readonly value: string; } 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 c30fdfdbd..667544260 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 @@ -1,9 +1,9 @@ import { ChangeDetectionStrategy, Component, forwardRef, Injector, OnInit, TemplateRef, ViewChild } from '@angular/core'; -import { Dossier } from '@redaction/red-ui-http'; +import { IDossier } from '@redaction/red-ui-http'; import { CircleButtonTypes, DefaultListingServices, - Listable, + IListable, ListingComponent, LoadingService, SortingOrders, @@ -20,7 +20,7 @@ import { distinctUntilChanged, map } from 'rxjs/operators'; import { getLeftDateTime } from '@utils/functions'; import { RouterHistoryService } from '@services/router-history.service'; -interface DossierListItem extends Dossier, Listable { +interface DossierListItem extends IDossier, IListable { readonly canRestore: boolean; readonly restoreDate: string; } @@ -140,11 +140,11 @@ export class TrashScreenComponent extends ListingComponent impl return daysLeft >= 0 && hoursLeft >= 0 && minutesLeft > 0; } - private _toListItems(dossiers: Dossier[]): DossierListItem[] { + private _toListItems(dossiers: IDossier[]): DossierListItem[] { return dossiers.map(dossier => this._toListItem(dossier)); } - private _toListItem(dossier: Dossier): DossierListItem { + private _toListItem(dossier: IDossier): DossierListItem { const restoreDate = this._getRestoreDate(dossier.softDeletedTime); return { id: dossier.dossierId, @@ -157,19 +157,19 @@ export class TrashScreenComponent extends ListingComponent impl } private async _restore(dossiers: DossierListItem[]): Promise { - const dossierIds = dossiers.map(d => d.dossierId); + const dossierIds = dossiers.map(d => d.id); await this._dossiersService.restore(dossierIds); this._removeFromList(dossierIds); } private async _hardDelete(dossiers: DossierListItem[]) { - const dossierIds = dossiers.map(d => d.dossierId); + const dossierIds = dossiers.map(d => d.id); await this._dossiersService.hardDelete(dossierIds); this._removeFromList(dossierIds); } private _removeFromList(ids: string[]): void { - const entities = this.entitiesService.all.filter(e => !ids.includes(e.dossierId)); + const entities = this.entitiesService.all.filter(e => !ids.includes(e.id)); this.entitiesService.setEntities(entities); this.entitiesService.setSelected([]); } diff --git a/apps/red-ui/src/app/modules/dossier/components/bulk-actions/dossier-overview-bulk-actions.component.ts b/apps/red-ui/src/app/modules/dossier/components/bulk-actions/dossier-overview-bulk-actions.component.ts index adf787f8f..bd4ea102d 100644 --- a/apps/red-ui/src/app/modules/dossier/components/bulk-actions/dossier-overview-bulk-actions.component.ts +++ b/apps/red-ui/src/app/modules/dossier/components/bulk-actions/dossier-overview-bulk-actions.component.ts @@ -164,7 +164,7 @@ export class DossierOverviewBulkActionsComponent { async reanalyse() { const fileIds = this.selectedFiles.filter(file => file.analysisRequired).map(file => file.fileId); this._performBulkAction( - this._reanalysisControllerService.reanalyzeFilesForDossier(fileIds, this._appStateService.activeDossier.dossierId) + this._reanalysisControllerService.reanalyzeFilesForDossier(fileIds, this._appStateService.activeDossier.id) ); } diff --git a/apps/red-ui/src/app/modules/dossier/components/dossier-details-stats/dossier-details-stats.component.html b/apps/red-ui/src/app/modules/dossier/components/dossier-details-stats/dossier-details-stats.component.html index 41a6e3db3..e237e4559 100644 --- a/apps/red-ui/src/app/modules/dossier/components/dossier-details-stats/dossier-details-stats.component.html +++ b/apps/red-ui/src/app/modules/dossier/components/dossier-details-stats/dossier-details-stats.component.html @@ -4,7 +4,7 @@
- {{ 'dossier-overview.dossier-details.stats.people' | translate: { count: activeDossier.memberCount } }} + {{ 'dossier-overview.dossier-details.stats.people' | translate: { count: activeDossier.memberIds.length } }}
diff --git a/apps/red-ui/src/app/modules/dossier/components/dossier-details-stats/dossier-details-stats.component.ts b/apps/red-ui/src/app/modules/dossier/components/dossier-details-stats/dossier-details-stats.component.ts index 2b8bb00a2..f7151e91c 100644 --- a/apps/red-ui/src/app/modules/dossier/components/dossier-details-stats/dossier-details-stats.component.ts +++ b/apps/red-ui/src/app/modules/dossier/components/dossier-details-stats/dossier-details-stats.component.ts @@ -1,7 +1,7 @@ import { Component, EventEmitter, Input, Output } from '@angular/core'; import { DossierAttributeWithValue } from '@models/dossier-attributes.model'; import { AppStateService } from '@state/app-state.service'; -import { DossierWrapper } from '@state/model/dossier.wrapper'; +import { Dossier } from '../../../../state/model/dossier'; import { DossierTemplateModel } from '@redaction/red-ui-http'; import { DossiersDialogService } from '../../services/dossiers-dialog.service'; @@ -17,7 +17,7 @@ export class DossierDetailsStatsComponent { constructor(private readonly _appStateService: AppStateService, private readonly _dialogService: DossiersDialogService) {} - get activeDossier(): DossierWrapper { + get activeDossier(): Dossier { return this._appStateService.activeDossier; } diff --git a/apps/red-ui/src/app/modules/dossier/components/dossier-details/dossier-details.component.ts b/apps/red-ui/src/app/modules/dossier/components/dossier-details/dossier-details.component.ts index 5b8d6a7c1..37c3fb5bc 100644 --- a/apps/red-ui/src/app/modules/dossier/components/dossier-details/dossier-details.component.ts +++ b/apps/red-ui/src/app/modules/dossier/components/dossier-details/dossier-details.component.ts @@ -5,8 +5,7 @@ import { DoughnutChartConfig } from '@shared/components/simple-doughnut-chart/si import { TranslateChartService } from '@services/translate-chart.service'; import { StatusSorter } from '@utils/sorters/status-sorter'; import { UserService, UserWrapper } from '@services/user.service'; -import { Toaster } from '@iqser/common-ui'; -import { FilterService } from '@iqser/common-ui'; +import { FilterService, List, Toaster } from '@iqser/common-ui'; import { DossierAttributeWithValue } from '@models/dossier-attributes.model'; import { fileStatusTranslations } from '../../translations/file-status-translations'; import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker'; @@ -39,7 +38,7 @@ export class DossierDetailsComponent implements OnInit { private readonly _toaster: Toaster ) {} - get memberIds(): string[] { + get memberIds(): List { return this.appStateService.activeDossier.memberIds; } diff --git a/apps/red-ui/src/app/modules/dossier/components/dossier-listing-actions/dossier-listing-actions.component.ts b/apps/red-ui/src/app/modules/dossier/components/dossier-listing-actions/dossier-listing-actions.component.ts index 4699138eb..979bd3e22 100644 --- a/apps/red-ui/src/app/modules/dossier/components/dossier-listing-actions/dossier-listing-actions.component.ts +++ b/apps/red-ui/src/app/modules/dossier/components/dossier-listing-actions/dossier-listing-actions.component.ts @@ -1,6 +1,6 @@ import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output } from '@angular/core'; import { PermissionsService } from '@services/permissions.service'; -import { DossierWrapper } from '@state/model/dossier.wrapper'; +import { Dossier } from '../../../../state/model/dossier'; import { StatusSorter } from '@utils/sorters/status-sorter'; import { AppStateService } from '@state/app-state.service'; import { DossiersDialogService } from '../../services/dossiers-dialog.service'; @@ -17,8 +17,8 @@ export class DossierListingActionsComponent { readonly circleButtonTypes = CircleButtonTypes; readonly currentUser = this._userService.currentUser; - @Input() dossier: DossierWrapper; - @Output() actionPerformed = new EventEmitter(); + @Input() dossier: Dossier; + @Output() actionPerformed = new EventEmitter(); constructor( readonly permissionsService: PermissionsService, @@ -27,14 +27,14 @@ export class DossierListingActionsComponent { private readonly _userService: UserService ) {} - openEditDossierDialog($event: MouseEvent, dossierWrapper: DossierWrapper): void { + openEditDossierDialog($event: MouseEvent, dossierWrapper: Dossier): void { this._dialogService.openDialog('editDossier', $event, { dossierWrapper, afterSave: () => this.actionPerformed.emit() }); } - reanalyseDossier($event: MouseEvent, dossier: DossierWrapper): void { + reanalyseDossier($event: MouseEvent, dossier: Dossier): void { $event.stopPropagation(); this.appStateService.reanalyzeDossier(dossier).then(() => { this.appStateService.loadAllDossiers().then(() => this.actionPerformed.emit()); diff --git a/apps/red-ui/src/app/modules/dossier/components/needs-work-badge/needs-work-badge.component.ts b/apps/red-ui/src/app/modules/dossier/components/needs-work-badge/needs-work-badge.component.ts index bb205433f..a2e1885ad 100644 --- a/apps/red-ui/src/app/modules/dossier/components/needs-work-badge/needs-work-badge.component.ts +++ b/apps/red-ui/src/app/modules/dossier/components/needs-work-badge/needs-work-badge.component.ts @@ -1,7 +1,7 @@ import { Component, Input } from '@angular/core'; import { AppStateService } from '@state/app-state.service'; import { FileStatusWrapper } from '@models/file/file-status.wrapper'; -import { DossierWrapper } from '@state/model/dossier.wrapper'; +import { Dossier } from '../../../../state/model/dossier'; @Component({ selector: 'redaction-needs-work-badge', @@ -9,7 +9,7 @@ import { DossierWrapper } from '@state/model/dossier.wrapper'; styleUrls: ['./needs-work-badge.component.scss'] }) export class NeedsWorkBadgeComponent { - @Input() needsWorkInput: FileStatusWrapper | DossierWrapper; + @Input() needsWorkInput: FileStatusWrapper | Dossier; constructor(private readonly _appStateService: AppStateService) {} @@ -50,7 +50,7 @@ export class NeedsWorkBadgeComponent { } reanalysisRequired() { - if (this.needsWorkInput instanceof DossierWrapper) { + if (this.needsWorkInput instanceof Dossier) { return this.needsWorkInput.reanalysisRequired; } else { return this.needsWorkInput.analysisRequired; diff --git a/apps/red-ui/src/app/modules/dossier/components/team-members-manager/team-members-manager.component.ts b/apps/red-ui/src/app/modules/dossier/components/team-members-manager/team-members-manager.component.ts index 62cdbb367..5fb78db5e 100644 --- a/apps/red-ui/src/app/modules/dossier/components/team-members-manager/team-members-manager.component.ts +++ b/apps/red-ui/src/app/modules/dossier/components/team-members-manager/team-members-manager.component.ts @@ -1,10 +1,10 @@ import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core'; -import { Dossier } from '@redaction/red-ui-http'; +import { IDossier } from '@redaction/red-ui-http'; import { AppStateService } from '@state/app-state.service'; import { UserService } from '@services/user.service'; import { Toaster } from '@iqser/common-ui'; import { FormBuilder, FormGroup, Validators } from '@angular/forms'; -import { DossierWrapper } from '@state/model/dossier.wrapper'; +import { Dossier } from '../../../../state/model/dossier'; import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker'; @Component({ @@ -16,9 +16,9 @@ export class TeamMembersManagerComponent implements OnInit { teamForm: FormGroup; searchQuery = ''; - @Input() dossierWrapper: DossierWrapper; + @Input() dossierWrapper: Dossier; - @Output() readonly save = new EventEmitter(); + @Output() readonly save = new EventEmitter(); readonly ownersSelectOptions = this.userService.managerUsers.map(m => m.id); selectedReviewersList: string[] = []; membersSelectOptions: string[] = []; @@ -125,10 +125,10 @@ export class TeamMembersManagerComponent implements OnInit { return; } - const initialMembers = this.dossierWrapper.memberIds.sort(); + const initialMembers = [...this.dossierWrapper.memberIds].sort(); const currentMembers = this.selectedMembersList.sort(); - const initialApprovers = this.dossierWrapper.approverIds.sort(); + const initialApprovers = [...this.dossierWrapper.approverIds].sort(); const currentApprovers = this.selectedApproversList.sort(); this.changed = this._compareLists(initialMembers, currentMembers) || this._compareLists(initialApprovers, currentApprovers); diff --git a/apps/red-ui/src/app/modules/dossier/components/team-members/team-members.component.ts b/apps/red-ui/src/app/modules/dossier/components/team-members/team-members.component.ts index 6a3320345..c5354dd0e 100644 --- a/apps/red-ui/src/app/modules/dossier/components/team-members/team-members.component.ts +++ b/apps/red-ui/src/app/modules/dossier/components/team-members/team-members.component.ts @@ -1,5 +1,5 @@ import { Component, ElementRef, EventEmitter, Input, Output, ViewChild } from '@angular/core'; -import { CircleButtonTypes } from '@iqser/common-ui'; +import { CircleButtonTypes, List } from '@iqser/common-ui'; import { UserService } from '@services/user.service'; @Component({ @@ -11,7 +11,7 @@ export class TeamMembersComponent { readonly circleButtonTypes = CircleButtonTypes; readonly currentUser = this._userService.currentUser; - @Input() memberIds: string[]; + @Input() memberIds: List; @Input() perLine: number; @Input() canAdd = true; @Input() largeSpacing = false; @@ -30,7 +30,7 @@ export class TeamMembersComponent { return this.perLine - (this.canAdd ? 1 : 0); } - get displayedMembers(): string[] { + get displayedMembers(): List { return this.expandedTeam || !this.overflowCount ? this.memberIds : this.memberIds.slice(0, this.maxTeamMembersBeforeExpand - 1); } diff --git a/apps/red-ui/src/app/modules/dossier/dialogs/add-dossier-dialog/add-dossier-dialog.component.ts b/apps/red-ui/src/app/modules/dossier/dialogs/add-dossier-dialog/add-dossier-dialog.component.ts index b7783e492..9ab120ed7 100644 --- a/apps/red-ui/src/app/modules/dossier/dialogs/add-dossier-dialog/add-dossier-dialog.component.ts +++ b/apps/red-ui/src/app/modules/dossier/dialogs/add-dossier-dialog/add-dossier-dialog.component.ts @@ -1,6 +1,6 @@ import { Component } from '@angular/core'; import { MatDialogRef } from '@angular/material/dialog'; -import { Dossier, DossierTemplateModel, ReportTemplate, ReportTemplateControllerService } from '@redaction/red-ui-http'; +import { DossierTemplateModel, DownloadFileType, IDossier, ReportTemplate, ReportTemplateControllerService } from '@redaction/red-ui-http'; import { FormBuilder, FormGroup, Validators } from '@angular/forms'; import { AppStateService } from '@state/app-state.service'; import * as moment from 'moment'; @@ -16,8 +16,8 @@ export class AddDossierDialogComponent { dossierForm: FormGroup; hasDueDate = false; - downloadTypesEnum: Dossier.DownloadFileTypesEnum[] = ['ORIGINAL', 'PREVIEW', 'REDACTED']; - downloadTypes: { key: Dossier.DownloadFileTypesEnum; label: string }[] = this.downloadTypesEnum.map(type => ({ + downloadTypesEnum: DownloadFileType[] = ['ORIGINAL', 'PREVIEW', 'REDACTED']; + downloadTypes: { key: DownloadFileType; label: string }[] = this.downloadTypesEnum.map(type => ({ key: type, label: downloadTypesTranslations[type] })); @@ -68,21 +68,14 @@ export class AddDossierDialogComponent { } async saveDossier() { - const dossier: Dossier = this._formToObject(); - - const foundDossier = this._appStateService.allDossiers.find(p => p.dossierId === dossier.dossierId); - if (foundDossier) { - dossier.memberIds = foundDossier.memberIds; - } - - const savedDossier = await this._appStateService.createOrUpdateDossier(dossier); + const savedDossier = await this._appStateService.createOrUpdateDossier(this._formToObject()); if (savedDossier) { this.dialogRef.close({ dossier: savedDossier }); } } async saveDossierAndAddMembers() { - const dossier: Dossier = this._formToObject(); + const dossier: IDossier = this._formToObject(); const savedDossier = await this._appStateService.createOrUpdateDossier(dossier); if (savedDossier) { this.dialogRef.close({ addMembers: true, dossier: savedDossier }); @@ -124,7 +117,7 @@ export class AddDossierDialogComponent { }); } - private _formToObject(): Dossier { + private _formToObject(): IDossier { return { dossierName: this.dossierForm.get('dossierName').value, description: this.dossierForm.get('description').value, diff --git a/apps/red-ui/src/app/modules/dossier/dialogs/assign-reviewer-approver-dialog/assign-reviewer-approver-dialog.component.ts b/apps/red-ui/src/app/modules/dossier/dialogs/assign-reviewer-approver-dialog/assign-reviewer-approver-dialog.component.ts index 92be25dcd..95f3394f8 100644 --- a/apps/red-ui/src/app/modules/dossier/dialogs/assign-reviewer-approver-dialog/assign-reviewer-approver-dialog.component.ts +++ b/apps/red-ui/src/app/modules/dossier/dialogs/assign-reviewer-approver-dialog/assign-reviewer-approver-dialog.component.ts @@ -6,12 +6,12 @@ import { UserService } from '@services/user.service'; import { Toaster } from '@iqser/common-ui'; import { FormBuilder, FormGroup, Validators } from '@angular/forms'; import { FileStatusWrapper } from '@models/file/file-status.wrapper'; -import { DossierWrapper } from '@state/model/dossier.wrapper'; +import { Dossier } from '../../../../state/model/dossier'; import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker'; class DialogData { mode: 'approver' | 'reviewer'; - dossier?: DossierWrapper; + dossier?: Dossier; files?: FileStatusWrapper[]; ignoreChanged?: boolean; } diff --git a/apps/red-ui/src/app/modules/dossier/dialogs/document-info-dialog/document-info-dialog.component.ts b/apps/red-ui/src/app/modules/dossier/dialogs/document-info-dialog/document-info-dialog.component.ts index 042440f41..303d8aec5 100644 --- a/apps/red-ui/src/app/modules/dossier/dialogs/document-info-dialog/document-info-dialog.component.ts +++ b/apps/red-ui/src/app/modules/dossier/dialogs/document-info-dialog/document-info-dialog.component.ts @@ -3,7 +3,7 @@ import { FormBuilder, FormGroup } from '@angular/forms'; import { FileAttributeConfig, FileAttributesControllerService, FileStatus } from '@redaction/red-ui-http'; import { AppStateService } from '@state/app-state.service'; import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog'; -import { DossierWrapper } from '@state/model/dossier.wrapper'; +import { Dossier } from '../../../../state/model/dossier'; @Component({ templateUrl: './document-info-dialog.component.html', @@ -14,7 +14,7 @@ export class DocumentInfoDialogComponent implements OnInit { file: FileStatus; attributes: FileAttributeConfig[]; - private _dossier: DossierWrapper; + private _dossier: Dossier; constructor( private readonly _appStateService: AppStateService, diff --git a/apps/red-ui/src/app/modules/dossier/dialogs/edit-dossier-dialog/attributes/edit-dossier-attributes.component.ts b/apps/red-ui/src/app/modules/dossier/dialogs/edit-dossier-dialog/attributes/edit-dossier-attributes.component.ts index ef70e4e3b..fe1ff8aac 100644 --- a/apps/red-ui/src/app/modules/dossier/dialogs/edit-dossier-dialog/attributes/edit-dossier-attributes.component.ts +++ b/apps/red-ui/src/app/modules/dossier/dialogs/edit-dossier-dialog/attributes/edit-dossier-attributes.component.ts @@ -1,6 +1,6 @@ import { Component, ElementRef, EventEmitter, Input, OnInit, Output, QueryList, ViewChildren } from '@angular/core'; import { EditDossierSectionInterface } from '../edit-dossier-section.interface'; -import { DossierWrapper } from '@state/model/dossier.wrapper'; +import { Dossier } from '../../../../../state/model/dossier'; import { AppStateService } from '@state/app-state.service'; import { PermissionsService } from '@services/permissions.service'; import { CircleButtonTypes, IconButtonTypes, LoadingService } from '@iqser/common-ui'; @@ -18,7 +18,7 @@ export class EditDossierAttributesComponent implements EditDossierSectionInterfa readonly iconButtonTypes = IconButtonTypes; readonly circleButtonTypes = CircleButtonTypes; - @Input() dossierWrapper: DossierWrapper; + @Input() dossierWrapper: Dossier; @Output() updateDossier = new EventEmitter(); customAttributes: DossierAttributeWithValue[] = []; imageAttributes: DossierAttributeWithValue[] = []; 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 88e60bb07..06aa72cd9 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,10 +1,10 @@ import { Component, EventEmitter, forwardRef, Injector, Input, OnInit, Output, TemplateRef, ViewChild } from '@angular/core'; import { EditDossierSectionInterface } from '../edit-dossier-section.interface'; -import { DossierWrapper } from '@state/model/dossier.wrapper'; +import { Dossier } from '../../../../../state/model/dossier'; import { CircleButtonTypes, DefaultListingServices, - Listable, + IListable, ListingComponent, LoadingService, SortingOrders, @@ -21,7 +21,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, Listable { +interface FileListItem extends FileStatus, IListable { readonly canRestore: boolean; readonly restoreDate: string; } @@ -36,8 +36,8 @@ interface FileListItem extends FileStatus, Listable { ] }) export class EditDossierDeletedDocumentsComponent extends ListingComponent implements EditDossierSectionInterface, OnInit { - @Input() dossierWrapper: DossierWrapper; - @Output() updateDossier = new EventEmitter(); + @Input() dossier: Dossier; + @Output() readonly updateDossier = new EventEmitter(); readonly changed = false; readonly canRestoreSelected$ = this._canRestoreSelected$; disabled: boolean; @@ -91,7 +91,7 @@ export class EditDossierDeletedDocumentsComponent extends ListingComponent { const fileIds = files.map(f => f.fileId); - await this._fileManagementController.restoreFiles(fileIds, this.dossierWrapper.dossierId).toPromise(); + await this._fileManagementController.restoreFiles(fileIds, this.dossier.id).toPromise(); this._removeFromList(fileIds); await this._appStateService.reloadActiveDossierFiles(); this.updateDossier.emit(); @@ -146,7 +146,7 @@ export class EditDossierDeletedDocumentsComponent extends ListingComponent f.fileId); - await this._fileManagementController.hardDeleteFile(this.dossierWrapper.dossierId, fileIds).toPromise(); + await this._fileManagementController.hardDeleteFile(this.dossier.id, fileIds).toPromise(); this._removeFromList(fileIds); this.updateDossier.emit(); } diff --git a/apps/red-ui/src/app/modules/dossier/dialogs/edit-dossier-dialog/dictionary/edit-dossier-dictionary.component.html b/apps/red-ui/src/app/modules/dossier/dialogs/edit-dossier-dialog/dictionary/edit-dossier-dictionary.component.html index 0f630ab4e..06dee2be4 100644 --- a/apps/red-ui/src/app/modules/dossier/dialogs/edit-dossier-dialog/dictionary/edit-dossier-dictionary.component.html +++ b/apps/red-ui/src/app/modules/dossier/dialogs/edit-dossier-dialog/dictionary/edit-dossier-dictionary.component.html @@ -1,10 +1,10 @@
-
{{ dossierWrapper.type?.label }}
+
{{ dossier.type?.label }}
- {{ 'edit-dossier-dialog.dictionary.entries' | translate: { length: (dossierWrapper.type?.entries || []).length } }} + {{ 'edit-dossier-dialog.dictionary.entries' | translate: { length: (dossier.type?.entries || []).length } }}
@@ -19,13 +19,13 @@ [placeholder]="'edit-dossier-dialog.dictionary.display-name.placeholder' | translate" [saveTooltip]="'edit-dossier-dialog.dictionary.display-name.save' | translate" [showPreview]="false" - [value]="dossierWrapper.type?.label" + [value]="dossier.type?.label" >
diff --git a/apps/red-ui/src/app/modules/dossier/dialogs/edit-dossier-dialog/dictionary/edit-dossier-dictionary.component.ts b/apps/red-ui/src/app/modules/dossier/dialogs/edit-dossier-dialog/dictionary/edit-dossier-dictionary.component.ts index 51d4d08b2..3c8dcdff6 100644 --- a/apps/red-ui/src/app/modules/dossier/dialogs/edit-dossier-dialog/dictionary/edit-dossier-dictionary.component.ts +++ b/apps/red-ui/src/app/modules/dossier/dialogs/edit-dossier-dialog/dictionary/edit-dossier-dictionary.component.ts @@ -1,6 +1,6 @@ import { Component, EventEmitter, Input, OnInit, Output, ViewChild } from '@angular/core'; import { AppStateService } from '@state/app-state.service'; -import { DossierWrapper } from '@state/model/dossier.wrapper'; +import { Dossier } from '@state/model/dossier'; import { EditDossierSectionInterface } from '../edit-dossier-section.interface'; import { PermissionsService } from '@services/permissions.service'; import { DictionaryManagerComponent } from '@shared/components/dictionary-manager/dictionary-manager.component'; @@ -15,8 +15,8 @@ import { Dictionary, DictionaryControllerService } from '@redaction/red-ui-http' styleUrls: ['./edit-dossier-dictionary.component.scss'] }) export class EditDossierDictionaryComponent implements EditDossierSectionInterface, OnInit { - @Input() dossierWrapper: DossierWrapper; - @Output() updateDossier: EventEmitter = new EventEmitter(); + @Input() dossier: Dossier; + @Output() readonly updateDossier = new EventEmitter(); canEdit = false; readonly circleButtonTypes = CircleButtonTypes; @@ -30,7 +30,7 @@ export class EditDossierDictionaryComponent implements EditDossierSectionInterfa private readonly _loadingService: LoadingService, private readonly _formBuilder: FormBuilder ) { - this.canEdit = this._permissionsService.isDossierMember(this.dossierWrapper); + this.canEdit = this._permissionsService.isDossierMember(this.dossier); } get changed() { @@ -43,16 +43,16 @@ export class EditDossierDictionaryComponent implements EditDossierSectionInterfa async ngOnInit() { this._loadingService.start(); - await this._appStateService.updateDossierDictionary(this.dossierWrapper.dossierTemplateId, this.dossierWrapper.dossierId); + await this._appStateService.updateDossierDictionary(this.dossier.dossierTemplateId, this.dossier.id); this._loadingService.stop(); } async updateDisplayName(label: string) { - const typeValue: Dictionary = { ...this.dossierWrapper.type, label }; + const typeValue: Dictionary = { ...this.dossier.type, label }; await this._dictionaryControllerService - .updateType(typeValue, this.dossierWrapper.dossierTemplateId, 'dossier_redaction', this.dossierWrapper.dossierId) + .updateType(typeValue, this.dossier.dossierTemplateId, 'dossier_redaction', this.dossier.id) .toPromise(); - await this._appStateService.updateDossierDictionary(this.dossierWrapper.dossierTemplateId, this.dossierWrapper.dossierId); + await this._appStateService.updateDossierDictionary(this.dossier.dossierTemplateId, this.dossier.id); this.updateDossier.emit(); } @@ -61,13 +61,13 @@ export class EditDossierDictionaryComponent implements EditDossierSectionInterfa .saveEntries( this._dictionaryManager.currentEntries, this._dictionaryManager.initialEntries, - this.dossierWrapper.dossierTemplateId, + this.dossier.dossierTemplateId, 'dossier_redaction', - this.dossierWrapper.dossierId, + this.dossier.id, false ) .toPromise(); - await this._appStateService.updateDossierDictionary(this.dossierWrapper.dossierTemplateId, this.dossierWrapper.dossierId); + await this._appStateService.updateDossierDictionary(this.dossier.dossierTemplateId, this.dossier.id); this.updateDossier.emit(); } diff --git a/apps/red-ui/src/app/modules/dossier/dialogs/edit-dossier-dialog/download-package/edit-dossier-download-package.component.ts b/apps/red-ui/src/app/modules/dossier/dialogs/edit-dossier-dialog/download-package/edit-dossier-download-package.component.ts index ccd3b6fe6..3b246057f 100644 --- a/apps/red-ui/src/app/modules/dossier/dialogs/edit-dossier-dialog/download-package/edit-dossier-download-package.component.ts +++ b/apps/red-ui/src/app/modules/dossier/dialogs/edit-dossier-dialog/download-package/edit-dossier-download-package.component.ts @@ -1,8 +1,8 @@ import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core'; -import { Dossier, DossierTemplateModel, ReportTemplate, ReportTemplateControllerService } from '@redaction/red-ui-http'; +import { DossierTemplateModel, DownloadFileType, ReportTemplate, ReportTemplateControllerService } from '@redaction/red-ui-http'; import { FormBuilder, FormGroup } from '@angular/forms'; import { AppStateService } from '@state/app-state.service'; -import { DossierWrapper } from '@state/model/dossier.wrapper'; +import { Dossier } from '../../../../../state/model/dossier'; import { EditDossierSectionInterface } from '../edit-dossier-section.interface'; import { downloadTypesTranslations } from '../../../../../translations/download-types-translations'; @@ -13,15 +13,15 @@ import { downloadTypesTranslations } from '../../../../../translations/download- }) export class EditDossierDownloadPackageComponent implements OnInit, EditDossierSectionInterface { dossierForm: FormGroup; - downloadTypesEnum: Dossier.DownloadFileTypesEnum[] = ['ORIGINAL', 'PREVIEW', 'REDACTED']; - downloadTypes: { key: Dossier.DownloadFileTypesEnum; label: string }[] = this.downloadTypesEnum.map(type => ({ + downloadTypesEnum: DownloadFileType[] = ['ORIGINAL', 'PREVIEW', 'REDACTED']; + downloadTypes: { key: DownloadFileType; label: string }[] = this.downloadTypesEnum.map(type => ({ key: type, label: downloadTypesTranslations[type] })); dossierTemplates: DossierTemplateModel[]; availableReportTypes: ReportTemplate[] = []; - @Input() dossierWrapper: DossierWrapper; + @Input() dossierWrapper: Dossier; @Output() updateDossier = new EventEmitter(); constructor( diff --git a/apps/red-ui/src/app/modules/dossier/dialogs/edit-dossier-dialog/edit-dossier-dialog.component.html b/apps/red-ui/src/app/modules/dossier/dialogs/edit-dossier-dialog/edit-dossier-dialog.component.html index 5a70a20a8..043898afa 100644 --- a/apps/red-ui/src/app/modules/dossier/dialogs/edit-dossier-dialog/edit-dossier-dialog.component.html +++ b/apps/red-ui/src/app/modules/dossier/dialogs/edit-dossier-dialog/edit-dossier-dialog.component.html @@ -1,6 +1,6 @@
- {{ 'edit-dossier-dialog.header' | translate: { dossierName: dossierWrapper.dossierName } }} + {{ 'edit-dossier-dialog.header' | translate: { dossierName: dossier.dossierName } }}
@@ -22,37 +22,37 @@
diff --git a/apps/red-ui/src/app/modules/dossier/dialogs/edit-dossier-dialog/edit-dossier-dialog.component.ts b/apps/red-ui/src/app/modules/dossier/dialogs/edit-dossier-dialog/edit-dossier-dialog.component.ts index f5de3fc9f..1b518abd5 100644 --- a/apps/red-ui/src/app/modules/dossier/dialogs/edit-dossier-dialog/edit-dossier-dialog.component.ts +++ b/apps/red-ui/src/app/modules/dossier/dialogs/edit-dossier-dialog/edit-dossier-dialog.component.ts @@ -1,6 +1,6 @@ import { ChangeDetectorRef, Component, Inject, ViewChild } from '@angular/core'; import { MAT_DIALOG_DATA } from '@angular/material/dialog'; -import { DossierWrapper } from '@state/model/dossier.wrapper'; +import { Dossier } from '@state/model/dossier'; import { EditDossierGeneralInfoComponent } from './general-info/edit-dossier-general-info.component'; import { EditDossierDownloadPackageComponent } from './download-package/edit-dossier-download-package.component'; import { EditDossierSectionInterface } from './edit-dossier-section.interface'; @@ -22,7 +22,7 @@ type Section = 'dossierInfo' | 'downloadPackage' | 'dossierDictionary' | 'member export class EditDossierDialogComponent { readonly navItems: { key: Section; title?: string; sideNavTitle?: string }[]; activeNav: Section; - dossierWrapper: DossierWrapper; + dossier: Dossier; @ViewChild(EditDossierGeneralInfoComponent) generalInfoComponent: EditDossierGeneralInfoComponent; @ViewChild(EditDossierDownloadPackageComponent) downloadPackageComponent: EditDossierDownloadPackageComponent; @@ -37,7 +37,7 @@ export class EditDossierDialogComponent { private readonly _changeRef: ChangeDetectorRef, @Inject(MAT_DIALOG_DATA) private readonly _data: { - dossierWrapper: DossierWrapper; + dossierWrapper: Dossier; afterSave: Function; section?: Section; } @@ -73,7 +73,7 @@ export class EditDossierDialogComponent { } ]; - this.dossierWrapper = _data.dossierWrapper; + this.dossier = _data.dossierWrapper; this.activeNav = _data.section || 'dossierInfo'; } @@ -105,8 +105,8 @@ export class EditDossierDialogComponent { } updatedDossier() { - this._toaster.success(_('edit-dossier-dialog.change-successful'), { params: { dossierName: this.dossierWrapper.dossierName } }); - this.dossierWrapper = this._appStateService.getDossierById(this.dossierWrapper.dossierId); + this._toaster.success(_('edit-dossier-dialog.change-successful'), { params: { dossierName: this.dossier.dossierName } }); + this.dossier = this._appStateService.getDossierById(this.dossier.id); this._changeRef.detectChanges(); this.afterSave(); } diff --git a/apps/red-ui/src/app/modules/dossier/dialogs/edit-dossier-dialog/general-info/edit-dossier-general-info.component.ts b/apps/red-ui/src/app/modules/dossier/dialogs/edit-dossier-dialog/general-info/edit-dossier-general-info.component.ts index 3a4a6807e..500db5ff4 100644 --- a/apps/red-ui/src/app/modules/dossier/dialogs/edit-dossier-dialog/general-info/edit-dossier-general-info.component.ts +++ b/apps/red-ui/src/app/modules/dossier/dialogs/edit-dossier-dialog/general-info/edit-dossier-general-info.component.ts @@ -3,7 +3,7 @@ import { DossierTemplateModel } from '@redaction/red-ui-http'; import { FormBuilder, FormGroup, Validators } from '@angular/forms'; import { AppStateService } from '../../../../../state/app-state.service'; import * as moment from 'moment'; -import { DossierWrapper } from '@state/model/dossier.wrapper'; +import { Dossier } from '../../../../../state/model/dossier'; import { EditDossierSectionInterface } from '../edit-dossier-section.interface'; import { DossiersDialogService } from '../../../services/dossiers-dialog.service'; import { PermissionsService } from '@services/permissions.service'; @@ -27,7 +27,7 @@ export class EditDossierGeneralInfoComponent implements OnInit, EditDossierSecti hasDueDate: boolean; dossierTemplates: DossierTemplateModel[]; - @Input() dossierWrapper: DossierWrapper; + @Input() dossierWrapper: Dossier; @Output() updateDossier = new EventEmitter(); constructor( diff --git a/apps/red-ui/src/app/modules/dossier/dialogs/edit-dossier-dialog/team-members/edit-dossier-team-members.component.ts b/apps/red-ui/src/app/modules/dossier/dialogs/edit-dossier-dialog/team-members/edit-dossier-team-members.component.ts index 785df2e9b..9fa943ec8 100644 --- a/apps/red-ui/src/app/modules/dossier/dialogs/edit-dossier-dialog/team-members/edit-dossier-team-members.component.ts +++ b/apps/red-ui/src/app/modules/dossier/dialogs/edit-dossier-dialog/team-members/edit-dossier-team-members.component.ts @@ -1,6 +1,6 @@ import { Component, EventEmitter, Input, Output, ViewChild } from '@angular/core'; import { AppStateService } from '@state/app-state.service'; -import { DossierWrapper } from '@state/model/dossier.wrapper'; +import { Dossier } from '../../../../../state/model/dossier'; import { EditDossierSectionInterface } from '../edit-dossier-section.interface'; import { TeamMembersManagerComponent } from '../../../components/team-members-manager/team-members-manager.component'; import { UserService } from '@services/user.service'; @@ -13,7 +13,7 @@ import { UserService } from '@services/user.service'; export class EditDossierTeamMembersComponent implements EditDossierSectionInterface { readonly currentUser = this._userService.currentUser; - @Input() dossierWrapper: DossierWrapper; + @Input() dossierWrapper: Dossier; @Output() updateDossier = new EventEmitter(); @ViewChild(TeamMembersManagerComponent) managerComponent: TeamMembersManagerComponent; diff --git a/apps/red-ui/src/app/modules/dossier/screens/dossier-listing-screen/dossier-listing-screen.component.ts b/apps/red-ui/src/app/modules/dossier/screens/dossier-listing-screen/dossier-listing-screen.component.ts index 0b93ae005..c21835e43 100644 --- a/apps/red-ui/src/app/modules/dossier/screens/dossier-listing-screen/dossier-listing-screen.component.ts +++ b/apps/red-ui/src/app/modules/dossier/screens/dossier-listing-screen/dossier-listing-screen.component.ts @@ -1,11 +1,11 @@ import { AfterViewInit, Component, forwardRef, Injector, OnDestroy, OnInit, TemplateRef, ViewChild } from '@angular/core'; -import { Dossier } from '@redaction/red-ui-http'; +import { DossierStatuses } from '@redaction/red-ui-http'; import { AppStateService } from '@state/app-state.service'; import { UserService } from '@services/user.service'; import { DoughnutChartConfig } from '@shared/components/simple-doughnut-chart/simple-doughnut-chart.component'; import { groupBy } from '@utils/functions'; import { TranslateService } from '@ngx-translate/core'; -import { DossierWrapper } from '@state/model/dossier.wrapper'; +import { Dossier } from '../../../../state/model/dossier'; import { timer } from 'rxjs'; import { tap } from 'rxjs/operators'; import { TranslateChartService } from '@services/translate-chart.service'; @@ -29,7 +29,7 @@ import { PermissionsService } from '@services/permissions.service'; providers: [...DefaultListingServices, { provide: ListingComponent, useExisting: forwardRef(() => DossierListingScreenComponent) }] }) export class DossierListingScreenComponent - extends ListingComponent + extends ListingComponent implements OnInit, AfterViewInit, OnDestroy, OnAttach, OnDetach { readonly currentUser = this._userService.currentUser; @@ -43,7 +43,7 @@ export class DossierListingScreenComponent type: 'primary' } ]; - tableColumnConfigs: TableColumnConfig[]; + tableColumnConfigs: TableColumnConfig[]; dossiersChartData: DoughnutChartConfig[] = []; documentsChartData: DoughnutChartConfig[] = []; @ViewChild('nameTemplate', { static: true }) nameTemplate: TemplateRef; @@ -57,7 +57,7 @@ export class DossierListingScreenComponent static: true }) private readonly _needsWorkFilterTemplate: TemplateRef; - @ViewChild(TableComponent) private readonly _tableComponent: TableComponent; + @ViewChild(TableComponent) private readonly _tableComponent: TableComponent; constructor( private readonly _router: Router, @@ -76,14 +76,14 @@ export class DossierListingScreenComponent } private get _activeDossiersCount(): number { - return this.entitiesService.all.filter(p => p.status === Dossier.StatusEnum.ACTIVE).length; + return this.entitiesService.all.filter(p => p.status === DossierStatuses.ACTIVE).length; } private get _inactiveDossiersCount(): number { return this.entitiesService.all.length - this._activeDossiersCount; } - routerLinkFn = (dossier: DossierWrapper) => ['/main/dossiers/' + dossier.dossierId]; + routerLinkFn = (dossier: Dossier) => ['/main/dossiers/' + dossier.id]; ngOnInit(): void { this._configureTableColumns(); @@ -120,7 +120,7 @@ export class DossierListingScreenComponent openAddDossierDialog(): void { this._dialogService.openDialog('addDossier', null, null, async addResponse => { - await this._router.navigate([`/main/dossiers/${addResponse.dossier.dossierId}`]); + await this._router.navigate([`/main/dossiers/${addResponse.dossier.id}`]); if (addResponse.addMembers) { this._dialogService.openDialog('editDossier', null, { dossierWrapper: addResponse.dossier, @@ -273,7 +273,7 @@ export class DossierListingScreenComponent this.filterService.addFilterGroup({ slug: 'quickFilters', filters: quickFilters, - checker: (dw: DossierWrapper) => quickFilters.reduce((acc, f) => acc || (f.checked && f.checker(dw)), false) + checker: (dw: Dossier) => quickFilters.reduce((acc, f) => acc || (f.checked && f.checker(dw)), false) }); const dossierFilters = this.entitiesService.all.map(dossier => ({ @@ -296,22 +296,22 @@ export class DossierListingScreenComponent { key: 'my-dossiers', label: myDossiersLabel, - checker: (dw: DossierWrapper) => dw.ownerId === this.currentUser.id + checker: (dw: Dossier) => dw.ownerId === this.currentUser.id }, { key: 'to-approve', label: this._translateService.instant('dossier-listing.quick-filters.to-approve'), - checker: (dw: DossierWrapper) => dw.approverIds.includes(this.currentUser.id) + checker: (dw: Dossier) => dw.approverIds.includes(this.currentUser.id) }, { key: 'to-review', label: this._translateService.instant('dossier-listing.quick-filters.to-review'), - checker: (dw: DossierWrapper) => dw.memberIds.includes(this.currentUser.id) + checker: (dw: Dossier) => dw.memberIds.includes(this.currentUser.id) }, { key: 'other', label: this._translateService.instant('dossier-listing.quick-filters.other'), - checker: (dw: DossierWrapper) => !dw.memberIds.includes(this.currentUser.id) + checker: (dw: Dossier) => !dw.memberIds.includes(this.currentUser.id) } ]; 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 32d1580ab..aae6642aa 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 @@ -52,7 +52,7 @@ 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 { DossierWrapper } from '@state/model/dossier.wrapper'; +import { Dossier } from '@state/model/dossier'; import { Router } from '@angular/router'; import { FileActionService } from '../../services/file-action.service'; import StatusEnum = FileStatus.StatusEnum; @@ -95,7 +95,7 @@ export class DossierOverviewScreenComponent extends ListingComponent; @ViewChild('fileInput') private readonly _fileInput: ElementRef; - @ViewChild(TableComponent) private readonly _tableComponent: TableComponent; + @ViewChild(TableComponent) private readonly _tableComponent: TableComponent; constructor( private readonly _toaster: Toaster, @@ -210,7 +210,7 @@ export class DossierOverviewScreenComponent extends ListingComponent - fileStatus.canBeOpened ? [`/main/dossiers/${this.currentDossier.dossierId}/file/${fileStatus.fileId}`] : []; + fileStatus.canBeOpened ? [`/main/dossiers/${this.currentDossier.id}/file/${fileStatus.fileId}`] : []; disabledFn = (fileStatus: FileStatusWrapper) => fileStatus.excluded; 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 2aa6ae0de..7b92dfb50 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 @@ -8,6 +8,7 @@ import { CircleButtonTypes, Debounce, FilterService, + List, LoadingService, NestedFilter, processFilters, @@ -113,7 +114,7 @@ export class FilePreviewScreenComponent extends AutoUnsubscribe implements OnIni }); } - get singleUsersSelectOptions(): string[] { + get singleUsersSelectOptions(): List { return this.appStateService.activeFile?.isUnderApproval ? this.appStateService.activeDossier.approverIds : this.appStateService.activeDossier.memberIds; @@ -200,9 +201,7 @@ export class FilePreviewScreenComponent extends AutoUnsubscribe implements OnIni } get canAssignReviewer(): boolean { - return ( - !this.currentReviewer && this.permissionsService.canAssignUser() && this.appStateService.activeDossier.hasMoreThanOneReviewer - ); + return !this.currentReviewer && this.permissionsService.canAssignUser() && this.appStateService.activeDossier.hasReviewers; } updateViewMode(): void { diff --git a/apps/red-ui/src/app/modules/dossier/screens/search-screen/search-screen.component.ts b/apps/red-ui/src/app/modules/dossier/screens/search-screen/search-screen.component.ts index 8c348f2cd..703f67968 100644 --- a/apps/red-ui/src/app/modules/dossier/screens/search-screen/search-screen.component.ts +++ b/apps/red-ui/src/app/modules/dossier/screens/search-screen/search-screen.component.ts @@ -1,5 +1,5 @@ import { Component, forwardRef, Injector, OnDestroy, OnInit, TemplateRef, ViewChild } from '@angular/core'; -import { DefaultListingServices, keyChecker, Listable, ListingComponent, LoadingService, TableColumnConfig } from '@iqser/common-ui'; +import { DefaultListingServices, IListable, keyChecker, ListingComponent, LoadingService, TableColumnConfig } from '@iqser/common-ui'; import { MatchedDocument, SearchControllerService, SearchResult } from '@redaction/red-ui-http'; import { BehaviorSubject, Observable } from 'rxjs'; import { debounceTime, map, skip, switchMap, tap } from 'rxjs/operators'; @@ -9,11 +9,11 @@ import { FileStatusWrapper } from '@models/file/file-status.wrapper'; import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker'; import { fileStatusTranslations } from '../../translations/file-status-translations'; import { SearchPositions } from '@shared/components/page-header/models/search-positions.type'; -import { DossierWrapper } from '@state/model/dossier.wrapper'; +import { Dossier } from '../../../../state/model/dossier'; import { TranslateService } from '@ngx-translate/core'; import { RouterHistoryService } from '@services/router-history.service'; -interface ListItem extends Listable { +interface ListItem extends IListable { readonly dossierId: string; readonly filename: string; readonly unmatched: readonly string[] | null; @@ -73,10 +73,10 @@ export class SearchScreenComponent extends ListingComponent implements filterceptionPlaceholder: this._translateService.instant('search-screen.filters.search-placeholder'), icon: 'red:folder', filters: this._appStateService.allDossiers.map(dossier => ({ - key: dossier.dossierId, + key: dossier.id, label: dossier.dossierName })), - checker: keyChecker('dossierId') + checker: keyChecker('id') }); this.addSubscription = _activatedRoute.queryParamMap @@ -141,7 +141,7 @@ export class SearchScreenComponent extends ListingComponent implements return this._appStateService.getFileById(dossierId, fileId); } - private _getDossierWrapper(dossierId: string): DossierWrapper { + private _getDossierWrapper(dossierId: string): Dossier { return this._appStateService.getDossierById(dossierId); } diff --git a/apps/red-ui/src/app/modules/dossier/services/dossiers.service.ts b/apps/red-ui/src/app/modules/dossier/services/dossiers.service.ts index 1379a4b02..483ca3525 100644 --- a/apps/red-ui/src/app/modules/dossier/services/dossiers.service.ts +++ b/apps/red-ui/src/app/modules/dossier/services/dossiers.service.ts @@ -1,5 +1,5 @@ import { Injectable } from '@angular/core'; -import { Dossier, DossierControllerService } from '@redaction/red-ui-http'; +import { IDossier, DossierControllerService } from '@redaction/red-ui-http'; @Injectable({ providedIn: 'root' @@ -7,7 +7,7 @@ import { Dossier, DossierControllerService } from '@redaction/red-ui-http'; export class DossiersService { constructor(private readonly _dossierControllerService: DossierControllerService) {} - createOrUpdate(dossier: Dossier): Promise { + createOrUpdate(dossier: IDossier): Promise { return this._dossierControllerService.createOrUpdateDossier(dossier).toPromise(); } @@ -15,11 +15,11 @@ export class DossiersService { return this._dossierControllerService.deleteDossier(dossierId).toPromise(); } - getAll(): Promise { + getAll(): Promise { return this._dossierControllerService.getDossiers().toPromise(); } - getDeleted(): Promise { + getDeleted(): Promise { return this._dossierControllerService.getDeletedDossiers().toPromise(); } diff --git a/apps/red-ui/src/app/modules/dossier/services/file-action.service.ts b/apps/red-ui/src/app/modules/dossier/services/file-action.service.ts index 4069a04c7..4ab77db57 100644 --- a/apps/red-ui/src/app/modules/dossier/services/file-action.service.ts +++ b/apps/red-ui/src/app/modules/dossier/services/file-action.service.ts @@ -6,7 +6,7 @@ import { FileStatusWrapper } from '@models/file/file-status.wrapper'; import { PermissionsService } from '@services/permissions.service'; import { isArray } from 'rxjs/internal-compatibility'; import { DossiersDialogService } from './dossiers-dialog.service'; -import { ConfirmationDialogInput } from '../../shared/dialogs/confirmation-dialog/confirmation-dialog.component'; +import { ConfirmationDialogInput } from '@shared/dialogs/confirmation-dialog/confirmation-dialog.component'; import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker'; import { Observable } from 'rxjs'; @@ -25,11 +25,7 @@ export class FileActionService { if (!fileStatusWrapper) { fileStatusWrapper = this._appStateService.activeFile; } - return this._reanalysisControllerService.reanalyzeFile( - this._appStateService.activeDossier.dossierId, - fileStatusWrapper.fileId, - true - ); + return this._reanalysisControllerService.reanalyzeFile(this._appStateService.activeDossier.id, fileStatusWrapper.fileId, true); } toggleAnalysis(fileStatusWrapper?: FileStatusWrapper) { diff --git a/apps/red-ui/src/app/modules/shared/components/assign-user-dropdown/assign-user-dropdown.component.ts b/apps/red-ui/src/app/modules/shared/components/assign-user-dropdown/assign-user-dropdown.component.ts index c804f9f2b..f203f4b8e 100644 --- a/apps/red-ui/src/app/modules/shared/components/assign-user-dropdown/assign-user-dropdown.component.ts +++ b/apps/red-ui/src/app/modules/shared/components/assign-user-dropdown/assign-user-dropdown.component.ts @@ -1,5 +1,6 @@ import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output } from '@angular/core'; import { UserService, UserWrapper } from '@services/user.service'; +import { List } from '@redaction/red-ui-http'; @Component({ selector: 'redaction-assign-user-dropdown', @@ -9,7 +10,7 @@ import { UserService, UserWrapper } from '@services/user.service'; }) export class AssignUserDropdownComponent { oldUser: UserWrapper | string; - @Input() options: (UserWrapper | string)[]; + @Input() options: List; @Output() save = new EventEmitter(); @Output() cancel = new EventEmitter(); private _currentUser: UserWrapper | string; diff --git a/apps/red-ui/src/app/modules/shared/components/buttons/file-download-btn/file-download-btn.component.ts b/apps/red-ui/src/app/modules/shared/components/buttons/file-download-btn/file-download-btn.component.ts index 7cf584f88..6ce9e9688 100644 --- a/apps/red-ui/src/app/modules/shared/components/buttons/file-download-btn/file-download-btn.component.ts +++ b/apps/red-ui/src/app/modules/shared/components/buttons/file-download-btn/file-download-btn.component.ts @@ -1,6 +1,6 @@ import { ChangeDetectionStrategy, Component, Input, OnDestroy } from '@angular/core'; import { PermissionsService } from '@services/permissions.service'; -import { DossierWrapper } from '@state/model/dossier.wrapper'; +import { Dossier } from '../../../../../state/model/dossier'; import { FileStatusWrapper } from '@models/file/file-status.wrapper'; import { FileDownloadService } from '@upload-download/services/file-download.service'; import { Toaster } from '@iqser/common-ui'; @@ -17,7 +17,7 @@ export type MenuState = 'OPEN' | 'CLOSED'; changeDetection: ChangeDetectionStrategy.OnPush }) export class FileDownloadBtnComponent extends AutoUnsubscribe implements OnDestroy { - @Input() dossier: DossierWrapper; + @Input() dossier: Dossier; @Input() file: FileStatusWrapper | FileStatusWrapper[]; @Input() tooltipPosition: 'above' | 'below' | 'before' | 'after' = 'above'; @Input() type: CircleButtonType = CircleButtonTypes.default; diff --git a/apps/red-ui/src/app/modules/shared/components/dictionary-manager/dictionary-manager.component.ts b/apps/red-ui/src/app/modules/shared/components/dictionary-manager/dictionary-manager.component.ts index dceeade0d..909fc063d 100644 --- a/apps/red-ui/src/app/modules/shared/components/dictionary-manager/dictionary-manager.component.ts +++ b/apps/red-ui/src/app/modules/shared/components/dictionary-manager/dictionary-manager.component.ts @@ -4,7 +4,7 @@ import { AppStateService } from '@state/app-state.service'; import { Debounce, IconButtonTypes } from '@iqser/common-ui'; import { Observable } from 'rxjs'; import { map, take } from 'rxjs/operators'; -import { DossierWrapper } from '@state/model/dossier.wrapper'; +import { Dossier } from '../../../../state/model/dossier'; import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker'; import ICodeEditor = monaco.editor.ICodeEditor; import IDiffEditor = monaco.editor.IDiffEditor; @@ -55,13 +55,13 @@ export class DictionaryManagerComponent implements OnChanges, OnInit { this.currentEntries = this.initialEntries; } - private _dossier: DossierWrapper = this.selectDossier as DossierWrapper; + private _dossier: Dossier = this.selectDossier as Dossier; get dossier() { return this._dossier; } - set dossier(dossier: DossierWrapper) { + set dossier(dossier: Dossier) { this._dossier = dossier; if (dossier === this.selectDossier) { @@ -204,8 +204,8 @@ export class DictionaryManagerComponent implements OnChanges, OnInit { this._codeEditor.revealLineInCenter(range.startLineNumber, SMOOTH_SCROLL); } - private _onDossierChanged({ dossierId, dossierTemplateId }: DossierWrapper): Observable { - const dictionary$ = this._dictionaryControllerService.getDictionaryForType(dossierTemplateId, 'dossier_redaction', dossierId); + private _onDossierChanged({ id, dossierTemplateId }: Dossier): Observable { + const dictionary$ = this._dictionaryControllerService.getDictionaryForType(dossierTemplateId, 'dossier_redaction', id); return dictionary$.pipe(map(data => this._toString(data.entries))); } 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 21cac798a..c8b726ced 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 @@ -5,7 +5,7 @@ import { DossierAttributesControllerService, DossierAttributesRes } from '@redaction/red-ui-http'; -import { DossierWrapper } from '@state/model/dossier.wrapper'; +import { Dossier } from '@state/model/dossier'; import { DossierAttributeWithValue } from '@models/dossier-attributes.model'; import { AppStateService } from '@state/app-state.service'; import { Observable } from 'rxjs'; @@ -19,10 +19,10 @@ export class DossierAttributesService { private readonly _appStateService: AppStateService ) {} - async getValues(dossierWrapper: DossierWrapper): Promise { - const attributes = await this._dossierAttributesControllerService.getDossierAttributes(dossierWrapper.dossierId).toPromise(); + async getValues(dossier: Dossier): Promise { + const attributes = await this._dossierAttributesControllerService.getDossierAttributes(dossier.id).toPromise(); const attributesConfig = await this._dossierAttributesControllerService - .getDossierAttributesConfig(dossierWrapper.dossierTemplateId) + .getDossierAttributesConfig(dossier.dossierTemplateId) .toPromise(); return attributesConfig.dossierAttributeConfigs.map(config => ({ @@ -31,10 +31,8 @@ export class DossierAttributesService { })); } - setValues(dossierWrapper: DossierWrapper, dossierAttributeList: DossierAttributeReq[]): Promise { - return this._dossierAttributesControllerService - .setDossierAttributes({ dossierAttributeList }, dossierWrapper.dossierId) - .toPromise(); + setValues(dossier: Dossier, dossierAttributeList: DossierAttributeReq[]): Promise { + return this._dossierAttributesControllerService.setDossierAttributes({ dossierAttributeList }, dossier.id).toPromise(); } deleteConfigs(ids: string[], dossierTemplateId = this._appStateService.activeDossierTemplateId): Promise { 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 8c3c0f914..c677eb2dd 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,7 +1,7 @@ import { DownloadDetails, DownloadStatus } from '@redaction/red-ui-http'; -import { Listable } from '@iqser/common-ui'; +import { IListable } from '@iqser/common-ui'; -export class DownloadStatusWrapper implements Listable { +export class DownloadStatusWrapper implements IListable { inProgress: boolean; constructor(private _downloadStatus: DownloadStatus) {} diff --git a/apps/red-ui/src/app/modules/upload-download/services/file-download.service.ts b/apps/red-ui/src/app/modules/upload-download/services/file-download.service.ts index 597119a99..57716aea0 100644 --- a/apps/red-ui/src/app/modules/upload-download/services/file-download.service.ts +++ b/apps/red-ui/src/app/modules/upload-download/services/file-download.service.ts @@ -3,7 +3,7 @@ import { DownloadControllerService, FileManagementControllerService } from '@red import { interval, Observable } from 'rxjs'; import { ConfigService } from '@services/config.service'; import { TranslateService } from '@ngx-translate/core'; -import { DossierWrapper } from '@state/model/dossier.wrapper'; +import { Dossier } from '@state/model/dossier'; import { FileStatusWrapper } from '@models/file/file-status.wrapper'; import { mergeMap, tap } from 'rxjs/operators'; import { DownloadStatusWrapper } from '../model/download-status.wrapper'; @@ -34,11 +34,11 @@ export class FileDownloadService { }); } - downloadFiles(fileStatusWrappers: FileStatusWrapper[], dossier: DossierWrapper): Observable { + downloadFiles(fileStatusWrappers: FileStatusWrapper[], dossier: Dossier): Observable { return this._downloadControllerService .prepareDownload({ fileIds: fileStatusWrappers.map(f => f.fileId), - dossierId: dossier.dossierId + dossierId: dossier.id }) .pipe(mergeMap(() => this.getDownloadStatus())); } diff --git a/apps/red-ui/src/app/services/permissions.service.ts b/apps/red-ui/src/app/services/permissions.service.ts index 1a87cc9d9..56f13cc3d 100644 --- a/apps/red-ui/src/app/services/permissions.service.ts +++ b/apps/red-ui/src/app/services/permissions.service.ts @@ -3,7 +3,7 @@ import { AppStateService } from '@state/app-state.service'; import { UserService } from './user.service'; import { FileStatusWrapper } from '@models/file/file-status.wrapper'; import { Comment } from '@redaction/red-ui-http'; -import { DossierWrapper } from '@state/model/dossier.wrapper'; +import { Dossier } from '../state/model/dossier'; @Injectable({ providedIn: 'root' @@ -15,7 +15,7 @@ export class PermissionsService { return this._appStateService.activeFile; } - private get _activeDossier(): DossierWrapper | undefined { + private get _activeDossier(): Dossier | undefined { return this._appStateService.activeDossier; } @@ -42,14 +42,14 @@ export class PermissionsService { return fileStatus.currentReviewer === this._userService.currentUser.id; } - canDeleteFile(fileStatus = this._activeFile, dossier?: DossierWrapper): boolean { + canDeleteFile(fileStatus = this._activeFile, dossier?: Dossier): boolean { return (this.isOwner(dossier) && !fileStatus.isApproved) || fileStatus.isUnassigned; } canAssignToSelf(fileStatus = this._activeFile): boolean { const precondition = this.isDossierMember() && !fileStatus.isProcessing && !fileStatus.isError && !fileStatus.isApproved; - const isTheOnlyReviewer = !this._appStateService.activeDossier?.hasMoreThanOneReviewer; + const isTheOnlyReviewer = !this._appStateService.activeDossier?.hasReviewers; if (precondition) { if ( @@ -66,10 +66,10 @@ export class PermissionsService { const precondition = !fileStatus.isProcessing && !fileStatus.isError && !fileStatus.isApproved && this.isApprover(); if (precondition) { - if ((fileStatus.isUnassigned || fileStatus.isUnderReview) && this._activeDossier.hasMoreThanOneReviewer) { + if ((fileStatus.isUnassigned || fileStatus.isUnderReview) && this._activeDossier.hasReviewers) { return true; } - if (fileStatus.isUnderApproval && this._activeDossier.hasMoreThanOneApprover) { + if (fileStatus.isUnderApproval && this._activeDossier.approverIds.length > 1) { return true; } } diff --git a/apps/red-ui/src/app/services/user.service.ts b/apps/red-ui/src/app/services/user.service.ts index a7b86c994..157500e5a 100644 --- a/apps/red-ui/src/app/services/user.service.ts +++ b/apps/red-ui/src/app/services/user.service.ts @@ -6,7 +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'; +import { IListable } from '@iqser/common-ui'; export interface ProfileModel { username?: string; @@ -16,7 +16,7 @@ export interface ProfileModel { language: string; } -export class UserWrapper implements Listable { +export class UserWrapper implements IListable { 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/app-state.service.ts b/apps/red-ui/src/app/state/app-state.service.ts index f28d7bebe..59868c4fe 100644 --- a/apps/red-ui/src/app/state/app-state.service.ts +++ b/apps/red-ui/src/app/state/app-state.service.ts @@ -1,11 +1,11 @@ import { Injectable } from '@angular/core'; import { DictionaryControllerService, - Dossier, DossierTemplateControllerService, FileAttributesConfig, FileAttributesControllerService, FileStatus, + IDossier, ReanalysisControllerService, StatusControllerService } from '@redaction/red-ui-http'; @@ -17,7 +17,7 @@ import { forkJoin, Observable, of, Subject } from 'rxjs'; import { catchError, map, tap } from 'rxjs/operators'; import { FALLBACK_COLOR, hexToRgb } from '@utils/functions'; import { FileStatusWrapper } from '@models/file/file-status.wrapper'; -import { DossierWrapper } from './model/dossier.wrapper'; +import { Dossier } from './model/dossier'; import { TypeValueWrapper } from '@models/file/type-value.wrapper'; import { DossierTemplateModelWrapper } from '@models/file/dossier-template-model.wrapper'; import { DossiersService } from '../modules/dossier/services/dossiers.service'; @@ -25,7 +25,7 @@ import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker'; import { UserPreferenceService } from '@services/user-preference.service'; export interface AppState { - dossiers: DossierWrapper[]; + dossiers: Dossier[]; dossierTemplates: DossierTemplateModelWrapper[]; activeDossierId: string; activeFileId: string; @@ -42,7 +42,7 @@ export interface AppState { export class AppStateService { readonly fileChanged$ = new Subject(); readonly fileReanalysed$ = new Subject(); - readonly dossierChanged$ = new Subject(); + readonly dossierChanged$ = new Subject(); readonly dossierTemplateChanged$ = new Subject(); private _appState: AppState; @@ -121,11 +121,11 @@ export class AppStateService { return this._appState.activeDossierId; } - get activeDossier(): DossierWrapper | undefined { - return this.allDossiers.find(p => p.dossierId === this.activeDossierId); + get activeDossier(): Dossier | undefined { + return this.allDossiers.find(p => p.id === this.activeDossierId); } - get allDossiers(): DossierWrapper[] { + get allDossiers(): Dossier[] { return this._appState.dossiers; } @@ -208,7 +208,7 @@ export class AppStateService { } getDossierById(id: string) { - return this.allDossiers.find(dossier => dossier.dossierId === id); + return this.allDossiers.find(dossier => dossier.id === id); } getFileById(dossierId: string, fileId: string) { @@ -222,12 +222,12 @@ export class AppStateService { } const mappedDossiers = dossiers.map( - p => new DossierWrapper(p, this.getDossierTemplateById(p.dossierTemplateId).name, this._getExistingFiles(p.dossierId)) + p => new Dossier(p, this.getDossierTemplateById(p.dossierTemplateId).name, this._getExistingFiles(p.dossierId)) ); - const fileData = await this._statusControllerService.getFileStatusForDossiers(mappedDossiers.map(p => p.dossierId)).toPromise(); + const fileData = await this._statusControllerService.getFileStatusForDossiers(mappedDossiers.map(p => p.id)).toPromise(); for (const dossierId of Object.keys(fileData)) { - const dossier = mappedDossiers.find(p => p.dossierId === dossierId); + const dossier = mappedDossiers.find(p => p.id === dossierId); this._processFiles(dossier, fileData[dossierId], emitEvents); } @@ -261,14 +261,14 @@ export class AppStateService { return activeFileWrapper; } - async getFiles(dossier: DossierWrapper = this.activeDossier, emitEvents = true) { - const files = await this._statusControllerService.getDossierStatus(dossier.dossierId).toPromise(); + async getFiles(dossier: Dossier = this.activeDossier, emitEvents = true) { + const files = await this._statusControllerService.getDossierStatus(dossier.id).toPromise(); return this._processFiles(dossier, files, emitEvents); } - async reanalyzeDossier({ dossierId }: DossierWrapper = this.activeDossier) { - await this._reanalysisControllerService.reanalyzeDossier(dossierId, true).toPromise(); + async reanalyzeDossier({ id }: Dossier = this.activeDossier) { + await this._reanalysisControllerService.reanalyzeDossier(id, true).toPromise(); } async activateDossier(dossierId: string) { @@ -337,29 +337,29 @@ export class AppStateService { this._appState.activeDictionaryType = null; } - deleteDossier(dossier: DossierWrapper) { - return this._dossiersService.delete(dossier.dossierId).then( + deleteDossier(dossier: Dossier) { + return this._dossiersService.delete(dossier.id).then( () => { - const index = this.allDossiers.findIndex(p => p.dossierId === dossier.dossierId); + 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 }) ); } - async createOrUpdateDossier(dossier: Dossier) { + async createOrUpdateDossier(dossier: IDossier) { try { const updatedDossier = await this._dossiersService.createOrUpdate(dossier); - let foundDossier = this.allDossiers.find(p => p.dossierId === updatedDossier.dossierId); + let foundDossier = this.allDossiers.find(p => p.id === updatedDossier.dossierId); if (foundDossier) { this._appState.dossiers.splice(this._appState.dossiers.indexOf(foundDossier), 1); - foundDossier = new DossierWrapper( + foundDossier = new Dossier( updatedDossier, this.getDossierTemplateById(updatedDossier.dossierTemplateId).name, foundDossier.files ); } else { - foundDossier = new DossierWrapper(updatedDossier, this.getDossierTemplateById(updatedDossier.dossierTemplateId).name, []); + foundDossier = new Dossier(updatedDossier, this.getDossierTemplateById(updatedDossier.dossierTemplateId).name, []); } this._appState.dossiers.push(foundDossier); @@ -689,11 +689,11 @@ export class AppStateService { } private _getExistingFiles(dossierId: string): FileStatusWrapper[] { - const dossier = this.allDossiers.find(p => p.dossierId === dossierId); + const dossier = this.allDossiers.find(p => p.id === dossierId); return dossier?.files ?? []; } - private _processFiles(dossier: DossierWrapper, files: FileStatus[], emitEvents: boolean = true) { + private _processFiles(dossier: Dossier, files: FileStatus[], emitEvents: boolean = true) { const oldFiles = [...dossier.files]; const fileStatusChangedEvent = []; @@ -712,7 +712,7 @@ export class AppStateService { this.getFileAttributeConfig(file.dossierTemplateId) ); fileStatusWrapper.lastOpened = - fileStatusWrapper.fileId === this._userPreferenceService.getLastOpenedFileForDossier(dossier.dossierId); + fileStatusWrapper.fileId === this._userPreferenceService.getLastOpenedFileForDossier(dossier.id); if (JSON.stringify(oldFile) !== JSON.stringify(fileStatusWrapper)) { fileStatusChangedEvent.push(fileStatusWrapper); } @@ -749,7 +749,7 @@ export class AppStateService { fileStatusChangedEvent.forEach(file => this.fileChanged$.next(file)); } - const lastOpenedFileId = this._userPreferenceService.getLastOpenedFileForDossier(dossier.dossierId); + const lastOpenedFileId = this._userPreferenceService.getLastOpenedFileForDossier(dossier.id); dossier.files.forEach(file => (file.lastOpened = file.fileId === lastOpenedFileId)); @@ -764,7 +764,6 @@ export class AppStateService { this.allDossiers.forEach(d => { totalDocuments += d.files.length; d.memberIds?.forEach(m => totalPeople.add(m)); - d.totalNumberOfPages = d.files.reduce((acc, file) => acc + file.numberOfPages, 0); totalAnalysedPages += d.totalNumberOfPages; }); diff --git a/apps/red-ui/src/app/state/model/dossier.wrapper.ts b/apps/red-ui/src/app/state/model/dossier.ts similarity index 51% rename from apps/red-ui/src/app/state/model/dossier.wrapper.ts rename to apps/red-ui/src/app/state/model/dossier.ts index b7cf48f4d..5af2fd91e 100644 --- a/apps/red-ui/src/app/state/model/dossier.wrapper.ts +++ b/apps/red-ui/src/app/state/model/dossier.ts @@ -1,29 +1,25 @@ 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'; +import { Dictionary, DossierStatus, DownloadFileType, IDossier, List } from '@redaction/red-ui-http'; +import { IListable } from '@iqser/common-ui'; -export class DossierWrapper implements Dossier, Listable { - readonly approverIds = this._dossier.approverIds; - readonly date = this._dossier.date; - readonly description = this._dossier.description; - readonly dossierId = this._dossier.dossierId; - readonly dossierName = this._dossier.dossierName; - readonly dossierTemplateId = this._dossier.dossierTemplateId; - readonly downloadFileTypes = this._dossier.downloadFileTypes; - readonly dueDate = this._dossier.dueDate; - readonly hardDeletedTime = this._dossier.hardDeletedTime; - readonly memberIds = this._dossier.memberIds; - readonly ownerId = this._dossier.ownerId; - readonly reportTemplateIds = this._dossier.reportTemplateIds; - readonly reportTypes = this._dossier.reportTypes; - readonly softDeletedTime = this._dossier.softDeletedTime; - readonly status = this._dossier.status; - readonly watermarkEnabled = this._dossier.watermarkEnabled; - - readonly hasMoreThanOneApprover = this.approverIds.length > 1; - readonly hasMoreThanOneReviewer = this.memberIds.length > 1; - readonly memberCount = this.memberIds.length; +export class Dossier implements IDossier, IListable { + readonly id: string; + readonly ownerId: string; + readonly memberIds: List; + readonly approverIds: List; + readonly reportTemplateIds: List; + readonly dossierTemplateId: string; + readonly dossierName: string; + readonly date: string; + readonly description: string; + readonly downloadFileTypes: List; + readonly dueDate: string; + readonly hardDeletedTime: string; + readonly reportTypes: List; + readonly softDeletedTime: string; + readonly status: DossierStatus; + readonly watermarkEnabled: boolean; + readonly hasReviewers: boolean; reanalysisRequired = this._files.some(file => file.analysisRequired); hasFiles = this._files.length > 0; @@ -39,12 +35,26 @@ export class DossierWrapper implements Dossier, Listable { allFilesApproved?: boolean; type?: Dictionary; - constructor(private readonly _dossier: Dossier, readonly dossierTemplateName, private _files: FileStatusWrapper[] = []) { - this._recomputeFileStatus(); - } + constructor(dossier: IDossier, readonly dossierTemplateName: string, private _files: FileStatusWrapper[] = []) { + this.id = dossier.dossierId; + this.approverIds = dossier.approverIds; + this.date = dossier.date; + this.description = dossier.description; + this.dossierName = dossier.dossierName; + this.dossierTemplateId = dossier.dossierTemplateId; + this.downloadFileTypes = dossier.downloadFileTypes; + this.dueDate = dossier.dueDate; + this.hardDeletedTime = dossier.hardDeletedTime; + this.memberIds = dossier.memberIds; + this.ownerId = dossier.ownerId; + this.reportTemplateIds = dossier.reportTemplateIds; + this.reportTypes = dossier.reportTypes; + this.softDeletedTime = dossier.softDeletedTime; + this.status = dossier.status; + this.watermarkEnabled = dossier.watermarkEnabled; + this.hasReviewers = this.memberIds.length > 1; - get id() { - return this.dossierId; + this._recomputeFileStatus(); } get files() { @@ -61,11 +71,7 @@ export class DossierWrapper implements Dossier, Listable { } hasMember(memberId: string) { - return this._dossier.memberIds.indexOf(memberId) >= 0; - } - - addedDateMatches(key: string) { - return moment(this.date).format('DD/MM/YYYY') === key; + return this.memberIds.indexOf(memberId) >= 0; } private _recomputeFileStatus() { diff --git a/apps/red-ui/src/app/translations/download-types-translations.ts b/apps/red-ui/src/app/translations/download-types-translations.ts index ba6bdf18d..043e96878 100644 --- a/apps/red-ui/src/app/translations/download-types-translations.ts +++ b/apps/red-ui/src/app/translations/download-types-translations.ts @@ -1,7 +1,7 @@ import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker'; -import { Dossier } from '@redaction/red-ui-http'; +import { DownloadFileType } from '@redaction/red-ui-http'; -export const downloadTypesTranslations: { [key in Dossier.DownloadFileTypesEnum]: string } = { +export const downloadTypesTranslations: { [key in DownloadFileType]: string } = { ORIGINAL: _('download-type.original'), PREVIEW: _('download-type.preview'), REDACTED: _('download-type.redacted'), diff --git a/apps/red-ui/src/app/utils/file-drop-utils.ts b/apps/red-ui/src/app/utils/file-drop-utils.ts index a2a02e397..d9ea0c46c 100644 --- a/apps/red-ui/src/app/utils/file-drop-utils.ts +++ b/apps/red-ui/src/app/utils/file-drop-utils.ts @@ -1,7 +1,7 @@ import { FileUploadModel } from '@upload-download/model/file-upload.model'; -import { DossierWrapper } from '@state/model/dossier.wrapper'; +import { Dossier } from '../state/model/dossier'; -export function handleFileDrop(event: DragEvent, dossier: DossierWrapper, uploadFiles: (files: FileUploadModel[]) => void) { +export function handleFileDrop(event: DragEvent, dossier: Dossier, uploadFiles: (files: FileUploadModel[]) => void) { event.preventDefault(); event.stopPropagation(); const { dataTransfer } = event; @@ -30,7 +30,7 @@ export function isCsv(file: FileUploadModel): boolean { return file.file.type?.toLowerCase() === 'text/csv' || file.file.name.toLowerCase().endsWith('.csv'); } -export function convertFiles(files: FileList | File[], dossier: DossierWrapper): FileUploadModel[] { +export function convertFiles(files: FileList | File[], dossier: Dossier): FileUploadModel[] { let uploadFiles: FileUploadModel[] = []; for (let i = 0; i < files.length; i++) { const file = files[i]; @@ -39,7 +39,7 @@ export function convertFiles(files: FileList | File[], dossier: DossierWrapper): progress: 0, completed: false, error: null, - dossierId: dossier.dossierId, + dossierId: dossier.id, dossierName: dossier.dossierName, sizeError: false, retryCount: 0, diff --git a/apps/red-ui/src/app/utils/filter-utils.ts b/apps/red-ui/src/app/utils/filter-utils.ts index e45b90362..00af3590e 100644 --- a/apps/red-ui/src/app/utils/filter-utils.ts +++ b/apps/red-ui/src/app/utils/filter-utils.ts @@ -1,5 +1,5 @@ import { FileStatusWrapper } from '@models/file/file-status.wrapper'; -import { DossierWrapper } from '@state/model/dossier.wrapper'; +import { Dossier } from '../state/model/dossier'; import { handleCheckedValue, NestedFilter } from '@iqser/common-ui'; export function handleFilterDelta(oldFilters: NestedFilter[], newFilters: NestedFilter[], allFilters: NestedFilter[]) { @@ -45,10 +45,10 @@ export function handleFilterDelta(oldFilters: NestedFilter[], newFilters: Nested }); } -export const annotationFilterChecker = (input: FileStatusWrapper | DossierWrapper, filter: NestedFilter) => { +export const annotationFilterChecker = (input: FileStatusWrapper | Dossier, filter: NestedFilter) => { switch (filter.key) { case 'analysis': { - if (input instanceof DossierWrapper) { + if (input instanceof Dossier) { return input.reanalysisRequired; } else { return input.analysisRequired; @@ -78,10 +78,10 @@ export const annotationFilterChecker = (input: FileStatusWrapper | DossierWrappe } }; -export const dossierStatusChecker = (dw: DossierWrapper, filter: NestedFilter) => dw.hasStatus(filter.key); +export const dossierStatusChecker = (dw: Dossier, filter: NestedFilter) => dw.hasStatus(filter.key); -export const dossierMemberChecker = (dw: DossierWrapper, filter: NestedFilter) => dw.hasMember(filter.key); +export const dossierMemberChecker = (dw: Dossier, filter: NestedFilter) => dw.hasMember(filter.key); -export const dossierTemplateChecker = (dw: DossierWrapper, filter: NestedFilter) => dw.dossierTemplateId === filter.key; +export const dossierTemplateChecker = (dw: Dossier, filter: NestedFilter) => dw.dossierTemplateId === filter.key; -export const dossierApproverChecker = (dw: DossierWrapper, filter: NestedFilter) => dw.approverIds.includes(filter.key); +export const dossierApproverChecker = (dw: Dossier, filter: NestedFilter) => dw.approverIds.includes(filter.key); diff --git a/libs/common-ui b/libs/common-ui index 0dc6d05ce..4ffdb4e41 160000 --- a/libs/common-ui +++ b/libs/common-ui @@ -1 +1 @@ -Subproject commit 0dc6d05cef931e2682bb9584ad0d0cb31144e5c6 +Subproject commit 4ffdb4e413a71bbcafadab719dc19a565d489128 diff --git a/libs/red-ui-http/src/lib/api/dossierController.service.ts b/libs/red-ui-http/src/lib/api/dossierController.service.ts index 8995f46de..858653fd6 100644 --- a/libs/red-ui-http/src/lib/api/dossierController.service.ts +++ b/libs/red-ui-http/src/lib/api/dossierController.service.ts @@ -16,7 +16,7 @@ import { CustomHttpUrlEncodingCodec } from '../encoder'; import { Observable } from 'rxjs'; -import { Dossier } from '../model/dossier'; +import { IDossier } from '../model/dossier'; import { DossierRequest } from '../model/dossierRequest'; import { BASE_PATH } from '../variables'; @@ -49,11 +49,11 @@ export class DossierControllerService { * @param observe set whether or not to return the data Observable as the body, response or events. defaults to returning the body. * @param reportProgress flag to report request and response progress. */ - public createOrUpdateDossier(body: DossierRequest, observe?: 'body', reportProgress?: boolean): Observable; + public createOrUpdateDossier(body: DossierRequest, observe?: 'body', reportProgress?: boolean): Observable; - public createOrUpdateDossier(body: DossierRequest, observe?: 'response', reportProgress?: boolean): Observable>; + public createOrUpdateDossier(body: DossierRequest, observe?: 'response', reportProgress?: boolean): Observable>; - public createOrUpdateDossier(body: DossierRequest, observe?: 'events', reportProgress?: boolean): Observable>; + public createOrUpdateDossier(body: DossierRequest, observe?: 'events', reportProgress?: boolean): Observable>; public createOrUpdateDossier(body: DossierRequest, observe: any = 'body', reportProgress: boolean = false): Observable { if (body === null || body === undefined) { @@ -83,7 +83,7 @@ export class DossierControllerService { headers = headers.set('Content-Type', httpContentTypeSelected); } - return this.httpClient.request('post', `${this.basePath}/dossier`, { + return this.httpClient.request('post', `${this.basePath}/dossier`, { body: body, withCredentials: this.configuration.withCredentials, headers: headers, @@ -140,11 +140,11 @@ export class DossierControllerService { * @param observe set whether or not to return the data Observable as the body, response or events. defaults to returning the body. * @param reportProgress flag to report request and response progress. */ - public getDeletedDossiers(observe?: 'body', reportProgress?: boolean): Observable>; + public getDeletedDossiers(observe?: 'body', reportProgress?: boolean): Observable>; - public getDeletedDossiers(observe?: 'response', reportProgress?: boolean): Observable>>; + public getDeletedDossiers(observe?: 'response', reportProgress?: boolean): Observable>>; - public getDeletedDossiers(observe?: 'events', reportProgress?: boolean): Observable>>; + public getDeletedDossiers(observe?: 'events', reportProgress?: boolean): Observable>>; public getDeletedDossiers(observe: any = 'body', reportProgress: boolean = false): Observable { let headers = this.defaultHeaders; @@ -163,7 +163,7 @@ export class DossierControllerService { headers = headers.set('Accept', httpHeaderAcceptSelected); } - return this.httpClient.request>('get', `${this.basePath}/deleted-dossiers`, { + return this.httpClient.request>('get', `${this.basePath}/deleted-dossiers`, { withCredentials: this.configuration.withCredentials, headers: headers, observe: observe, @@ -178,11 +178,11 @@ export class DossierControllerService { * @param observe set whether or not to return the data Observable as the body, response or events. defaults to returning the body. * @param reportProgress flag to report request and response progress. */ - public getDossier(dossierId: string, observe?: 'body', reportProgress?: boolean): Observable; + public getDossier(dossierId: string, observe?: 'body', reportProgress?: boolean): Observable; - public getDossier(dossierId: string, observe?: 'response', reportProgress?: boolean): Observable>; + public getDossier(dossierId: string, observe?: 'response', reportProgress?: boolean): Observable>; - public getDossier(dossierId: string, observe?: 'events', reportProgress?: boolean): Observable>; + public getDossier(dossierId: string, observe?: 'events', reportProgress?: boolean): Observable>; public getDossier(dossierId: string, observe: any = 'body', reportProgress: boolean = false): Observable { if (dossierId === null || dossierId === undefined) { @@ -205,7 +205,7 @@ export class DossierControllerService { headers = headers.set('Accept', httpHeaderAcceptSelected); } - return this.httpClient.request('get', `${this.basePath}/dossier/${encodeURIComponent(String(dossierId))}`, { + return this.httpClient.request('get', `${this.basePath}/dossier/${encodeURIComponent(String(dossierId))}`, { withCredentials: this.configuration.withCredentials, headers: headers, observe: observe, @@ -219,11 +219,11 @@ export class DossierControllerService { * @param observe set whether or not to return the data Observable as the body, response or events. defaults to returning the body. * @param reportProgress flag to report request and response progress. */ - public getDossiers(observe?: 'body', reportProgress?: boolean): Observable>; + public getDossiers(observe?: 'body', reportProgress?: boolean): Observable>; - public getDossiers(observe?: 'response', reportProgress?: boolean): Observable>>; + public getDossiers(observe?: 'response', reportProgress?: boolean): Observable>>; - public getDossiers(observe?: 'events', reportProgress?: boolean): Observable>>; + public getDossiers(observe?: 'events', reportProgress?: boolean): Observable>>; public getDossiers(observe: any = 'body', reportProgress: boolean = false): Observable { let headers = this.defaultHeaders; @@ -242,7 +242,7 @@ export class DossierControllerService { headers = headers.set('Accept', httpHeaderAcceptSelected); } - return this.httpClient.request>('get', `${this.basePath}/dossier`, { + return this.httpClient.request>('get', `${this.basePath}/dossier`, { withCredentials: this.configuration.withCredentials, headers: headers, observe: observe, diff --git a/libs/red-ui-http/src/lib/index.ts b/libs/red-ui-http/src/lib/index.ts index 410623f1c..9e8b8971c 100644 --- a/libs/red-ui-http/src/lib/index.ts +++ b/libs/red-ui-http/src/lib/index.ts @@ -3,3 +3,4 @@ export * from './model/models'; export * from './variables'; export * from './configuration'; export * from './api.module'; +export * from './red-types'; diff --git a/libs/red-ui-http/src/lib/model/dossier.ts b/libs/red-ui-http/src/lib/model/dossier.ts index e5f28bc68..f87e6224b 100644 --- a/libs/red-ui-http/src/lib/model/dossier.ts +++ b/libs/red-ui-http/src/lib/model/dossier.ts @@ -9,38 +9,38 @@ * https://github.com/swagger-api/swagger-codegen.git * Do not edit the class manually. */ +import { List } from '../red-types'; -export interface Dossier { - approverIds?: Array; - date?: string; - description?: string; - dossierId?: string; - dossierName?: string; - dossierTemplateId?: string; - downloadFileTypes?: Array; - dueDate?: string; - hardDeletedTime?: string; - memberIds?: Array; - ownerId?: string; - reportTemplateIds?: Array; - reportTypes?: Array; - softDeletedTime?: string; - status?: Dossier.StatusEnum; - watermarkEnabled?: boolean; +export interface IDossier { + readonly approverIds?: List; + readonly date?: string; + readonly description?: string; + readonly dossierId?: string; + readonly dossierName?: string; + readonly dossierTemplateId?: string; + readonly downloadFileTypes?: List; + readonly dueDate?: string; + readonly hardDeletedTime?: string; + readonly memberIds?: List; + readonly ownerId?: string; + readonly reportTemplateIds?: List; + readonly reportTypes?: List; + readonly softDeletedTime?: string; + readonly status?: DossierStatus; + readonly watermarkEnabled?: boolean; } -export namespace Dossier { - export type DownloadFileTypesEnum = 'ANNOTATED' | 'FLATTEN' | 'ORIGINAL' | 'PREVIEW' | 'REDACTED'; - export const DownloadFileTypesEnum = { - ANNOTATED: 'ANNOTATED' as DownloadFileTypesEnum, - FLATTEN: 'FLATTEN' as DownloadFileTypesEnum, - ORIGINAL: 'ORIGINAL' as DownloadFileTypesEnum, - PREVIEW: 'PREVIEW' as DownloadFileTypesEnum, - REDACTED: 'REDACTED' as DownloadFileTypesEnum - }; - export type StatusEnum = 'ACTIVE' | 'DELETED'; - export const StatusEnum = { - ACTIVE: 'ACTIVE' as StatusEnum, - DELETED: 'DELETED' as StatusEnum - }; -} +export const DownloadFileTypes = { + ANNOTATED: 'ANNOTATED', + FLATTEN: 'FLATTEN', + ORIGINAL: 'ORIGINAL', + PREVIEW: 'PREVIEW', + REDACTED: 'REDACTED' +} as const; +export type DownloadFileType = keyof typeof DownloadFileTypes; + +export const DossierStatuses = { + ACTIVE: 'ACTIVE', + DELETED: 'DELETED' +} as const; +export type DossierStatus = keyof typeof DossierStatuses; diff --git a/libs/red-ui-http/src/lib/model/dossierRequest.ts b/libs/red-ui-http/src/lib/model/dossierRequest.ts index 744fa20c5..71682ec00 100644 --- a/libs/red-ui-http/src/lib/model/dossierRequest.ts +++ b/libs/red-ui-http/src/lib/model/dossierRequest.ts @@ -10,6 +10,8 @@ * Do not edit the class manually. */ +import { List } from "../red-types"; + /** * Object containing information about a dossier. */ @@ -17,51 +19,51 @@ export interface DossierRequest { /** * The id(s) of approvers associated to this dossier. */ - approverIds?: Array; + readonly approverIds?: List; /** * The dossier's description (optional). */ - description?: string; + readonly description?: string; /** * The id of the dossier, can be null for create requests. */ - dossierId?: string; + readonly dossierId?: string; /** * The name of the dossier. Must be unique. */ - dossierName?: string; + readonly dossierName?: string; /** * The dossierTemplateId for this dossier. can be null for update request. */ - dossierTemplateId?: string; + readonly dossierTemplateId?: string; /** * Download File Types for this dossiers submission package. */ - downloadFileTypes?: Array; + readonly downloadFileTypes?: List; /** * The date when the dossier is due. */ - dueDate?: string; + readonly dueDate?: string; /** * The id(s) of members associated to this dossier. */ - memberIds?: Array; + readonly memberIds?: List; /** * The id of the owning user. */ - ownerId?: string; + readonly ownerId?: string; /** * Id(s) of the word report templates used to generate downloads */ - reportTemplateIds?: Array; + readonly reportTemplateIds?: List; /** * Report File Types for this dossiers submission package. */ - reportTypes?: Array; + readonly reportTypes?: List; /** * Whether a watermark will be applied to the redacted files or not. */ - watermarkEnabled?: boolean; + readonly watermarkEnabled?: boolean; } export namespace DossierRequest { diff --git a/libs/red-ui-http/src/lib/red-types.ts b/libs/red-ui-http/src/lib/red-types.ts new file mode 100644 index 000000000..114f10ebc --- /dev/null +++ b/libs/red-ui-http/src/lib/red-types.ts @@ -0,0 +1 @@ +export type List = readonly T[]; diff --git a/package.json b/package.json index 9a8be783f..d574ce9fb 100644 --- a/package.json +++ b/package.json @@ -106,8 +106,8 @@ "eslint": "7.32.0", "eslint-config-airbnb-typescript": "^14.0.0", "eslint-config-prettier": "8.3.0", - "eslint-plugin-prettier": "^4.0.0", "eslint-plugin-import": "2.24.2", + "eslint-plugin-prettier": "^4.0.0", "google-translate-api-browser": "^1.1.71", "husky": "4.3.8", "jest": "27.1.1",