Merge pull request #1427 from atmire/Always-enable-deposit-button

Always enable deposit button
This commit is contained in:
Tim Donohue
2022-01-13 09:45:24 -06:00
committed by GitHub
4 changed files with 28 additions and 37 deletions

View File

@@ -41,7 +41,7 @@
<button *ngIf="(showDepositAndDiscard | async)" <button *ngIf="(showDepositAndDiscard | async)"
type="button" type="button"
class="btn btn-success" class="btn btn-success"
[disabled]="(submissionIsInvalid | async) || (processingSaveStatus | async) || (processingDepositStatus | async)" [disabled]="(processingSaveStatus | async) || (processingDepositStatus | async)"
(click)="deposit($event)"> (click)="deposit($event)">
<span><i class="fas fa-plus"></i> {{'submission.general.deposit' | translate}}</span> <span><i class="fas fa-plus"></i> {{'submission.general.deposit' | translate}}</span>
</button> </button>

View File

@@ -201,13 +201,13 @@ describe('SubmissionFormFooterComponent Component', () => {
}); });
}); });
it('should have deposit button disabled when submission is not valid', () => { it('should not have deposit button disabled when submission is not valid', () => {
comp.showDepositAndDiscard = observableOf(true); comp.showDepositAndDiscard = observableOf(true);
compAsAny.submissionIsInvalid = observableOf(true); compAsAny.submissionIsInvalid = observableOf(true);
fixture.detectChanges(); fixture.detectChanges();
const depositBtn: any = fixture.debugElement.query(By.css('.btn-success')); const depositBtn: any = fixture.debugElement.query(By.css('.btn-success'));
expect(depositBtn.nativeElement.disabled).toBeTruthy(); expect(depositBtn.nativeElement.disabled).toBeFalsy();
}); });
it('should not have deposit button disabled when submission is valid', () => { it('should not have deposit button disabled when submission is valid', () => {

View File

@@ -54,6 +54,8 @@ import { Item } from '../../core/shared/item.model';
import { WorkspaceitemDataService } from '../../core/submission/workspaceitem-data.service'; import { WorkspaceitemDataService } from '../../core/submission/workspaceitem-data.service';
import { WorkflowItemDataService } from '../../core/submission/workflowitem-data.service'; import { WorkflowItemDataService } from '../../core/submission/workflowitem-data.service';
import { HALEndpointService } from '../../core/shared/hal-endpoint.service'; import { HALEndpointService } from '../../core/shared/hal-endpoint.service';
import { SubmissionObjectDataService } from '../../core/submission/submission-object-data.service';
import { mockSubmissionObjectDataService } from '../../shared/testing/submission-oject-data-service.mock';
describe('SubmissionObjectEffects test suite', () => { describe('SubmissionObjectEffects test suite', () => {
let submissionObjectEffects: SubmissionObjectEffects; let submissionObjectEffects: SubmissionObjectEffects;
@@ -63,6 +65,7 @@ describe('SubmissionObjectEffects test suite', () => {
let notificationsServiceStub; let notificationsServiceStub;
let submissionServiceStub; let submissionServiceStub;
let submissionJsonPatchOperationsServiceStub; let submissionJsonPatchOperationsServiceStub;
let submissionObjectDataServiceStub;
const collectionId: string = mockSubmissionCollectionId; const collectionId: string = mockSubmissionCollectionId;
const submissionId: string = mockSubmissionId; const submissionId: string = mockSubmissionId;
const submissionDefinitionResponse: any = mockSubmissionDefinitionResponse; const submissionDefinitionResponse: any = mockSubmissionDefinitionResponse;
@@ -75,6 +78,9 @@ describe('SubmissionObjectEffects test suite', () => {
notificationsServiceStub = new NotificationsServiceStub(); notificationsServiceStub = new NotificationsServiceStub();
submissionServiceStub = new SubmissionServiceStub(); submissionServiceStub = new SubmissionServiceStub();
submissionJsonPatchOperationsServiceStub = new SubmissionJsonPatchOperationsServiceStub(); submissionJsonPatchOperationsServiceStub = new SubmissionJsonPatchOperationsServiceStub();
submissionObjectDataServiceStub = mockSubmissionObjectDataService;
submissionServiceStub.hasUnsavedModification.and.returnValue(observableOf(true));
TestBed.configureTestingModule({ TestBed.configureTestingModule({
imports: [ imports: [
@@ -99,6 +105,7 @@ describe('SubmissionObjectEffects test suite', () => {
{ provide: WorkflowItemDataService, useValue: {} }, { provide: WorkflowItemDataService, useValue: {} },
{ provide: WorkflowItemDataService, useValue: {} }, { provide: WorkflowItemDataService, useValue: {} },
{ provide: HALEndpointService, useValue: {} }, { provide: HALEndpointService, useValue: {} },
{ provide: SubmissionObjectDataService, useValue: submissionObjectDataServiceStub },
], ],
}); });
@@ -879,7 +886,7 @@ describe('SubmissionObjectEffects test suite', () => {
expect(submissionObjectEffects.saveAndDeposit$).toBeObservable(expected); expect(submissionObjectEffects.saveAndDeposit$).toBeObservable(expected);
}); });
it('should not allow to deposit when there are errors', () => { it('should return a SAVE_SUBMISSION_FORM_SUCCESS action when there are errors', () => {
store.nextState({ store.nextState({
submission: { submission: {
objects: submissionState objects: submissionState
@@ -902,31 +909,8 @@ describe('SubmissionObjectEffects test suite', () => {
submissionJsonPatchOperationsServiceStub.jsonPatchByResourceType.and.returnValue(observableOf(response)); submissionJsonPatchOperationsServiceStub.jsonPatchByResourceType.and.returnValue(observableOf(response));
const errorsList = parseSectionErrors(mockSectionsErrors);
const expected = cold('--b-', { const expected = cold('--b-', {
b: [ b: new SaveSubmissionFormSuccessAction(submissionId, response as any[])
new UpdateSectionDataAction(
submissionId,
'traditionalpageone',
mockSectionsData.traditionalpageone as any,
errorsList.traditionalpageone || [],
errorsList.traditionalpageone || []
),
new UpdateSectionDataAction(
submissionId,
'license',
mockSectionsData.license as any,
errorsList.license || [],
errorsList.license || []
),
new UpdateSectionDataAction(
submissionId,
'upload',
mockSectionsData.upload as any,
errorsList.upload || [],
errorsList.upload || []
)
]
}); });
expect(submissionObjectEffects.saveAndDeposit$).toBeObservable(expected); expect(submissionObjectEffects.saveAndDeposit$).toBeObservable(expected);

View File

@@ -196,19 +196,26 @@ export class SubmissionObjectEffects {
*/ */
@Effect() saveAndDeposit$ = this.actions$.pipe( @Effect() saveAndDeposit$ = this.actions$.pipe(
ofType(SubmissionObjectActionTypes.SAVE_AND_DEPOSIT_SUBMISSION), ofType(SubmissionObjectActionTypes.SAVE_AND_DEPOSIT_SUBMISSION),
withLatestFrom(this.store$), withLatestFrom(this.submissionService.hasUnsavedModification()),
switchMap(([action, currentState]: [SaveAndDepositSubmissionAction, any]) => { switchMap(([action, hasUnsavedModification]: [SaveAndDepositSubmissionAction, boolean]) => {
return this.operationsService.jsonPatchByResourceType( let response$: Observable<SubmissionObject[]>;
this.submissionService.getSubmissionObjectLinkName(), if (hasUnsavedModification) {
action.payload.submissionId, response$ = this.operationsService.jsonPatchByResourceType(
'sections').pipe( this.submissionService.getSubmissionObjectLinkName(),
action.payload.submissionId,
'sections') as Observable<SubmissionObject[]>;
} else {
response$ = this.submissionObjectService.findById(action.payload.submissionId).pipe(
getFirstSucceededRemoteDataPayload(),
map((submissionObject: SubmissionObject) => [submissionObject])
);
}
return response$.pipe(
map((response: SubmissionObject[]) => { map((response: SubmissionObject[]) => {
if (this.canDeposit(response)) { if (this.canDeposit(response)) {
return new DepositSubmissionAction(action.payload.submissionId); return new DepositSubmissionAction(action.payload.submissionId);
} else { } else {
this.notificationsService.warning(null, this.translate.get('submission.sections.general.sections_not_valid')); return new SaveSubmissionFormSuccessAction(action.payload.submissionId, response);
return this.parseSaveResponse((currentState.submission as SubmissionState).objects[action.payload.submissionId],
response, action.payload.submissionId, currentState.forms);
} }
}), }),
catchError(() => observableOf(new SaveSubmissionFormErrorAction(action.payload.submissionId)))); catchError(() => observableOf(new SaveSubmissionFormErrorAction(action.payload.submissionId))));