Skip to content

Commit 4bf44d6

Browse files
committed
Updated to compile with babel 7
1 parent 89f506a commit 4bf44d6

File tree

6 files changed

+2095
-308
lines changed

6 files changed

+2095
-308
lines changed

.babelrc

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
{
2+
"presets": [
3+
"@babel/react"
4+
],
5+
"plugins": [
6+
"@babel/plugin-syntax-dynamic-import"
7+
]
8+
}

lib/index.js

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
2+
3+
import React, { Component } from "react";
4+
import mediator from "./store";
5+
6+
function withMediator(WrappedComponent) {
7+
class WithMediator extends Component {
8+
constructor(props) {
9+
super(props);
10+
this.listeners = [];
11+
}
12+
13+
subscribe(name, fn) {
14+
this.listeners[name] = mediator.subscribe(name, fn);
15+
}
16+
17+
publish(name, data) {
18+
mediator.publish(name, data);
19+
}
20+
21+
unsubscribe() {
22+
for (let key in this.listeners) {
23+
mediator.remove(key, this.listeners[key]);
24+
}
25+
26+
this.listeners = {};
27+
}
28+
29+
componentWillUnmount() {
30+
this.unsubscribe();
31+
}
32+
33+
render() {
34+
return React.createElement(WrappedComponent, _extends({}, this.props, {
35+
publish: this.publish,
36+
subscribe: this.subscribe,
37+
listeners: this.listeners
38+
}));
39+
}
40+
41+
}
42+
43+
WithMediator.displayName = `withMediator(${WrappedComponent.displayName || WrappedComponent.name})`;
44+
return WithMediator;
45+
}
46+
47+
export { withMediator, mediator };

lib/pubsub.js

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
class Mediator {
2+
constructor() {
3+
this.events = {};
4+
}
5+
6+
publish(name, obj) {
7+
let e = this.events[name];
8+
9+
if (!e) {
10+
return;
11+
}
12+
13+
e.forEach(fn => fn.apply(this, [obj]));
14+
}
15+
16+
subscribe(name, func) {
17+
if (!this.events[name]) {
18+
this.events[name] = [];
19+
}
20+
21+
const index = this.events[name].push(func) - 1;
22+
return index;
23+
}
24+
25+
remove(name, index) {
26+
let e = this.events[name];
27+
28+
if (e && typeof index === "undefined") {
29+
delete this.events[name];
30+
return true;
31+
}
32+
33+
if (e && e[index]) {
34+
delete this.events[name][index];
35+
36+
if (this.events[name] && !this.events[name][0]) {
37+
delete this.events[name];
38+
}
39+
40+
return true;
41+
}
42+
43+
return;
44+
}
45+
46+
getEvents() {
47+
return this.events;
48+
}
49+
50+
}
51+
52+
export default Mediator;

lib/store.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
import Mediator from "./pubsub";
2+
let mediator = new Mediator();
3+
export default mediator;

0 commit comments

Comments
 (0)