Fix infinite loading submission forms #4060
Draft
+35
−16
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
References
Description
Updated the
SubmissionRestService#getDataById
method to prevent the form from getting stuck in an infinite loop when quick successive calls are made to it. This happens because thegetDataById
sometimes tries to return the data of a specific request that was actually never dispatched, because a similar request was already being made.Instructions for Reviewers
This issue happens when
RequestService#send
is called twice with the same value in a short time, because it prevents sending requests a second time when the same request was already fired by another method (as long as that request is still in theisPending
state). BecausegetDataById
explicitly listens from data from a specific request (this.fetchRequest(requestId)
), it is possible that it tries to fetch the data of a request that was never dispatched. This refactor instead listens to data coming in based on the url of the request.Guidance for how to test or review this PR:
This issue only happens when this line returns false, so for testing I would recommend adding a console.log wrapper around this, this way you know when you also have the same edge case:
dspace-angular/src/app/core/submission/submission-rest.service.ts
Line 130 in e976ddb
I was able to reproduce this error by refreshing the
/workspaceitems/{id}/edit
page multiple times (this doesn't happen on the default DSpace forms, but if you have customizations that cause theSubmissionRestService#getDataById
from being called multiple times you can experience this issue)Checklist
main
branch of code (unless it is a backport or is fixing an issue specific to an older branch).npm run lint
npm run check-circ-deps
)package.json
), I've made sure their licenses align with the DSpace BSD License based on the Licensing of Contributions documentation.