@bigfishtv/cockpit
Version:
37 lines (33 loc) • 1.09 kB
JavaScript
/**
* @module Decorators/persistState
*/
import React, { Component } from 'react'
import { getUploader } from '../api/tankUpload'
const defaultEvents = ['StateChanged', 'QueueChanged', 'UploadProgress']
/**
* Decorator for providing uploader class to wrapped component along with forceUpdate hooks
* @param {String[]} events - uploader events that should force an update, default is StateChanged and UploadProgress
* @return {Component} returns wrapped component
*/
export default function wrapUploader(events = defaultEvents) {
return function(WrappedComponent) {
return class UploaderDecorator extends Component {
componentDidMount() {
events.map(eventName => {
if (getUploader()) getUploader().bind(eventName, this.handleUploaderEvent, this)
})
}
componentWillUnmount() {
events.map(eventName => {
if (getUploader()) getUploader().unbind(eventName, this.handleUploaderEvent)
})
}
handleUploaderEvent() {
this.forceUpdate()
}
render() {
return <WrappedComponent uploader={getUploader()} {...this.props} />
}
}
}
}