Repository URL to install this package:
|
Version:
1.2.13 ▾
|
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _react = _interopRequireDefault(require("react"));
var _propTypes = _interopRequireDefault(require("prop-types"));
var _hoistNonReactStatics = _interopRequireDefault(require("hoist-non-react-statics"));
var _ThemeProvider = require("../models/ThemeProvider");
var _isStyledComponent2 = _interopRequireDefault(require("../utils/isStyledComponent"));
var _determineTheme = _interopRequireDefault(require("../utils/determineTheme"));
var _jsxFileName = "view-container/styles/styled-components/src/hoc/withTheme.js";
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; var ownKeys = Object.keys(source); if (typeof Object.getOwnPropertySymbols === 'function') { ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) { return Object.getOwnPropertyDescriptor(source, sym).enumerable; })); } ownKeys.forEach(function (key) { _defineProperty(target, key, source[key]); }); } return target; }
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
const wrapWithTheme = Component => {
const componentName = Component.displayName || Component.name || 'Component';
const isStatelessFunctionalComponent = typeof Component === 'function' && !(Component.prototype && 'isReactComponent' in Component.prototype); // NOTE: We can't pass a ref to a stateless functional component
const shouldSetInnerRef = (0, _isStyledComponent2.default)(Component) || isStatelessFunctionalComponent;
class WithTheme extends _react.default.Component {
constructor(...args) {
var _temp;
return _temp = super(...args), Object.defineProperty(this, "state", {
configurable: true,
enumerable: true,
writable: true,
value: {}
}), Object.defineProperty(this, "unsubscribeId", {
configurable: true,
enumerable: true,
writable: true,
value: -1
}), _temp;
}
componentWillMount() {
const defaultProps = this.constructor.defaultProps;
const styledContext = this.context[_ThemeProvider.CHANNEL_NEXT];
const themeProp = (0, _determineTheme.default)(this.props, undefined, defaultProps);
if (styledContext === undefined && themeProp === undefined && process.env.NODE_ENV !== 'production') {
// eslint-disable-next-line no-console
console.warn('[withTheme] You are not using a ThemeProvider nor passing a theme prop or a theme in defaultProps');
} else if (styledContext === undefined && themeProp !== undefined) {
this.setState({
theme: themeProp
});
} else {
const subscribe = styledContext.subscribe;
this.unsubscribeId = subscribe(nextTheme => {
const theme = (0, _determineTheme.default)(this.props, nextTheme, defaultProps);
this.setState({
theme
});
});
}
}
componentWillReceiveProps(nextProps) {
const defaultProps = this.constructor.defaultProps;
this.setState(oldState => {
const theme = (0, _determineTheme.default)(nextProps, oldState.theme, defaultProps);
return {
theme
};
});
}
componentWillUnmount() {
if (this.unsubscribeId !== -1) {
this.context[_ThemeProvider.CHANNEL_NEXT].unsubscribe(this.unsubscribeId);
}
}
render() {
const props = _objectSpread({
theme: this.state.theme
}, this.props);
if (!shouldSetInnerRef) {
props.ref = props.innerRef;
delete props.innerRef;
}
return _react.default.createElement(Component, _extends({}, props, {
__source: {
fileName: _jsxFileName,
lineNumber: 92
},
__self: this
}));
}
}
Object.defineProperty(WithTheme, "displayName", {
configurable: true,
enumerable: true,
writable: true,
value: `WithTheme(${componentName})`
});
Object.defineProperty(WithTheme, "styledComponentId", {
configurable: true,
enumerable: true,
writable: true,
value: 'withTheme'
});
Object.defineProperty(WithTheme, "contextTypes", {
configurable: true,
enumerable: true,
writable: true,
value: {
[_ThemeProvider.CHANNEL]: _propTypes.default.func,
[_ThemeProvider.CHANNEL_NEXT]: _ThemeProvider.CONTEXT_CHANNEL_SHAPE
}
});
return (0, _hoistNonReactStatics.default)(WithTheme, Component);
};
var _default = wrapWithTheme;
exports.default = _default;