react-film
Version:
React component for showing carousel just like a film strip
53 lines (40 loc) • 4.83 kB
JavaScript
;
require("core-js/modules/es.object.define-property.js");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports["default"] = useCallbackRefWithSubscribe;
require("core-js/modules/es.array.for-each.js");
require("core-js/modules/es.array.index-of.js");
require("core-js/modules/es.array.splice.js");
var _react = require("react");
var SUBSCRIBER_LIMIT = 10;
function useCallbackRefWithSubscribe() {
return (0, _react.useMemo)(function () {
var subscriptions = [];
var callbackRef = function callbackRef(current) {
callbackRef.current = current;
subscriptions.forEach(function (subscription) {
subscription.cleanup && subscription.cleanup();
subscription.cleanup = subscription.callback(current);
});
};
callbackRef.subscribe = function (callback) {
var subscription = {
callback: callback
};
subscriptions.push(subscription);
if (subscriptions.length >= SUBSCRIBER_LIMIT) {
console.warn("useSubscribe: Reaching maximum limit of subscribers (".concat(SUBSCRIBER_LIMIT, "), please make sure your code did clean up properly."));
}
subscription.cleanup = callback(callbackRef.current);
return function () {
subscription.cleanup && subscription.cleanup();
var index = subscriptions.indexOf(subscription);
~index && subscriptions.splice(index, 1);
};
};
return callbackRef;
}, []);
}
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9ob29rcy9pbnRlcm5hbC91c2VDYWxsYmFja1JlZldpdGhTdWJzY3JpYmUuanMiXSwibmFtZXMiOlsiU1VCU0NSSUJFUl9MSU1JVCIsInVzZUNhbGxiYWNrUmVmV2l0aFN1YnNjcmliZSIsInN1YnNjcmlwdGlvbnMiLCJjYWxsYmFja1JlZiIsImN1cnJlbnQiLCJmb3JFYWNoIiwic3Vic2NyaXB0aW9uIiwiY2xlYW51cCIsImNhbGxiYWNrIiwic3Vic2NyaWJlIiwicHVzaCIsImxlbmd0aCIsImNvbnNvbGUiLCJ3YXJuIiwiaW5kZXgiLCJpbmRleE9mIiwic3BsaWNlIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7QUFBQTs7QUFFQSxJQUFNQSxnQkFBZ0IsR0FBRyxFQUF6Qjs7QUFFZSxTQUFTQywyQkFBVCxHQUF1QztBQUNwRCxTQUFPLG9CQUFRLFlBQU07QUFDbkIsUUFBTUMsYUFBYSxHQUFHLEVBQXRCOztBQUVBLFFBQU1DLFdBQVcsR0FBRyxTQUFkQSxXQUFjLENBQUFDLE9BQU8sRUFBSTtBQUM3QkQsTUFBQUEsV0FBVyxDQUFDQyxPQUFaLEdBQXNCQSxPQUF0QjtBQUVBRixNQUFBQSxhQUFhLENBQUNHLE9BQWQsQ0FBc0IsVUFBQUMsWUFBWSxFQUFJO0FBQ3BDQSxRQUFBQSxZQUFZLENBQUNDLE9BQWIsSUFBd0JELFlBQVksQ0FBQ0MsT0FBYixFQUF4QjtBQUNBRCxRQUFBQSxZQUFZLENBQUNDLE9BQWIsR0FBdUJELFlBQVksQ0FBQ0UsUUFBYixDQUFzQkosT0FBdEIsQ0FBdkI7QUFDRCxPQUhEO0FBSUQsS0FQRDs7QUFTQUQsSUFBQUEsV0FBVyxDQUFDTSxTQUFaLEdBQXdCLFVBQUFELFFBQVEsRUFBSTtBQUNsQyxVQUFNRixZQUFZLEdBQUc7QUFBRUUsUUFBQUEsUUFBUSxFQUFSQTtBQUFGLE9BQXJCO0FBRUFOLE1BQUFBLGFBQWEsQ0FBQ1EsSUFBZCxDQUFtQkosWUFBbkI7O0FBRUEsVUFBSUosYUFBYSxDQUFDUyxNQUFkLElBQXdCWCxnQkFBNUIsRUFBOEM7QUFDNUNZLFFBQUFBLE9BQU8sQ0FBQ0MsSUFBUixnRUFDMERiLGdCQUQxRDtBQUdEOztBQUVETSxNQUFBQSxZQUFZLENBQUNDLE9BQWIsR0FBdUJDLFFBQVEsQ0FBQ0wsV0FBVyxDQUFDQyxPQUFiLENBQS9CO0FBRUEsYUFBTyxZQUFNO0FBQ1hFLFFBQUFBLFlBQVksQ0FBQ0MsT0FBYixJQUF3QkQsWUFBWSxDQUFDQyxPQUFiLEVBQXhCO0FBRUEsWUFBTU8sS0FBSyxHQUFHWixhQUFhLENBQUNhLE9BQWQsQ0FBc0JULFlBQXRCLENBQWQ7QUFFQSxTQUFDUSxLQUFELElBQVVaLGFBQWEsQ0FBQ2MsTUFBZCxDQUFxQkYsS0FBckIsRUFBNEIsQ0FBNUIsQ0FBVjtBQUNELE9BTkQ7QUFPRCxLQXBCRDs7QUFzQkEsV0FBT1gsV0FBUDtBQUNELEdBbkNNLEVBbUNKLEVBbkNJLENBQVA7QUFvQ0QiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB1c2VNZW1vIH0gZnJvbSAncmVhY3QnO1xuXG5jb25zdCBTVUJTQ1JJQkVSX0xJTUlUID0gMTA7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHVzZUNhbGxiYWNrUmVmV2l0aFN1YnNjcmliZSgpIHtcbiAgcmV0dXJuIHVzZU1lbW8oKCkgPT4ge1xuICAgIGNvbnN0IHN1YnNjcmlwdGlvbnMgPSBbXTtcblxuICAgIGNvbnN0IGNhbGxiYWNrUmVmID0gY3VycmVudCA9PiB7XG4gICAgICBjYWxsYmFja1JlZi5jdXJyZW50ID0gY3VycmVudDtcblxuICAgICAgc3Vic2NyaXB0aW9ucy5mb3JFYWNoKHN1YnNjcmlwdGlvbiA9PiB7XG4gICAgICAgIHN1YnNjcmlwdGlvbi5jbGVhbnVwICYmIHN1YnNjcmlwdGlvbi5jbGVhbnVwKCk7XG4gICAgICAgIHN1YnNjcmlwdGlvbi5jbGVhbnVwID0gc3Vic2NyaXB0aW9uLmNhbGxiYWNrKGN1cnJlbnQpO1xuICAgICAgfSk7XG4gICAgfTtcblxuICAgIGNhbGxiYWNrUmVmLnN1YnNjcmliZSA9IGNhbGxiYWNrID0+IHtcbiAgICAgIGNvbnN0IHN1YnNjcmlwdGlvbiA9IHsgY2FsbGJhY2sgfTtcblxuICAgICAgc3Vic2NyaXB0aW9ucy5wdXNoKHN1YnNjcmlwdGlvbik7XG5cbiAgICAgIGlmIChzdWJzY3JpcHRpb25zLmxlbmd0aCA+PSBTVUJTQ1JJQkVSX0xJTUlUKSB7XG4gICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICBgdXNlU3Vic2NyaWJlOiBSZWFjaGluZyBtYXhpbXVtIGxpbWl0IG9mIHN1YnNjcmliZXJzICgke1NVQlNDUklCRVJfTElNSVR9KSwgcGxlYXNlIG1ha2Ugc3VyZSB5b3VyIGNvZGUgZGlkIGNsZWFuIHVwIHByb3Blcmx5LmBcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgc3Vic2NyaXB0aW9uLmNsZWFudXAgPSBjYWxsYmFjayhjYWxsYmFja1JlZi5jdXJyZW50KTtcblxuICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgc3Vic2NyaXB0aW9uLmNsZWFudXAgJiYgc3Vic2NyaXB0aW9uLmNsZWFudXAoKTtcblxuICAgICAgICBjb25zdCBpbmRleCA9IHN1YnNjcmlwdGlvbnMuaW5kZXhPZihzdWJzY3JpcHRpb24pO1xuXG4gICAgICAgIH5pbmRleCAmJiBzdWJzY3JpcHRpb25zLnNwbGljZShpbmRleCwgMSk7XG4gICAgICB9O1xuICAgIH07XG5cbiAgICByZXR1cm4gY2FsbGJhY2tSZWY7XG4gIH0sIFtdKTtcbn1cbiJdfQ==