platform
platform copied to clipboard
@ngrx/data pr #3228 broke the loaded flag without introducing an alternative
Which @ngrx/* package(s) are the source of the bug?
data
Minimal reproduction of the bug/regression with instructions
Before #3228 @ngrx/data provided an option to query if the local Entity-cache already contains a snapshot of every entity trough the ˙loaded
flag.
Although the naming was a bit off, after #3228 there is no option to determine if every entity is loaded or if the store only contains partial data.
What makes this as a bug: Since V8 (ngrx/data introduced) this property was not changed in the documentation (see: https://v8.ngrx.io/guide/data/entity-collection, https://ngrx.io/guide/data/entity-collection (v16)).
Expected behavior
loaded
flag only gets true when QueryAll successfully executed and the data patched back to the state.
Versions of NgRx, Angular, Node, affected browser(s) and operating system(s)
NgRx: 13.0
Other information
My suggested alternative solution is:
- add a new loadedType: partial / full / not_loaded flag and fill it / introduce a simple boolean allLoaded as smorandi suggested in #3165 in the original issue comments
- customize the behavior in EntityDataModuleConfig and create an option to revert to the old behavior for everyone who upgrades from v12 does not have to re-write the whole cache-logic, but make it deprecated to indicate this is not the intended use
- fix the documentation, clearly state what
loaded
flag means in the new context, reflect on the fact that the behaviur was changed in v13 - include the alternative solutions in the docs that replaces / restores the previous functionality and a deprecation notice as it will be removed in the next 1-2-3 version.
I would be willing to submit a PR to fix this issue
- [X] Yes
- [ ] No
After trying to work around the change found some additional logical issues with it.
If it is a flag for successful load why it does affect QUERY_MANY_SUCCESS, and not QUERY_BY_KEY_SUCCESS?
With the new version in mind, I would assume it is a flag and applies to every QUERY_*_SUCCESS Action when data has been successfully retrieved from the API.
please fix this!
Maybe also add an option to set loaded state because i have a usecases where I want to load a subset of my data (only loading active users and want to have an option to load all later) and have the previous workaround build in.