While working on a feature-toggling system that allows users to switch preview features on and off, I wanted to create a
featureAware enhancer-type HOC that I could use to wrap existing enhancers, e.g.
I also wanted this enhancer to work on it's own:
In this case the HOC is used to inject a
hasFeature function into enhanced components:
This application already used Redux, and the selected feature-toggles were being persisted to the server. I wanted feature-toggle updates to instantly show or hide features in the application.
Components using the
featureAware enhancer HOC can use the
hasFeature function to allow conditional feature-toggle based behaviour.
After a bit of work with types, taking inspiration from
withRouter, I created the following HOC that can be used either on it's own or by wrapping other enhancers. It also allows pass-through of component-level props (like
ownProps in Redux
I briefly tried, but couldn't seem to avoid that ugly
unknown props cast or the cast to
React.Component. It works nicely however, the casts don't prevent the correct types from being inferred when using the component.