UNPKG

@material-ui/core

Version:

React components that implement Google's Material Design.

124 lines (94 loc) 4.07 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends")); var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties")); var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck")); var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass")); var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn")); var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf")); var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits")); var _react = _interopRequireDefault(require("react")); var _propTypes = _interopRequireDefault(require("prop-types")); var _hoistNonReactStatics = _interopRequireDefault(require("hoist-non-react-statics")); var _wrapDisplayName = _interopRequireDefault(require("recompose/wrapDisplayName")); var _createMuiTheme = _interopRequireDefault(require("./createMuiTheme")); var _themeListener = _interopRequireDefault(require("./themeListener")); var defaultTheme; function getDefaultTheme() { if (defaultTheme) { return defaultTheme; } defaultTheme = (0, _createMuiTheme.default)(); return defaultTheme; } // Provide the theme object as a property to the input component. var withTheme = function withTheme() { return function (Component) { var WithTheme = /*#__PURE__*/ function (_React$Component) { (0, _inherits2.default)(WithTheme, _React$Component); function WithTheme(props, context) { var _this; (0, _classCallCheck2.default)(this, WithTheme); _this = (0, _possibleConstructorReturn2.default)(this, (0, _getPrototypeOf2.default)(WithTheme).call(this)); _this.state = { // We use || as the function call is lazy evaluated. theme: _themeListener.default.initial(context) || getDefaultTheme() }; return _this; } (0, _createClass2.default)(WithTheme, [{ key: "componentDidMount", value: function componentDidMount() { var _this2 = this; this.unsubscribeId = _themeListener.default.subscribe(this.context, function (theme) { _this2.setState({ theme: theme }); }); } }, { key: "componentWillUnmount", value: function componentWillUnmount() { if (this.unsubscribeId !== null) { _themeListener.default.unsubscribe(this.context, this.unsubscribeId); } } }, { key: "render", value: function render() { var _this$props = this.props, innerRef = _this$props.innerRef, other = (0, _objectWithoutProperties2.default)(_this$props, ["innerRef"]); return _react.default.createElement(Component, (0, _extends2.default)({ theme: this.state.theme, ref: innerRef }, other)); } }]); return WithTheme; }(_react.default.Component); WithTheme.propTypes = process.env.NODE_ENV !== "production" ? { /** * Use that property to pass a ref callback to the decorated component. */ innerRef: _propTypes.default.oneOfType([_propTypes.default.func, _propTypes.default.object]) } : {}; WithTheme.contextTypes = _themeListener.default.contextTypes; if (process.env.NODE_ENV !== 'production') { WithTheme.displayName = (0, _wrapDisplayName.default)(Component, 'WithTheme'); } (0, _hoistNonReactStatics.default)(WithTheme, Component); if (process.env.NODE_ENV !== 'production') { // Exposed for test purposes. WithTheme.Naked = Component; } return WithTheme; }; }; var _default = withTheme; exports.default = _default;