Skip to content

Instantly share code, notes, and snippets.

@jrop
Last active August 21, 2018 19:41
Show Gist options
  • Save jrop/f979fc309cbfc48c68bc99460003b758 to your computer and use it in GitHub Desktop.
Save jrop/f979fc309cbfc48c68bc99460003b758 to your computer and use it in GitHub Desktop.
React Utilities
const compose = (...middlewares) => Component =>
middlewares.reduce((acc, curr) => curr(acc), Component);
type DeferredProperties = {
resolve(arg?: any);
reject(err?: any);
};
const defer = (): DeferredProperties & Promise<any> => {
let resolve, reject;
const deferred: any = new Promise((yes, no) => {
resolve = yes;
reject = no;
});
deferred.reject = reject;
deferred.resolve = resolve;
return deferred;
};
async function show(
containerElementFactory: (resolve, reject) => React.ReactElement<any>
) {
const deferred = defer();
const { resolve, reject } = deferred;
const target = document.createElement("div");
document.body.appendChild(target);
ReactDOM.render(containerElementFactory(resolve, reject), target);
const result = await deferred;
ReactDOM.unmountComponentAtNode(target);
document.body.removeChild(target);
return result;
}
export const withProps = propsToPass => Component => props => (
<Component {...propsToPass} {...props} />
);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment