import React from 'react'
import {
StyleSheet,
Modal,
Text,
ScrollView,
TouchableOpacity,
} from 'react-native'
import takePicture from './takePicture'
import selectImage from './selectImage'
import selectDocument from './selectDocument'
import Provider from './provider'
export default class UppyReactNativeFilePicker extends React.Component {
constructor () {
super()
this.state = {
providers: [
{ id: 'LocalImages', title: 'Pick Local Images/Videos' },
{ id: 'LocalDocuments', title: 'Pick Documents' },
{ id: 'LocalCamera', title: 'Take a Picture' },
{ id: 'Url', title: 'Url' },
// { id: 'GoogleDrive', title: 'Google Drive' },
// { id: 'Instagram', title: 'Instagram' }
],
openProvider: null,
}
this.takePicture = this.takePicture.bind(this)
this.selectImage = this.selectImage.bind(this)
this.selectDocument = this.selectDocument.bind(this)
}
componentDidMount () {
this.uppy = this.props.uppy
}
takePicture () {
takePicture().then((file) => {
this.uppy.addFile({
source: 'React Native',
name: `media_${Date.now()}.jpg`,
type: file.type,
data: file,
})
this.props.onRequestClose()
}).catch((err) => {
// eslint-disable-next-line no-console
console.log(err)
})
}
selectImage () {
selectImage({ exif: true }).then((file) => {
this.uppy.addFile({
source: 'React Native',
name: `media_${Date.now()}.jpg`,
type: file.type,
data: file,
})
this.props.onRequestClose()
}).catch((err) => {
// eslint-disable-next-line no-console
console.log(err)
})
}
selectDocument () {
selectDocument().then((file) => {
this.uppy.addFile({
source: 'React Native',
name: file.name,
data: file,
})
this.props.onRequestClose()
}).catch((err) => {
// eslint-disable-next-line no-console
console.log(err)
})
}
openProvider (id) {
this.setState({
openProvider: id,
})
}
chooseProvider (id) {
switch (id) {
case 'LocalImages':
this.selectImage()
return
case 'LocalDocuments':
this.selectDocument()
return
case 'LocalCamera':
this.takePicture()
return
default:
this.openProvider(id)
}
}
renderSourceList () {
return (
{this.state.providers.map((item) => {
return (
this.chooseProvider(item.id)}
>
{item.title}
)
})}
this.props.onRequestClose()}
>
Cancel
)
}
render () {
return (
{this.state.openProvider ? (
{
this.setState({
openProvider: null,
})
this.props.onRequestClose()
}}
{...this.props}
/>
) : (
this.renderSourceList()
)}
)
}
}
const styles = StyleSheet.create({
providerList: {
flex: 1,
marginTop: 22,
justifyContent: 'center',
},
providerButton: {
alignItems: 'center',
backgroundColor: '#0077cc',
marginBottom: 15,
marginLeft: 50,
marginRight: 50,
padding: 10,
borderRadius: 5,
},
providerButtonText: {
color: '#fff',
},
cancelButton: {
alignItems: 'center',
borderWidth: 1,
borderColor: '#0077cc',
marginBottom: 15,
marginLeft: 50,
marginRight: 50,
padding: 10,
borderRadius: 5,
},
cancelButtonText: {
color: '#0077cc',
},
})