uppy
Version:
Extensible JavaScript file upload widget with support for drag&drop, resumable uploads, previews, restrictions, file processing/encoding, remote providers like Instagram, Dropbox, Google Drive, S3 and more :dog:
116 lines (94 loc) • 2.7 kB
JavaScript
const Plugin = require('../../core/Plugin')
const Provider = require('../Provider')
const View = require('../Provider/view')
const icons = require('./icons')
const { h } = require('preact')
module.exports = class Dropbox extends Plugin {
constructor (uppy, opts) {
super(uppy, opts)
this.type = 'acquirer'
this.id = this.opts.id || 'Dropbox'
this.title = 'Dropbox'
this.icon = () => (
<svg class="UppyIcon" width="128" height="118" viewBox="0 0 128 118">
<path d="M38.145.777L1.108 24.96l25.608 20.507 37.344-23.06z" />
<path d="M1.108 65.975l37.037 24.183L64.06 68.525l-37.343-23.06zM64.06 68.525l25.917 21.633 37.036-24.183-25.61-20.51z" />
<path d="M127.014 24.96L89.977.776 64.06 22.407l37.345 23.06zM64.136 73.18l-25.99 21.567-11.122-7.262v8.142l37.112 22.256 37.114-22.256v-8.142l-11.12 7.262z" />
</svg>
)
// writing out the key explicitly for readability the key used to store
// the provider instance must be equal to this.id.
this[this.id] = new Provider(uppy, {
host: this.opts.host,
provider: 'dropbox'
})
this.files = []
this.onAuth = this.onAuth.bind(this)
this.render = this.render.bind(this)
// set default options
const defaultOptions = {}
// merge default options with the ones set by user
this.opts = Object.assign({}, defaultOptions, opts)
}
install () {
this.view = new View(this)
// Set default state for Dropbox
this.setPluginState({
authenticated: false,
files: [],
folders: [],
directories: [],
activeRow: -1,
filterInput: '',
isSearchVisible: false
})
const target = this.opts.target
if (target) {
this.mount(target, this)
}
}
uninstall () {
this.view.tearDown()
this.unmount()
}
onAuth (authenticated) {
this.setPluginState({ authenticated })
if (authenticated) {
this.view.getFolder()
}
}
isFolder (item) {
return item['.tag'] === 'folder'
}
getItemData (item) {
return item
}
getItemIcon (item) {
return icons[item['.tag']]()
}
getItemSubList (item) {
return item.entries
}
getItemName (item) {
return item.name || ''
}
getMimeType (item) {
// mime types aren't supported.
return null
}
getItemId (item) {
return item.id
}
getItemRequestPath (item) {
return encodeURIComponent(item.path_lower)
}
getItemModifiedDate (item) {
return item.server_modified
}
getItemThumbnailUrl (item) {
return `${this.opts.host}/${this.Dropbox.id}/thumbnail/${this.getItemRequestPath(item)}`
}
render (state) {
return this.view.render(state)
}
}