UNPKG

2.21 kBJavaScriptView Raw
1"use strict";
2
3Object.defineProperty(exports, "__esModule", {
4 value: true
5});
6exports.createMessageBus = createMessageBus;
7exports.default = useMessageBus;
8var React = _interopRequireWildcard(require("react"));
9function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
10function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
11function createMessageBus() {
12 const listeners = new Map();
13 function subscribe(topic, callback) {
14 let topicListeners = listeners.get(topic);
15 if (!topicListeners) {
16 topicListeners = new Set([callback]);
17 listeners.set(topic, topicListeners);
18 } else {
19 topicListeners.add(callback);
20 }
21 return () => {
22 topicListeners.delete(callback);
23 if (topicListeners.size === 0) {
24 listeners.delete(topic);
25 }
26 };
27 }
28 function publish(topic, ...args) {
29 const topicListeners = listeners.get(topic);
30 if (topicListeners) {
31 topicListeners.forEach(callback => callback(...args));
32 }
33 }
34 return {
35 subscribe,
36 publish
37 };
38}
39
40/**
41 * @ignore - internal hook.
42 */
43function useMessageBus() {
44 const bus = React.useRef();
45 if (!bus.current) {
46 bus.current = createMessageBus();
47 }
48 return bus.current;
49}
\No newline at end of file