Make stores more powerful #136
Merged
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.
I want to better support custom APIs for Stores and the use of complex data libraries such as ImmutableJS. To do that, stores need to be more powerful:
What's new:
This PR adds several new options to stores:
Three state phases
State is captured in three phases. Each stage solves a different problem:
willCommit
lifecycle method allows a store to transform private state before it changes. This is useful for turning something like Immutable.Map() or a linked-list into a primitive object or array.Pure mode
Additionally microcosm can be
pure
mode, similarly to the Presenter. In this case, it will only assign a new state if is not shallowly equal.I wrote up a few exploratory test cases. I might move them to the examples folder if it seems prudent. They don't necessarily have to be in the standard test suite.
Outstanding ideas
What do you think about:
shouldCommit
hook. Technically we don't even have to shallowEquals, we could just increment a revision number. We could even do this on a store-by-store level.