refactor dossier model
This commit is contained in:
parent
a546b155db
commit
c0640a65dc
@ -63,7 +63,7 @@ export class BaseScreenComponent {
|
|||||||
text: this._translateService.instant('search.this-dossier'),
|
text: this._translateService.instant('search.this-dossier'),
|
||||||
icon: 'red:enter',
|
icon: 'red:enter',
|
||||||
hide: (): boolean => !this.appStateService.activeDossier,
|
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'),
|
text: this._translateService.instant('search.entire-platform'),
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
import { AuditModel } from '@redaction/red-ui-http';
|
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) {}
|
constructor(public auditModel: AuditModel) {}
|
||||||
|
|
||||||
get category(): string {
|
get category(): string {
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
import { DossierTemplateModel, FileAttributesConfig } from '@redaction/red-ui-http';
|
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;
|
dictionariesCount = 0;
|
||||||
totalDictionaryEntries = 0;
|
totalDictionaryEntries = 0;
|
||||||
|
|
||||||
|
|||||||
@ -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 { FileAttributesConfig, FileStatus } from '@redaction/red-ui-http';
|
||||||
import { StatusSorter } from '@utils/sorters/status-sorter';
|
import { StatusSorter } from '@utils/sorters/status-sorter';
|
||||||
|
|
||||||
@ -10,7 +10,7 @@ const processingStatuses = [
|
|||||||
FileStatus.StatusEnum.PROCESSING
|
FileStatus.StatusEnum.PROCESSING
|
||||||
] as const;
|
] as const;
|
||||||
|
|
||||||
export class FileStatusWrapper implements FileStatus, Listable {
|
export class FileStatusWrapper implements FileStatus, IListable {
|
||||||
readonly added = this.fileStatus.added;
|
readonly added = this.fileStatus.added;
|
||||||
readonly allManualRedactionsApplied = this.fileStatus.allManualRedactionsApplied;
|
readonly allManualRedactionsApplied = this.fileStatus.allManualRedactionsApplied;
|
||||||
readonly analysisDuration = this.fileStatus.analysisDuration;
|
readonly analysisDuration = this.fileStatus.analysisDuration;
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
import { Listable } from '@iqser/common-ui';
|
import { IListable } from '@iqser/common-ui';
|
||||||
import { TypeValue } from '@redaction/red-ui-http';
|
import { TypeValue } from '@redaction/red-ui-http';
|
||||||
|
|
||||||
export class TypeValueWrapper implements Listable {
|
export class TypeValueWrapper implements IListable {
|
||||||
entries: string[] = [];
|
entries: string[] = [];
|
||||||
|
|
||||||
constructor(public typeValue: TypeValue, public label?: string, public virtual?: boolean) {
|
constructor(public typeValue: TypeValue, public label?: string, public virtual?: boolean) {
|
||||||
|
|||||||
@ -5,9 +5,9 @@ import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';
|
|||||||
import * as moment from 'moment';
|
import * as moment from 'moment';
|
||||||
import { Moment } from 'moment';
|
import { Moment } from 'moment';
|
||||||
import {
|
import {
|
||||||
Dossier,
|
|
||||||
DossierTemplateControllerService,
|
DossierTemplateControllerService,
|
||||||
DossierTemplateModel,
|
DossierTemplateModel,
|
||||||
|
DownloadFileType,
|
||||||
ReportTemplate,
|
ReportTemplate,
|
||||||
ReportTemplateControllerService
|
ReportTemplateControllerService
|
||||||
} from '@redaction/red-ui-http';
|
} from '@redaction/red-ui-http';
|
||||||
@ -23,8 +23,8 @@ export class AddEditDossierTemplateDialogComponent implements OnInit {
|
|||||||
dossierTemplateForm: FormGroup;
|
dossierTemplateForm: FormGroup;
|
||||||
hasValidFrom: boolean;
|
hasValidFrom: boolean;
|
||||||
hasValidTo: boolean;
|
hasValidTo: boolean;
|
||||||
downloadTypesEnum: Dossier.DownloadFileTypesEnum[] = ['ORIGINAL', 'PREVIEW', 'REDACTED'];
|
downloadTypesEnum: DownloadFileType[] = ['ORIGINAL', 'PREVIEW', 'REDACTED'];
|
||||||
downloadTypes: { key: Dossier.DownloadFileTypesEnum; label: string }[] = this.downloadTypesEnum.map(type => ({
|
downloadTypes: { key: DownloadFileType; label: string }[] = this.downloadTypesEnum.map(type => ({
|
||||||
key: type,
|
key: type,
|
||||||
label: downloadTypesTranslations[type]
|
label: downloadTypesTranslations[type]
|
||||||
}));
|
}));
|
||||||
|
|||||||
@ -5,10 +5,10 @@ import * as Papa from 'papaparse';
|
|||||||
import { FileAttributeConfig, FileAttributesConfig, FileAttributesControllerService } from '@redaction/red-ui-http';
|
import { FileAttributeConfig, FileAttributesConfig, FileAttributesControllerService } from '@redaction/red-ui-http';
|
||||||
import { Observable } from 'rxjs';
|
import { Observable } from 'rxjs';
|
||||||
import { map, startWith } from 'rxjs/operators';
|
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';
|
import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';
|
||||||
|
|
||||||
export interface Field extends Listable {
|
export interface Field extends IListable {
|
||||||
id: string;
|
id: string;
|
||||||
csvColumn: string;
|
csvColumn: string;
|
||||||
name: string;
|
name: string;
|
||||||
|
|||||||
@ -3,13 +3,20 @@ import { AppStateService } from '@state/app-state.service';
|
|||||||
import { Colors, DictionaryControllerService } from '@redaction/red-ui-http';
|
import { Colors, DictionaryControllerService } from '@redaction/red-ui-http';
|
||||||
import { ActivatedRoute } from '@angular/router';
|
import { ActivatedRoute } from '@angular/router';
|
||||||
import { AdminDialogService } from '../../services/admin-dialog.service';
|
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 { DefaultColorType } from '@models/default-color-key.model';
|
||||||
import { defaultColorsTranslations } from '../../translations/default-colors-translations';
|
import { defaultColorsTranslations } from '../../translations/default-colors-translations';
|
||||||
import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';
|
import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';
|
||||||
import { UserService } from '@services/user.service';
|
import { UserService } from '@services/user.service';
|
||||||
|
|
||||||
interface ListItem extends Listable {
|
interface ListItem extends IListable {
|
||||||
readonly key: string;
|
readonly key: string;
|
||||||
readonly value: string;
|
readonly value: string;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,9 +1,9 @@
|
|||||||
import { ChangeDetectionStrategy, Component, forwardRef, Injector, OnInit, TemplateRef, ViewChild } from '@angular/core';
|
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 {
|
import {
|
||||||
CircleButtonTypes,
|
CircleButtonTypes,
|
||||||
DefaultListingServices,
|
DefaultListingServices,
|
||||||
Listable,
|
IListable,
|
||||||
ListingComponent,
|
ListingComponent,
|
||||||
LoadingService,
|
LoadingService,
|
||||||
SortingOrders,
|
SortingOrders,
|
||||||
@ -20,7 +20,7 @@ import { distinctUntilChanged, map } from 'rxjs/operators';
|
|||||||
import { getLeftDateTime } from '@utils/functions';
|
import { getLeftDateTime } from '@utils/functions';
|
||||||
import { RouterHistoryService } from '@services/router-history.service';
|
import { RouterHistoryService } from '@services/router-history.service';
|
||||||
|
|
||||||
interface DossierListItem extends Dossier, Listable {
|
interface DossierListItem extends IDossier, IListable {
|
||||||
readonly canRestore: boolean;
|
readonly canRestore: boolean;
|
||||||
readonly restoreDate: string;
|
readonly restoreDate: string;
|
||||||
}
|
}
|
||||||
@ -140,11 +140,11 @@ export class TrashScreenComponent extends ListingComponent<DossierListItem> impl
|
|||||||
return daysLeft >= 0 && hoursLeft >= 0 && minutesLeft > 0;
|
return daysLeft >= 0 && hoursLeft >= 0 && minutesLeft > 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
private _toListItems(dossiers: Dossier[]): DossierListItem[] {
|
private _toListItems(dossiers: IDossier[]): DossierListItem[] {
|
||||||
return dossiers.map(dossier => this._toListItem(dossier));
|
return dossiers.map(dossier => this._toListItem(dossier));
|
||||||
}
|
}
|
||||||
|
|
||||||
private _toListItem(dossier: Dossier): DossierListItem {
|
private _toListItem(dossier: IDossier): DossierListItem {
|
||||||
const restoreDate = this._getRestoreDate(dossier.softDeletedTime);
|
const restoreDate = this._getRestoreDate(dossier.softDeletedTime);
|
||||||
return {
|
return {
|
||||||
id: dossier.dossierId,
|
id: dossier.dossierId,
|
||||||
@ -157,19 +157,19 @@ export class TrashScreenComponent extends ListingComponent<DossierListItem> impl
|
|||||||
}
|
}
|
||||||
|
|
||||||
private async _restore(dossiers: DossierListItem[]): Promise<void> {
|
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);
|
await this._dossiersService.restore(dossierIds);
|
||||||
this._removeFromList(dossierIds);
|
this._removeFromList(dossierIds);
|
||||||
}
|
}
|
||||||
|
|
||||||
private async _hardDelete(dossiers: DossierListItem[]) {
|
private async _hardDelete(dossiers: DossierListItem[]) {
|
||||||
const dossierIds = dossiers.map(d => d.dossierId);
|
const dossierIds = dossiers.map(d => d.id);
|
||||||
await this._dossiersService.hardDelete(dossierIds);
|
await this._dossiersService.hardDelete(dossierIds);
|
||||||
this._removeFromList(dossierIds);
|
this._removeFromList(dossierIds);
|
||||||
}
|
}
|
||||||
|
|
||||||
private _removeFromList(ids: string[]): void {
|
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.setEntities(entities);
|
||||||
this.entitiesService.setSelected([]);
|
this.entitiesService.setSelected([]);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -164,7 +164,7 @@ export class DossierOverviewBulkActionsComponent {
|
|||||||
async reanalyse() {
|
async reanalyse() {
|
||||||
const fileIds = this.selectedFiles.filter(file => file.analysisRequired).map(file => file.fileId);
|
const fileIds = this.selectedFiles.filter(file => file.analysisRequired).map(file => file.fileId);
|
||||||
this._performBulkAction(
|
this._performBulkAction(
|
||||||
this._reanalysisControllerService.reanalyzeFilesForDossier(fileIds, this._appStateService.activeDossier.dossierId)
|
this._reanalysisControllerService.reanalyzeFilesForDossier(fileIds, this._appStateService.activeDossier.id)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -4,7 +4,7 @@
|
|||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<mat-icon svgIcon="red:user"></mat-icon>
|
<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>
|
||||||
<div>
|
<div>
|
||||||
<mat-icon svgIcon="red:pages"></mat-icon>
|
<mat-icon svgIcon="red:pages"></mat-icon>
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
import { Component, EventEmitter, Input, Output } from '@angular/core';
|
import { Component, EventEmitter, Input, Output } from '@angular/core';
|
||||||
import { DossierAttributeWithValue } from '@models/dossier-attributes.model';
|
import { DossierAttributeWithValue } from '@models/dossier-attributes.model';
|
||||||
import { AppStateService } from '@state/app-state.service';
|
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 { DossierTemplateModel } from '@redaction/red-ui-http';
|
||||||
import { DossiersDialogService } from '../../services/dossiers-dialog.service';
|
import { DossiersDialogService } from '../../services/dossiers-dialog.service';
|
||||||
|
|
||||||
@ -17,7 +17,7 @@ export class DossierDetailsStatsComponent {
|
|||||||
|
|
||||||
constructor(private readonly _appStateService: AppStateService, private readonly _dialogService: DossiersDialogService) {}
|
constructor(private readonly _appStateService: AppStateService, private readonly _dialogService: DossiersDialogService) {}
|
||||||
|
|
||||||
get activeDossier(): DossierWrapper {
|
get activeDossier(): Dossier {
|
||||||
return this._appStateService.activeDossier;
|
return this._appStateService.activeDossier;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -5,8 +5,7 @@ import { DoughnutChartConfig } from '@shared/components/simple-doughnut-chart/si
|
|||||||
import { TranslateChartService } from '@services/translate-chart.service';
|
import { TranslateChartService } from '@services/translate-chart.service';
|
||||||
import { StatusSorter } from '@utils/sorters/status-sorter';
|
import { StatusSorter } from '@utils/sorters/status-sorter';
|
||||||
import { UserService, UserWrapper } from '@services/user.service';
|
import { UserService, UserWrapper } from '@services/user.service';
|
||||||
import { Toaster } from '@iqser/common-ui';
|
import { FilterService, List, Toaster } from '@iqser/common-ui';
|
||||||
import { FilterService } from '@iqser/common-ui';
|
|
||||||
import { DossierAttributeWithValue } from '@models/dossier-attributes.model';
|
import { DossierAttributeWithValue } from '@models/dossier-attributes.model';
|
||||||
import { fileStatusTranslations } from '../../translations/file-status-translations';
|
import { fileStatusTranslations } from '../../translations/file-status-translations';
|
||||||
import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';
|
import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';
|
||||||
@ -39,7 +38,7 @@ export class DossierDetailsComponent implements OnInit {
|
|||||||
private readonly _toaster: Toaster
|
private readonly _toaster: Toaster
|
||||||
) {}
|
) {}
|
||||||
|
|
||||||
get memberIds(): string[] {
|
get memberIds(): List {
|
||||||
return this.appStateService.activeDossier.memberIds;
|
return this.appStateService.activeDossier.memberIds;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output } from '@angular/core';
|
import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output } from '@angular/core';
|
||||||
import { PermissionsService } from '@services/permissions.service';
|
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 { StatusSorter } from '@utils/sorters/status-sorter';
|
||||||
import { AppStateService } from '@state/app-state.service';
|
import { AppStateService } from '@state/app-state.service';
|
||||||
import { DossiersDialogService } from '../../services/dossiers-dialog.service';
|
import { DossiersDialogService } from '../../services/dossiers-dialog.service';
|
||||||
@ -17,8 +17,8 @@ export class DossierListingActionsComponent {
|
|||||||
readonly circleButtonTypes = CircleButtonTypes;
|
readonly circleButtonTypes = CircleButtonTypes;
|
||||||
readonly currentUser = this._userService.currentUser;
|
readonly currentUser = this._userService.currentUser;
|
||||||
|
|
||||||
@Input() dossier: DossierWrapper;
|
@Input() dossier: Dossier;
|
||||||
@Output() actionPerformed = new EventEmitter<DossierWrapper | undefined>();
|
@Output() actionPerformed = new EventEmitter<Dossier | undefined>();
|
||||||
|
|
||||||
constructor(
|
constructor(
|
||||||
readonly permissionsService: PermissionsService,
|
readonly permissionsService: PermissionsService,
|
||||||
@ -27,14 +27,14 @@ export class DossierListingActionsComponent {
|
|||||||
private readonly _userService: UserService
|
private readonly _userService: UserService
|
||||||
) {}
|
) {}
|
||||||
|
|
||||||
openEditDossierDialog($event: MouseEvent, dossierWrapper: DossierWrapper): void {
|
openEditDossierDialog($event: MouseEvent, dossierWrapper: Dossier): void {
|
||||||
this._dialogService.openDialog('editDossier', $event, {
|
this._dialogService.openDialog('editDossier', $event, {
|
||||||
dossierWrapper,
|
dossierWrapper,
|
||||||
afterSave: () => this.actionPerformed.emit()
|
afterSave: () => this.actionPerformed.emit()
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
reanalyseDossier($event: MouseEvent, dossier: DossierWrapper): void {
|
reanalyseDossier($event: MouseEvent, dossier: Dossier): void {
|
||||||
$event.stopPropagation();
|
$event.stopPropagation();
|
||||||
this.appStateService.reanalyzeDossier(dossier).then(() => {
|
this.appStateService.reanalyzeDossier(dossier).then(() => {
|
||||||
this.appStateService.loadAllDossiers().then(() => this.actionPerformed.emit());
|
this.appStateService.loadAllDossiers().then(() => this.actionPerformed.emit());
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
import { Component, Input } from '@angular/core';
|
import { Component, Input } from '@angular/core';
|
||||||
import { AppStateService } from '@state/app-state.service';
|
import { AppStateService } from '@state/app-state.service';
|
||||||
import { FileStatusWrapper } from '@models/file/file-status.wrapper';
|
import { FileStatusWrapper } from '@models/file/file-status.wrapper';
|
||||||
import { DossierWrapper } from '@state/model/dossier.wrapper';
|
import { Dossier } from '../../../../state/model/dossier';
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
selector: 'redaction-needs-work-badge',
|
selector: 'redaction-needs-work-badge',
|
||||||
@ -9,7 +9,7 @@ import { DossierWrapper } from '@state/model/dossier.wrapper';
|
|||||||
styleUrls: ['./needs-work-badge.component.scss']
|
styleUrls: ['./needs-work-badge.component.scss']
|
||||||
})
|
})
|
||||||
export class NeedsWorkBadgeComponent {
|
export class NeedsWorkBadgeComponent {
|
||||||
@Input() needsWorkInput: FileStatusWrapper | DossierWrapper;
|
@Input() needsWorkInput: FileStatusWrapper | Dossier;
|
||||||
|
|
||||||
constructor(private readonly _appStateService: AppStateService) {}
|
constructor(private readonly _appStateService: AppStateService) {}
|
||||||
|
|
||||||
@ -50,7 +50,7 @@ export class NeedsWorkBadgeComponent {
|
|||||||
}
|
}
|
||||||
|
|
||||||
reanalysisRequired() {
|
reanalysisRequired() {
|
||||||
if (this.needsWorkInput instanceof DossierWrapper) {
|
if (this.needsWorkInput instanceof Dossier) {
|
||||||
return this.needsWorkInput.reanalysisRequired;
|
return this.needsWorkInput.reanalysisRequired;
|
||||||
} else {
|
} else {
|
||||||
return this.needsWorkInput.analysisRequired;
|
return this.needsWorkInput.analysisRequired;
|
||||||
|
|||||||
@ -1,10 +1,10 @@
|
|||||||
import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';
|
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 { AppStateService } from '@state/app-state.service';
|
||||||
import { UserService } from '@services/user.service';
|
import { UserService } from '@services/user.service';
|
||||||
import { Toaster } from '@iqser/common-ui';
|
import { Toaster } from '@iqser/common-ui';
|
||||||
import { FormBuilder, FormGroup, Validators } from '@angular/forms';
|
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';
|
import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
@ -16,9 +16,9 @@ export class TeamMembersManagerComponent implements OnInit {
|
|||||||
teamForm: FormGroup;
|
teamForm: FormGroup;
|
||||||
searchQuery = '';
|
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);
|
readonly ownersSelectOptions = this.userService.managerUsers.map(m => m.id);
|
||||||
selectedReviewersList: string[] = [];
|
selectedReviewersList: string[] = [];
|
||||||
membersSelectOptions: string[] = [];
|
membersSelectOptions: string[] = [];
|
||||||
@ -125,10 +125,10 @@ export class TeamMembersManagerComponent implements OnInit {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
const initialMembers = this.dossierWrapper.memberIds.sort();
|
const initialMembers = [...this.dossierWrapper.memberIds].sort();
|
||||||
const currentMembers = this.selectedMembersList.sort();
|
const currentMembers = this.selectedMembersList.sort();
|
||||||
|
|
||||||
const initialApprovers = this.dossierWrapper.approverIds.sort();
|
const initialApprovers = [...this.dossierWrapper.approverIds].sort();
|
||||||
const currentApprovers = this.selectedApproversList.sort();
|
const currentApprovers = this.selectedApproversList.sort();
|
||||||
|
|
||||||
this.changed = this._compareLists(initialMembers, currentMembers) || this._compareLists(initialApprovers, currentApprovers);
|
this.changed = this._compareLists(initialMembers, currentMembers) || this._compareLists(initialApprovers, currentApprovers);
|
||||||
|
|||||||
@ -1,5 +1,5 @@
|
|||||||
import { Component, ElementRef, EventEmitter, Input, Output, ViewChild } from '@angular/core';
|
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';
|
import { UserService } from '@services/user.service';
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
@ -11,7 +11,7 @@ export class TeamMembersComponent {
|
|||||||
readonly circleButtonTypes = CircleButtonTypes;
|
readonly circleButtonTypes = CircleButtonTypes;
|
||||||
readonly currentUser = this._userService.currentUser;
|
readonly currentUser = this._userService.currentUser;
|
||||||
|
|
||||||
@Input() memberIds: string[];
|
@Input() memberIds: List;
|
||||||
@Input() perLine: number;
|
@Input() perLine: number;
|
||||||
@Input() canAdd = true;
|
@Input() canAdd = true;
|
||||||
@Input() largeSpacing = false;
|
@Input() largeSpacing = false;
|
||||||
@ -30,7 +30,7 @@ export class TeamMembersComponent {
|
|||||||
return this.perLine - (this.canAdd ? 1 : 0);
|
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);
|
return this.expandedTeam || !this.overflowCount ? this.memberIds : this.memberIds.slice(0, this.maxTeamMembersBeforeExpand - 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
import { Component } from '@angular/core';
|
import { Component } from '@angular/core';
|
||||||
import { MatDialogRef } from '@angular/material/dialog';
|
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 { FormBuilder, FormGroup, Validators } from '@angular/forms';
|
||||||
import { AppStateService } from '@state/app-state.service';
|
import { AppStateService } from '@state/app-state.service';
|
||||||
import * as moment from 'moment';
|
import * as moment from 'moment';
|
||||||
@ -16,8 +16,8 @@ export class AddDossierDialogComponent {
|
|||||||
|
|
||||||
dossierForm: FormGroup;
|
dossierForm: FormGroup;
|
||||||
hasDueDate = false;
|
hasDueDate = false;
|
||||||
downloadTypesEnum: Dossier.DownloadFileTypesEnum[] = ['ORIGINAL', 'PREVIEW', 'REDACTED'];
|
downloadTypesEnum: DownloadFileType[] = ['ORIGINAL', 'PREVIEW', 'REDACTED'];
|
||||||
downloadTypes: { key: Dossier.DownloadFileTypesEnum; label: string }[] = this.downloadTypesEnum.map(type => ({
|
downloadTypes: { key: DownloadFileType; label: string }[] = this.downloadTypesEnum.map(type => ({
|
||||||
key: type,
|
key: type,
|
||||||
label: downloadTypesTranslations[type]
|
label: downloadTypesTranslations[type]
|
||||||
}));
|
}));
|
||||||
@ -68,21 +68,14 @@ export class AddDossierDialogComponent {
|
|||||||
}
|
}
|
||||||
|
|
||||||
async saveDossier() {
|
async saveDossier() {
|
||||||
const dossier: Dossier = this._formToObject();
|
const savedDossier = await this._appStateService.createOrUpdateDossier(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);
|
|
||||||
if (savedDossier) {
|
if (savedDossier) {
|
||||||
this.dialogRef.close({ dossier: savedDossier });
|
this.dialogRef.close({ dossier: savedDossier });
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
async saveDossierAndAddMembers() {
|
async saveDossierAndAddMembers() {
|
||||||
const dossier: Dossier = this._formToObject();
|
const dossier: IDossier = this._formToObject();
|
||||||
const savedDossier = await this._appStateService.createOrUpdateDossier(dossier);
|
const savedDossier = await this._appStateService.createOrUpdateDossier(dossier);
|
||||||
if (savedDossier) {
|
if (savedDossier) {
|
||||||
this.dialogRef.close({ addMembers: true, dossier: savedDossier });
|
this.dialogRef.close({ addMembers: true, dossier: savedDossier });
|
||||||
@ -124,7 +117,7 @@ export class AddDossierDialogComponent {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
private _formToObject(): Dossier {
|
private _formToObject(): IDossier {
|
||||||
return {
|
return {
|
||||||
dossierName: this.dossierForm.get('dossierName').value,
|
dossierName: this.dossierForm.get('dossierName').value,
|
||||||
description: this.dossierForm.get('description').value,
|
description: this.dossierForm.get('description').value,
|
||||||
|
|||||||
@ -6,12 +6,12 @@ import { UserService } from '@services/user.service';
|
|||||||
import { Toaster } from '@iqser/common-ui';
|
import { Toaster } from '@iqser/common-ui';
|
||||||
import { FormBuilder, FormGroup, Validators } from '@angular/forms';
|
import { FormBuilder, FormGroup, Validators } from '@angular/forms';
|
||||||
import { FileStatusWrapper } from '@models/file/file-status.wrapper';
|
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';
|
import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';
|
||||||
|
|
||||||
class DialogData {
|
class DialogData {
|
||||||
mode: 'approver' | 'reviewer';
|
mode: 'approver' | 'reviewer';
|
||||||
dossier?: DossierWrapper;
|
dossier?: Dossier;
|
||||||
files?: FileStatusWrapper[];
|
files?: FileStatusWrapper[];
|
||||||
ignoreChanged?: boolean;
|
ignoreChanged?: boolean;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -3,7 +3,7 @@ import { FormBuilder, FormGroup } from '@angular/forms';
|
|||||||
import { FileAttributeConfig, FileAttributesControllerService, FileStatus } from '@redaction/red-ui-http';
|
import { FileAttributeConfig, FileAttributesControllerService, FileStatus } from '@redaction/red-ui-http';
|
||||||
import { AppStateService } from '@state/app-state.service';
|
import { AppStateService } from '@state/app-state.service';
|
||||||
import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';
|
import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';
|
||||||
import { DossierWrapper } from '@state/model/dossier.wrapper';
|
import { Dossier } from '../../../../state/model/dossier';
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
templateUrl: './document-info-dialog.component.html',
|
templateUrl: './document-info-dialog.component.html',
|
||||||
@ -14,7 +14,7 @@ export class DocumentInfoDialogComponent implements OnInit {
|
|||||||
file: FileStatus;
|
file: FileStatus;
|
||||||
attributes: FileAttributeConfig[];
|
attributes: FileAttributeConfig[];
|
||||||
|
|
||||||
private _dossier: DossierWrapper;
|
private _dossier: Dossier;
|
||||||
|
|
||||||
constructor(
|
constructor(
|
||||||
private readonly _appStateService: AppStateService,
|
private readonly _appStateService: AppStateService,
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
import { Component, ElementRef, EventEmitter, Input, OnInit, Output, QueryList, ViewChildren } from '@angular/core';
|
import { Component, ElementRef, EventEmitter, Input, OnInit, Output, QueryList, ViewChildren } from '@angular/core';
|
||||||
import { EditDossierSectionInterface } from '../edit-dossier-section.interface';
|
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 { AppStateService } from '@state/app-state.service';
|
||||||
import { PermissionsService } from '@services/permissions.service';
|
import { PermissionsService } from '@services/permissions.service';
|
||||||
import { CircleButtonTypes, IconButtonTypes, LoadingService } from '@iqser/common-ui';
|
import { CircleButtonTypes, IconButtonTypes, LoadingService } from '@iqser/common-ui';
|
||||||
@ -18,7 +18,7 @@ export class EditDossierAttributesComponent implements EditDossierSectionInterfa
|
|||||||
readonly iconButtonTypes = IconButtonTypes;
|
readonly iconButtonTypes = IconButtonTypes;
|
||||||
readonly circleButtonTypes = CircleButtonTypes;
|
readonly circleButtonTypes = CircleButtonTypes;
|
||||||
|
|
||||||
@Input() dossierWrapper: DossierWrapper;
|
@Input() dossierWrapper: Dossier;
|
||||||
@Output() updateDossier = new EventEmitter<any>();
|
@Output() updateDossier = new EventEmitter<any>();
|
||||||
customAttributes: DossierAttributeWithValue[] = [];
|
customAttributes: DossierAttributeWithValue[] = [];
|
||||||
imageAttributes: DossierAttributeWithValue[] = [];
|
imageAttributes: DossierAttributeWithValue[] = [];
|
||||||
|
|||||||
@ -1,10 +1,10 @@
|
|||||||
import { Component, EventEmitter, forwardRef, Injector, Input, OnInit, Output, TemplateRef, ViewChild } from '@angular/core';
|
import { Component, EventEmitter, forwardRef, Injector, Input, OnInit, Output, TemplateRef, ViewChild } from '@angular/core';
|
||||||
import { EditDossierSectionInterface } from '../edit-dossier-section.interface';
|
import { EditDossierSectionInterface } from '../edit-dossier-section.interface';
|
||||||
import { DossierWrapper } from '@state/model/dossier.wrapper';
|
import { Dossier } from '../../../../../state/model/dossier';
|
||||||
import {
|
import {
|
||||||
CircleButtonTypes,
|
CircleButtonTypes,
|
||||||
DefaultListingServices,
|
DefaultListingServices,
|
||||||
Listable,
|
IListable,
|
||||||
ListingComponent,
|
ListingComponent,
|
||||||
LoadingService,
|
LoadingService,
|
||||||
SortingOrders,
|
SortingOrders,
|
||||||
@ -21,7 +21,7 @@ import { ConfirmationDialogInput, TitleColors } from '@shared/dialogs/confirmati
|
|||||||
import { DossiersDialogService } from '../../../services/dossiers-dialog.service';
|
import { DossiersDialogService } from '../../../services/dossiers-dialog.service';
|
||||||
import { AppStateService } from '@state/app-state.service';
|
import { AppStateService } from '@state/app-state.service';
|
||||||
|
|
||||||
interface FileListItem extends FileStatus, Listable {
|
interface FileListItem extends FileStatus, IListable {
|
||||||
readonly canRestore: boolean;
|
readonly canRestore: boolean;
|
||||||
readonly restoreDate: string;
|
readonly restoreDate: string;
|
||||||
}
|
}
|
||||||
@ -36,8 +36,8 @@ interface FileListItem extends FileStatus, Listable {
|
|||||||
]
|
]
|
||||||
})
|
})
|
||||||
export class EditDossierDeletedDocumentsComponent extends ListingComponent<FileListItem> implements EditDossierSectionInterface, OnInit {
|
export class EditDossierDeletedDocumentsComponent extends ListingComponent<FileListItem> implements EditDossierSectionInterface, OnInit {
|
||||||
@Input() dossierWrapper: DossierWrapper;
|
@Input() dossier: Dossier;
|
||||||
@Output() updateDossier = new EventEmitter<any>();
|
@Output() readonly updateDossier = new EventEmitter();
|
||||||
readonly changed = false;
|
readonly changed = false;
|
||||||
readonly canRestoreSelected$ = this._canRestoreSelected$;
|
readonly canRestoreSelected$ = this._canRestoreSelected$;
|
||||||
disabled: boolean;
|
disabled: boolean;
|
||||||
@ -91,7 +91,7 @@ export class EditDossierDeletedDocumentsComponent extends ListingComponent<FileL
|
|||||||
async ngOnInit() {
|
async ngOnInit() {
|
||||||
this._configureTableColumns();
|
this._configureTableColumns();
|
||||||
this._loadingService.start();
|
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.entitiesService.setEntities(this._toListItems(files));
|
||||||
this.sortingService.setSortingOption({
|
this.sortingService.setSortingOption({
|
||||||
column: 'softDeleted',
|
column: 'softDeleted',
|
||||||
@ -138,7 +138,7 @@ export class EditDossierDeletedDocumentsComponent extends ListingComponent<FileL
|
|||||||
|
|
||||||
private async _restore(files: FileListItem[]): Promise<void> {
|
private async _restore(files: FileListItem[]): Promise<void> {
|
||||||
const fileIds = files.map(f => f.fileId);
|
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);
|
this._removeFromList(fileIds);
|
||||||
await this._appStateService.reloadActiveDossierFiles();
|
await this._appStateService.reloadActiveDossierFiles();
|
||||||
this.updateDossier.emit();
|
this.updateDossier.emit();
|
||||||
@ -146,7 +146,7 @@ export class EditDossierDeletedDocumentsComponent extends ListingComponent<FileL
|
|||||||
|
|
||||||
private async _hardDelete(files: FileListItem[]) {
|
private async _hardDelete(files: FileListItem[]) {
|
||||||
const fileIds = files.map(f => f.fileId);
|
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._removeFromList(fileIds);
|
||||||
this.updateDossier.emit();
|
this.updateDossier.emit();
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,10 +1,10 @@
|
|||||||
<div class="header-wrapper">
|
<div class="header-wrapper">
|
||||||
<div class="heading">
|
<div class="heading">
|
||||||
<div>{{ dossierWrapper.type?.label }}</div>
|
<div>{{ dossier.type?.label }}</div>
|
||||||
<div class="small-label stats-subtitle">
|
<div class="small-label stats-subtitle">
|
||||||
<div>
|
<div>
|
||||||
<mat-icon svgIcon="red:entries"></mat-icon>
|
<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>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@ -19,13 +19,13 @@
|
|||||||
[placeholder]="'edit-dossier-dialog.dictionary.display-name.placeholder' | translate"
|
[placeholder]="'edit-dossier-dialog.dictionary.display-name.placeholder' | translate"
|
||||||
[saveTooltip]="'edit-dossier-dialog.dictionary.display-name.save' | translate"
|
[saveTooltip]="'edit-dossier-dialog.dictionary.display-name.save' | translate"
|
||||||
[showPreview]="false"
|
[showPreview]="false"
|
||||||
[value]="dossierWrapper.type?.label"
|
[value]="dossier.type?.label"
|
||||||
></iqser-editable-input>
|
></iqser-editable-input>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<redaction-dictionary-manager
|
<redaction-dictionary-manager
|
||||||
[canEdit]="canEdit"
|
[canEdit]="canEdit"
|
||||||
[initialEntries]="dossierWrapper.type?.entries || []"
|
[initialEntries]="dossier.type?.entries || []"
|
||||||
[withFloatingActions]="false"
|
[withFloatingActions]="false"
|
||||||
></redaction-dictionary-manager>
|
></redaction-dictionary-manager>
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
import { Component, EventEmitter, Input, OnInit, Output, ViewChild } from '@angular/core';
|
import { Component, EventEmitter, Input, OnInit, Output, ViewChild } from '@angular/core';
|
||||||
import { AppStateService } from '@state/app-state.service';
|
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 { EditDossierSectionInterface } from '../edit-dossier-section.interface';
|
||||||
import { PermissionsService } from '@services/permissions.service';
|
import { PermissionsService } from '@services/permissions.service';
|
||||||
import { DictionaryManagerComponent } from '@shared/components/dictionary-manager/dictionary-manager.component';
|
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']
|
styleUrls: ['./edit-dossier-dictionary.component.scss']
|
||||||
})
|
})
|
||||||
export class EditDossierDictionaryComponent implements EditDossierSectionInterface, OnInit {
|
export class EditDossierDictionaryComponent implements EditDossierSectionInterface, OnInit {
|
||||||
@Input() dossierWrapper: DossierWrapper;
|
@Input() dossier: Dossier;
|
||||||
@Output() updateDossier: EventEmitter<any> = new EventEmitter<any>();
|
@Output() readonly updateDossier = new EventEmitter();
|
||||||
canEdit = false;
|
canEdit = false;
|
||||||
readonly circleButtonTypes = CircleButtonTypes;
|
readonly circleButtonTypes = CircleButtonTypes;
|
||||||
|
|
||||||
@ -30,7 +30,7 @@ export class EditDossierDictionaryComponent implements EditDossierSectionInterfa
|
|||||||
private readonly _loadingService: LoadingService,
|
private readonly _loadingService: LoadingService,
|
||||||
private readonly _formBuilder: FormBuilder
|
private readonly _formBuilder: FormBuilder
|
||||||
) {
|
) {
|
||||||
this.canEdit = this._permissionsService.isDossierMember(this.dossierWrapper);
|
this.canEdit = this._permissionsService.isDossierMember(this.dossier);
|
||||||
}
|
}
|
||||||
|
|
||||||
get changed() {
|
get changed() {
|
||||||
@ -43,16 +43,16 @@ export class EditDossierDictionaryComponent implements EditDossierSectionInterfa
|
|||||||
|
|
||||||
async ngOnInit() {
|
async ngOnInit() {
|
||||||
this._loadingService.start();
|
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();
|
this._loadingService.stop();
|
||||||
}
|
}
|
||||||
|
|
||||||
async updateDisplayName(label: string) {
|
async updateDisplayName(label: string) {
|
||||||
const typeValue: Dictionary = { ...this.dossierWrapper.type, label };
|
const typeValue: Dictionary = { ...this.dossier.type, label };
|
||||||
await this._dictionaryControllerService
|
await this._dictionaryControllerService
|
||||||
.updateType(typeValue, this.dossierWrapper.dossierTemplateId, 'dossier_redaction', this.dossierWrapper.dossierId)
|
.updateType(typeValue, this.dossier.dossierTemplateId, 'dossier_redaction', this.dossier.id)
|
||||||
.toPromise();
|
.toPromise();
|
||||||
await this._appStateService.updateDossierDictionary(this.dossierWrapper.dossierTemplateId, this.dossierWrapper.dossierId);
|
await this._appStateService.updateDossierDictionary(this.dossier.dossierTemplateId, this.dossier.id);
|
||||||
this.updateDossier.emit();
|
this.updateDossier.emit();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -61,13 +61,13 @@ export class EditDossierDictionaryComponent implements EditDossierSectionInterfa
|
|||||||
.saveEntries(
|
.saveEntries(
|
||||||
this._dictionaryManager.currentEntries,
|
this._dictionaryManager.currentEntries,
|
||||||
this._dictionaryManager.initialEntries,
|
this._dictionaryManager.initialEntries,
|
||||||
this.dossierWrapper.dossierTemplateId,
|
this.dossier.dossierTemplateId,
|
||||||
'dossier_redaction',
|
'dossier_redaction',
|
||||||
this.dossierWrapper.dossierId,
|
this.dossier.id,
|
||||||
false
|
false
|
||||||
)
|
)
|
||||||
.toPromise();
|
.toPromise();
|
||||||
await this._appStateService.updateDossierDictionary(this.dossierWrapper.dossierTemplateId, this.dossierWrapper.dossierId);
|
await this._appStateService.updateDossierDictionary(this.dossier.dossierTemplateId, this.dossier.id);
|
||||||
this.updateDossier.emit();
|
this.updateDossier.emit();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -1,8 +1,8 @@
|
|||||||
import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';
|
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 { FormBuilder, FormGroup } from '@angular/forms';
|
||||||
import { AppStateService } from '@state/app-state.service';
|
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 { EditDossierSectionInterface } from '../edit-dossier-section.interface';
|
||||||
import { downloadTypesTranslations } from '../../../../../translations/download-types-translations';
|
import { downloadTypesTranslations } from '../../../../../translations/download-types-translations';
|
||||||
|
|
||||||
@ -13,15 +13,15 @@ import { downloadTypesTranslations } from '../../../../../translations/download-
|
|||||||
})
|
})
|
||||||
export class EditDossierDownloadPackageComponent implements OnInit, EditDossierSectionInterface {
|
export class EditDossierDownloadPackageComponent implements OnInit, EditDossierSectionInterface {
|
||||||
dossierForm: FormGroup;
|
dossierForm: FormGroup;
|
||||||
downloadTypesEnum: Dossier.DownloadFileTypesEnum[] = ['ORIGINAL', 'PREVIEW', 'REDACTED'];
|
downloadTypesEnum: DownloadFileType[] = ['ORIGINAL', 'PREVIEW', 'REDACTED'];
|
||||||
downloadTypes: { key: Dossier.DownloadFileTypesEnum; label: string }[] = this.downloadTypesEnum.map(type => ({
|
downloadTypes: { key: DownloadFileType; label: string }[] = this.downloadTypesEnum.map(type => ({
|
||||||
key: type,
|
key: type,
|
||||||
label: downloadTypesTranslations[type]
|
label: downloadTypesTranslations[type]
|
||||||
}));
|
}));
|
||||||
dossierTemplates: DossierTemplateModel[];
|
dossierTemplates: DossierTemplateModel[];
|
||||||
availableReportTypes: ReportTemplate[] = [];
|
availableReportTypes: ReportTemplate[] = [];
|
||||||
|
|
||||||
@Input() dossierWrapper: DossierWrapper;
|
@Input() dossierWrapper: Dossier;
|
||||||
@Output() updateDossier = new EventEmitter<any>();
|
@Output() updateDossier = new EventEmitter<any>();
|
||||||
|
|
||||||
constructor(
|
constructor(
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
<section class="dialog">
|
<section class="dialog">
|
||||||
<div class="dialog-header heading-l">
|
<div class="dialog-header heading-l">
|
||||||
{{ 'edit-dossier-dialog.header' | translate: { dossierName: dossierWrapper.dossierName } }}
|
{{ 'edit-dossier-dialog.header' | translate: { dossierName: dossier.dossierName } }}
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="dialog-content">
|
<div class="dialog-content">
|
||||||
@ -22,37 +22,37 @@
|
|||||||
<redaction-edit-dossier-general-info
|
<redaction-edit-dossier-general-info
|
||||||
(updateDossier)="updatedDossier()"
|
(updateDossier)="updatedDossier()"
|
||||||
*ngIf="activeNav === 'dossierInfo'"
|
*ngIf="activeNav === 'dossierInfo'"
|
||||||
[dossierWrapper]="dossierWrapper"
|
[dossierWrapper]="dossier"
|
||||||
></redaction-edit-dossier-general-info>
|
></redaction-edit-dossier-general-info>
|
||||||
|
|
||||||
<redaction-edit-dossier-download-package
|
<redaction-edit-dossier-download-package
|
||||||
(updateDossier)="updatedDossier()"
|
(updateDossier)="updatedDossier()"
|
||||||
*ngIf="activeNav === 'downloadPackage'"
|
*ngIf="activeNav === 'downloadPackage'"
|
||||||
[dossierWrapper]="dossierWrapper"
|
[dossierWrapper]="dossier"
|
||||||
></redaction-edit-dossier-download-package>
|
></redaction-edit-dossier-download-package>
|
||||||
|
|
||||||
<redaction-edit-dossier-dictionary
|
<redaction-edit-dossier-dictionary
|
||||||
(updateDossier)="updatedDossier()"
|
(updateDossier)="updatedDossier()"
|
||||||
*ngIf="activeNav === 'dossierDictionary'"
|
*ngIf="activeNav === 'dossierDictionary'"
|
||||||
[dossierWrapper]="dossierWrapper"
|
[dossier]="dossier"
|
||||||
></redaction-edit-dossier-dictionary>
|
></redaction-edit-dossier-dictionary>
|
||||||
|
|
||||||
<redaction-edit-dossier-team-members
|
<redaction-edit-dossier-team-members
|
||||||
(updateDossier)="updatedDossier()"
|
(updateDossier)="updatedDossier()"
|
||||||
*ngIf="activeNav === 'members'"
|
*ngIf="activeNav === 'members'"
|
||||||
[dossierWrapper]="dossierWrapper"
|
[dossierWrapper]="dossier"
|
||||||
></redaction-edit-dossier-team-members>
|
></redaction-edit-dossier-team-members>
|
||||||
|
|
||||||
<redaction-edit-dossier-attributes
|
<redaction-edit-dossier-attributes
|
||||||
(updateDossier)="updatedDossier()"
|
(updateDossier)="updatedDossier()"
|
||||||
*ngIf="activeNav === 'dossierAttributes'"
|
*ngIf="activeNav === 'dossierAttributes'"
|
||||||
[dossierWrapper]="dossierWrapper"
|
[dossierWrapper]="dossier"
|
||||||
></redaction-edit-dossier-attributes>
|
></redaction-edit-dossier-attributes>
|
||||||
|
|
||||||
<redaction-edit-dossier-deleted-documents
|
<redaction-edit-dossier-deleted-documents
|
||||||
(updateDossier)="updatedDossier()"
|
(updateDossier)="updatedDossier()"
|
||||||
*ngIf="activeNav === 'deletedDocuments'"
|
*ngIf="activeNav === 'deletedDocuments'"
|
||||||
[dossierWrapper]="dossierWrapper"
|
[dossier]="dossier"
|
||||||
></redaction-edit-dossier-deleted-documents>
|
></redaction-edit-dossier-deleted-documents>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
import { ChangeDetectorRef, Component, Inject, ViewChild } from '@angular/core';
|
import { ChangeDetectorRef, Component, Inject, ViewChild } from '@angular/core';
|
||||||
import { MAT_DIALOG_DATA } from '@angular/material/dialog';
|
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 { EditDossierGeneralInfoComponent } from './general-info/edit-dossier-general-info.component';
|
||||||
import { EditDossierDownloadPackageComponent } from './download-package/edit-dossier-download-package.component';
|
import { EditDossierDownloadPackageComponent } from './download-package/edit-dossier-download-package.component';
|
||||||
import { EditDossierSectionInterface } from './edit-dossier-section.interface';
|
import { EditDossierSectionInterface } from './edit-dossier-section.interface';
|
||||||
@ -22,7 +22,7 @@ type Section = 'dossierInfo' | 'downloadPackage' | 'dossierDictionary' | 'member
|
|||||||
export class EditDossierDialogComponent {
|
export class EditDossierDialogComponent {
|
||||||
readonly navItems: { key: Section; title?: string; sideNavTitle?: string }[];
|
readonly navItems: { key: Section; title?: string; sideNavTitle?: string }[];
|
||||||
activeNav: Section;
|
activeNav: Section;
|
||||||
dossierWrapper: DossierWrapper;
|
dossier: Dossier;
|
||||||
|
|
||||||
@ViewChild(EditDossierGeneralInfoComponent) generalInfoComponent: EditDossierGeneralInfoComponent;
|
@ViewChild(EditDossierGeneralInfoComponent) generalInfoComponent: EditDossierGeneralInfoComponent;
|
||||||
@ViewChild(EditDossierDownloadPackageComponent) downloadPackageComponent: EditDossierDownloadPackageComponent;
|
@ViewChild(EditDossierDownloadPackageComponent) downloadPackageComponent: EditDossierDownloadPackageComponent;
|
||||||
@ -37,7 +37,7 @@ export class EditDossierDialogComponent {
|
|||||||
private readonly _changeRef: ChangeDetectorRef,
|
private readonly _changeRef: ChangeDetectorRef,
|
||||||
@Inject(MAT_DIALOG_DATA)
|
@Inject(MAT_DIALOG_DATA)
|
||||||
private readonly _data: {
|
private readonly _data: {
|
||||||
dossierWrapper: DossierWrapper;
|
dossierWrapper: Dossier;
|
||||||
afterSave: Function;
|
afterSave: Function;
|
||||||
section?: Section;
|
section?: Section;
|
||||||
}
|
}
|
||||||
@ -73,7 +73,7 @@ export class EditDossierDialogComponent {
|
|||||||
}
|
}
|
||||||
];
|
];
|
||||||
|
|
||||||
this.dossierWrapper = _data.dossierWrapper;
|
this.dossier = _data.dossierWrapper;
|
||||||
this.activeNav = _data.section || 'dossierInfo';
|
this.activeNav = _data.section || 'dossierInfo';
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -105,8 +105,8 @@ export class EditDossierDialogComponent {
|
|||||||
}
|
}
|
||||||
|
|
||||||
updatedDossier() {
|
updatedDossier() {
|
||||||
this._toaster.success(_('edit-dossier-dialog.change-successful'), { params: { dossierName: this.dossierWrapper.dossierName } });
|
this._toaster.success(_('edit-dossier-dialog.change-successful'), { params: { dossierName: this.dossier.dossierName } });
|
||||||
this.dossierWrapper = this._appStateService.getDossierById(this.dossierWrapper.dossierId);
|
this.dossier = this._appStateService.getDossierById(this.dossier.id);
|
||||||
this._changeRef.detectChanges();
|
this._changeRef.detectChanges();
|
||||||
this.afterSave();
|
this.afterSave();
|
||||||
}
|
}
|
||||||
|
|||||||
@ -3,7 +3,7 @@ import { DossierTemplateModel } from '@redaction/red-ui-http';
|
|||||||
import { FormBuilder, FormGroup, Validators } from '@angular/forms';
|
import { FormBuilder, FormGroup, Validators } from '@angular/forms';
|
||||||
import { AppStateService } from '../../../../../state/app-state.service';
|
import { AppStateService } from '../../../../../state/app-state.service';
|
||||||
import * as moment from 'moment';
|
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 { EditDossierSectionInterface } from '../edit-dossier-section.interface';
|
||||||
import { DossiersDialogService } from '../../../services/dossiers-dialog.service';
|
import { DossiersDialogService } from '../../../services/dossiers-dialog.service';
|
||||||
import { PermissionsService } from '@services/permissions.service';
|
import { PermissionsService } from '@services/permissions.service';
|
||||||
@ -27,7 +27,7 @@ export class EditDossierGeneralInfoComponent implements OnInit, EditDossierSecti
|
|||||||
hasDueDate: boolean;
|
hasDueDate: boolean;
|
||||||
dossierTemplates: DossierTemplateModel[];
|
dossierTemplates: DossierTemplateModel[];
|
||||||
|
|
||||||
@Input() dossierWrapper: DossierWrapper;
|
@Input() dossierWrapper: Dossier;
|
||||||
@Output() updateDossier = new EventEmitter<any>();
|
@Output() updateDossier = new EventEmitter<any>();
|
||||||
|
|
||||||
constructor(
|
constructor(
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
import { Component, EventEmitter, Input, Output, ViewChild } from '@angular/core';
|
import { Component, EventEmitter, Input, Output, ViewChild } from '@angular/core';
|
||||||
import { AppStateService } from '@state/app-state.service';
|
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 { EditDossierSectionInterface } from '../edit-dossier-section.interface';
|
||||||
import { TeamMembersManagerComponent } from '../../../components/team-members-manager/team-members-manager.component';
|
import { TeamMembersManagerComponent } from '../../../components/team-members-manager/team-members-manager.component';
|
||||||
import { UserService } from '@services/user.service';
|
import { UserService } from '@services/user.service';
|
||||||
@ -13,7 +13,7 @@ import { UserService } from '@services/user.service';
|
|||||||
export class EditDossierTeamMembersComponent implements EditDossierSectionInterface {
|
export class EditDossierTeamMembersComponent implements EditDossierSectionInterface {
|
||||||
readonly currentUser = this._userService.currentUser;
|
readonly currentUser = this._userService.currentUser;
|
||||||
|
|
||||||
@Input() dossierWrapper: DossierWrapper;
|
@Input() dossierWrapper: Dossier;
|
||||||
@Output() updateDossier = new EventEmitter<any>();
|
@Output() updateDossier = new EventEmitter<any>();
|
||||||
|
|
||||||
@ViewChild(TeamMembersManagerComponent) managerComponent: TeamMembersManagerComponent;
|
@ViewChild(TeamMembersManagerComponent) managerComponent: TeamMembersManagerComponent;
|
||||||
|
|||||||
@ -1,11 +1,11 @@
|
|||||||
import { AfterViewInit, Component, forwardRef, Injector, OnDestroy, OnInit, TemplateRef, ViewChild } from '@angular/core';
|
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 { AppStateService } from '@state/app-state.service';
|
||||||
import { UserService } from '@services/user.service';
|
import { UserService } from '@services/user.service';
|
||||||
import { DoughnutChartConfig } from '@shared/components/simple-doughnut-chart/simple-doughnut-chart.component';
|
import { DoughnutChartConfig } from '@shared/components/simple-doughnut-chart/simple-doughnut-chart.component';
|
||||||
import { groupBy } from '@utils/functions';
|
import { groupBy } from '@utils/functions';
|
||||||
import { TranslateService } from '@ngx-translate/core';
|
import { TranslateService } from '@ngx-translate/core';
|
||||||
import { DossierWrapper } from '@state/model/dossier.wrapper';
|
import { Dossier } from '../../../../state/model/dossier';
|
||||||
import { timer } from 'rxjs';
|
import { timer } from 'rxjs';
|
||||||
import { tap } from 'rxjs/operators';
|
import { tap } from 'rxjs/operators';
|
||||||
import { TranslateChartService } from '@services/translate-chart.service';
|
import { TranslateChartService } from '@services/translate-chart.service';
|
||||||
@ -29,7 +29,7 @@ import { PermissionsService } from '@services/permissions.service';
|
|||||||
providers: [...DefaultListingServices, { provide: ListingComponent, useExisting: forwardRef(() => DossierListingScreenComponent) }]
|
providers: [...DefaultListingServices, { provide: ListingComponent, useExisting: forwardRef(() => DossierListingScreenComponent) }]
|
||||||
})
|
})
|
||||||
export class DossierListingScreenComponent
|
export class DossierListingScreenComponent
|
||||||
extends ListingComponent<DossierWrapper>
|
extends ListingComponent<Dossier>
|
||||||
implements OnInit, AfterViewInit, OnDestroy, OnAttach, OnDetach
|
implements OnInit, AfterViewInit, OnDestroy, OnAttach, OnDetach
|
||||||
{
|
{
|
||||||
readonly currentUser = this._userService.currentUser;
|
readonly currentUser = this._userService.currentUser;
|
||||||
@ -43,7 +43,7 @@ export class DossierListingScreenComponent
|
|||||||
type: 'primary'
|
type: 'primary'
|
||||||
}
|
}
|
||||||
];
|
];
|
||||||
tableColumnConfigs: TableColumnConfig<DossierWrapper>[];
|
tableColumnConfigs: TableColumnConfig<Dossier>[];
|
||||||
dossiersChartData: DoughnutChartConfig[] = [];
|
dossiersChartData: DoughnutChartConfig[] = [];
|
||||||
documentsChartData: DoughnutChartConfig[] = [];
|
documentsChartData: DoughnutChartConfig[] = [];
|
||||||
@ViewChild('nameTemplate', { static: true }) nameTemplate: TemplateRef<never>;
|
@ViewChild('nameTemplate', { static: true }) nameTemplate: TemplateRef<never>;
|
||||||
@ -57,7 +57,7 @@ export class DossierListingScreenComponent
|
|||||||
static: true
|
static: true
|
||||||
})
|
})
|
||||||
private readonly _needsWorkFilterTemplate: TemplateRef<unknown>;
|
private readonly _needsWorkFilterTemplate: TemplateRef<unknown>;
|
||||||
@ViewChild(TableComponent) private readonly _tableComponent: TableComponent<DossierWrapper>;
|
@ViewChild(TableComponent) private readonly _tableComponent: TableComponent<Dossier>;
|
||||||
|
|
||||||
constructor(
|
constructor(
|
||||||
private readonly _router: Router,
|
private readonly _router: Router,
|
||||||
@ -76,14 +76,14 @@ export class DossierListingScreenComponent
|
|||||||
}
|
}
|
||||||
|
|
||||||
private get _activeDossiersCount(): number {
|
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 {
|
private get _inactiveDossiersCount(): number {
|
||||||
return this.entitiesService.all.length - this._activeDossiersCount;
|
return this.entitiesService.all.length - this._activeDossiersCount;
|
||||||
}
|
}
|
||||||
|
|
||||||
routerLinkFn = (dossier: DossierWrapper) => ['/main/dossiers/' + dossier.dossierId];
|
routerLinkFn = (dossier: Dossier) => ['/main/dossiers/' + dossier.id];
|
||||||
|
|
||||||
ngOnInit(): void {
|
ngOnInit(): void {
|
||||||
this._configureTableColumns();
|
this._configureTableColumns();
|
||||||
@ -120,7 +120,7 @@ export class DossierListingScreenComponent
|
|||||||
|
|
||||||
openAddDossierDialog(): void {
|
openAddDossierDialog(): void {
|
||||||
this._dialogService.openDialog('addDossier', null, null, async addResponse => {
|
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) {
|
if (addResponse.addMembers) {
|
||||||
this._dialogService.openDialog('editDossier', null, {
|
this._dialogService.openDialog('editDossier', null, {
|
||||||
dossierWrapper: addResponse.dossier,
|
dossierWrapper: addResponse.dossier,
|
||||||
@ -273,7 +273,7 @@ export class DossierListingScreenComponent
|
|||||||
this.filterService.addFilterGroup({
|
this.filterService.addFilterGroup({
|
||||||
slug: 'quickFilters',
|
slug: 'quickFilters',
|
||||||
filters: 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 => ({
|
const dossierFilters = this.entitiesService.all.map<NestedFilter>(dossier => ({
|
||||||
@ -296,22 +296,22 @@ export class DossierListingScreenComponent
|
|||||||
{
|
{
|
||||||
key: 'my-dossiers',
|
key: 'my-dossiers',
|
||||||
label: myDossiersLabel,
|
label: myDossiersLabel,
|
||||||
checker: (dw: DossierWrapper) => dw.ownerId === this.currentUser.id
|
checker: (dw: Dossier) => dw.ownerId === this.currentUser.id
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
key: 'to-approve',
|
key: 'to-approve',
|
||||||
label: this._translateService.instant('dossier-listing.quick-filters.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',
|
key: 'to-review',
|
||||||
label: this._translateService.instant('dossier-listing.quick-filters.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',
|
key: 'other',
|
||||||
label: this._translateService.instant('dossier-listing.quick-filters.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)
|
||||||
}
|
}
|
||||||
];
|
];
|
||||||
|
|
||||||
|
|||||||
@ -52,7 +52,7 @@ import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';
|
|||||||
import { annotationFilterChecker } from '@utils/filter-utils';
|
import { annotationFilterChecker } from '@utils/filter-utils';
|
||||||
import { PermissionsService } from '@services/permissions.service';
|
import { PermissionsService } from '@services/permissions.service';
|
||||||
import { RouterHistoryService } from '@services/router-history.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 { Router } from '@angular/router';
|
||||||
import { FileActionService } from '../../services/file-action.service';
|
import { FileActionService } from '../../services/file-action.service';
|
||||||
import StatusEnum = FileStatus.StatusEnum;
|
import StatusEnum = FileStatus.StatusEnum;
|
||||||
@ -95,7 +95,7 @@ export class DossierOverviewScreenComponent extends ListingComponent<FileStatusW
|
|||||||
@ViewChild('needsWorkFilterTemplate', { read: TemplateRef, static: true })
|
@ViewChild('needsWorkFilterTemplate', { read: TemplateRef, static: true })
|
||||||
private readonly _needsWorkFilterTemplate: TemplateRef<unknown>;
|
private readonly _needsWorkFilterTemplate: TemplateRef<unknown>;
|
||||||
@ViewChild('fileInput') private readonly _fileInput: ElementRef;
|
@ViewChild('fileInput') private readonly _fileInput: ElementRef;
|
||||||
@ViewChild(TableComponent) private readonly _tableComponent: TableComponent<DossierWrapper>;
|
@ViewChild(TableComponent) private readonly _tableComponent: TableComponent<Dossier>;
|
||||||
|
|
||||||
constructor(
|
constructor(
|
||||||
private readonly _toaster: Toaster,
|
private readonly _toaster: Toaster,
|
||||||
@ -210,7 +210,7 @@ export class DossierOverviewScreenComponent extends ListingComponent<FileStatusW
|
|||||||
}
|
}
|
||||||
|
|
||||||
routerLinkFn = (fileStatus: FileStatusWrapper) =>
|
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;
|
disabledFn = (fileStatus: FileStatusWrapper) => fileStatus.excluded;
|
||||||
|
|
||||||
|
|||||||
@ -8,6 +8,7 @@ import {
|
|||||||
CircleButtonTypes,
|
CircleButtonTypes,
|
||||||
Debounce,
|
Debounce,
|
||||||
FilterService,
|
FilterService,
|
||||||
|
List,
|
||||||
LoadingService,
|
LoadingService,
|
||||||
NestedFilter,
|
NestedFilter,
|
||||||
processFilters,
|
processFilters,
|
||||||
@ -113,7 +114,7 @@ export class FilePreviewScreenComponent extends AutoUnsubscribe implements OnIni
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
get singleUsersSelectOptions(): string[] {
|
get singleUsersSelectOptions(): List {
|
||||||
return this.appStateService.activeFile?.isUnderApproval
|
return this.appStateService.activeFile?.isUnderApproval
|
||||||
? this.appStateService.activeDossier.approverIds
|
? this.appStateService.activeDossier.approverIds
|
||||||
: this.appStateService.activeDossier.memberIds;
|
: this.appStateService.activeDossier.memberIds;
|
||||||
@ -200,9 +201,7 @@ export class FilePreviewScreenComponent extends AutoUnsubscribe implements OnIni
|
|||||||
}
|
}
|
||||||
|
|
||||||
get canAssignReviewer(): boolean {
|
get canAssignReviewer(): boolean {
|
||||||
return (
|
return !this.currentReviewer && this.permissionsService.canAssignUser() && this.appStateService.activeDossier.hasReviewers;
|
||||||
!this.currentReviewer && this.permissionsService.canAssignUser() && this.appStateService.activeDossier.hasMoreThanOneReviewer
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
updateViewMode(): void {
|
updateViewMode(): void {
|
||||||
|
|||||||
@ -1,5 +1,5 @@
|
|||||||
import { Component, forwardRef, Injector, OnDestroy, OnInit, TemplateRef, ViewChild } from '@angular/core';
|
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 { MatchedDocument, SearchControllerService, SearchResult } from '@redaction/red-ui-http';
|
||||||
import { BehaviorSubject, Observable } from 'rxjs';
|
import { BehaviorSubject, Observable } from 'rxjs';
|
||||||
import { debounceTime, map, skip, switchMap, tap } from 'rxjs/operators';
|
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 { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';
|
||||||
import { fileStatusTranslations } from '../../translations/file-status-translations';
|
import { fileStatusTranslations } from '../../translations/file-status-translations';
|
||||||
import { SearchPositions } from '@shared/components/page-header/models/search-positions.type';
|
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 { TranslateService } from '@ngx-translate/core';
|
||||||
import { RouterHistoryService } from '@services/router-history.service';
|
import { RouterHistoryService } from '@services/router-history.service';
|
||||||
|
|
||||||
interface ListItem extends Listable {
|
interface ListItem extends IListable {
|
||||||
readonly dossierId: string;
|
readonly dossierId: string;
|
||||||
readonly filename: string;
|
readonly filename: string;
|
||||||
readonly unmatched: readonly string[] | null;
|
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'),
|
filterceptionPlaceholder: this._translateService.instant('search-screen.filters.search-placeholder'),
|
||||||
icon: 'red:folder',
|
icon: 'red:folder',
|
||||||
filters: this._appStateService.allDossiers.map(dossier => ({
|
filters: this._appStateService.allDossiers.map(dossier => ({
|
||||||
key: dossier.dossierId,
|
key: dossier.id,
|
||||||
label: dossier.dossierName
|
label: dossier.dossierName
|
||||||
})),
|
})),
|
||||||
checker: keyChecker('dossierId')
|
checker: keyChecker('id')
|
||||||
});
|
});
|
||||||
|
|
||||||
this.addSubscription = _activatedRoute.queryParamMap
|
this.addSubscription = _activatedRoute.queryParamMap
|
||||||
@ -141,7 +141,7 @@ export class SearchScreenComponent extends ListingComponent<ListItem> implements
|
|||||||
return this._appStateService.getFileById(dossierId, fileId);
|
return this._appStateService.getFileById(dossierId, fileId);
|
||||||
}
|
}
|
||||||
|
|
||||||
private _getDossierWrapper(dossierId: string): DossierWrapper {
|
private _getDossierWrapper(dossierId: string): Dossier {
|
||||||
return this._appStateService.getDossierById(dossierId);
|
return this._appStateService.getDossierById(dossierId);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -1,5 +1,5 @@
|
|||||||
import { Injectable } from '@angular/core';
|
import { Injectable } from '@angular/core';
|
||||||
import { Dossier, DossierControllerService } from '@redaction/red-ui-http';
|
import { IDossier, DossierControllerService } from '@redaction/red-ui-http';
|
||||||
|
|
||||||
@Injectable({
|
@Injectable({
|
||||||
providedIn: 'root'
|
providedIn: 'root'
|
||||||
@ -7,7 +7,7 @@ import { Dossier, DossierControllerService } from '@redaction/red-ui-http';
|
|||||||
export class DossiersService {
|
export class DossiersService {
|
||||||
constructor(private readonly _dossierControllerService: DossierControllerService) {}
|
constructor(private readonly _dossierControllerService: DossierControllerService) {}
|
||||||
|
|
||||||
createOrUpdate(dossier: Dossier): Promise<Dossier> {
|
createOrUpdate(dossier: IDossier): Promise<IDossier> {
|
||||||
return this._dossierControllerService.createOrUpdateDossier(dossier).toPromise();
|
return this._dossierControllerService.createOrUpdateDossier(dossier).toPromise();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -15,11 +15,11 @@ export class DossiersService {
|
|||||||
return this._dossierControllerService.deleteDossier(dossierId).toPromise();
|
return this._dossierControllerService.deleteDossier(dossierId).toPromise();
|
||||||
}
|
}
|
||||||
|
|
||||||
getAll(): Promise<Dossier[]> {
|
getAll(): Promise<IDossier[]> {
|
||||||
return this._dossierControllerService.getDossiers().toPromise();
|
return this._dossierControllerService.getDossiers().toPromise();
|
||||||
}
|
}
|
||||||
|
|
||||||
getDeleted(): Promise<Dossier[]> {
|
getDeleted(): Promise<IDossier[]> {
|
||||||
return this._dossierControllerService.getDeletedDossiers().toPromise();
|
return this._dossierControllerService.getDeletedDossiers().toPromise();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -6,7 +6,7 @@ import { FileStatusWrapper } from '@models/file/file-status.wrapper';
|
|||||||
import { PermissionsService } from '@services/permissions.service';
|
import { PermissionsService } from '@services/permissions.service';
|
||||||
import { isArray } from 'rxjs/internal-compatibility';
|
import { isArray } from 'rxjs/internal-compatibility';
|
||||||
import { DossiersDialogService } from './dossiers-dialog.service';
|
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 { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';
|
||||||
import { Observable } from 'rxjs';
|
import { Observable } from 'rxjs';
|
||||||
|
|
||||||
@ -25,11 +25,7 @@ export class FileActionService {
|
|||||||
if (!fileStatusWrapper) {
|
if (!fileStatusWrapper) {
|
||||||
fileStatusWrapper = this._appStateService.activeFile;
|
fileStatusWrapper = this._appStateService.activeFile;
|
||||||
}
|
}
|
||||||
return this._reanalysisControllerService.reanalyzeFile(
|
return this._reanalysisControllerService.reanalyzeFile(this._appStateService.activeDossier.id, fileStatusWrapper.fileId, true);
|
||||||
this._appStateService.activeDossier.dossierId,
|
|
||||||
fileStatusWrapper.fileId,
|
|
||||||
true
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
toggleAnalysis(fileStatusWrapper?: FileStatusWrapper) {
|
toggleAnalysis(fileStatusWrapper?: FileStatusWrapper) {
|
||||||
|
|||||||
@ -1,5 +1,6 @@
|
|||||||
import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output } from '@angular/core';
|
import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output } from '@angular/core';
|
||||||
import { UserService, UserWrapper } from '@services/user.service';
|
import { UserService, UserWrapper } from '@services/user.service';
|
||||||
|
import { List } from '@redaction/red-ui-http';
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
selector: 'redaction-assign-user-dropdown',
|
selector: 'redaction-assign-user-dropdown',
|
||||||
@ -9,7 +10,7 @@ import { UserService, UserWrapper } from '@services/user.service';
|
|||||||
})
|
})
|
||||||
export class AssignUserDropdownComponent {
|
export class AssignUserDropdownComponent {
|
||||||
oldUser: UserWrapper | string;
|
oldUser: UserWrapper | string;
|
||||||
@Input() options: (UserWrapper | string)[];
|
@Input() options: List<UserWrapper | string>;
|
||||||
@Output() save = new EventEmitter<UserWrapper | string>();
|
@Output() save = new EventEmitter<UserWrapper | string>();
|
||||||
@Output() cancel = new EventEmitter<never>();
|
@Output() cancel = new EventEmitter<never>();
|
||||||
private _currentUser: UserWrapper | string;
|
private _currentUser: UserWrapper | string;
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
import { ChangeDetectionStrategy, Component, Input, OnDestroy } from '@angular/core';
|
import { ChangeDetectionStrategy, Component, Input, OnDestroy } from '@angular/core';
|
||||||
import { PermissionsService } from '@services/permissions.service';
|
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 { FileStatusWrapper } from '@models/file/file-status.wrapper';
|
||||||
import { FileDownloadService } from '@upload-download/services/file-download.service';
|
import { FileDownloadService } from '@upload-download/services/file-download.service';
|
||||||
import { Toaster } from '@iqser/common-ui';
|
import { Toaster } from '@iqser/common-ui';
|
||||||
@ -17,7 +17,7 @@ export type MenuState = 'OPEN' | 'CLOSED';
|
|||||||
changeDetection: ChangeDetectionStrategy.OnPush
|
changeDetection: ChangeDetectionStrategy.OnPush
|
||||||
})
|
})
|
||||||
export class FileDownloadBtnComponent extends AutoUnsubscribe implements OnDestroy {
|
export class FileDownloadBtnComponent extends AutoUnsubscribe implements OnDestroy {
|
||||||
@Input() dossier: DossierWrapper;
|
@Input() dossier: Dossier;
|
||||||
@Input() file: FileStatusWrapper | FileStatusWrapper[];
|
@Input() file: FileStatusWrapper | FileStatusWrapper[];
|
||||||
@Input() tooltipPosition: 'above' | 'below' | 'before' | 'after' = 'above';
|
@Input() tooltipPosition: 'above' | 'below' | 'before' | 'after' = 'above';
|
||||||
@Input() type: CircleButtonType = CircleButtonTypes.default;
|
@Input() type: CircleButtonType = CircleButtonTypes.default;
|
||||||
|
|||||||
@ -4,7 +4,7 @@ import { AppStateService } from '@state/app-state.service';
|
|||||||
import { Debounce, IconButtonTypes } from '@iqser/common-ui';
|
import { Debounce, IconButtonTypes } from '@iqser/common-ui';
|
||||||
import { Observable } from 'rxjs';
|
import { Observable } from 'rxjs';
|
||||||
import { map, take } from 'rxjs/operators';
|
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 { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';
|
||||||
import ICodeEditor = monaco.editor.ICodeEditor;
|
import ICodeEditor = monaco.editor.ICodeEditor;
|
||||||
import IDiffEditor = monaco.editor.IDiffEditor;
|
import IDiffEditor = monaco.editor.IDiffEditor;
|
||||||
@ -55,13 +55,13 @@ export class DictionaryManagerComponent implements OnChanges, OnInit {
|
|||||||
this.currentEntries = this.initialEntries;
|
this.currentEntries = this.initialEntries;
|
||||||
}
|
}
|
||||||
|
|
||||||
private _dossier: DossierWrapper = this.selectDossier as DossierWrapper;
|
private _dossier: Dossier = this.selectDossier as Dossier;
|
||||||
|
|
||||||
get dossier() {
|
get dossier() {
|
||||||
return this._dossier;
|
return this._dossier;
|
||||||
}
|
}
|
||||||
|
|
||||||
set dossier(dossier: DossierWrapper) {
|
set dossier(dossier: Dossier) {
|
||||||
this._dossier = dossier;
|
this._dossier = dossier;
|
||||||
|
|
||||||
if (dossier === this.selectDossier) {
|
if (dossier === this.selectDossier) {
|
||||||
@ -204,8 +204,8 @@ export class DictionaryManagerComponent implements OnChanges, OnInit {
|
|||||||
this._codeEditor.revealLineInCenter(range.startLineNumber, SMOOTH_SCROLL);
|
this._codeEditor.revealLineInCenter(range.startLineNumber, SMOOTH_SCROLL);
|
||||||
}
|
}
|
||||||
|
|
||||||
private _onDossierChanged({ dossierId, dossierTemplateId }: DossierWrapper): Observable<string> {
|
private _onDossierChanged({ id, dossierTemplateId }: Dossier): Observable<string> {
|
||||||
const dictionary$ = this._dictionaryControllerService.getDictionaryForType(dossierTemplateId, 'dossier_redaction', dossierId);
|
const dictionary$ = this._dictionaryControllerService.getDictionaryForType(dossierTemplateId, 'dossier_redaction', id);
|
||||||
|
|
||||||
return dictionary$.pipe(map(data => this._toString(data.entries)));
|
return dictionary$.pipe(map(data => this._toString(data.entries)));
|
||||||
}
|
}
|
||||||
|
|||||||
@ -5,7 +5,7 @@ import {
|
|||||||
DossierAttributesControllerService,
|
DossierAttributesControllerService,
|
||||||
DossierAttributesRes
|
DossierAttributesRes
|
||||||
} from '@redaction/red-ui-http';
|
} 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 { DossierAttributeWithValue } from '@models/dossier-attributes.model';
|
||||||
import { AppStateService } from '@state/app-state.service';
|
import { AppStateService } from '@state/app-state.service';
|
||||||
import { Observable } from 'rxjs';
|
import { Observable } from 'rxjs';
|
||||||
@ -19,10 +19,10 @@ export class DossierAttributesService {
|
|||||||
private readonly _appStateService: AppStateService
|
private readonly _appStateService: AppStateService
|
||||||
) {}
|
) {}
|
||||||
|
|
||||||
async getValues(dossierWrapper: DossierWrapper): Promise<DossierAttributeWithValue[]> {
|
async getValues(dossier: Dossier): Promise<DossierAttributeWithValue[]> {
|
||||||
const attributes = await this._dossierAttributesControllerService.getDossierAttributes(dossierWrapper.dossierId).toPromise();
|
const attributes = await this._dossierAttributesControllerService.getDossierAttributes(dossier.id).toPromise();
|
||||||
const attributesConfig = await this._dossierAttributesControllerService
|
const attributesConfig = await this._dossierAttributesControllerService
|
||||||
.getDossierAttributesConfig(dossierWrapper.dossierTemplateId)
|
.getDossierAttributesConfig(dossier.dossierTemplateId)
|
||||||
.toPromise();
|
.toPromise();
|
||||||
|
|
||||||
return attributesConfig.dossierAttributeConfigs.map(config => ({
|
return attributesConfig.dossierAttributeConfigs.map(config => ({
|
||||||
@ -31,10 +31,8 @@ export class DossierAttributesService {
|
|||||||
}));
|
}));
|
||||||
}
|
}
|
||||||
|
|
||||||
setValues(dossierWrapper: DossierWrapper, dossierAttributeList: DossierAttributeReq[]): Promise<DossierAttributesRes> {
|
setValues(dossier: Dossier, dossierAttributeList: DossierAttributeReq[]): Promise<DossierAttributesRes> {
|
||||||
return this._dossierAttributesControllerService
|
return this._dossierAttributesControllerService.setDossierAttributes({ dossierAttributeList }, dossier.id).toPromise();
|
||||||
.setDossierAttributes({ dossierAttributeList }, dossierWrapper.dossierId)
|
|
||||||
.toPromise();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
deleteConfigs(ids: string[], dossierTemplateId = this._appStateService.activeDossierTemplateId): Promise<void> {
|
deleteConfigs(ids: string[], dossierTemplateId = this._appStateService.activeDossierTemplateId): Promise<void> {
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
import { DownloadDetails, DownloadStatus } from '@redaction/red-ui-http';
|
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;
|
inProgress: boolean;
|
||||||
|
|
||||||
constructor(private _downloadStatus: DownloadStatus) {}
|
constructor(private _downloadStatus: DownloadStatus) {}
|
||||||
|
|||||||
@ -3,7 +3,7 @@ import { DownloadControllerService, FileManagementControllerService } from '@red
|
|||||||
import { interval, Observable } from 'rxjs';
|
import { interval, Observable } from 'rxjs';
|
||||||
import { ConfigService } from '@services/config.service';
|
import { ConfigService } from '@services/config.service';
|
||||||
import { TranslateService } from '@ngx-translate/core';
|
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 { FileStatusWrapper } from '@models/file/file-status.wrapper';
|
||||||
import { mergeMap, tap } from 'rxjs/operators';
|
import { mergeMap, tap } from 'rxjs/operators';
|
||||||
import { DownloadStatusWrapper } from '../model/download-status.wrapper';
|
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
|
return this._downloadControllerService
|
||||||
.prepareDownload({
|
.prepareDownload({
|
||||||
fileIds: fileStatusWrappers.map(f => f.fileId),
|
fileIds: fileStatusWrappers.map(f => f.fileId),
|
||||||
dossierId: dossier.dossierId
|
dossierId: dossier.id
|
||||||
})
|
})
|
||||||
.pipe(mergeMap(() => this.getDownloadStatus()));
|
.pipe(mergeMap(() => this.getDownloadStatus()));
|
||||||
}
|
}
|
||||||
|
|||||||
@ -3,7 +3,7 @@ import { AppStateService } from '@state/app-state.service';
|
|||||||
import { UserService } from './user.service';
|
import { UserService } from './user.service';
|
||||||
import { FileStatusWrapper } from '@models/file/file-status.wrapper';
|
import { FileStatusWrapper } from '@models/file/file-status.wrapper';
|
||||||
import { Comment } from '@redaction/red-ui-http';
|
import { Comment } from '@redaction/red-ui-http';
|
||||||
import { DossierWrapper } from '@state/model/dossier.wrapper';
|
import { Dossier } from '../state/model/dossier';
|
||||||
|
|
||||||
@Injectable({
|
@Injectable({
|
||||||
providedIn: 'root'
|
providedIn: 'root'
|
||||||
@ -15,7 +15,7 @@ export class PermissionsService {
|
|||||||
return this._appStateService.activeFile;
|
return this._appStateService.activeFile;
|
||||||
}
|
}
|
||||||
|
|
||||||
private get _activeDossier(): DossierWrapper | undefined {
|
private get _activeDossier(): Dossier | undefined {
|
||||||
return this._appStateService.activeDossier;
|
return this._appStateService.activeDossier;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -42,14 +42,14 @@ export class PermissionsService {
|
|||||||
return fileStatus.currentReviewer === this._userService.currentUser.id;
|
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;
|
return (this.isOwner(dossier) && !fileStatus.isApproved) || fileStatus.isUnassigned;
|
||||||
}
|
}
|
||||||
|
|
||||||
canAssignToSelf(fileStatus = this._activeFile): boolean {
|
canAssignToSelf(fileStatus = this._activeFile): boolean {
|
||||||
const precondition = this.isDossierMember() && !fileStatus.isProcessing && !fileStatus.isError && !fileStatus.isApproved;
|
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 (precondition) {
|
||||||
if (
|
if (
|
||||||
@ -66,10 +66,10 @@ export class PermissionsService {
|
|||||||
const precondition = !fileStatus.isProcessing && !fileStatus.isError && !fileStatus.isApproved && this.isApprover();
|
const precondition = !fileStatus.isProcessing && !fileStatus.isError && !fileStatus.isApproved && this.isApprover();
|
||||||
|
|
||||||
if (precondition) {
|
if (precondition) {
|
||||||
if ((fileStatus.isUnassigned || fileStatus.isUnderReview) && this._activeDossier.hasMoreThanOneReviewer) {
|
if ((fileStatus.isUnassigned || fileStatus.isUnderReview) && this._activeDossier.hasReviewers) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
if (fileStatus.isUnderApproval && this._activeDossier.hasMoreThanOneApprover) {
|
if (fileStatus.isUnderApproval && this._activeDossier.approverIds.length > 1) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -6,7 +6,7 @@ import { User, UserControllerService } from '@redaction/red-ui-http';
|
|||||||
import { wipeCaches } from '@redaction/red-cache';
|
import { wipeCaches } from '@redaction/red-cache';
|
||||||
import { BASE_HREF } from '../tokens';
|
import { BASE_HREF } from '../tokens';
|
||||||
import { Subject } from 'rxjs';
|
import { Subject } from 'rxjs';
|
||||||
import { Listable } from '@iqser/common-ui';
|
import { IListable } from '@iqser/common-ui';
|
||||||
|
|
||||||
export interface ProfileModel {
|
export interface ProfileModel {
|
||||||
username?: string;
|
username?: string;
|
||||||
@ -16,7 +16,7 @@ export interface ProfileModel {
|
|||||||
language: string;
|
language: string;
|
||||||
}
|
}
|
||||||
|
|
||||||
export class UserWrapper implements Listable {
|
export class UserWrapper implements IListable {
|
||||||
constructor(private readonly _user: KeycloakProfile | User, public roles: string[], public id: string) {}
|
constructor(private readonly _user: KeycloakProfile | User, public roles: string[], public id: string) {}
|
||||||
|
|
||||||
email = this._user.email;
|
email = this._user.email;
|
||||||
|
|||||||
@ -1,11 +1,11 @@
|
|||||||
import { Injectable } from '@angular/core';
|
import { Injectable } from '@angular/core';
|
||||||
import {
|
import {
|
||||||
DictionaryControllerService,
|
DictionaryControllerService,
|
||||||
Dossier,
|
|
||||||
DossierTemplateControllerService,
|
DossierTemplateControllerService,
|
||||||
FileAttributesConfig,
|
FileAttributesConfig,
|
||||||
FileAttributesControllerService,
|
FileAttributesControllerService,
|
||||||
FileStatus,
|
FileStatus,
|
||||||
|
IDossier,
|
||||||
ReanalysisControllerService,
|
ReanalysisControllerService,
|
||||||
StatusControllerService
|
StatusControllerService
|
||||||
} from '@redaction/red-ui-http';
|
} from '@redaction/red-ui-http';
|
||||||
@ -17,7 +17,7 @@ import { forkJoin, Observable, of, Subject } from 'rxjs';
|
|||||||
import { catchError, map, tap } from 'rxjs/operators';
|
import { catchError, map, tap } from 'rxjs/operators';
|
||||||
import { FALLBACK_COLOR, hexToRgb } from '@utils/functions';
|
import { FALLBACK_COLOR, hexToRgb } from '@utils/functions';
|
||||||
import { FileStatusWrapper } from '@models/file/file-status.wrapper';
|
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 { TypeValueWrapper } from '@models/file/type-value.wrapper';
|
||||||
import { DossierTemplateModelWrapper } from '@models/file/dossier-template-model.wrapper';
|
import { DossierTemplateModelWrapper } from '@models/file/dossier-template-model.wrapper';
|
||||||
import { DossiersService } from '../modules/dossier/services/dossiers.service';
|
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';
|
import { UserPreferenceService } from '@services/user-preference.service';
|
||||||
|
|
||||||
export interface AppState {
|
export interface AppState {
|
||||||
dossiers: DossierWrapper[];
|
dossiers: Dossier[];
|
||||||
dossierTemplates: DossierTemplateModelWrapper[];
|
dossierTemplates: DossierTemplateModelWrapper[];
|
||||||
activeDossierId: string;
|
activeDossierId: string;
|
||||||
activeFileId: string;
|
activeFileId: string;
|
||||||
@ -42,7 +42,7 @@ export interface AppState {
|
|||||||
export class AppStateService {
|
export class AppStateService {
|
||||||
readonly fileChanged$ = new Subject<FileStatusWrapper>();
|
readonly fileChanged$ = new Subject<FileStatusWrapper>();
|
||||||
readonly fileReanalysed$ = new Subject<FileStatusWrapper>();
|
readonly fileReanalysed$ = new Subject<FileStatusWrapper>();
|
||||||
readonly dossierChanged$ = new Subject<DossierWrapper>();
|
readonly dossierChanged$ = new Subject<Dossier>();
|
||||||
readonly dossierTemplateChanged$ = new Subject<DossierTemplateModelWrapper>();
|
readonly dossierTemplateChanged$ = new Subject<DossierTemplateModelWrapper>();
|
||||||
|
|
||||||
private _appState: AppState;
|
private _appState: AppState;
|
||||||
@ -121,11 +121,11 @@ export class AppStateService {
|
|||||||
return this._appState.activeDossierId;
|
return this._appState.activeDossierId;
|
||||||
}
|
}
|
||||||
|
|
||||||
get activeDossier(): DossierWrapper | undefined {
|
get activeDossier(): Dossier | undefined {
|
||||||
return this.allDossiers.find(p => p.dossierId === this.activeDossierId);
|
return this.allDossiers.find(p => p.id === this.activeDossierId);
|
||||||
}
|
}
|
||||||
|
|
||||||
get allDossiers(): DossierWrapper[] {
|
get allDossiers(): Dossier[] {
|
||||||
return this._appState.dossiers;
|
return this._appState.dossiers;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -208,7 +208,7 @@ export class AppStateService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
getDossierById(id: string) {
|
getDossierById(id: string) {
|
||||||
return this.allDossiers.find(dossier => dossier.dossierId === id);
|
return this.allDossiers.find(dossier => dossier.id === id);
|
||||||
}
|
}
|
||||||
|
|
||||||
getFileById(dossierId: string, fileId: string) {
|
getFileById(dossierId: string, fileId: string) {
|
||||||
@ -222,12 +222,12 @@ export class AppStateService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const mappedDossiers = dossiers.map(
|
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)) {
|
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);
|
this._processFiles(dossier, fileData[dossierId], emitEvents);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -261,14 +261,14 @@ export class AppStateService {
|
|||||||
return activeFileWrapper;
|
return activeFileWrapper;
|
||||||
}
|
}
|
||||||
|
|
||||||
async getFiles(dossier: DossierWrapper = this.activeDossier, emitEvents = true) {
|
async getFiles(dossier: Dossier = this.activeDossier, emitEvents = true) {
|
||||||
const files = await this._statusControllerService.getDossierStatus(dossier.dossierId).toPromise();
|
const files = await this._statusControllerService.getDossierStatus(dossier.id).toPromise();
|
||||||
|
|
||||||
return this._processFiles(dossier, files, emitEvents);
|
return this._processFiles(dossier, files, emitEvents);
|
||||||
}
|
}
|
||||||
|
|
||||||
async reanalyzeDossier({ dossierId }: DossierWrapper = this.activeDossier) {
|
async reanalyzeDossier({ id }: Dossier = this.activeDossier) {
|
||||||
await this._reanalysisControllerService.reanalyzeDossier(dossierId, true).toPromise();
|
await this._reanalysisControllerService.reanalyzeDossier(id, true).toPromise();
|
||||||
}
|
}
|
||||||
|
|
||||||
async activateDossier(dossierId: string) {
|
async activateDossier(dossierId: string) {
|
||||||
@ -337,29 +337,29 @@ export class AppStateService {
|
|||||||
this._appState.activeDictionaryType = null;
|
this._appState.activeDictionaryType = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
deleteDossier(dossier: DossierWrapper) {
|
deleteDossier(dossier: Dossier) {
|
||||||
return this._dossiersService.delete(dossier.dossierId).then(
|
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._appState.dossiers.splice(index, 1);
|
||||||
},
|
},
|
||||||
() => this._toaster.error(_('dossier-listing.delete.delete-failed'), { params: dossier })
|
() => this._toaster.error(_('dossier-listing.delete.delete-failed'), { params: dossier })
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
async createOrUpdateDossier(dossier: Dossier) {
|
async createOrUpdateDossier(dossier: IDossier) {
|
||||||
try {
|
try {
|
||||||
const updatedDossier = await this._dossiersService.createOrUpdate(dossier);
|
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) {
|
if (foundDossier) {
|
||||||
this._appState.dossiers.splice(this._appState.dossiers.indexOf(foundDossier), 1);
|
this._appState.dossiers.splice(this._appState.dossiers.indexOf(foundDossier), 1);
|
||||||
foundDossier = new DossierWrapper(
|
foundDossier = new Dossier(
|
||||||
updatedDossier,
|
updatedDossier,
|
||||||
this.getDossierTemplateById(updatedDossier.dossierTemplateId).name,
|
this.getDossierTemplateById(updatedDossier.dossierTemplateId).name,
|
||||||
foundDossier.files
|
foundDossier.files
|
||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
foundDossier = new DossierWrapper(updatedDossier, this.getDossierTemplateById(updatedDossier.dossierTemplateId).name, []);
|
foundDossier = new Dossier(updatedDossier, this.getDossierTemplateById(updatedDossier.dossierTemplateId).name, []);
|
||||||
}
|
}
|
||||||
|
|
||||||
this._appState.dossiers.push(foundDossier);
|
this._appState.dossiers.push(foundDossier);
|
||||||
@ -689,11 +689,11 @@ export class AppStateService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private _getExistingFiles(dossierId: string): FileStatusWrapper[] {
|
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 ?? [];
|
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 oldFiles = [...dossier.files];
|
||||||
|
|
||||||
const fileStatusChangedEvent = [];
|
const fileStatusChangedEvent = [];
|
||||||
@ -712,7 +712,7 @@ export class AppStateService {
|
|||||||
this.getFileAttributeConfig(file.dossierTemplateId)
|
this.getFileAttributeConfig(file.dossierTemplateId)
|
||||||
);
|
);
|
||||||
fileStatusWrapper.lastOpened =
|
fileStatusWrapper.lastOpened =
|
||||||
fileStatusWrapper.fileId === this._userPreferenceService.getLastOpenedFileForDossier(dossier.dossierId);
|
fileStatusWrapper.fileId === this._userPreferenceService.getLastOpenedFileForDossier(dossier.id);
|
||||||
if (JSON.stringify(oldFile) !== JSON.stringify(fileStatusWrapper)) {
|
if (JSON.stringify(oldFile) !== JSON.stringify(fileStatusWrapper)) {
|
||||||
fileStatusChangedEvent.push(fileStatusWrapper);
|
fileStatusChangedEvent.push(fileStatusWrapper);
|
||||||
}
|
}
|
||||||
@ -749,7 +749,7 @@ export class AppStateService {
|
|||||||
fileStatusChangedEvent.forEach(file => this.fileChanged$.next(file));
|
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));
|
dossier.files.forEach(file => (file.lastOpened = file.fileId === lastOpenedFileId));
|
||||||
|
|
||||||
@ -764,7 +764,6 @@ export class AppStateService {
|
|||||||
this.allDossiers.forEach(d => {
|
this.allDossiers.forEach(d => {
|
||||||
totalDocuments += d.files.length;
|
totalDocuments += d.files.length;
|
||||||
d.memberIds?.forEach(m => totalPeople.add(m));
|
d.memberIds?.forEach(m => totalPeople.add(m));
|
||||||
d.totalNumberOfPages = d.files.reduce((acc, file) => acc + file.numberOfPages, 0);
|
|
||||||
totalAnalysedPages += d.totalNumberOfPages;
|
totalAnalysedPages += d.totalNumberOfPages;
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@ -1,29 +1,25 @@
|
|||||||
import { FileStatusWrapper } from '@models/file/file-status.wrapper';
|
import { FileStatusWrapper } from '@models/file/file-status.wrapper';
|
||||||
import * as moment from 'moment';
|
import { Dictionary, DossierStatus, DownloadFileType, IDossier, List } from '@redaction/red-ui-http';
|
||||||
import { Dictionary, Dossier } from '@redaction/red-ui-http';
|
import { IListable } from '@iqser/common-ui';
|
||||||
import { Listable } from '@iqser/common-ui';
|
|
||||||
|
|
||||||
export class DossierWrapper implements Dossier, Listable {
|
export class Dossier implements IDossier, IListable {
|
||||||
readonly approverIds = this._dossier.approverIds;
|
readonly id: string;
|
||||||
readonly date = this._dossier.date;
|
readonly ownerId: string;
|
||||||
readonly description = this._dossier.description;
|
readonly memberIds: List;
|
||||||
readonly dossierId = this._dossier.dossierId;
|
readonly approverIds: List;
|
||||||
readonly dossierName = this._dossier.dossierName;
|
readonly reportTemplateIds: List;
|
||||||
readonly dossierTemplateId = this._dossier.dossierTemplateId;
|
readonly dossierTemplateId: string;
|
||||||
readonly downloadFileTypes = this._dossier.downloadFileTypes;
|
readonly dossierName: string;
|
||||||
readonly dueDate = this._dossier.dueDate;
|
readonly date: string;
|
||||||
readonly hardDeletedTime = this._dossier.hardDeletedTime;
|
readonly description: string;
|
||||||
readonly memberIds = this._dossier.memberIds;
|
readonly downloadFileTypes: List<DownloadFileType>;
|
||||||
readonly ownerId = this._dossier.ownerId;
|
readonly dueDate: string;
|
||||||
readonly reportTemplateIds = this._dossier.reportTemplateIds;
|
readonly hardDeletedTime: string;
|
||||||
readonly reportTypes = this._dossier.reportTypes;
|
readonly reportTypes: List;
|
||||||
readonly softDeletedTime = this._dossier.softDeletedTime;
|
readonly softDeletedTime: string;
|
||||||
readonly status = this._dossier.status;
|
readonly status: DossierStatus;
|
||||||
readonly watermarkEnabled = this._dossier.watermarkEnabled;
|
readonly watermarkEnabled: boolean;
|
||||||
|
readonly hasReviewers: boolean;
|
||||||
readonly hasMoreThanOneApprover = this.approverIds.length > 1;
|
|
||||||
readonly hasMoreThanOneReviewer = this.memberIds.length > 1;
|
|
||||||
readonly memberCount = this.memberIds.length;
|
|
||||||
|
|
||||||
reanalysisRequired = this._files.some(file => file.analysisRequired);
|
reanalysisRequired = this._files.some(file => file.analysisRequired);
|
||||||
hasFiles = this._files.length > 0;
|
hasFiles = this._files.length > 0;
|
||||||
@ -39,12 +35,26 @@ export class DossierWrapper implements Dossier, Listable {
|
|||||||
allFilesApproved?: boolean;
|
allFilesApproved?: boolean;
|
||||||
type?: Dictionary;
|
type?: Dictionary;
|
||||||
|
|
||||||
constructor(private readonly _dossier: Dossier, readonly dossierTemplateName, private _files: FileStatusWrapper[] = []) {
|
constructor(dossier: IDossier, readonly dossierTemplateName: string, private _files: FileStatusWrapper[] = []) {
|
||||||
this._recomputeFileStatus();
|
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() {
|
this._recomputeFileStatus();
|
||||||
return this.dossierId;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
get files() {
|
get files() {
|
||||||
@ -61,11 +71,7 @@ export class DossierWrapper implements Dossier, Listable {
|
|||||||
}
|
}
|
||||||
|
|
||||||
hasMember(memberId: string) {
|
hasMember(memberId: string) {
|
||||||
return this._dossier.memberIds.indexOf(memberId) >= 0;
|
return this.memberIds.indexOf(memberId) >= 0;
|
||||||
}
|
|
||||||
|
|
||||||
addedDateMatches(key: string) {
|
|
||||||
return moment(this.date).format('DD/MM/YYYY') === key;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private _recomputeFileStatus() {
|
private _recomputeFileStatus() {
|
||||||
@ -1,7 +1,7 @@
|
|||||||
import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';
|
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'),
|
ORIGINAL: _('download-type.original'),
|
||||||
PREVIEW: _('download-type.preview'),
|
PREVIEW: _('download-type.preview'),
|
||||||
REDACTED: _('download-type.redacted'),
|
REDACTED: _('download-type.redacted'),
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
import { FileUploadModel } from '@upload-download/model/file-upload.model';
|
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.preventDefault();
|
||||||
event.stopPropagation();
|
event.stopPropagation();
|
||||||
const { dataTransfer } = event;
|
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');
|
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[] = [];
|
let uploadFiles: FileUploadModel[] = [];
|
||||||
for (let i = 0; i < files.length; i++) {
|
for (let i = 0; i < files.length; i++) {
|
||||||
const file = files[i];
|
const file = files[i];
|
||||||
@ -39,7 +39,7 @@ export function convertFiles(files: FileList | File[], dossier: DossierWrapper):
|
|||||||
progress: 0,
|
progress: 0,
|
||||||
completed: false,
|
completed: false,
|
||||||
error: null,
|
error: null,
|
||||||
dossierId: dossier.dossierId,
|
dossierId: dossier.id,
|
||||||
dossierName: dossier.dossierName,
|
dossierName: dossier.dossierName,
|
||||||
sizeError: false,
|
sizeError: false,
|
||||||
retryCount: 0,
|
retryCount: 0,
|
||||||
|
|||||||
@ -1,5 +1,5 @@
|
|||||||
import { FileStatusWrapper } from '@models/file/file-status.wrapper';
|
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';
|
import { handleCheckedValue, NestedFilter } from '@iqser/common-ui';
|
||||||
|
|
||||||
export function handleFilterDelta(oldFilters: NestedFilter[], newFilters: NestedFilter[], allFilters: NestedFilter[]) {
|
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) {
|
switch (filter.key) {
|
||||||
case 'analysis': {
|
case 'analysis': {
|
||||||
if (input instanceof DossierWrapper) {
|
if (input instanceof Dossier) {
|
||||||
return input.reanalysisRequired;
|
return input.reanalysisRequired;
|
||||||
} else {
|
} else {
|
||||||
return input.analysisRequired;
|
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
|
||||||
@ -16,7 +16,7 @@ import { CustomHttpUrlEncodingCodec } from '../encoder';
|
|||||||
|
|
||||||
import { Observable } from 'rxjs';
|
import { Observable } from 'rxjs';
|
||||||
|
|
||||||
import { Dossier } from '../model/dossier';
|
import { IDossier } from '../model/dossier';
|
||||||
import { DossierRequest } from '../model/dossierRequest';
|
import { DossierRequest } from '../model/dossierRequest';
|
||||||
|
|
||||||
import { BASE_PATH } from '../variables';
|
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 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.
|
* @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> {
|
public createOrUpdateDossier(body: DossierRequest, observe: any = 'body', reportProgress: boolean = false): Observable<any> {
|
||||||
if (body === null || body === undefined) {
|
if (body === null || body === undefined) {
|
||||||
@ -83,7 +83,7 @@ export class DossierControllerService {
|
|||||||
headers = headers.set('Content-Type', httpContentTypeSelected);
|
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,
|
body: body,
|
||||||
withCredentials: this.configuration.withCredentials,
|
withCredentials: this.configuration.withCredentials,
|
||||||
headers: headers,
|
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 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.
|
* @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> {
|
public getDeletedDossiers(observe: any = 'body', reportProgress: boolean = false): Observable<any> {
|
||||||
let headers = this.defaultHeaders;
|
let headers = this.defaultHeaders;
|
||||||
@ -163,7 +163,7 @@ export class DossierControllerService {
|
|||||||
headers = headers.set('Accept', httpHeaderAcceptSelected);
|
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,
|
withCredentials: this.configuration.withCredentials,
|
||||||
headers: headers,
|
headers: headers,
|
||||||
observe: observe,
|
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 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.
|
* @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> {
|
public getDossier(dossierId: string, observe: any = 'body', reportProgress: boolean = false): Observable<any> {
|
||||||
if (dossierId === null || dossierId === undefined) {
|
if (dossierId === null || dossierId === undefined) {
|
||||||
@ -205,7 +205,7 @@ export class DossierControllerService {
|
|||||||
headers = headers.set('Accept', httpHeaderAcceptSelected);
|
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,
|
withCredentials: this.configuration.withCredentials,
|
||||||
headers: headers,
|
headers: headers,
|
||||||
observe: observe,
|
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 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.
|
* @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> {
|
public getDossiers(observe: any = 'body', reportProgress: boolean = false): Observable<any> {
|
||||||
let headers = this.defaultHeaders;
|
let headers = this.defaultHeaders;
|
||||||
@ -242,7 +242,7 @@ export class DossierControllerService {
|
|||||||
headers = headers.set('Accept', httpHeaderAcceptSelected);
|
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,
|
withCredentials: this.configuration.withCredentials,
|
||||||
headers: headers,
|
headers: headers,
|
||||||
observe: observe,
|
observe: observe,
|
||||||
|
|||||||
@ -3,3 +3,4 @@ export * from './model/models';
|
|||||||
export * from './variables';
|
export * from './variables';
|
||||||
export * from './configuration';
|
export * from './configuration';
|
||||||
export * from './api.module';
|
export * from './api.module';
|
||||||
|
export * from './red-types';
|
||||||
|
|||||||
@ -9,38 +9,38 @@
|
|||||||
* https://github.com/swagger-api/swagger-codegen.git
|
* https://github.com/swagger-api/swagger-codegen.git
|
||||||
* Do not edit the class manually.
|
* Do not edit the class manually.
|
||||||
*/
|
*/
|
||||||
|
import { List } from '../red-types';
|
||||||
|
|
||||||
export interface Dossier {
|
export interface IDossier {
|
||||||
approverIds?: Array<string>;
|
readonly approverIds?: List;
|
||||||
date?: string;
|
readonly date?: string;
|
||||||
description?: string;
|
readonly description?: string;
|
||||||
dossierId?: string;
|
readonly dossierId?: string;
|
||||||
dossierName?: string;
|
readonly dossierName?: string;
|
||||||
dossierTemplateId?: string;
|
readonly dossierTemplateId?: string;
|
||||||
downloadFileTypes?: Array<Dossier.DownloadFileTypesEnum>;
|
readonly downloadFileTypes?: List<DownloadFileType>;
|
||||||
dueDate?: string;
|
readonly dueDate?: string;
|
||||||
hardDeletedTime?: string;
|
readonly hardDeletedTime?: string;
|
||||||
memberIds?: Array<string>;
|
readonly memberIds?: List;
|
||||||
ownerId?: string;
|
readonly ownerId?: string;
|
||||||
reportTemplateIds?: Array<string>;
|
readonly reportTemplateIds?: List;
|
||||||
reportTypes?: Array<string>;
|
readonly reportTypes?: List;
|
||||||
softDeletedTime?: string;
|
readonly softDeletedTime?: string;
|
||||||
status?: Dossier.StatusEnum;
|
readonly status?: DossierStatus;
|
||||||
watermarkEnabled?: boolean;
|
readonly watermarkEnabled?: boolean;
|
||||||
}
|
}
|
||||||
|
|
||||||
export namespace Dossier {
|
export const DownloadFileTypes = {
|
||||||
export type DownloadFileTypesEnum = 'ANNOTATED' | 'FLATTEN' | 'ORIGINAL' | 'PREVIEW' | 'REDACTED';
|
ANNOTATED: 'ANNOTATED',
|
||||||
export const DownloadFileTypesEnum = {
|
FLATTEN: 'FLATTEN',
|
||||||
ANNOTATED: 'ANNOTATED' as DownloadFileTypesEnum,
|
ORIGINAL: 'ORIGINAL',
|
||||||
FLATTEN: 'FLATTEN' as DownloadFileTypesEnum,
|
PREVIEW: 'PREVIEW',
|
||||||
ORIGINAL: 'ORIGINAL' as DownloadFileTypesEnum,
|
REDACTED: 'REDACTED'
|
||||||
PREVIEW: 'PREVIEW' as DownloadFileTypesEnum,
|
} as const;
|
||||||
REDACTED: 'REDACTED' as DownloadFileTypesEnum
|
export type DownloadFileType = keyof typeof DownloadFileTypes;
|
||||||
};
|
|
||||||
export type StatusEnum = 'ACTIVE' | 'DELETED';
|
export const DossierStatuses = {
|
||||||
export const StatusEnum = {
|
ACTIVE: 'ACTIVE',
|
||||||
ACTIVE: 'ACTIVE' as StatusEnum,
|
DELETED: 'DELETED'
|
||||||
DELETED: 'DELETED' as StatusEnum
|
} as const;
|
||||||
};
|
export type DossierStatus = keyof typeof DossierStatuses;
|
||||||
}
|
|
||||||
|
|||||||
@ -10,6 +10,8 @@
|
|||||||
* Do not edit the class manually.
|
* Do not edit the class manually.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
import { List } from "../red-types";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Object containing information about a dossier.
|
* Object containing information about a dossier.
|
||||||
*/
|
*/
|
||||||
@ -17,51 +19,51 @@ export interface DossierRequest {
|
|||||||
/**
|
/**
|
||||||
* The id(s) of approvers associated to this dossier.
|
* The id(s) of approvers associated to this dossier.
|
||||||
*/
|
*/
|
||||||
approverIds?: Array<string>;
|
readonly approverIds?: List;
|
||||||
/**
|
/**
|
||||||
* The dossier's description (optional).
|
* The dossier's description (optional).
|
||||||
*/
|
*/
|
||||||
description?: string;
|
readonly description?: string;
|
||||||
/**
|
/**
|
||||||
* The id of the dossier, can be null for create requests.
|
* The id of the dossier, can be null for create requests.
|
||||||
*/
|
*/
|
||||||
dossierId?: string;
|
readonly dossierId?: string;
|
||||||
/**
|
/**
|
||||||
* The name of the dossier. Must be unique.
|
* The name of the dossier. Must be unique.
|
||||||
*/
|
*/
|
||||||
dossierName?: string;
|
readonly dossierName?: string;
|
||||||
/**
|
/**
|
||||||
* The dossierTemplateId for this dossier. can be null for update request.
|
* The dossierTemplateId for this dossier. can be null for update request.
|
||||||
*/
|
*/
|
||||||
dossierTemplateId?: string;
|
readonly dossierTemplateId?: string;
|
||||||
/**
|
/**
|
||||||
* Download File Types for this dossiers submission package.
|
* Download File Types for this dossiers submission package.
|
||||||
*/
|
*/
|
||||||
downloadFileTypes?: Array<DossierRequest.DownloadFileTypesEnum>;
|
readonly downloadFileTypes?: List<DossierRequest.DownloadFileTypesEnum>;
|
||||||
/**
|
/**
|
||||||
* The date when the dossier is due.
|
* The date when the dossier is due.
|
||||||
*/
|
*/
|
||||||
dueDate?: string;
|
readonly dueDate?: string;
|
||||||
/**
|
/**
|
||||||
* The id(s) of members associated to this dossier.
|
* The id(s) of members associated to this dossier.
|
||||||
*/
|
*/
|
||||||
memberIds?: Array<string>;
|
readonly memberIds?: List;
|
||||||
/**
|
/**
|
||||||
* The id of the owning user.
|
* The id of the owning user.
|
||||||
*/
|
*/
|
||||||
ownerId?: string;
|
readonly ownerId?: string;
|
||||||
/**
|
/**
|
||||||
* Id(s) of the word report templates used to generate downloads
|
* 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.
|
* 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.
|
* Whether a watermark will be applied to the redacted files or not.
|
||||||
*/
|
*/
|
||||||
watermarkEnabled?: boolean;
|
readonly watermarkEnabled?: boolean;
|
||||||
}
|
}
|
||||||
|
|
||||||
export namespace DossierRequest {
|
export namespace DossierRequest {
|
||||||
|
|||||||
1
libs/red-ui-http/src/lib/red-types.ts
Normal file
1
libs/red-ui-http/src/lib/red-types.ts
Normal file
@ -0,0 +1 @@
|
|||||||
|
export type List<T = string> = readonly T[];
|
||||||
@ -106,8 +106,8 @@
|
|||||||
"eslint": "7.32.0",
|
"eslint": "7.32.0",
|
||||||
"eslint-config-airbnb-typescript": "^14.0.0",
|
"eslint-config-airbnb-typescript": "^14.0.0",
|
||||||
"eslint-config-prettier": "8.3.0",
|
"eslint-config-prettier": "8.3.0",
|
||||||
"eslint-plugin-prettier": "^4.0.0",
|
|
||||||
"eslint-plugin-import": "2.24.2",
|
"eslint-plugin-import": "2.24.2",
|
||||||
|
"eslint-plugin-prettier": "^4.0.0",
|
||||||
"google-translate-api-browser": "^1.1.71",
|
"google-translate-api-browser": "^1.1.71",
|
||||||
"husky": "4.3.8",
|
"husky": "4.3.8",
|
||||||
"jest": "27.1.1",
|
"jest": "27.1.1",
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user