qtsd-fork
Version:
Do not use this please
67 lines (56 loc) • 1.56 kB
JavaScript
import createStore from 'redux/lib/createStore'
import reducer from './reducers'
import * as dragDropActions from './actions/dragDrop'
import DragDropMonitor from './DragDropMonitor'
export default class DragDropManager {
constructor(createBackend, context = {}) {
const store = createStore(reducer)
this.context = context
this.store = store
this.monitor = new DragDropMonitor(store)
this.registry = this.monitor.registry
this.backend = createBackend(this)
store.subscribe(this.handleRefCountChange.bind(this))
}
handleRefCountChange() {
const shouldSetUp = this.store.getState().refCount > 0
if (shouldSetUp && !this.isSetUp) {
this.backend.setup()
this.isSetUp = true
} else if (!shouldSetUp && this.isSetUp) {
this.backend.teardown()
this.isSetUp = false
}
}
getContext() {
return this.context
}
getMonitor() {
return this.monitor
}
getBackend() {
return this.backend
}
getRegistry() {
return this.registry
}
getActions() {
const manager = this
const { dispatch } = this.store
function bindActionCreator(actionCreator) {
return (...args) => {
const action = actionCreator.apply(manager, args)
if (typeof action !== 'undefined') {
dispatch(action)
}
}
}
return Object.keys(dragDropActions)
.filter(key => typeof dragDropActions[key] === 'function')
.reduce((boundActions, key) => {
const action = dragDropActions[key]
boundActions[key] = bindActionCreator(action) // eslint-disable-line no-param-reassign
return boundActions
}, {})
}
}