1 | import React, { Component } from 'react';
|
2 | import PropTypes from 'prop-types';
|
3 | import Uploader from './uploader';
|
4 |
|
5 | const indexedDB = window.indexedDB || window.webkitIndexedDB || window.mozIndexedDB ||
|
6 | window.OIndexedDB || window.msIndexedDB;
|
7 |
|
8 | if (!indexedDB) {
|
9 | alert("Your browser doesn't support a stable version of IndexedDB. Please update your browser");
|
10 | }
|
11 |
|
12 | if (!window.Worker) {
|
13 | alert("Your browser doesn't support Web Worker. Please update your browser");
|
14 | }
|
15 |
|
16 | class 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 |
|
81 | UploaderProvider.childContextTypes = {
|
82 | submit: PropTypes.func.isRequired,
|
83 | resume: PropTypes.func.isRequired,
|
84 | pause: PropTypes.func.isRequired,
|
85 | stop: PropTypes.func.isRequired
|
86 | };
|
87 |
|
88 | export default UploaderProvider;
|