mirror of
https://github.com/DSpace/dspace-angular.git
synced 2025-10-08 10:34:15 +00:00
Dispaly an error notification when an error occured on submission save
This commit is contained in:
@@ -645,7 +645,7 @@
|
||||
"collection": "Collection",
|
||||
"no-collection": "No collection found",
|
||||
"search-collection": "Search for a collection",
|
||||
|
||||
"save_error_notice": "There was an issue when saving the item, please try again later.",
|
||||
"deposit_success_notice": "Submission deposited successfully.",
|
||||
"deposit_error_notice": "There was an issue when submitting the item, please try again later.",
|
||||
"discard_success_notice": "Submission discarded successfully.",
|
||||
|
@@ -23,6 +23,7 @@ import {
|
||||
} from './json-patch-operations.actions';
|
||||
import { MockStore } from '../../shared/testing/mock-store';
|
||||
import { RequestEntry } from '../data/request.reducer';
|
||||
import { catchError } from 'rxjs/operators';
|
||||
|
||||
class TestService extends JsonPatchOperationsService<SubmitDataResponseDefinitionObject, SubmissionPatchRequest> {
|
||||
protected linkPath = '';
|
||||
@@ -176,7 +177,9 @@ describe('JsonPatchOperationsService test suite', () => {
|
||||
it('should dispatch a new RollbacktPatchOperationsAction', () => {
|
||||
|
||||
const expectedAction = new RollbacktPatchOperationsAction(testJsonPatchResourceType, undefined);
|
||||
scheduler.schedule(() => service.jsonPatchByResourceType(resourceEndpoint, resourceScope, testJsonPatchResourceType).subscribe());
|
||||
scheduler.schedule(() => service.jsonPatchByResourceType(resourceEndpoint, resourceScope, testJsonPatchResourceType)
|
||||
.pipe(catchError(() => observableOf({})))
|
||||
.subscribe());
|
||||
scheduler.flush();
|
||||
|
||||
expect(store.dispatch).toHaveBeenCalledWith(expectedAction);
|
||||
@@ -237,7 +240,9 @@ describe('JsonPatchOperationsService test suite', () => {
|
||||
it('should dispatch a new RollbacktPatchOperationsAction', () => {
|
||||
|
||||
const expectedAction = new RollbacktPatchOperationsAction(testJsonPatchResourceType, testJsonPatchResourceId);
|
||||
scheduler.schedule(() => service.jsonPatchByResourceID(resourceEndpoint, resourceScope, testJsonPatchResourceType, testJsonPatchResourceId).subscribe());
|
||||
scheduler.schedule(() => service.jsonPatchByResourceID(resourceEndpoint, resourceScope, testJsonPatchResourceType, testJsonPatchResourceId)
|
||||
.pipe(catchError(() => observableOf({})))
|
||||
.subscribe());
|
||||
scheduler.flush();
|
||||
|
||||
expect(store.dispatch).toHaveBeenCalledWith(expectedAction);
|
||||
|
@@ -1,4 +1,4 @@
|
||||
import { merge as observableMerge, Observable, of as observableOf } from 'rxjs';
|
||||
import { merge as observableMerge, Observable, throwError as observableThrowError } from 'rxjs';
|
||||
import { distinctUntilChanged, filter, find, flatMap, map, partition, take, tap } from 'rxjs/operators';
|
||||
import { Store } from '@ngrx/store';
|
||||
|
||||
@@ -94,7 +94,7 @@ export abstract class JsonPatchOperationsService<ResponseDefinitionDomain, Patch
|
||||
return observableMerge(
|
||||
errorResponse$.pipe(
|
||||
tap(() => this.store.dispatch(new RollbacktPatchOperationsAction(resourceType, resourceId))),
|
||||
flatMap((response: ErrorResponse) => observableOf(new Error(`Couldn't patch operations`)))),
|
||||
flatMap((error: ErrorResponse) => observableThrowError(error))),
|
||||
successResponse$.pipe(
|
||||
filter((response: PostPatchSuccessResponse) => isNotEmpty(response)),
|
||||
tap(() => this.store.dispatch(new CommitPatchOperationsAction(resourceType, resourceId))),
|
||||
|
@@ -715,6 +715,38 @@ describe('SubmissionObjectEffects test suite', () => {
|
||||
});
|
||||
});
|
||||
|
||||
describe('saveError$', () => {
|
||||
it('should display a new error notification', () => {
|
||||
actions = hot('--a-', {
|
||||
a: {
|
||||
type: SubmissionObjectActionTypes.SAVE_SUBMISSION_FORM_ERROR,
|
||||
payload: {
|
||||
submissionId: submissionId
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
submissionObjectEffects.saveError$.subscribe(() => {
|
||||
expect(notificationsServiceStub.error).toHaveBeenCalled();
|
||||
});
|
||||
});
|
||||
|
||||
it('should display a new error notification', () => {
|
||||
actions = hot('--a-', {
|
||||
a: {
|
||||
type: SubmissionObjectActionTypes.SAVE_SUBMISSION_SECTION_FORM_ERROR,
|
||||
payload: {
|
||||
submissionId: submissionId
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
submissionObjectEffects.saveError$.subscribe(() => {
|
||||
expect(notificationsServiceStub.error).toHaveBeenCalled();
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
describe('discardSubmission$', () => {
|
||||
it('should return a DISCARD_SUBMISSION_SUCCESS action on success', () => {
|
||||
store.nextState({
|
||||
|
@@ -137,6 +137,11 @@ export class SubmissionObjectEffects {
|
||||
catchError(() => observableOf(new SaveSubmissionSectionFormErrorAction(action.payload.submissionId))));
|
||||
}));
|
||||
|
||||
@Effect({dispatch: false}) saveError$ = this.actions$.pipe(
|
||||
ofType(SubmissionObjectActionTypes.SAVE_SUBMISSION_FORM_ERROR, SubmissionObjectActionTypes.SAVE_SUBMISSION_SECTION_FORM_ERROR),
|
||||
withLatestFrom(this.store$),
|
||||
tap(() => this.notificationsService.error(null, this.translate.get('submission.sections.general.save_error_notice'))));
|
||||
|
||||
@Effect() saveAndDeposit$ = this.actions$.pipe(
|
||||
ofType(SubmissionObjectActionTypes.SAVE_AND_DEPOSIT_SUBMISSION),
|
||||
withLatestFrom(this.store$),
|
||||
|
Reference in New Issue
Block a user