UNPKG

@wordpress/compose

Version:
76 lines (61 loc) 1.88 kB
"use strict"; 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 _createHigherOrderComponent = _interopRequireDefault(require("../../utils/create-higher-order-component")); /** * External dependencies */ /** * WordPress dependencies */ /** * Internal dependencies */ /** * A higher-order component used to provide and manage delayed function calls * that ought to be bound to a component's lifecycle. * * @param {WPComponent} OriginalComponent Component requiring setTimeout * * @return {WPComponent} Wrapped component. */ const withSafeTimeout = (0, _createHigherOrderComponent.default)(OriginalComponent => { return class WrappedComponent extends _element.Component { constructor() { super(...arguments); this.timeouts = []; this.setTimeout = this.setTimeout.bind(this); this.clearTimeout = this.clearTimeout.bind(this); } componentWillUnmount() { this.timeouts.forEach(clearTimeout); } setTimeout(fn, delay) { const id = setTimeout(() => { fn(); this.clearTimeout(id); }, delay); this.timeouts.push(id); return id; } clearTimeout(id) { clearTimeout(id); this.timeouts = (0, _lodash.without)(this.timeouts, id); } render() { return (0, _element.createElement)(OriginalComponent, (0, _extends2.default)({}, this.props, { setTimeout: this.setTimeout, clearTimeout: this.clearTimeout })); } }; }, 'withSafeTimeout'); var _default = withSafeTimeout; exports.default = _default; //# sourceMappingURL=index.js.map