UNPKG

@bigfishtv/cockpit

Version:

37 lines (33 loc) 1.09 kB
/** * @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} /> } } } }