react-film
Version:
React component for showing carousel just like a film strip
39 lines (34 loc) • 4.68 kB
JavaScript
import "core-js/modules/es.array.for-each.js";
import "core-js/modules/es.array.index-of.js";
import "core-js/modules/es.array.splice.js";
import { useMemo } from 'react';
var SUBSCRIBER_LIMIT = 10;
export default function useCallbackRefWithSubscribe() {
return 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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9ob29rcy9pbnRlcm5hbC91c2VDYWxsYmFja1JlZldpdGhTdWJzY3JpYmUuanMiXSwibmFtZXMiOlsidXNlTWVtbyIsIlNVQlNDUklCRVJfTElNSVQiLCJ1c2VDYWxsYmFja1JlZldpdGhTdWJzY3JpYmUiLCJzdWJzY3JpcHRpb25zIiwiY2FsbGJhY2tSZWYiLCJjdXJyZW50IiwiZm9yRWFjaCIsInN1YnNjcmlwdGlvbiIsImNsZWFudXAiLCJjYWxsYmFjayIsInN1YnNjcmliZSIsInB1c2giLCJsZW5ndGgiLCJjb25zb2xlIiwid2FybiIsImluZGV4IiwiaW5kZXhPZiIsInNwbGljZSJdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsU0FBU0EsT0FBVCxRQUF3QixPQUF4QjtBQUVBLElBQU1DLGdCQUFnQixHQUFHLEVBQXpCO0FBRUEsZUFBZSxTQUFTQywyQkFBVCxHQUF1QztBQUNwRCxTQUFPRixPQUFPLENBQUMsWUFBTTtBQUNuQixRQUFNRyxhQUFhLEdBQUcsRUFBdEI7O0FBRUEsUUFBTUMsV0FBVyxHQUFHLFNBQWRBLFdBQWMsQ0FBQUMsT0FBTyxFQUFJO0FBQzdCRCxNQUFBQSxXQUFXLENBQUNDLE9BQVosR0FBc0JBLE9BQXRCO0FBRUFGLE1BQUFBLGFBQWEsQ0FBQ0csT0FBZCxDQUFzQixVQUFBQyxZQUFZLEVBQUk7QUFDcENBLFFBQUFBLFlBQVksQ0FBQ0MsT0FBYixJQUF3QkQsWUFBWSxDQUFDQyxPQUFiLEVBQXhCO0FBQ0FELFFBQUFBLFlBQVksQ0FBQ0MsT0FBYixHQUF1QkQsWUFBWSxDQUFDRSxRQUFiLENBQXNCSixPQUF0QixDQUF2QjtBQUNELE9BSEQ7QUFJRCxLQVBEOztBQVNBRCxJQUFBQSxXQUFXLENBQUNNLFNBQVosR0FBd0IsVUFBQUQsUUFBUSxFQUFJO0FBQ2xDLFVBQU1GLFlBQVksR0FBRztBQUFFRSxRQUFBQSxRQUFRLEVBQVJBO0FBQUYsT0FBckI7QUFFQU4sTUFBQUEsYUFBYSxDQUFDUSxJQUFkLENBQW1CSixZQUFuQjs7QUFFQSxVQUFJSixhQUFhLENBQUNTLE1BQWQsSUFBd0JYLGdCQUE1QixFQUE4QztBQUM1Q1ksUUFBQUEsT0FBTyxDQUFDQyxJQUFSLGdFQUMwRGIsZ0JBRDFEO0FBR0Q7O0FBRURNLE1BQUFBLFlBQVksQ0FBQ0MsT0FBYixHQUF1QkMsUUFBUSxDQUFDTCxXQUFXLENBQUNDLE9BQWIsQ0FBL0I7QUFFQSxhQUFPLFlBQU07QUFDWEUsUUFBQUEsWUFBWSxDQUFDQyxPQUFiLElBQXdCRCxZQUFZLENBQUNDLE9BQWIsRUFBeEI7QUFFQSxZQUFNTyxLQUFLLEdBQUdaLGFBQWEsQ0FBQ2EsT0FBZCxDQUFzQlQsWUFBdEIsQ0FBZDtBQUVBLFNBQUNRLEtBQUQsSUFBVVosYUFBYSxDQUFDYyxNQUFkLENBQXFCRixLQUFyQixFQUE0QixDQUE1QixDQUFWO0FBQ0QsT0FORDtBQU9ELEtBcEJEOztBQXNCQSxXQUFPWCxXQUFQO0FBQ0QsR0FuQ2EsRUFtQ1gsRUFuQ1csQ0FBZDtBQW9DRCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHVzZU1lbW8gfSBmcm9tICdyZWFjdCc7XG5cbmNvbnN0IFNVQlNDUklCRVJfTElNSVQgPSAxMDtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdXNlQ2FsbGJhY2tSZWZXaXRoU3Vic2NyaWJlKCkge1xuICByZXR1cm4gdXNlTWVtbygoKSA9PiB7XG4gICAgY29uc3Qgc3Vic2NyaXB0aW9ucyA9IFtdO1xuXG4gICAgY29uc3QgY2FsbGJhY2tSZWYgPSBjdXJyZW50ID0+IHtcbiAgICAgIGNhbGxiYWNrUmVmLmN1cnJlbnQgPSBjdXJyZW50O1xuXG4gICAgICBzdWJzY3JpcHRpb25zLmZvckVhY2goc3Vic2NyaXB0aW9uID0+IHtcbiAgICAgICAgc3Vic2NyaXB0aW9uLmNsZWFudXAgJiYgc3Vic2NyaXB0aW9uLmNsZWFudXAoKTtcbiAgICAgICAgc3Vic2NyaXB0aW9uLmNsZWFudXAgPSBzdWJzY3JpcHRpb24uY2FsbGJhY2soY3VycmVudCk7XG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgY2FsbGJhY2tSZWYuc3Vic2NyaWJlID0gY2FsbGJhY2sgPT4ge1xuICAgICAgY29uc3Qgc3Vic2NyaXB0aW9uID0geyBjYWxsYmFjayB9O1xuXG4gICAgICBzdWJzY3JpcHRpb25zLnB1c2goc3Vic2NyaXB0aW9uKTtcblxuICAgICAgaWYgKHN1YnNjcmlwdGlvbnMubGVuZ3RoID49IFNVQlNDUklCRVJfTElNSVQpIHtcbiAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgIGB1c2VTdWJzY3JpYmU6IFJlYWNoaW5nIG1heGltdW0gbGltaXQgb2Ygc3Vic2NyaWJlcnMgKCR7U1VCU0NSSUJFUl9MSU1JVH0pLCBwbGVhc2UgbWFrZSBzdXJlIHlvdXIgY29kZSBkaWQgY2xlYW4gdXAgcHJvcGVybHkuYFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICBzdWJzY3JpcHRpb24uY2xlYW51cCA9IGNhbGxiYWNrKGNhbGxiYWNrUmVmLmN1cnJlbnQpO1xuXG4gICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICBzdWJzY3JpcHRpb24uY2xlYW51cCAmJiBzdWJzY3JpcHRpb24uY2xlYW51cCgpO1xuXG4gICAgICAgIGNvbnN0IGluZGV4ID0gc3Vic2NyaXB0aW9ucy5pbmRleE9mKHN1YnNjcmlwdGlvbik7XG5cbiAgICAgICAgfmluZGV4ICYmIHN1YnNjcmlwdGlvbnMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgIH07XG4gICAgfTtcblxuICAgIHJldHVybiBjYWxsYmFja1JlZjtcbiAgfSwgW10pO1xufVxuIl19