@wordpress/components
Version:
UI components for WordPress.
82 lines (64 loc) • 1.99 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _element = require("@wordpress/element");
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
var _lodash = require("lodash");
var _compose = require("@wordpress/compose");
/**
* External dependencies
*/
/**
* WordPress dependencies
*/
var _default = mapNodeToProps => (0, _compose.createHigherOrderComponent)(WrappedComponent => {
return class extends _element.Component {
constructor() {
super(...arguments);
this.nodeRef = this.props.node;
this.state = {
fallbackStyles: undefined,
grabStylesCompleted: false
};
this.bindRef = this.bindRef.bind(this);
}
bindRef(node) {
if (!node) {
return;
}
this.nodeRef = node;
}
componentDidMount() {
this.grabFallbackStyles();
}
componentDidUpdate() {
this.grabFallbackStyles();
}
grabFallbackStyles() {
const {
grabStylesCompleted,
fallbackStyles
} = this.state;
if (this.nodeRef && !grabStylesCompleted) {
const newFallbackStyles = mapNodeToProps(this.nodeRef, this.props);
if (!(0, _lodash.isEqual)(newFallbackStyles, fallbackStyles)) {
this.setState({
fallbackStyles: newFallbackStyles,
grabStylesCompleted: !!(0, _lodash.every)(newFallbackStyles)
});
}
}
}
render() {
const wrappedComponent = (0, _element.createElement)(WrappedComponent, (0, _extends2.default)({}, this.props, this.state.fallbackStyles));
return this.props.node ? wrappedComponent : (0, _element.createElement)("div", {
ref: this.bindRef
}, " ", wrappedComponent, " ");
}
};
}, 'withFallbackStyles');
exports.default = _default;
//# sourceMappingURL=index.js.map