fix #869 Submission embargo bug

This commit is contained in:
Andrew Wood
2020-11-03 13:55:31 -05:00
committed by Samuel
parent 942dd2e72e
commit f0a710a9fc
13 changed files with 15 additions and 260 deletions

View File

@@ -1,7 +1,7 @@
import { ChangeDetectorRef, Component, Inject } from '@angular/core';
import { BehaviorSubject, combineLatest as observableCombineLatest, Observable, Subscription } from 'rxjs';
import { distinctUntilChanged, filter, find, map, mergeMap, reduce, switchMap, tap } from 'rxjs/operators';
import { distinctUntilChanged, filter, map, mergeMap, switchMap, tap } from 'rxjs/operators';
import { SectionModelComponent } from '../models/section.model';
import { hasValue, isNotEmpty, isNotUndefined, isUndefined } from '../../../shared/empty.util';
@@ -23,7 +23,6 @@ import { SectionsService } from '../sections.service';
import { SubmissionService } from '../../submission.service';
import { Collection } from '../../../core/shared/collection.model';
import { AccessConditionOption } from '../../../core/config/models/config-access-condition-option.model';
import { PaginatedList } from '../../../core/data/paginated-list.model';
import { followLink } from '../../../shared/utils/follow-link-config.model';
import { getFirstSucceededRemoteData } from '../../../core/shared/operators';
@@ -100,11 +99,6 @@ export class SubmissionSectionUploadComponent extends SectionModelComponent {
*/
public availableAccessConditionOptions: AccessConditionOption[]; // List of accessConditions that an user can select
/**
* List of Groups available for every access condition
*/
public availableGroups: Map<string, Group[]>; // Groups for any policy
/**
* Is the upload required
* @type {boolean}
@@ -184,53 +178,12 @@ export class SubmissionSectionUploadComponent extends SectionModelComponent {
}
}),*/
mergeMap(() => config$),
mergeMap((config: SubmissionUploadsModel) => {
this.required$.next(config.required);
this.availableAccessConditionOptions = isNotEmpty(config.accessConditionOptions) ? config.accessConditionOptions : [];
this.collectionPolicyType = this.availableAccessConditionOptions.length > 0
? POLICY_DEFAULT_WITH_LIST
: POLICY_DEFAULT_NO_LIST;
this.availableGroups = new Map();
const mapGroups$: Observable<AccessConditionGroupsMapEntry>[] = [];
// Retrieve Groups for accessCondition Policies
this.availableAccessConditionOptions.forEach((accessCondition: AccessConditionOption) => {
if (accessCondition.hasEndDate === true || accessCondition.hasStartDate === true) {
if (accessCondition.groupUUID) {
mapGroups$.push(
this.groupService.findById(accessCondition.groupUUID).pipe(
find((rd: RemoteData<Group>) => !rd.isResponsePending && rd.hasSucceeded),
map((rd: RemoteData<Group>) => ({
accessCondition: accessCondition.name,
groups: [rd.payload]
} as AccessConditionGroupsMapEntry)))
);
} else if (accessCondition.selectGroupUUID) {
mapGroups$.push(
this.groupService.findById(accessCondition.selectGroupUUID).pipe(
find((rd: RemoteData<Group>) => !rd.isResponsePending && rd.hasSucceeded),
mergeMap((group: RemoteData<Group>) => group.payload.subgroups),
find((rd: RemoteData<PaginatedList<Group>>) => !rd.isResponsePending && rd.hasSucceeded),
map((rd: RemoteData<PaginatedList<Group>>) => ({
accessCondition: accessCondition.name,
groups: rd.payload.page
} as AccessConditionGroupsMapEntry))
));
}
}
});
return mapGroups$;
}),
mergeMap((entry) => entry),
reduce((acc: any[], entry: AccessConditionGroupsMapEntry) => {
acc.push(entry);
return acc;
}, []),
).subscribe((entries: AccessConditionGroupsMapEntry[]) => {
entries.forEach((entry: AccessConditionGroupsMapEntry) => {
this.availableGroups.set(entry.accessCondition, entry.groups);
});
).subscribe((config: SubmissionUploadsModel) => {
this.required$.next(config.required);
this.availableAccessConditionOptions = isNotEmpty(config.accessConditionOptions) ? config.accessConditionOptions : [];
this.collectionPolicyType = this.availableAccessConditionOptions.length > 0
? POLICY_DEFAULT_WITH_LIST
: POLICY_DEFAULT_NO_LIST;
this.changeDetectorRef.detectChanges();
}),