react-media-query-hoc
Version:
A dead simple React Higher Order Component (HOC) that uses context for matching media queries
39 lines (30 loc) • 996 B
JavaScript
import PropTypes from 'prop-types';
import React from 'react';
import hoistNonReactStatics from 'hoist-non-react-statics';
import { MediaContext } from './media-query-provider';
function getDisplayName(WrappedComponent) {
return WrappedComponent.displayName || WrappedComponent.name;
}
const withMedia = (WrappedComponent) => {
class MediaQueryWrapper extends React.Component {
render() {
const { wrappedRef, ...otherProps } = this.props;
return (
<MediaContext.Consumer>
{media => (
<WrappedComponent {...otherProps} media={media} ref={wrappedRef} />
)}
</MediaContext.Consumer>
);
}
}
MediaQueryWrapper.propTypes = {
wrappedRef: PropTypes.func,
};
MediaQueryWrapper.defaultProps = {
wrappedRef: undefined,
};
MediaQueryWrapper.displayName = `withMedia(${getDisplayName(WrappedComponent)})`;
return hoistNonReactStatics(MediaQueryWrapper, WrappedComponent);
};
export default withMedia;