Skip to content

Instantly share code, notes, and snippets.

@eisisig
Forked from kbrownlees/dynamicSelector.js
Created April 7, 2016 19:48
Show Gist options
  • Save eisisig/f34a9b69c17d2b09ad115eb0fcd81c59 to your computer and use it in GitHub Desktop.
Save eisisig/f34a9b69c17d2b09ad115eb0fcd81c59 to your computer and use it in GitHub Desktop.
Dynamic reselect selector
export function createDynamicSelector() {
let subSelectors = null;
let actualSelector = null;
return (state, props, ...args) => {
// Check to see if the sub state has change
const subState = state.get('subState');
if (subSelectors === null || !Set(subState.keys()).equals(Set(subSelectors.keys()))) {
// Rebuild our the selectors - could obviously update if required.
subSelectors = subState.map((value, key) => {
return createSubSelector(
(state) => state.getIn(['subState', key])
)
});
actualSelector = createSelector(
...subSelectors.toArray(),
(...results) => {
// Merge / convert as required
return results;
}
)
}
return actualSelector(state, props, ...args);
};
}
export function createSubSelector(subSelector) {
return createSelector(
subSelector,
// Other selectors can still be in here!
(subSubState) => {
// Do stuff
return subSubState
}
)
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment