-
Notifications
You must be signed in to change notification settings - Fork 5
Expand file tree
/
Copy pathDropboxChooser.js
More file actions
79 lines (62 loc) · 1.58 KB
/
DropboxChooser.js
File metadata and controls
79 lines (62 loc) · 1.58 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
'use strict';
let qs = require('qs');
let React = require('react-native');
let {
NativeModules,
Linking,
} = React;
let DropboxManager = NativeModules.DropboxChooser;
class DropboxClient {
constructor () {
this.appId = null;
this.processURL = this.processURL.bind(this);
}
init (opts) {
let options = opts || {};
this.appId = options.appId || '';
this.onFiles = options.onFiles;
var url = Linking.getInitialURL().then((url) => {
if (url) {
this.processURL({ url });
}
}).catch(err => console.error('An error occurred', err));
Linking.addEventListener('url', this.processURL);
}
remove () {
Linking.removeEventListener('url', this.processURL);
}
openChooser(type) {
let DBChooserLinkType = 'DBChooserLinkTypePreview';
if (type === 'direct') DBChooserLinkType = 'DBChooserLinkTypeDirect';
if (!this.appId) {
return new Promise((resolve, reject) => {
reject('no-appId');
});
}
return new Promise((resolve, reject) => {
DropboxManager.openChooser(DBChooserLinkType, (err, res)=>{
if (err) {
reject(err);
} else {
resolve(res)
}
});
});
}
processURL(e) {
let url = e.url.replace(`db-${this.appId}://`, '').split('?');
let path = url[0];
let params = url[1] ? qs.parse(url[1]) : null;
let files = null;
if (params) {
try {
files = JSON.parse(params.files);
}
catch (e){}
};
if (files && this.onFiles) {
this.onFiles(files);
};
}
}
module.exports = new DropboxClient();