UNPKG

2.05 kBJavaScriptView Raw
1import React, { Component } from 'react';
2import PropTypes from 'prop-types';
3import Uploader from './uploader';
4
5const indexedDB = window.indexedDB || window.webkitIndexedDB || window.mozIndexedDB ||
6 window.OIndexedDB || window.msIndexedDB;
7
8if (!indexedDB) {
9 alert("Your browser doesn't support a stable version of IndexedDB. Please update your browser");
10}
11
12if (!window.Worker) {
13 alert("Your browser doesn't support Web Worker. Please update your browser");
14}
15
16class UploaderProvider extends Component {
17 uploader = null;
18
19 componentDidMount = () => {
20 if (window.Worker && indexedDB) {
21 this.uploader = new Uploader({
22 onProgress: this.props.onProgress,
23 onError: this.props.onError,
24 complete: this.props.complete,
25 ...this.props.params
26 });
27 }
28 }
29
30 getChildContext = () => {
31 let context;
32
33 if (window.Worker && indexedDB) {
34 context = {
35 submit: this.submit,
36 resume: this.resume,
37 pause: this.pause,
38 stop: this.stop
39 };
40 } else {
41 const errorMessage = `
42 fileuploader did not initialized!
43 Your browser does not support Web Worker or IndexedDB`;
44
45 context = {
46 submit: () => console.log(errorMessage),
47 resume: () => console.log(errorMessage),
48 pause: () => console.log(errorMessage),
49 stop: () => console.log(errorMessage)
50 };
51 }
52
53 return context;
54 }
55
56 submit = (files, url) => {
57 this.uploader.send(files, url);
58 }
59
60 resume = (index) => {
61 return this.uploader.resume(index);
62 }
63
64 pause = (index) => {
65 return this.uploader.pause(index);
66 }
67
68 stop = (index) => {
69 return this.uploader.stop(index);
70 }
71
72 render() {
73 return (
74 <React.Fragment>
75 { this.props.children }
76 </ React.Fragment>
77 );
78 }
79}
80
81UploaderProvider.childContextTypes = {
82 submit: PropTypes.func.isRequired,
83 resume: PropTypes.func.isRequired,
84 pause: PropTypes.func.isRequired,
85 stop: PropTypes.func.isRequired
86};
87
88export default UploaderProvider;