[WIP] feat!: introduce hook for invalidating reads #43
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.
Closes #19
proof of concept for how to expose an invalidation helper for reads. i've implemented a
useInvalidateRead()
hook that accepts a "path" (a unix path-like string) and relevant parameters based on the path. This will mostly be used in cases where something external to core is updated and affects core (a good example is the custom map file import).Not totally committed to the API design here. The alternative was to just export 1-to-1 mappings of functions that invalidate a specific read. After considering it for a short while I decided that:
Exposing a single hook that can be used as opposed to several was preferable. There's an implicit dependency on accessing a query client in order to actually do the invalidation, so exposing non-hook functions isn't an option since we don't want the usage to require explicitly passing in the query client as a param.
Given (1) entails exposing a single hook, having the path-like argument is super helpful as it makes it easier to visualize and understand the cascading nature of invalidations. The autocompletion support feels better than having literal string names that are mapped to each kind of read (e.g.
invalidateRead('allProjects')
,invalidateRead('singleProject', ...)
,invalidateRead('maps')
, etc). If you're familiar with various router apis that support interpolated params, it's quite familiar to use.TODO: