refactor dossier model

This commit is contained in:
Dan Percic 2021-09-25 00:54:23 +03:00
parent a546b155db
commit c0640a65dc
55 changed files with 316 additions and 314 deletions

View File

@ -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'),

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -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<DossierListItem> 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<DossierListItem> impl
}
private async _restore(dossiers: DossierListItem[]): Promise<void> {
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([]);
}

View File

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

View File

@ -4,7 +4,7 @@
</div>
<div>
<mat-icon svgIcon="red:user"></mat-icon>
<span>{{ 'dossier-overview.dossier-details.stats.people' | translate: { count: activeDossier.memberCount } }}</span>
<span>{{ 'dossier-overview.dossier-details.stats.people' | translate: { count: activeDossier.memberIds.length } }}</span>
</div>
<div>
<mat-icon svgIcon="red:pages"></mat-icon>

View File

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

View File

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

View File

@ -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<DossierWrapper | undefined>();
@Input() dossier: Dossier;
@Output() actionPerformed = new EventEmitter<Dossier | undefined>();
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());

View File

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

View File

@ -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<Dossier>();
@Output() readonly save = new EventEmitter<IDossier>();
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);

View File

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

View File

@ -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,

View File

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

View File

@ -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,

View File

@ -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<any>();
customAttributes: DossierAttributeWithValue[] = [];
imageAttributes: DossierAttributeWithValue[] = [];

View File

@ -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<FileListItem> implements EditDossierSectionInterface, OnInit {
@Input() dossierWrapper: DossierWrapper;
@Output() updateDossier = new EventEmitter<any>();
@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<FileL
async ngOnInit() {
this._configureTableColumns();
this._loadingService.start();
const files = await this._statusController.getDeletedFileStatus(this.dossierWrapper.dossierId).toPromise();
const files = await this._statusController.getDeletedFileStatus(this.dossier.id).toPromise();
this.entitiesService.setEntities(this._toListItems(files));
this.sortingService.setSortingOption({
column: 'softDeleted',
@ -138,7 +138,7 @@ export class EditDossierDeletedDocumentsComponent extends ListingComponent<FileL
private async _restore(files: FileListItem[]): Promise<void> {
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<FileL
private async _hardDelete(files: FileListItem[]) {
const fileIds = files.map(f => 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();
}

View File

@ -1,10 +1,10 @@
<div class="header-wrapper">
<div class="heading">
<div>{{ dossierWrapper.type?.label }}</div>
<div>{{ dossier.type?.label }}</div>
<div class="small-label stats-subtitle">
<div>
<mat-icon svgIcon="red:entries"></mat-icon>
{{ 'edit-dossier-dialog.dictionary.entries' | translate: { length: (dossierWrapper.type?.entries || []).length } }}
{{ 'edit-dossier-dialog.dictionary.entries' | translate: { length: (dossier.type?.entries || []).length } }}
</div>
</div>
</div>
@ -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"
></iqser-editable-input>
</div>
</div>
<redaction-dictionary-manager
[canEdit]="canEdit"
[initialEntries]="dossierWrapper.type?.entries || []"
[initialEntries]="dossier.type?.entries || []"
[withFloatingActions]="false"
></redaction-dictionary-manager>

View File

@ -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<any> = new EventEmitter<any>();
@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();
}

View File

@ -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<any>();
constructor(

View File

@ -1,6 +1,6 @@
<section class="dialog">
<div class="dialog-header heading-l">
{{ 'edit-dossier-dialog.header' | translate: { dossierName: dossierWrapper.dossierName } }}
{{ 'edit-dossier-dialog.header' | translate: { dossierName: dossier.dossierName } }}
</div>
<div class="dialog-content">
@ -22,37 +22,37 @@
<redaction-edit-dossier-general-info
(updateDossier)="updatedDossier()"
*ngIf="activeNav === 'dossierInfo'"
[dossierWrapper]="dossierWrapper"
[dossierWrapper]="dossier"
></redaction-edit-dossier-general-info>
<redaction-edit-dossier-download-package
(updateDossier)="updatedDossier()"
*ngIf="activeNav === 'downloadPackage'"
[dossierWrapper]="dossierWrapper"
[dossierWrapper]="dossier"
></redaction-edit-dossier-download-package>
<redaction-edit-dossier-dictionary
(updateDossier)="updatedDossier()"
*ngIf="activeNav === 'dossierDictionary'"
[dossierWrapper]="dossierWrapper"
[dossier]="dossier"
></redaction-edit-dossier-dictionary>
<redaction-edit-dossier-team-members
(updateDossier)="updatedDossier()"
*ngIf="activeNav === 'members'"
[dossierWrapper]="dossierWrapper"
[dossierWrapper]="dossier"
></redaction-edit-dossier-team-members>
<redaction-edit-dossier-attributes
(updateDossier)="updatedDossier()"
*ngIf="activeNav === 'dossierAttributes'"
[dossierWrapper]="dossierWrapper"
[dossierWrapper]="dossier"
></redaction-edit-dossier-attributes>
<redaction-edit-dossier-deleted-documents
(updateDossier)="updatedDossier()"
*ngIf="activeNav === 'deletedDocuments'"
[dossierWrapper]="dossierWrapper"
[dossier]="dossier"
></redaction-edit-dossier-deleted-documents>
</div>

View File

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

View File

@ -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<any>();
constructor(

View File

@ -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<any>();
@ViewChild(TeamMembersManagerComponent) managerComponent: TeamMembersManagerComponent;

View File

@ -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<DossierWrapper>
extends ListingComponent<Dossier>
implements OnInit, AfterViewInit, OnDestroy, OnAttach, OnDetach
{
readonly currentUser = this._userService.currentUser;
@ -43,7 +43,7 @@ export class DossierListingScreenComponent
type: 'primary'
}
];
tableColumnConfigs: TableColumnConfig<DossierWrapper>[];
tableColumnConfigs: TableColumnConfig<Dossier>[];
dossiersChartData: DoughnutChartConfig[] = [];
documentsChartData: DoughnutChartConfig[] = [];
@ViewChild('nameTemplate', { static: true }) nameTemplate: TemplateRef<never>;
@ -57,7 +57,7 @@ export class DossierListingScreenComponent
static: true
})
private readonly _needsWorkFilterTemplate: TemplateRef<unknown>;
@ViewChild(TableComponent) private readonly _tableComponent: TableComponent<DossierWrapper>;
@ViewChild(TableComponent) private readonly _tableComponent: TableComponent<Dossier>;
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<NestedFilter>(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)
}
];

View File

@ -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<FileStatusW
@ViewChild('needsWorkFilterTemplate', { read: TemplateRef, static: true })
private readonly _needsWorkFilterTemplate: TemplateRef<unknown>;
@ViewChild('fileInput') private readonly _fileInput: ElementRef;
@ViewChild(TableComponent) private readonly _tableComponent: TableComponent<DossierWrapper>;
@ViewChild(TableComponent) private readonly _tableComponent: TableComponent<Dossier>;
constructor(
private readonly _toaster: Toaster,
@ -210,7 +210,7 @@ export class DossierOverviewScreenComponent extends ListingComponent<FileStatusW
}
routerLinkFn = (fileStatus: FileStatusWrapper) =>
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;

View File

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

View File

@ -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<ListItem> 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<ListItem> implements
return this._appStateService.getFileById(dossierId, fileId);
}
private _getDossierWrapper(dossierId: string): DossierWrapper {
private _getDossierWrapper(dossierId: string): Dossier {
return this._appStateService.getDossierById(dossierId);
}

View File

@ -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<Dossier> {
createOrUpdate(dossier: IDossier): Promise<IDossier> {
return this._dossierControllerService.createOrUpdateDossier(dossier).toPromise();
}
@ -15,11 +15,11 @@ export class DossiersService {
return this._dossierControllerService.deleteDossier(dossierId).toPromise();
}
getAll(): Promise<Dossier[]> {
getAll(): Promise<IDossier[]> {
return this._dossierControllerService.getDossiers().toPromise();
}
getDeleted(): Promise<Dossier[]> {
getDeleted(): Promise<IDossier[]> {
return this._dossierControllerService.getDeletedDossiers().toPromise();
}

View File

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

View File

@ -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<UserWrapper | string>;
@Output() save = new EventEmitter<UserWrapper | string>();
@Output() cancel = new EventEmitter<never>();
private _currentUser: UserWrapper | string;

View File

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

View File

@ -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<string> {
const dictionary$ = this._dictionaryControllerService.getDictionaryForType(dossierTemplateId, 'dossier_redaction', dossierId);
private _onDossierChanged({ id, dossierTemplateId }: Dossier): Observable<string> {
const dictionary$ = this._dictionaryControllerService.getDictionaryForType(dossierTemplateId, 'dossier_redaction', id);
return dictionary$.pipe(map(data => this._toString(data.entries)));
}

View File

@ -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<DossierAttributeWithValue[]> {
const attributes = await this._dossierAttributesControllerService.getDossierAttributes(dossierWrapper.dossierId).toPromise();
async getValues(dossier: Dossier): Promise<DossierAttributeWithValue[]> {
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<DossierAttributesRes> {
return this._dossierAttributesControllerService
.setDossierAttributes({ dossierAttributeList }, dossierWrapper.dossierId)
.toPromise();
setValues(dossier: Dossier, dossierAttributeList: DossierAttributeReq[]): Promise<DossierAttributesRes> {
return this._dossierAttributesControllerService.setDossierAttributes({ dossierAttributeList }, dossier.id).toPromise();
}
deleteConfigs(ids: string[], dossierTemplateId = this._appStateService.activeDossierTemplateId): Promise<void> {

View File

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

View File

@ -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<any> {
downloadFiles(fileStatusWrappers: FileStatusWrapper[], dossier: Dossier): Observable<any> {
return this._downloadControllerService
.prepareDownload({
fileIds: fileStatusWrappers.map(f => f.fileId),
dossierId: dossier.dossierId
dossierId: dossier.id
})
.pipe(mergeMap(() => this.getDownloadStatus()));
}

View File

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

View File

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

View File

@ -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<FileStatusWrapper>();
readonly fileReanalysed$ = new Subject<FileStatusWrapper>();
readonly dossierChanged$ = new Subject<DossierWrapper>();
readonly dossierChanged$ = new Subject<Dossier>();
readonly dossierTemplateChanged$ = new Subject<DossierTemplateModelWrapper>();
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;
});

View File

@ -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<DownloadFileType>;
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() {

View File

@ -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'),

View File

@ -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,

View File

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

@ -1 +1 @@
Subproject commit 0dc6d05cef931e2682bb9584ad0d0cb31144e5c6
Subproject commit 4ffdb4e413a71bbcafadab719dc19a565d489128

View File

@ -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<Dossier>;
public createOrUpdateDossier(body: DossierRequest, observe?: 'body', reportProgress?: boolean): Observable<IDossier>;
public createOrUpdateDossier(body: DossierRequest, observe?: 'response', reportProgress?: boolean): Observable<HttpResponse<Dossier>>;
public createOrUpdateDossier(body: DossierRequest, observe?: 'response', reportProgress?: boolean): Observable<HttpResponse<IDossier>>;
public createOrUpdateDossier(body: DossierRequest, observe?: 'events', reportProgress?: boolean): Observable<HttpEvent<Dossier>>;
public createOrUpdateDossier(body: DossierRequest, observe?: 'events', reportProgress?: boolean): Observable<HttpEvent<IDossier>>;
public createOrUpdateDossier(body: DossierRequest, observe: any = 'body', reportProgress: boolean = false): Observable<any> {
if (body === null || body === undefined) {
@ -83,7 +83,7 @@ export class DossierControllerService {
headers = headers.set('Content-Type', httpContentTypeSelected);
}
return this.httpClient.request<Dossier>('post', `${this.basePath}/dossier`, {
return this.httpClient.request<IDossier>('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<Array<Dossier>>;
public getDeletedDossiers(observe?: 'body', reportProgress?: boolean): Observable<Array<IDossier>>;
public getDeletedDossiers(observe?: 'response', reportProgress?: boolean): Observable<HttpResponse<Array<Dossier>>>;
public getDeletedDossiers(observe?: 'response', reportProgress?: boolean): Observable<HttpResponse<Array<IDossier>>>;
public getDeletedDossiers(observe?: 'events', reportProgress?: boolean): Observable<HttpEvent<Array<Dossier>>>;
public getDeletedDossiers(observe?: 'events', reportProgress?: boolean): Observable<HttpEvent<Array<IDossier>>>;
public getDeletedDossiers(observe: any = 'body', reportProgress: boolean = false): Observable<any> {
let headers = this.defaultHeaders;
@ -163,7 +163,7 @@ export class DossierControllerService {
headers = headers.set('Accept', httpHeaderAcceptSelected);
}
return this.httpClient.request<Array<Dossier>>('get', `${this.basePath}/deleted-dossiers`, {
return this.httpClient.request<Array<IDossier>>('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<Dossier>;
public getDossier(dossierId: string, observe?: 'body', reportProgress?: boolean): Observable<IDossier>;
public getDossier(dossierId: string, observe?: 'response', reportProgress?: boolean): Observable<HttpResponse<Dossier>>;
public getDossier(dossierId: string, observe?: 'response', reportProgress?: boolean): Observable<HttpResponse<IDossier>>;
public getDossier(dossierId: string, observe?: 'events', reportProgress?: boolean): Observable<HttpEvent<Dossier>>;
public getDossier(dossierId: string, observe?: 'events', reportProgress?: boolean): Observable<HttpEvent<IDossier>>;
public getDossier(dossierId: string, observe: any = 'body', reportProgress: boolean = false): Observable<any> {
if (dossierId === null || dossierId === undefined) {
@ -205,7 +205,7 @@ export class DossierControllerService {
headers = headers.set('Accept', httpHeaderAcceptSelected);
}
return this.httpClient.request<Dossier>('get', `${this.basePath}/dossier/${encodeURIComponent(String(dossierId))}`, {
return this.httpClient.request<IDossier>('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<Array<Dossier>>;
public getDossiers(observe?: 'body', reportProgress?: boolean): Observable<Array<IDossier>>;
public getDossiers(observe?: 'response', reportProgress?: boolean): Observable<HttpResponse<Array<Dossier>>>;
public getDossiers(observe?: 'response', reportProgress?: boolean): Observable<HttpResponse<Array<IDossier>>>;
public getDossiers(observe?: 'events', reportProgress?: boolean): Observable<HttpEvent<Array<Dossier>>>;
public getDossiers(observe?: 'events', reportProgress?: boolean): Observable<HttpEvent<Array<IDossier>>>;
public getDossiers(observe: any = 'body', reportProgress: boolean = false): Observable<any> {
let headers = this.defaultHeaders;
@ -242,7 +242,7 @@ export class DossierControllerService {
headers = headers.set('Accept', httpHeaderAcceptSelected);
}
return this.httpClient.request<Array<Dossier>>('get', `${this.basePath}/dossier`, {
return this.httpClient.request<Array<IDossier>>('get', `${this.basePath}/dossier`, {
withCredentials: this.configuration.withCredentials,
headers: headers,
observe: observe,

View File

@ -3,3 +3,4 @@ export * from './model/models';
export * from './variables';
export * from './configuration';
export * from './api.module';
export * from './red-types';

View File

@ -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<string>;
date?: string;
description?: string;
dossierId?: string;
dossierName?: string;
dossierTemplateId?: string;
downloadFileTypes?: Array<Dossier.DownloadFileTypesEnum>;
dueDate?: string;
hardDeletedTime?: string;
memberIds?: Array<string>;
ownerId?: string;
reportTemplateIds?: Array<string>;
reportTypes?: Array<string>;
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<DownloadFileType>;
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;

View File

@ -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<string>;
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<DossierRequest.DownloadFileTypesEnum>;
readonly downloadFileTypes?: List<DossierRequest.DownloadFileTypesEnum>;
/**
* The date when the dossier is due.
*/
dueDate?: string;
readonly dueDate?: string;
/**
* The id(s) of members associated to this dossier.
*/
memberIds?: Array<string>;
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<string>;
readonly reportTemplateIds?: List;
/**
* Report File Types for this dossiers submission package.
*/
reportTypes?: Array<string>;
readonly reportTypes?: List;
/**
* Whether a watermark will be applied to the redacted files or not.
*/
watermarkEnabled?: boolean;
readonly watermarkEnabled?: boolean;
}
export namespace DossierRequest {

View File

@ -0,0 +1 @@
export type List<T = string> = readonly T[];

View File

@ -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",