Dashboard.js 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177
  1. // The @uppy/ dependencies are resolved from source
  2. /* eslint-disable import/no-extraneous-dependencies */
  3. import Uppy from '@uppy/core'
  4. import Dashboard from '@uppy/dashboard'
  5. import Instagram from '@uppy/instagram'
  6. import Facebook from '@uppy/facebook'
  7. import OneDrive from '@uppy/onedrive'
  8. import Dropbox from '@uppy/dropbox'
  9. import Box from '@uppy/box'
  10. import GoogleDrive from '@uppy/google-drive'
  11. import Unsplash from '@uppy/unsplash'
  12. import Zoom from '@uppy/zoom'
  13. import Url from '@uppy/url'
  14. import Webcam from '@uppy/webcam'
  15. import ScreenCapture from '@uppy/screen-capture'
  16. import GoldenRetriever from '@uppy/golden-retriever'
  17. import Tus from '@uppy/tus'
  18. import AwsS3 from '@uppy/aws-s3'
  19. import AwsS3Multipart from '@uppy/aws-s3-multipart'
  20. import XHRUpload from '@uppy/xhr-upload'
  21. import Transloadit from '@uppy/transloadit'
  22. import Form from '@uppy/form'
  23. import ImageEditor from '@uppy/image-editor'
  24. import DropTarget from '@uppy/drop-target'
  25. import Audio from '@uppy/audio'
  26. /* eslint-enable import/no-extraneous-dependencies */
  27. // DEV CONFIG: pick an uploader
  28. const UPLOADER = 'tus'
  29. // const UPLOADER = 's3'
  30. // const UPLOADER = 's3-multipart'
  31. // xhr will use protocol 'multipart' in companion, if used with a remote service, e.g. google drive.
  32. // If local upload will use browser XHR
  33. // const UPLOADER = 'xhr'
  34. // const UPLOADER = 'transloadit'
  35. // const UPLOADER = 'transloadit-s3'
  36. // const UPLOADER = 'transloadit-xhr'
  37. // DEV CONFIG: Endpoint URLs
  38. const COMPANION_URL = 'http://localhost:3020'
  39. const TUS_ENDPOINT = 'https://tusd.tusdemo.net/files/'
  40. const XHR_ENDPOINT = 'https://xhr-server.herokuapp.com/upload'
  41. // DEV CONFIG: Transloadit keys
  42. const TRANSLOADIT_KEY = '...'
  43. const TRANSLOADIT_TEMPLATE = '...'
  44. const TRANSLOADIT_SERVICE_URL = 'https://api2.transloadit.com'
  45. // DEV CONFIG: enable or disable Golden Retriever
  46. const RESTORE = false
  47. // Rest is implementation! Obviously edit as necessary...
  48. export default () => {
  49. const uppyDashboard = new Uppy({
  50. logger: Uppy.debugLogger,
  51. meta: {
  52. username: 'John',
  53. license: 'Creative Commons',
  54. },
  55. allowMultipleUploadBatches: false,
  56. // restrictions: { requiredMetaFields: ['caption'] },
  57. })
  58. .use(Dashboard, {
  59. trigger: '#pick-files',
  60. // inline: true,
  61. target: '.foo',
  62. metaFields: [
  63. { id: 'license', name: 'License', placeholder: 'specify license' },
  64. { id: 'caption', name: 'Caption', placeholder: 'add caption' },
  65. ],
  66. showProgressDetails: true,
  67. proudlyDisplayPoweredByUppy: true,
  68. note: '2 files, images and video only',
  69. })
  70. .use(GoogleDrive, { target: Dashboard, companionUrl: COMPANION_URL })
  71. .use(Instagram, { target: Dashboard, companionUrl: COMPANION_URL })
  72. .use(Dropbox, { target: Dashboard, companionUrl: COMPANION_URL })
  73. .use(Box, { target: Dashboard, companionUrl: COMPANION_URL })
  74. .use(Facebook, { target: Dashboard, companionUrl: COMPANION_URL })
  75. .use(OneDrive, { target: Dashboard, companionUrl: COMPANION_URL })
  76. .use(Zoom, { target: Dashboard, companionUrl: COMPANION_URL })
  77. .use(Url, { target: Dashboard, companionUrl: COMPANION_URL })
  78. .use(Unsplash, { target: Dashboard, companionUrl: COMPANION_URL })
  79. .use(Webcam, {
  80. target: Dashboard,
  81. showVideoSourceDropdown: true,
  82. showRecordingLength: true,
  83. })
  84. .use(Audio, {
  85. target: Dashboard,
  86. showRecordingLength: true,
  87. })
  88. .use(ScreenCapture, { target: Dashboard })
  89. .use(Form, { target: '#upload-form' })
  90. .use(ImageEditor, { target: Dashboard })
  91. .use(DropTarget, {
  92. target: document.body,
  93. })
  94. switch (UPLOADER) {
  95. case 'tus':
  96. uppyDashboard.use(Tus, { endpoint: TUS_ENDPOINT, limit: 6 })
  97. break
  98. case 's3':
  99. uppyDashboard.use(AwsS3, { companionUrl: COMPANION_URL, limit: 6 })
  100. break
  101. case 's3-multipart':
  102. uppyDashboard.use(AwsS3Multipart, { companionUrl: COMPANION_URL, limit: 6 })
  103. break
  104. case 'xhr':
  105. uppyDashboard.use(XHRUpload, { endpoint: XHR_ENDPOINT, limit: 6, bundle: true })
  106. break
  107. case 'transloadit':
  108. uppyDashboard.use(Transloadit, {
  109. service: TRANSLOADIT_SERVICE_URL,
  110. waitForEncoding: true,
  111. params: {
  112. auth: { key: TRANSLOADIT_KEY },
  113. template_id: TRANSLOADIT_TEMPLATE,
  114. },
  115. })
  116. break
  117. case 'transloadit-s3':
  118. uppyDashboard.use(AwsS3, { companionUrl: COMPANION_URL })
  119. uppyDashboard.use(Transloadit, {
  120. waitForEncoding: true,
  121. importFromUploadURLs: true,
  122. params: {
  123. auth: { key: TRANSLOADIT_KEY },
  124. template_id: TRANSLOADIT_TEMPLATE,
  125. },
  126. })
  127. break
  128. case 'transloadit-xhr':
  129. uppyDashboard.setMeta({
  130. params: JSON.stringify({
  131. auth: { key: TRANSLOADIT_KEY },
  132. template_id: TRANSLOADIT_TEMPLATE,
  133. }),
  134. })
  135. uppyDashboard.use(XHRUpload, {
  136. method: 'POST',
  137. endpoint: 'https://api2.transloadit.com/assemblies',
  138. metaFields: ['params'],
  139. bundle: true,
  140. })
  141. break
  142. default:
  143. }
  144. if (RESTORE) {
  145. uppyDashboard.use(GoldenRetriever, { serviceWorker: true })
  146. }
  147. window.uppy = uppyDashboard
  148. uppyDashboard.on('complete', (result) => {
  149. if (result.failed.length === 0) {
  150. console.log('Upload successful 😀')
  151. } else {
  152. console.warn('Upload failed 😞')
  153. }
  154. console.log('successful files:', result.successful)
  155. console.log('failed files:', result.failed)
  156. if (UPLOADER === 'transloadit') {
  157. console.log('Transloadit result:', result.transloadit)
  158. }
  159. })
  160. const modalTrigger = document.querySelector('#pick-files')
  161. if (modalTrigger) modalTrigger.click()
  162. }