RED-3072: File bulk exclude from redaction
This commit is contained in:
parent
ca40a26fb3
commit
78518c3fd7
@ -19,24 +19,26 @@ export class DossierOverviewBulkActionsComponent implements OnChanges {
|
||||
@Input() @Required() selectedFiles: File[];
|
||||
@Input() buttonType: CircleButtonType = CircleButtonTypes.dark;
|
||||
@Input() maxWidth: number;
|
||||
|
||||
analysisForced: boolean;
|
||||
canAssignToSelf: boolean;
|
||||
canAssign: boolean;
|
||||
canDelete: boolean;
|
||||
canReanalyse: boolean;
|
||||
canDisableAutoAnalysis: boolean;
|
||||
canEnableAutoAnalysis: boolean;
|
||||
canOcr: boolean;
|
||||
canSetToUnderReview: boolean;
|
||||
canSetToUnderApproval: boolean;
|
||||
isReadyForApproval: boolean;
|
||||
canApprove: boolean;
|
||||
canUndoApproval: boolean;
|
||||
assignTooltip: string;
|
||||
buttons: Action[];
|
||||
|
||||
private _canMoveToSameState: boolean;
|
||||
#analysisForced: boolean;
|
||||
#canAssignToSelf: boolean;
|
||||
#canAssign: boolean;
|
||||
#canDelete: boolean;
|
||||
#canReanalyse: boolean;
|
||||
#canDisableAutoAnalysis: boolean;
|
||||
#canEnableAutoAnalysis: boolean;
|
||||
#canOcr: boolean;
|
||||
#canSetToUnderReview: boolean;
|
||||
#canSetToUnderApproval: boolean;
|
||||
#isReadyForApproval: boolean;
|
||||
#canApprove: boolean;
|
||||
#canUndoApproval: boolean;
|
||||
#canToggleAnalysis: boolean;
|
||||
#assignTooltip: string;
|
||||
#toggleAnalysisTooltip: string;
|
||||
#allFilesAreExcluded: boolean;
|
||||
#canMoveToSameState: boolean;
|
||||
|
||||
constructor(
|
||||
private readonly _permissionsService: PermissionsService,
|
||||
@ -52,35 +54,35 @@ export class DossierOverviewBulkActionsComponent implements OnChanges {
|
||||
action: () => this._bulkActionsService.delete(this.selectedFiles),
|
||||
tooltip: _('dossier-overview.bulk.delete'),
|
||||
icon: 'iqser:trash',
|
||||
show: this.canDelete,
|
||||
show: this.#canDelete,
|
||||
},
|
||||
{
|
||||
type: ActionTypes.circleBtn,
|
||||
action: () => this._bulkActionsService.assign(this.selectedFiles),
|
||||
tooltip: this.assignTooltip,
|
||||
tooltip: this.#assignTooltip,
|
||||
icon: 'red:assign',
|
||||
show: this.canAssign,
|
||||
show: this.#canAssign,
|
||||
},
|
||||
{
|
||||
type: ActionTypes.circleBtn,
|
||||
action: () => this._bulkActionsService.assignToMe(this.selectedFiles),
|
||||
tooltip: _('dossier-overview.assign-me'),
|
||||
icon: 'red:assign-me',
|
||||
show: this.canAssignToSelf,
|
||||
show: this.#canAssignToSelf,
|
||||
},
|
||||
{
|
||||
type: ActionTypes.circleBtn,
|
||||
action: () => this._bulkActionsService.setToUnderApproval(this.selectedFiles),
|
||||
tooltip: _('dossier-overview.under-approval'),
|
||||
icon: 'red:ready-for-approval',
|
||||
show: this.canSetToUnderApproval,
|
||||
show: this.#canSetToUnderApproval,
|
||||
},
|
||||
{
|
||||
type: ActionTypes.circleBtn,
|
||||
action: () => this._bulkActionsService.backToUnderReview(this.selectedFiles),
|
||||
tooltip: _('dossier-overview.under-review'),
|
||||
icon: 'red:undo',
|
||||
show: this.canSetToUnderReview,
|
||||
show: this.#canSetToUnderReview,
|
||||
},
|
||||
{
|
||||
type: ActionTypes.downloadBtn,
|
||||
@ -90,45 +92,53 @@ export class DossierOverviewBulkActionsComponent implements OnChanges {
|
||||
{
|
||||
type: ActionTypes.circleBtn,
|
||||
action: () => this._bulkActionsService.approve(this.selectedFiles),
|
||||
disabled: !this.canApprove,
|
||||
tooltip: this.canApprove ? _('dossier-overview.approve') : _('dossier-overview.approve-disabled'),
|
||||
disabled: !this.#canApprove,
|
||||
tooltip: this.#canApprove ? _('dossier-overview.approve') : _('dossier-overview.approve-disabled'),
|
||||
icon: 'red:approved',
|
||||
show: this.isReadyForApproval,
|
||||
show: this.#isReadyForApproval,
|
||||
},
|
||||
{
|
||||
type: ActionTypes.circleBtn,
|
||||
action: () => this._bulkActionsService.setToUnderApproval(this.selectedFiles),
|
||||
tooltip: _('dossier-overview.under-approval'),
|
||||
icon: 'red:undo',
|
||||
show: this.canUndoApproval,
|
||||
show: this.#canUndoApproval,
|
||||
},
|
||||
{
|
||||
type: ActionTypes.circleBtn,
|
||||
action: () => this._bulkActionsService.ocr(this.selectedFiles),
|
||||
tooltip: _('dossier-overview.ocr-file'),
|
||||
icon: 'iqser:ocr',
|
||||
show: this.canOcr,
|
||||
show: this.#canOcr,
|
||||
},
|
||||
{
|
||||
type: ActionTypes.circleBtn,
|
||||
action: () => this._bulkActionsService.reanalyse(this.selectedFiles),
|
||||
tooltip: _('dossier-overview.bulk.reanalyse'),
|
||||
icon: 'iqser:refresh',
|
||||
show: this.canReanalyse && (this.analysisForced || this.canEnableAutoAnalysis),
|
||||
show: this.#canReanalyse && (this.#analysisForced || this.#canEnableAutoAnalysis),
|
||||
},
|
||||
{
|
||||
type: ActionTypes.circleBtn,
|
||||
action: $event => this._bulkActionsService.toggleAutomaticAnalysis(this.selectedFiles),
|
||||
action: () => this._bulkActionsService.toggleAutomaticAnalysis(this.selectedFiles),
|
||||
tooltip: _('dossier-overview.disable-auto-analysis'),
|
||||
icon: 'red:stop',
|
||||
show: this.canDisableAutoAnalysis,
|
||||
show: this.#canDisableAutoAnalysis,
|
||||
},
|
||||
{
|
||||
type: ActionTypes.circleBtn,
|
||||
action: $event => this._bulkActionsService.toggleAutomaticAnalysis(this.selectedFiles),
|
||||
action: () => this._bulkActionsService.toggleAutomaticAnalysis(this.selectedFiles),
|
||||
tooltip: _('dossier-overview.enable-auto-analysis'),
|
||||
icon: 'red:play',
|
||||
show: this.canEnableAutoAnalysis,
|
||||
show: this.#canEnableAutoAnalysis,
|
||||
},
|
||||
|
||||
{
|
||||
type: ActionTypes.toggle,
|
||||
action: () => this._bulkActionsService.toggleAnalysis(this.selectedFiles, !this.#allFilesAreExcluded),
|
||||
tooltip: this.#toggleAnalysisTooltip,
|
||||
checked: !this.#allFilesAreExcluded,
|
||||
show: this.#canToggleAnalysis,
|
||||
},
|
||||
].filter(btn => btn.show);
|
||||
}
|
||||
@ -138,7 +148,7 @@ export class DossierOverviewBulkActionsComponent implements OnChanges {
|
||||
}
|
||||
|
||||
forceReanalysisAction($event: LongPressEvent) {
|
||||
this.analysisForced = !$event.touchEnd && this._userPreferenceService.areDevFeaturesEnabled;
|
||||
this.#analysisForced = !$event.touchEnd && this._userPreferenceService.areDevFeaturesEnabled;
|
||||
this._setup();
|
||||
}
|
||||
|
||||
@ -151,37 +161,44 @@ export class DossierOverviewBulkActionsComponent implements OnChanges {
|
||||
true,
|
||||
);
|
||||
const allFilesAreUnderApproval = this.selectedFiles.reduce((acc, file) => acc && file.isUnderApproval, true);
|
||||
this._canMoveToSameState = allFilesAreUnderReviewOrUnassigned || allFilesAreUnderApproval;
|
||||
this.#allFilesAreExcluded = this.selectedFiles.reduce((acc, file) => acc && file.excluded, true);
|
||||
this.#canMoveToSameState = allFilesAreUnderReviewOrUnassigned || allFilesAreUnderApproval;
|
||||
|
||||
this.canAssign =
|
||||
this._canMoveToSameState &&
|
||||
this.#canAssign =
|
||||
this.#canMoveToSameState &&
|
||||
this.selectedFiles.reduce(
|
||||
(acc, file) => (acc && this._permissionsService.canAssignUser(file)) || this._permissionsService.canUnassignUser(file),
|
||||
true,
|
||||
);
|
||||
this.canAssignToSelf = this._canMoveToSameState && this._permissionsService.canAssignToSelf(this.selectedFiles);
|
||||
this.#canAssignToSelf = this.#canMoveToSameState && this._permissionsService.canAssignToSelf(this.selectedFiles);
|
||||
|
||||
this.canDelete = this._permissionsService.canDeleteFile(this.selectedFiles);
|
||||
this.#canDelete = this._permissionsService.canDeleteFile(this.selectedFiles);
|
||||
|
||||
this.canReanalyse = this._permissionsService.canReanalyseFile(this.selectedFiles);
|
||||
this.#canReanalyse = this._permissionsService.canReanalyseFile(this.selectedFiles);
|
||||
|
||||
this.canDisableAutoAnalysis = this._permissionsService.canDisableAutoAnalysis(this.selectedFiles);
|
||||
this.#canDisableAutoAnalysis = this._permissionsService.canDisableAutoAnalysis(this.selectedFiles);
|
||||
|
||||
this.canEnableAutoAnalysis = this._permissionsService.canEnableAutoAnalysis(this.selectedFiles);
|
||||
this.#canEnableAutoAnalysis = this._permissionsService.canEnableAutoAnalysis(this.selectedFiles);
|
||||
|
||||
this.canOcr = this.selectedFiles.reduce((acc, file) => acc && file.canBeOCRed, true);
|
||||
this.#canToggleAnalysis = this._permissionsService.canToggleAnalysis(this.selectedFiles);
|
||||
|
||||
this.canSetToUnderReview = this._permissionsService.canSetUnderReview(this.selectedFiles) && !isWorkflow;
|
||||
this.#canOcr = this.selectedFiles.reduce((acc, file) => acc && file.canBeOCRed, true);
|
||||
|
||||
this.canSetToUnderApproval = this._permissionsService.canSetUnderApproval(this.selectedFiles) && !isWorkflow;
|
||||
this.#canSetToUnderReview = this._permissionsService.canSetUnderReview(this.selectedFiles) && !isWorkflow;
|
||||
|
||||
this.isReadyForApproval = this._permissionsService.isReadyForApproval(this.selectedFiles) && !isWorkflow;
|
||||
this.#canSetToUnderApproval = this._permissionsService.canSetUnderApproval(this.selectedFiles) && !isWorkflow;
|
||||
|
||||
this.canApprove = this._permissionsService.canBeApproved(this.selectedFiles) && !isWorkflow;
|
||||
this.#isReadyForApproval = this._permissionsService.isReadyForApproval(this.selectedFiles) && !isWorkflow;
|
||||
|
||||
this.canUndoApproval = this._permissionsService.canUndoApproval(this.selectedFiles) && !isWorkflow;
|
||||
this.#canApprove = this._permissionsService.canBeApproved(this.selectedFiles) && !isWorkflow;
|
||||
|
||||
this.assignTooltip = allFilesAreUnderApproval ? _('dossier-overview.assign-approver') : _('dossier-overview.assign-reviewer');
|
||||
this.#canUndoApproval = this._permissionsService.canUndoApproval(this.selectedFiles) && !isWorkflow;
|
||||
|
||||
this.#assignTooltip = allFilesAreUnderApproval ? _('dossier-overview.assign-approver') : _('dossier-overview.assign-reviewer');
|
||||
|
||||
this.#toggleAnalysisTooltip = this.#allFilesAreExcluded
|
||||
? _('file-preview.toggle-analysis.enable')
|
||||
: _('file-preview.toggle-analysis.disable');
|
||||
|
||||
this.buttons = this._buttons;
|
||||
}
|
||||
|
||||
@ -91,6 +91,18 @@ export class BulkActionsService {
|
||||
this._loadingService.stop();
|
||||
}
|
||||
|
||||
async toggleAnalysis(files: File[], excluded: boolean) {
|
||||
this._loadingService.start();
|
||||
await firstValueFrom(
|
||||
this._reanalysisService.toggleAnalysis(
|
||||
files[0].dossierId,
|
||||
files.map(f => f.id),
|
||||
excluded,
|
||||
),
|
||||
);
|
||||
this._loadingService.stop();
|
||||
}
|
||||
|
||||
async backToUnderReview(files: File[]): Promise<void> {
|
||||
this._loadingService.start();
|
||||
await firstValueFrom(
|
||||
|
||||
@ -345,7 +345,7 @@ export class FileActionsComponent extends AutoUnsubscribe implements OnDestroy,
|
||||
|
||||
private async _toggleAnalysis() {
|
||||
this._loadingService.start();
|
||||
await firstValueFrom(this._reanalysisService.toggleAnalysis(this.file.dossierId, this.file.fileId, !this.file.excluded));
|
||||
await firstValueFrom(this._reanalysisService.toggleAnalysis(this.file.dossierId, [this.file.fileId], !this.file.excluded));
|
||||
this._loadingService.stop();
|
||||
}
|
||||
|
||||
|
||||
@ -23,8 +23,10 @@ export class PermissionsService {
|
||||
return ((file.isUnderReview || file.isNew) && this.isDossierMember(dossier)) || (file.isUnderApproval && this.isApprover(dossier));
|
||||
}
|
||||
|
||||
canToggleAnalysis(file: File): boolean {
|
||||
return this.isFileAssignee(file) && (file.isNew || file.isUnderReview || file.isUnderApproval);
|
||||
canToggleAnalysis(file: File | File[]): boolean {
|
||||
const files = file instanceof File ? [file] : file;
|
||||
const sameState = new Set(files.map(f => f.excluded)).size === 1;
|
||||
return sameState && files.reduce((acc, _file) => this._canToggleAnalysis(_file) && acc, true);
|
||||
}
|
||||
|
||||
canReanalyseFile(file: File | File[]): boolean {
|
||||
@ -152,6 +154,10 @@ export class PermissionsService {
|
||||
return (comment.user === this._userService.currentUser.id || this.isApprover(dossier)) && !file.isApproved;
|
||||
}
|
||||
|
||||
private _canToggleAnalysis(file: File): boolean {
|
||||
return this.isFileAssignee(file) && (file.isNew || file.isUnderReview || file.isUnderApproval);
|
||||
}
|
||||
|
||||
// https://jira.iqser.com/browse/RED-2787
|
||||
private _canDeleteFile(file: File, dossier: Dossier): boolean {
|
||||
return (
|
||||
|
||||
@ -49,13 +49,13 @@ export class ReanalysisService extends GenericService<unknown> {
|
||||
}
|
||||
|
||||
@Validate()
|
||||
toggleAnalysis(@RequiredParam() dossierId: string, @RequiredParam() fileId: string, excluded?: boolean) {
|
||||
toggleAnalysis(@RequiredParam() dossierId: string, @RequiredParam() fileIds: string[], excluded?: boolean) {
|
||||
const queryParams: QueryParam[] = [];
|
||||
if (excluded) {
|
||||
queryParams.push({ key: 'excluded', value: excluded });
|
||||
}
|
||||
|
||||
return this._post({}, `toggle-analysis/${dossierId}/${fileId}`, queryParams).pipe(
|
||||
return this._post(fileIds, `toggle-analysis/${dossierId}/bulk`, queryParams).pipe(
|
||||
switchMap(() => this._filesService.loadAll(dossierId)),
|
||||
);
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user