index.js 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  1. const { Plugin } = require('@uppy/core')
  2. const { Provider } = require('@uppy/companion-client')
  3. const ProviderViews = require('@uppy/provider-views')
  4. const { h } = require('preact')
  5. module.exports = class Dropbox extends Plugin {
  6. constructor (uppy, opts) {
  7. super(uppy, opts)
  8. this.id = this.opts.id || 'Dropbox'
  9. Provider.initPlugin(this, opts)
  10. this.title = this.opts.title || 'Dropbox'
  11. this.icon = () => (
  12. <svg aria-hidden="true" fill="#0060ff" width="128" height="118" viewBox="0 0 128 118">
  13. <path d="M38.145.777L1.108 24.96l25.608 20.507 37.344-23.06z" />
  14. <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" />
  15. <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" />
  16. </svg>
  17. )
  18. this[this.id] = new Provider(uppy, {
  19. serverUrl: this.opts.serverUrl,
  20. serverHeaders: this.opts.serverHeaders,
  21. provider: 'dropbox'
  22. })
  23. this.onAuth = this.onAuth.bind(this)
  24. this.render = this.render.bind(this)
  25. }
  26. install () {
  27. this.view = new ProviderViews(this)
  28. // Set default state for Dropbox
  29. this.setPluginState({
  30. authenticated: false,
  31. files: [],
  32. folders: [],
  33. directories: [],
  34. activeRow: -1,
  35. filterInput: '',
  36. isSearchVisible: false
  37. })
  38. const target = this.opts.target
  39. if (target) {
  40. this.mount(target, this)
  41. }
  42. }
  43. uninstall () {
  44. this.view.tearDown()
  45. this.unmount()
  46. }
  47. onAuth (authenticated) {
  48. this.setPluginState({ authenticated })
  49. if (authenticated) {
  50. this.view.getFolder()
  51. }
  52. }
  53. getUsername (data) {
  54. return data.user_email
  55. }
  56. isFolder (item) {
  57. return item['.tag'] === 'folder'
  58. }
  59. getItemData (item) {
  60. return item
  61. }
  62. getItemIcon (item) {
  63. return item['.tag']
  64. }
  65. getItemSubList (item) {
  66. return item.entries
  67. }
  68. getItemName (item) {
  69. return item.name || ''
  70. }
  71. getMimeType (item) {
  72. // mime types aren't supported.
  73. return null
  74. }
  75. getItemId (item) {
  76. return item.id
  77. }
  78. getItemRequestPath (item) {
  79. return encodeURIComponent(item.path_lower)
  80. }
  81. getItemModifiedDate (item) {
  82. return item.server_modified
  83. }
  84. getItemThumbnailUrl (item) {
  85. return `${this.opts.serverUrl}/${this.Dropbox.id}/thumbnail/${this.getItemRequestPath(item)}`
  86. }
  87. render (state) {
  88. return this.view.render(state)
  89. }
  90. }