diff --git a/src/driver/connect.js b/src/driver/connect.js
index 76d633a..c526482 100644
--- a/src/driver/connect.js
+++ b/src/driver/connect.js
@@ -1,16 +1,43 @@
import React from 'react'
-export default function connect(core) {
+function isObject(target) {
+ return typeof target === 'object' && target !== null
+}
+
+function link(instance, sources) {
+ const wrappedMethods = {/* sources[key] -> wrappedMethods.method */}
+ const map = new Map(/* sources.creator -> wrappedMethods.method */)
+
+ function dispatch(...args) {
+ if (Object.values(sources).includes(args[0])) {
+ map.get(args[0])(...args.slice(1))
+ } else {
+ setTimeout(
+ instance.setState.bind(instance, ...args),
+ )
+ }
+ }
+
+ Object.entries(sources).forEach(([key, createMethod]) => {
+ const method = createMethod(dispatch)
+ wrappedMethods[key] = method
+ map.set(createMethod, method)
+ })
+
+ return wrappedMethods
+}
+
+export default function connect(mapping) {
return function linkComponent(ComponentClass) {
return class AwesomeApp extends React.PureComponent {
static displayName = `Driven${ComponentClass.name}`
state = {}
- boundCore = core(this)
+ boundCore = link(this, mapping)
render() {
return (
-
+
)
}
}
diff --git a/src/driver/core.js b/src/driver/core.js
index eae8012..ea80664 100644
--- a/src/driver/core.js
+++ b/src/driver/core.js
@@ -1,5 +1,3 @@
-import link from './link'
-
import DOMHelper, { REPO_TYPE_PRIVATE } from '../utils/DOMHelper'
import GitHubHelper, { NOT_FOUND, BAD_CREDENTIALS } from '../utils/GitHubHelper'
import storageHelper from '../utils/storageHelper'
diff --git a/src/driver/link.js b/src/driver/link.js
deleted file mode 100644
index 2e1a5e7..0000000
--- a/src/driver/link.js
+++ /dev/null
@@ -1,20 +0,0 @@
-export default function link(setState, sources) {
- const wrappedMethods = {/* sources[key] -> wrappedMethods.method */}
- const map = new Map(/* sources.creator -> wrappedMethods.method */)
-
- function dispatch(...args) {
- if (Object.values(sources).includes(args[0])) {
- map.get(args[0])(...args.slice(1))
- } else {
- setState(...args)
- }
- }
-
- Object.entries(sources).forEach(([key, createMethod]) => {
- const method = createMethod(dispatch)
- wrappedMethods[key] = method
- map.set(createMethod, method)
- })
-
- return wrappedMethods
-}