mirror of
https://github.com/idanoo/GoScrobble.git
synced 2024-11-24 17:35:16 +00:00
66 lines
2.2 KiB
JavaScript
66 lines
2.2 KiB
JavaScript
|
import _extends from "@babel/runtime/helpers/esm/extends";
|
||
|
import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose";
|
||
|
import React from 'react';
|
||
|
import PropTypes from 'prop-types';
|
||
|
import hoistNonReactStatics from 'hoist-non-react-statics';
|
||
|
import { chainPropTypes, getDisplayName } from '@material-ui/utils';
|
||
|
import useTheme from '../useTheme';
|
||
|
export function withThemeCreator(options = {}) {
|
||
|
const {
|
||
|
defaultTheme
|
||
|
} = options;
|
||
|
|
||
|
const withTheme = Component => {
|
||
|
if (process.env.NODE_ENV !== 'production') {
|
||
|
if (Component === undefined) {
|
||
|
throw new Error(['You are calling withTheme(Component) with an undefined component.', 'You may have forgotten to import it.'].join('\n'));
|
||
|
}
|
||
|
}
|
||
|
|
||
|
const WithTheme = /*#__PURE__*/React.forwardRef(function WithTheme(props, ref) {
|
||
|
const {
|
||
|
innerRef
|
||
|
} = props,
|
||
|
other = _objectWithoutPropertiesLoose(props, ["innerRef"]);
|
||
|
|
||
|
const theme = useTheme() || defaultTheme;
|
||
|
return /*#__PURE__*/React.createElement(Component, _extends({
|
||
|
theme: theme,
|
||
|
ref: innerRef || ref
|
||
|
}, other));
|
||
|
});
|
||
|
process.env.NODE_ENV !== "production" ? WithTheme.propTypes = {
|
||
|
/**
|
||
|
* Use that prop to pass a ref to the decorated component.
|
||
|
* @deprecated
|
||
|
*/
|
||
|
innerRef: chainPropTypes(PropTypes.oneOfType([PropTypes.func, PropTypes.object]), props => {
|
||
|
if (props.innerRef == null) {
|
||
|
return null;
|
||
|
}
|
||
|
|
||
|
return new Error('Material-UI: The `innerRef` prop is deprecated and will be removed in v5. ' + 'Refs are now automatically forwarded to the inner component.');
|
||
|
})
|
||
|
} : void 0;
|
||
|
|
||
|
if (process.env.NODE_ENV !== 'production') {
|
||
|
WithTheme.displayName = `WithTheme(${getDisplayName(Component)})`;
|
||
|
}
|
||
|
|
||
|
hoistNonReactStatics(WithTheme, Component);
|
||
|
|
||
|
if (process.env.NODE_ENV !== 'production') {
|
||
|
// Exposed for test purposes.
|
||
|
WithTheme.Naked = Component;
|
||
|
}
|
||
|
|
||
|
return WithTheme;
|
||
|
};
|
||
|
|
||
|
return withTheme;
|
||
|
} // Provide the theme object as a prop to the input component.
|
||
|
// It's an alternative API to useTheme().
|
||
|
// We encourage the usage of useTheme() where possible.
|
||
|
|
||
|
const withTheme = withThemeCreator();
|
||
|
export default withTheme;
|