add file attributes service
This commit is contained in:
parent
b556169f31
commit
afe0df2931
@ -1,4 +1,4 @@
|
|||||||
import { DownloadFileType, FileAttributesConfig, IDossierTemplate, List } from '@redaction/red-ui-http';
|
import { DownloadFileType, IDossierTemplate, List } from '@redaction/red-ui-http';
|
||||||
import { IListable } from '@iqser/common-ui';
|
import { IListable } from '@iqser/common-ui';
|
||||||
|
|
||||||
export class DossierTemplate implements IDossierTemplate, IListable {
|
export class DossierTemplate implements IDossierTemplate, IListable {
|
||||||
@ -16,7 +16,7 @@ export class DossierTemplate implements IDossierTemplate, IListable {
|
|||||||
dictionariesCount = 0;
|
dictionariesCount = 0;
|
||||||
totalDictionaryEntries = 0;
|
totalDictionaryEntries = 0;
|
||||||
|
|
||||||
constructor(dossierTemplate: IDossierTemplate, public fileAttributesConfig: FileAttributesConfig) {
|
constructor(dossierTemplate: IDossierTemplate) {
|
||||||
this.createdBy = dossierTemplate.createdBy;
|
this.createdBy = dossierTemplate.createdBy;
|
||||||
this.dateAdded = dossierTemplate.dateAdded;
|
this.dateAdded = dossierTemplate.dateAdded;
|
||||||
this.dateModified = dossierTemplate.dateModified;
|
this.dateModified = dossierTemplate.dateModified;
|
||||||
|
|||||||
@ -2,17 +2,13 @@ import { Component, Inject, Injector } from '@angular/core';
|
|||||||
import { AbstractControl, FormBuilder, FormGroup, ValidatorFn, Validators } from '@angular/forms';
|
import { AbstractControl, FormBuilder, FormGroup, ValidatorFn, Validators } from '@angular/forms';
|
||||||
import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';
|
import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';
|
||||||
import * as Papa from 'papaparse';
|
import * as Papa from 'papaparse';
|
||||||
import {
|
import { FileAttributeConfigType, FileAttributeConfigTypes, FileAttributesConfig } from '@redaction/red-ui-http';
|
||||||
FileAttributeConfigType,
|
|
||||||
FileAttributeConfigTypes,
|
|
||||||
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, IListable, 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';
|
||||||
import { FileAttributeConfig } from '@models/file/file-attribute-config';
|
import { FileAttributeConfig } from '@models/file/file-attribute-config';
|
||||||
|
import { FileAttributesService } from '../../../dossier/services/file-attributes.service';
|
||||||
|
|
||||||
export interface Field extends IListable {
|
export interface Field extends IListable {
|
||||||
id: string;
|
id: string;
|
||||||
@ -47,7 +43,7 @@ export class FileAttributesCsvImportDialogComponent extends ListingComponent<Fie
|
|||||||
protected readonly _injector: Injector,
|
protected readonly _injector: Injector,
|
||||||
private readonly _formBuilder: FormBuilder,
|
private readonly _formBuilder: FormBuilder,
|
||||||
readonly dialogRef: MatDialogRef<FileAttributesCsvImportDialogComponent>,
|
readonly dialogRef: MatDialogRef<FileAttributesCsvImportDialogComponent>,
|
||||||
private readonly _fileAttributesControllerService: FileAttributesControllerService,
|
private readonly _fileAttributesService: FileAttributesService,
|
||||||
@Inject(MAT_DIALOG_DATA)
|
@Inject(MAT_DIALOG_DATA)
|
||||||
readonly data: {
|
readonly data: {
|
||||||
readonly csv: File;
|
readonly csv: File;
|
||||||
@ -191,7 +187,7 @@ export class FileAttributesCsvImportDialogComponent extends ListingComponent<Fie
|
|||||||
};
|
};
|
||||||
|
|
||||||
try {
|
try {
|
||||||
await this._fileAttributesControllerService.setFileAttributesConfig(fileAttributes, this.data.dossierTemplateId).toPromise();
|
await this._fileAttributesService.setFileAttributesConfig(fileAttributes, this.data.dossierTemplateId).toPromise();
|
||||||
this._toaster.success(_('file-attributes-csv-import.save.success'), { params: { count: this.activeFields.length } });
|
this._toaster.success(_('file-attributes-csv-import.save.success'), { params: { count: this.activeFields.length } });
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
this._toaster.error(_('file-attributes-csv-import.save.error'));
|
this._toaster.error(_('file-attributes-csv-import.save.error'));
|
||||||
|
|||||||
@ -9,7 +9,7 @@ import {
|
|||||||
TemplateRef,
|
TemplateRef,
|
||||||
ViewChild
|
ViewChild
|
||||||
} from '@angular/core';
|
} from '@angular/core';
|
||||||
import { FileAttributesConfig, FileAttributesControllerService, IFileAttributeConfig } from '@redaction/red-ui-http';
|
import { FileAttributesConfig, IFileAttributeConfig } from '@redaction/red-ui-http';
|
||||||
import { AppStateService } from '@state/app-state.service';
|
import { AppStateService } from '@state/app-state.service';
|
||||||
import { ActivatedRoute } from '@angular/router';
|
import { ActivatedRoute } from '@angular/router';
|
||||||
import { AdminDialogService } from '../../services/admin-dialog.service';
|
import { AdminDialogService } from '../../services/admin-dialog.service';
|
||||||
@ -25,6 +25,7 @@ import { fileAttributeTypesTranslations } from '../../translations/file-attribut
|
|||||||
import { UserService } from '@services/user.service';
|
import { UserService } from '@services/user.service';
|
||||||
import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';
|
import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';
|
||||||
import { FileAttributeConfig } from '@models/file/file-attribute-config';
|
import { FileAttributeConfig } from '@models/file/file-attribute-config';
|
||||||
|
import { FileAttributesService } from '../../../dossier/services/file-attributes.service';
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
templateUrl: './file-attributes-listing-screen.component.html',
|
templateUrl: './file-attributes-listing-screen.component.html',
|
||||||
@ -59,7 +60,7 @@ export class FileAttributesListingScreenComponent extends ListingComponent<FileA
|
|||||||
private readonly _loadingService: LoadingService,
|
private readonly _loadingService: LoadingService,
|
||||||
private readonly _appStateService: AppStateService,
|
private readonly _appStateService: AppStateService,
|
||||||
private readonly _dialogService: AdminDialogService,
|
private readonly _dialogService: AdminDialogService,
|
||||||
private readonly _fileAttributesService: FileAttributesControllerService
|
private readonly _fileAttributesService: FileAttributesService
|
||||||
) {
|
) {
|
||||||
super(_injector);
|
super(_injector);
|
||||||
_appStateService.activateDossierTemplate(_activatedRoute.snapshot.params.dossierTemplateId);
|
_appStateService.activateDossierTemplate(_activatedRoute.snapshot.params.dossierTemplateId);
|
||||||
@ -78,7 +79,7 @@ export class FileAttributesListingScreenComponent extends ListingComponent<FileA
|
|||||||
async newValue => {
|
async newValue => {
|
||||||
this._loadingService.start();
|
this._loadingService.start();
|
||||||
await this._fileAttributesService
|
await this._fileAttributesService
|
||||||
.setFileAttributesConfiguration(newValue, this._appStateService.activeDossierTemplateId)
|
.setFileAttributesConfig(newValue, this._appStateService.activeDossierTemplateId)
|
||||||
.toPromise();
|
.toPromise();
|
||||||
await this._appStateService.refreshDossierTemplate(this._appStateService.activeDossierTemplateId);
|
await this._appStateService.refreshDossierTemplate(this._appStateService.activeDossierTemplateId);
|
||||||
await this._loadData();
|
await this._loadData();
|
||||||
@ -91,7 +92,7 @@ export class FileAttributesListingScreenComponent extends ListingComponent<FileA
|
|||||||
this._loadingService.start();
|
this._loadingService.start();
|
||||||
if (fileAttribute) {
|
if (fileAttribute) {
|
||||||
await this._fileAttributesService
|
await this._fileAttributesService
|
||||||
.deleteFileAttribute(this._appStateService.activeDossierTemplateId, fileAttribute.id)
|
.deleteFileAttributes([fileAttribute.id], this._appStateService.activeDossierTemplateId)
|
||||||
.toPromise();
|
.toPromise();
|
||||||
} else {
|
} else {
|
||||||
await this._fileAttributesService
|
await this._fileAttributesService
|
||||||
@ -167,7 +168,7 @@ export class FileAttributesListingScreenComponent extends ListingComponent<FileA
|
|||||||
|
|
||||||
try {
|
try {
|
||||||
const response = await this._fileAttributesService
|
const response = await this._fileAttributesService
|
||||||
.getFileAttributesConfiguration(this._appStateService.activeDossierTemplateId)
|
.getFileAttributesConfig(this._appStateService.activeDossierTemplateId)
|
||||||
.toPromise();
|
.toPromise();
|
||||||
this._existingConfiguration = response;
|
this._existingConfiguration = response;
|
||||||
const fileAttributeConfig = response?.fileAttributeConfigs.map(item => new FileAttributeConfig(item)) || [];
|
const fileAttributeConfig = response?.fileAttributeConfigs.map(item => new FileAttributeConfig(item)) || [];
|
||||||
|
|||||||
@ -4,6 +4,7 @@ import { AppStateService } from '@state/app-state.service';
|
|||||||
import { DossiersDialogService } from '../../services/dossiers-dialog.service';
|
import { DossiersDialogService } from '../../services/dossiers-dialog.service';
|
||||||
import { AutoUnsubscribe } from '@iqser/common-ui';
|
import { AutoUnsubscribe } from '@iqser/common-ui';
|
||||||
import { File } from '@models/file/file';
|
import { File } from '@models/file/file';
|
||||||
|
import { FileAttributesService } from '../../services/file-attributes.service';
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
selector: 'redaction-document-info',
|
selector: 'redaction-document-info',
|
||||||
@ -16,18 +17,14 @@ export class DocumentInfoComponent extends AutoUnsubscribe implements OnInit {
|
|||||||
|
|
||||||
fileAttributesConfig: FileAttributesConfig;
|
fileAttributesConfig: FileAttributesConfig;
|
||||||
|
|
||||||
constructor(private readonly _appStateService: AppStateService, private readonly _dialogService: DossiersDialogService) {
|
constructor(
|
||||||
|
private readonly _appStateService: AppStateService,
|
||||||
|
private readonly _fileAttributesService: FileAttributesService,
|
||||||
|
private readonly _dialogService: DossiersDialogService
|
||||||
|
) {
|
||||||
super();
|
super();
|
||||||
}
|
}
|
||||||
|
|
||||||
ngOnInit(): void {
|
|
||||||
this.fileAttributesConfig = this._appStateService.getFileAttributeConfig(this.file.dossierTemplateId);
|
|
||||||
|
|
||||||
this.addSubscription = this._appStateService.dossierTemplateChanged$.subscribe(() => {
|
|
||||||
this.fileAttributesConfig = this._appStateService.getFileAttributeConfig(this.file.dossierTemplateId);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
get dossier() {
|
get dossier() {
|
||||||
return this._appStateService.getDossierById(this.file.dossierId);
|
return this._appStateService.getDossierById(this.file.dossierId);
|
||||||
}
|
}
|
||||||
@ -36,6 +33,14 @@ export class DocumentInfoComponent extends AutoUnsubscribe implements OnInit {
|
|||||||
return this._appStateService.getDossierTemplateById(this.dossier.dossierTemplateId).name;
|
return this._appStateService.getDossierTemplateById(this.dossier.dossierTemplateId).name;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ngOnInit(): void {
|
||||||
|
this.fileAttributesConfig = this._fileAttributesService.getFileAttributeConfig(this.file.dossierTemplateId);
|
||||||
|
|
||||||
|
this.addSubscription = this._appStateService.dossierTemplateChanged$.subscribe(() => {
|
||||||
|
this.fileAttributesConfig = this._fileAttributesService.getFileAttributeConfig(this.file.dossierTemplateId);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
edit() {
|
edit() {
|
||||||
this._dialogService.openDialog('documentInfo', null, this.file);
|
this._dialogService.openDialog('documentInfo', null, this.file);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,9 +1,10 @@
|
|||||||
import { Component, Inject, OnInit } from '@angular/core';
|
import { Component, Inject, OnInit } from '@angular/core';
|
||||||
import { FormBuilder, FormGroup } from '@angular/forms';
|
import { FormBuilder, FormGroup } from '@angular/forms';
|
||||||
import { FileAttributesControllerService, IFile, IFileAttributeConfig } from '@redaction/red-ui-http';
|
import { IFile, IFileAttributeConfig } 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 { Dossier } from '@state/model/dossier';
|
import { Dossier } from '@state/model/dossier';
|
||||||
|
import { FileAttributesService } from '../../services/file-attributes.service';
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
templateUrl: './document-info-dialog.component.html',
|
templateUrl: './document-info-dialog.component.html',
|
||||||
@ -19,7 +20,7 @@ export class DocumentInfoDialogComponent implements OnInit {
|
|||||||
constructor(
|
constructor(
|
||||||
private readonly _appStateService: AppStateService,
|
private readonly _appStateService: AppStateService,
|
||||||
private readonly _formBuilder: FormBuilder,
|
private readonly _formBuilder: FormBuilder,
|
||||||
private readonly _fileAttributesService: FileAttributesControllerService,
|
private readonly _fileAttributesService: FileAttributesService,
|
||||||
public dialogRef: MatDialogRef<DocumentInfoDialogComponent>,
|
public dialogRef: MatDialogRef<DocumentInfoDialogComponent>,
|
||||||
@Inject(MAT_DIALOG_DATA) public data: IFile
|
@Inject(MAT_DIALOG_DATA) public data: IFile
|
||||||
) {
|
) {
|
||||||
@ -29,7 +30,7 @@ export class DocumentInfoDialogComponent implements OnInit {
|
|||||||
|
|
||||||
async ngOnInit() {
|
async ngOnInit() {
|
||||||
this.attributes = (
|
this.attributes = (
|
||||||
await this._fileAttributesService.getFileAttributesConfiguration(this._dossier.dossierTemplateId).toPromise()
|
await this._fileAttributesService.getFileAttributesConfig(this._dossier.dossierTemplateId).toPromise()
|
||||||
).fileAttributeConfigs.filter(attr => attr.editable);
|
).fileAttributeConfigs.filter(attr => attr.editable);
|
||||||
const formConfig = this.attributes.reduce(
|
const formConfig = this.attributes.reduce(
|
||||||
(acc, attr) => ({
|
(acc, attr) => ({
|
||||||
|
|||||||
@ -55,6 +55,7 @@ import { RouterHistoryService } from '@services/router-history.service';
|
|||||||
import { Dossier } from '@state/model/dossier';
|
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 { FileAttributesService } from '../../services/file-attributes.service';
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
templateUrl: './dossier-overview-screen.component.html',
|
templateUrl: './dossier-overview-screen.component.html',
|
||||||
@ -112,11 +113,12 @@ export class DossierOverviewScreenComponent extends ListingComponent<File> imple
|
|||||||
private readonly _statusOverlayService: StatusOverlayService,
|
private readonly _statusOverlayService: StatusOverlayService,
|
||||||
private readonly _fileDropOverlayService: FileDropOverlayService,
|
private readonly _fileDropOverlayService: FileDropOverlayService,
|
||||||
private readonly _dossierAttributesService: DossierAttributesService,
|
private readonly _dossierAttributesService: DossierAttributesService,
|
||||||
private readonly _fileActionService: FileActionService
|
private readonly _fileActionService: FileActionService,
|
||||||
|
private readonly _fileAttributesService: FileAttributesService
|
||||||
) {
|
) {
|
||||||
super(_injector);
|
super(_injector);
|
||||||
this._loadEntitiesFromState();
|
this._loadEntitiesFromState();
|
||||||
this.fileAttributeConfigs = this._appStateService.getFileAttributeConfig(
|
this.fileAttributeConfigs = this._fileAttributesService.getFileAttributeConfig(
|
||||||
this.currentDossier.dossierTemplateId
|
this.currentDossier.dossierTemplateId
|
||||||
).fileAttributeConfigs;
|
).fileAttributeConfigs;
|
||||||
this.workflowConfig = {
|
this.workflowConfig = {
|
||||||
@ -228,7 +230,7 @@ export class DossierOverviewScreenComponent extends ListingComponent<File> imple
|
|||||||
});
|
});
|
||||||
|
|
||||||
this.addSubscription = this._appStateService.dossierTemplateChanged$.subscribe(() => {
|
this.addSubscription = this._appStateService.dossierTemplateChanged$.subscribe(() => {
|
||||||
this.fileAttributeConfigs = this._appStateService.getFileAttributeConfig(
|
this.fileAttributeConfigs = this._fileAttributesService.getFileAttributeConfig(
|
||||||
this.currentDossier.dossierTemplateId
|
this.currentDossier.dossierTemplateId
|
||||||
).fileAttributeConfigs;
|
).fileAttributeConfigs;
|
||||||
});
|
});
|
||||||
|
|||||||
@ -0,0 +1,36 @@
|
|||||||
|
import { EntitiesService } from '@iqser/common-ui';
|
||||||
|
import { DossierTemplate } from '@models/file/dossier-template';
|
||||||
|
import { IDossierTemplate } from '@redaction/red-ui-http';
|
||||||
|
import { Injectable, Injector } from '@angular/core';
|
||||||
|
import { TEMPORARY_INJECTOR } from './injector';
|
||||||
|
import { Observable } from 'rxjs';
|
||||||
|
import { map } from 'rxjs/operators';
|
||||||
|
|
||||||
|
@Injectable({
|
||||||
|
providedIn: 'root'
|
||||||
|
})
|
||||||
|
export class DossierTemplatesService extends EntitiesService<DossierTemplate, IDossierTemplate> {
|
||||||
|
constructor(protected readonly _injector: Injector) {
|
||||||
|
super(TEMPORARY_INJECTOR(_injector), 'dossier-template');
|
||||||
|
}
|
||||||
|
|
||||||
|
fetch() {
|
||||||
|
this.get().pipe(map(entities => entities.map(dossierTemplate => new DossierTemplate(dossierTemplate))));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets all dossier templates.
|
||||||
|
*/
|
||||||
|
get(): Observable<IDossierTemplate[]>;
|
||||||
|
/**
|
||||||
|
* Gets one dossier template by id.
|
||||||
|
*/
|
||||||
|
get(dossierTemplateId: string): Observable<IDossierTemplate>;
|
||||||
|
get(dossierTemplateId?: string) {
|
||||||
|
if (dossierTemplateId) {
|
||||||
|
return super._getOne([dossierTemplateId]);
|
||||||
|
}
|
||||||
|
|
||||||
|
return super.getAll();
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,92 @@
|
|||||||
|
import { EntitiesService, List, RequiredParam, Validate } from '@iqser/common-ui';
|
||||||
|
import { FileAttributes, FileAttributesConfig, IFileAttributeConfig } from '@redaction/red-ui-http';
|
||||||
|
import { Injectable, Injector } from '@angular/core';
|
||||||
|
import { TEMPORARY_INJECTOR } from './injector';
|
||||||
|
import { BehaviorSubject, Observable, of } from 'rxjs';
|
||||||
|
import { catchError, map, tap } from 'rxjs/operators';
|
||||||
|
import { FileAttributeConfig } from '@models/file/file-attribute-config';
|
||||||
|
|
||||||
|
type FileAttributesConfigMap = Readonly<Record<string, FileAttributesConfig>>;
|
||||||
|
|
||||||
|
@Injectable({
|
||||||
|
providedIn: 'root'
|
||||||
|
})
|
||||||
|
export class FileAttributesService extends EntitiesService<FileAttributeConfig, IFileAttributeConfig> {
|
||||||
|
private readonly _fileAttributesConfig$ = new BehaviorSubject<FileAttributesConfigMap>({});
|
||||||
|
|
||||||
|
constructor(protected readonly _injector: Injector) {
|
||||||
|
super(TEMPORARY_INJECTOR(_injector), 'fileAttributes');
|
||||||
|
}
|
||||||
|
|
||||||
|
get fileAttributesConfig(): FileAttributesConfigMap {
|
||||||
|
return this._fileAttributesConfig$.value;
|
||||||
|
}
|
||||||
|
|
||||||
|
fetch(): Observable<FileAttributeConfig[]> {
|
||||||
|
return this.getAll().pipe(
|
||||||
|
map(entities => entities.map(entity => new FileAttributeConfig(entity))),
|
||||||
|
tap(entities => this.setEntities(entities))
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the file attributes that can be used at importing csv.
|
||||||
|
*/
|
||||||
|
@Validate()
|
||||||
|
getFileAttributesConfig(@RequiredParam() dossierTemplateId: string, fetch = true): Observable<FileAttributesConfig> {
|
||||||
|
if (!fetch) {
|
||||||
|
return this._fileAttributesConfig$.pipe(map(entities => entities[dossierTemplateId]));
|
||||||
|
}
|
||||||
|
|
||||||
|
const request$ = this._getOne<FileAttributesConfig>(['config', dossierTemplateId]);
|
||||||
|
return request$.pipe(
|
||||||
|
tap(entities =>
|
||||||
|
this._fileAttributesConfig$.next({
|
||||||
|
...this._fileAttributesConfig$.value,
|
||||||
|
[dossierTemplateId]: entities
|
||||||
|
})
|
||||||
|
),
|
||||||
|
catchError(() => of({}))
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
getFileAttributeConfig(dossierTemplateId: string): FileAttributesConfig | undefined {
|
||||||
|
return this._fileAttributesConfig$.value[dossierTemplateId];
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Add or update a file attribute that can be used at importing csv.
|
||||||
|
*/
|
||||||
|
@Validate()
|
||||||
|
setFileAttributesConfig(@RequiredParam() body: IFileAttributeConfig, @RequiredParam() dossierTemplateId: string) {
|
||||||
|
const url = `${this._defaultModelPath}/config/fileAttribute/${dossierTemplateId}`;
|
||||||
|
return this._post<unknown>(body, url);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set file attributes base configuration and a list of file attributes,
|
||||||
|
*/
|
||||||
|
@Validate()
|
||||||
|
setFileAttributeConfig(@RequiredParam() body: FileAttributesConfig, @RequiredParam() dossierTemplateId: string) {
|
||||||
|
const url = `${this._defaultModelPath}/config/baseConfig/${dossierTemplateId}`;
|
||||||
|
return this._put<unknown>(body, url);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set file attributes to an existing file
|
||||||
|
*/
|
||||||
|
@Validate()
|
||||||
|
setFileAttributes(@RequiredParam() body: FileAttributes, @RequiredParam() dossierId: string, @RequiredParam() fileId: string) {
|
||||||
|
const url = `${this._defaultModelPath}/set/${dossierId}/${fileId}`;
|
||||||
|
return this._post<unknown>(body, url);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Delete a specific file attribute.
|
||||||
|
*/
|
||||||
|
@Validate()
|
||||||
|
deleteFileAttributes(@RequiredParam() body: List, @RequiredParam() dossierTemplateId: string) {
|
||||||
|
const url = `${this._defaultModelPath}/config/fileAttribute/${dossierTemplateId}/delete`;
|
||||||
|
return this.delete(body, url);
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -4,15 +4,25 @@ import { IFile } from '@redaction/red-ui-http';
|
|||||||
import { File } from '@models/file/file';
|
import { File } from '@models/file/file';
|
||||||
import { TEMPORARY_INJECTOR } from './injector';
|
import { TEMPORARY_INJECTOR } from './injector';
|
||||||
import { Observable } from 'rxjs';
|
import { Observable } from 'rxjs';
|
||||||
|
import { map } from 'rxjs/operators';
|
||||||
|
import { UserService } from '@services/user.service';
|
||||||
|
|
||||||
@Injectable({
|
@Injectable({
|
||||||
providedIn: 'root'
|
providedIn: 'root'
|
||||||
})
|
})
|
||||||
export class FilesService extends EntitiesService<File, IFile> {
|
export class FilesService extends EntitiesService<File, IFile> {
|
||||||
constructor(protected readonly _injector: Injector) {
|
constructor(protected readonly _injector: Injector, private readonly _userService: UserService) {
|
||||||
super(TEMPORARY_INJECTOR(_injector), 'status');
|
super(TEMPORARY_INJECTOR(_injector), 'status');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
getExistingFilesFor(dossierId: string): List<File> {
|
||||||
|
return this.all.filter(file => file.dossierId === dossierId);
|
||||||
|
}
|
||||||
|
|
||||||
|
fetch() {
|
||||||
|
this.get().pipe(map(files => files.map(file => new File(file, this._userService.getNameForId(file.currentReviewer)))));
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Gets the status for all files.
|
* Gets the status for all files.
|
||||||
*/
|
*/
|
||||||
|
|||||||
@ -12,8 +12,8 @@ import { Toaster } from '@iqser/common-ui';
|
|||||||
import { TranslateService } from '@ngx-translate/core';
|
import { TranslateService } from '@ngx-translate/core';
|
||||||
import { Event, NavigationEnd, ResolveStart, Router } from '@angular/router';
|
import { Event, NavigationEnd, ResolveStart, Router } from '@angular/router';
|
||||||
import { UserService } from '@services/user.service';
|
import { UserService } from '@services/user.service';
|
||||||
import { forkJoin, Observable, of, Subject } from 'rxjs';
|
import { forkJoin, Observable, Subject } from 'rxjs';
|
||||||
import { catchError, map, tap } from 'rxjs/operators';
|
import { map, tap } from 'rxjs/operators';
|
||||||
import { FALLBACK_COLOR, hexToRgb } from '@utils/functions';
|
import { FALLBACK_COLOR, hexToRgb } from '@utils/functions';
|
||||||
import { File } from '@models/file/file';
|
import { File } from '@models/file/file';
|
||||||
import { Dossier } from './model/dossier';
|
import { Dossier } from './model/dossier';
|
||||||
@ -24,6 +24,8 @@ import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';
|
|||||||
import { UserPreferenceService } from '@services/user-preference.service';
|
import { UserPreferenceService } from '@services/user-preference.service';
|
||||||
import { FilesService } from '../modules/dossier/services/files.service';
|
import { FilesService } from '../modules/dossier/services/files.service';
|
||||||
import { DictionaryService } from '@shared/services/dictionary.service';
|
import { DictionaryService } from '@shared/services/dictionary.service';
|
||||||
|
import { DossierTemplatesService } from '../modules/dossier/services/dossier-templates.service';
|
||||||
|
import { FileAttributesService } from '../modules/dossier/services/file-attributes.service';
|
||||||
|
|
||||||
export interface AppState {
|
export interface AppState {
|
||||||
dossiers: Dossier[];
|
dossiers: Dossier[];
|
||||||
@ -56,8 +58,8 @@ export class AppStateService {
|
|||||||
private readonly _reanalysisControllerService: ReanalysisControllerService,
|
private readonly _reanalysisControllerService: ReanalysisControllerService,
|
||||||
private readonly _translateService: TranslateService,
|
private readonly _translateService: TranslateService,
|
||||||
private readonly _dictionaryService: DictionaryService,
|
private readonly _dictionaryService: DictionaryService,
|
||||||
private readonly _dossierTemplateControllerService: DossierTemplateControllerService,
|
private readonly _dossierTemplatesService: DossierTemplatesService,
|
||||||
private readonly _fileAttributesService: FileAttributesControllerService,
|
private readonly _fileAttributesService: FileAttributesService,
|
||||||
private readonly _userPreferenceService: UserPreferenceService
|
private readonly _userPreferenceService: UserPreferenceService
|
||||||
) {
|
) {
|
||||||
this._appState = {
|
this._appState = {
|
||||||
@ -172,10 +174,6 @@ export class AppStateService {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
getFileAttributeConfig(dossierTemplateId: string): FileAttributesConfig {
|
|
||||||
return this.dossierTemplates.find(d => d.dossierTemplateId === dossierTemplateId)?.fileAttributesConfig;
|
|
||||||
}
|
|
||||||
|
|
||||||
getDictionaryColor(type?: string, dossierTemplateId = this.activeDossier?.dossierTemplateId) {
|
getDictionaryColor(type?: string, dossierTemplateId = this.activeDossier?.dossierTemplateId) {
|
||||||
if (!dossierTemplateId) {
|
if (!dossierTemplateId) {
|
||||||
dossierTemplateId = this.dossierTemplates[0]?.dossierTemplateId;
|
dossierTemplateId = this.dossierTemplates[0]?.dossierTemplateId;
|
||||||
@ -245,7 +243,7 @@ export class AppStateService {
|
|||||||
const activeFile = new File(
|
const activeFile = new File(
|
||||||
iFile,
|
iFile,
|
||||||
this._userService.getNameForId(iFile.currentReviewer),
|
this._userService.getNameForId(iFile.currentReviewer),
|
||||||
this.getFileAttributeConfig(iFile.dossierTemplateId)
|
this._fileAttributesService.getFileAttributeConfig(iFile.dossierTemplateId)
|
||||||
);
|
);
|
||||||
this.activeDossier.files = this.activeDossier?.files.map(file => (file.fileId === activeFile.fileId ? activeFile : file));
|
this.activeDossier.files = this.activeDossier?.files.map(file => (file.fileId === activeFile.fileId ? activeFile : file));
|
||||||
|
|
||||||
@ -372,27 +370,21 @@ export class AppStateService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
async loadAllDossierTemplates() {
|
async loadAllDossierTemplates() {
|
||||||
const dossierTemplates = await this._dossierTemplateControllerService.getAllDossierTemplates().toPromise();
|
const dossierTemplates = await this._dossierTemplatesService.get().toPromise();
|
||||||
this._appState.dossierTemplates = dossierTemplates.map(dossierTemplate => new DossierTemplate(dossierTemplate, null));
|
this._appState.dossierTemplates = dossierTemplates.map(dossierTemplate => new DossierTemplate(dossierTemplate));
|
||||||
for (const dossierTemplate of this._appState.dossierTemplates) {
|
for (const dossierTemplate of this._appState.dossierTemplates) {
|
||||||
dossierTemplate.fileAttributesConfig = await this._fileAttributesService
|
await this._fileAttributesService.getFileAttributesConfig(dossierTemplate.dossierTemplateId).toPromise();
|
||||||
.getFileAttributesConfiguration(dossierTemplate.dossierTemplateId)
|
|
||||||
.pipe(catchError(() => of({})))
|
|
||||||
.toPromise();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
async refreshDossierTemplate(dossierTemplateId: string) {
|
async refreshDossierTemplate(dossierTemplateId: string) {
|
||||||
const dossierTemplate = await this._dossierTemplateControllerService.getDossierTemplate(dossierTemplateId).toPromise();
|
const dossierTemplate = await this._dossierTemplatesService.get(dossierTemplateId).toPromise();
|
||||||
|
|
||||||
const fileAttributesConfigs = await this._fileAttributesService
|
await this._fileAttributesService.getFileAttributesConfig(dossierTemplateId).toPromise();
|
||||||
.getFileAttributesConfiguration(dossierTemplateId)
|
|
||||||
.pipe(catchError(() => of({})))
|
|
||||||
.toPromise();
|
|
||||||
|
|
||||||
Object.assign(
|
Object.assign(
|
||||||
this._appState.dossierTemplates.find(d => d.dossierTemplateId === dossierTemplateId),
|
this._appState.dossierTemplates.find(d => d.dossierTemplateId === dossierTemplateId),
|
||||||
new DossierTemplate(dossierTemplate, fileAttributesConfigs)
|
new DossierTemplate(dossierTemplate)
|
||||||
);
|
);
|
||||||
|
|
||||||
await this.refreshDossierTemplateDictionaryData(dossierTemplateId);
|
await this.refreshDossierTemplateDictionaryData(dossierTemplateId);
|
||||||
@ -698,7 +690,7 @@ export class AppStateService {
|
|||||||
const file = new File(
|
const file = new File(
|
||||||
iFile,
|
iFile,
|
||||||
this._userService.getNameForId(iFile.currentReviewer),
|
this._userService.getNameForId(iFile.currentReviewer),
|
||||||
this.getFileAttributeConfig(iFile.dossierTemplateId)
|
this._fileAttributesService.getFileAttributeConfig(iFile.dossierTemplateId)
|
||||||
);
|
);
|
||||||
file.lastOpened = file.fileId === this._userPreferenceService.getLastOpenedFileForDossier(dossier.id);
|
file.lastOpened = file.fileId === this._userPreferenceService.getLastOpenedFileForDossier(dossier.id);
|
||||||
if (JSON.stringify(oldFile) !== JSON.stringify(file)) {
|
if (JSON.stringify(oldFile) !== JSON.stringify(file)) {
|
||||||
@ -716,7 +708,7 @@ export class AppStateService {
|
|||||||
const file = new File(
|
const file = new File(
|
||||||
iFile,
|
iFile,
|
||||||
this._userService.getNameForId(iFile.currentReviewer),
|
this._userService.getNameForId(iFile.currentReviewer),
|
||||||
this.getFileAttributeConfig(iFile.dossierTemplateId)
|
this._fileAttributesService.getFileAttributeConfig(iFile.dossierTemplateId)
|
||||||
);
|
);
|
||||||
fileChangedEvent.push(file);
|
fileChangedEvent.push(file);
|
||||||
}
|
}
|
||||||
@ -724,7 +716,11 @@ export class AppStateService {
|
|||||||
|
|
||||||
dossier.files = iFiles.map(
|
dossier.files = iFiles.map(
|
||||||
iFile =>
|
iFile =>
|
||||||
new File(iFile, this._userService.getNameForId(iFile.currentReviewer), this.getFileAttributeConfig(iFile.dossierTemplateId))
|
new File(
|
||||||
|
iFile,
|
||||||
|
this._userService.getNameForId(iFile.currentReviewer),
|
||||||
|
this._fileAttributesService.getFileAttributeConfig(iFile.dossierTemplateId)
|
||||||
|
)
|
||||||
);
|
);
|
||||||
this._computeStats();
|
this._computeStats();
|
||||||
|
|
||||||
|
|||||||
@ -7,7 +7,6 @@ import { DigitalSignatureControllerService } from './api/digitalSignatureControl
|
|||||||
import { DossierAttributesControllerService } from './api/dossierAttributesController.service';
|
import { DossierAttributesControllerService } from './api/dossierAttributesController.service';
|
||||||
import { DossierTemplateControllerService } from './api/dossierTemplateController.service';
|
import { DossierTemplateControllerService } from './api/dossierTemplateController.service';
|
||||||
import { DownloadControllerService } from './api/downloadController.service';
|
import { DownloadControllerService } from './api/downloadController.service';
|
||||||
import { FileAttributesControllerService } from './api/fileAttributesController.service';
|
|
||||||
import { FileManagementControllerService } from './api/fileManagementController.service';
|
import { FileManagementControllerService } from './api/fileManagementController.service';
|
||||||
import { GeneralSettingsControllerService } from './api/generalSettingsController.service';
|
import { GeneralSettingsControllerService } from './api/generalSettingsController.service';
|
||||||
import { InfoControllerService } from './api/infoController.service';
|
import { InfoControllerService } from './api/infoController.service';
|
||||||
@ -39,7 +38,6 @@ import { StatusReportControllerService } from './api/statusReportController.serv
|
|||||||
DossierAttributesControllerService,
|
DossierAttributesControllerService,
|
||||||
DossierTemplateControllerService,
|
DossierTemplateControllerService,
|
||||||
DownloadControllerService,
|
DownloadControllerService,
|
||||||
FileAttributesControllerService,
|
|
||||||
FileManagementControllerService,
|
FileManagementControllerService,
|
||||||
GeneralSettingsControllerService,
|
GeneralSettingsControllerService,
|
||||||
InfoControllerService,
|
InfoControllerService,
|
||||||
|
|||||||
@ -1,33 +1,4 @@
|
|||||||
export * from './auditController.service';
|
export * from './auditController.service';
|
||||||
import { AuditControllerService } from './auditController.service';
|
|
||||||
import { DictionaryControllerService } from './dictionaryController.service';
|
|
||||||
import { DigitalSignatureControllerService } from './digitalSignatureController.service';
|
|
||||||
import { DossierAttributesControllerService } from './dossierAttributesController.service';
|
|
||||||
import { DossierControllerService } from './dossierController.service';
|
|
||||||
import { DossierTemplateControllerService } from './dossierTemplateController.service';
|
|
||||||
import { DownloadControllerService } from './downloadController.service';
|
|
||||||
import { FileAttributesControllerService } from './fileAttributesController.service';
|
|
||||||
import { FileManagementControllerService } from './fileManagementController.service';
|
|
||||||
import { GeneralSettingsControllerService } from './generalSettingsController.service';
|
|
||||||
import { InfoControllerService } from './infoController.service';
|
|
||||||
import { LegalBasisMappingControllerService } from './legalBasisMappingController.service';
|
|
||||||
import { LicenseReportControllerService } from './licenseReportController.service';
|
|
||||||
import { ManualRedactionControllerService } from './manualRedactionController.service';
|
|
||||||
import { NotificationControllerService } from './notificationController.service';
|
|
||||||
import { ReanalysisControllerService } from './reanalysisController.service';
|
|
||||||
import { RedactionLogControllerService } from './redactionLogController.service';
|
|
||||||
import { ReportTemplateControllerService } from './reportTemplateController.service';
|
|
||||||
import { RulesControllerService } from './rulesController.service';
|
|
||||||
import { SearchControllerService } from './searchController.service';
|
|
||||||
import { SmtpConfigurationControllerService } from './smtpConfigurationController.service';
|
|
||||||
import { StatusControllerService } from './statusController.service';
|
|
||||||
import { StatusReportControllerService } from './statusReportController.service';
|
|
||||||
import { UploadControllerService } from './uploadController.service';
|
|
||||||
import { UserControllerService } from './userController.service';
|
|
||||||
import { UserPreferenceControllerService } from './userPreferenceController.service';
|
|
||||||
import { VersionsControllerService } from './versionsController.service';
|
|
||||||
import { ViewedPagesControllerService } from './viewedPagesController.service';
|
|
||||||
import { WatermarkControllerService } from './watermarkController.service';
|
|
||||||
|
|
||||||
export * from './dictionaryController.service';
|
export * from './dictionaryController.service';
|
||||||
|
|
||||||
@ -85,34 +56,22 @@ export * from './viewedPagesController.service';
|
|||||||
|
|
||||||
export * from './watermarkController.service';
|
export * from './watermarkController.service';
|
||||||
|
|
||||||
export const APIS = [
|
export * from './downloadController.service';
|
||||||
AuditControllerService,
|
|
||||||
DictionaryControllerService,
|
export * from './digitalSignatureController.service';
|
||||||
DigitalSignatureControllerService,
|
|
||||||
DossierAttributesControllerService,
|
export * from './fileAttributesController.service';
|
||||||
DossierControllerService,
|
|
||||||
DossierTemplateControllerService,
|
export * from './smtpConfigurationController.service';
|
||||||
DownloadControllerService,
|
|
||||||
FileAttributesControllerService,
|
export * from './reportTemplateController.service';
|
||||||
FileManagementControllerService,
|
|
||||||
GeneralSettingsControllerService,
|
export * from './uploadController.service';
|
||||||
InfoControllerService,
|
|
||||||
LegalBasisMappingControllerService,
|
export * from './generalSettingsController.service';
|
||||||
LicenseReportControllerService,
|
|
||||||
ManualRedactionControllerService,
|
export * from './dossierAttributesController.service';
|
||||||
NotificationControllerService,
|
|
||||||
ReanalysisControllerService,
|
export * from './searchController.service';
|
||||||
RedactionLogControllerService,
|
|
||||||
ReportTemplateControllerService,
|
export * from './notificationController.service';
|
||||||
RulesControllerService,
|
|
||||||
SearchControllerService,
|
|
||||||
SmtpConfigurationControllerService,
|
|
||||||
StatusControllerService,
|
|
||||||
StatusReportControllerService,
|
|
||||||
UploadControllerService,
|
|
||||||
UserControllerService,
|
|
||||||
UserPreferenceControllerService,
|
|
||||||
VersionsControllerService,
|
|
||||||
ViewedPagesControllerService,
|
|
||||||
WatermarkControllerService
|
|
||||||
];
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user