Dashboard.js 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169
  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. import Compressor from '@uppy/compressor'
  27. /* eslint-enable import/no-extraneous-dependencies */
  28. // DEV CONFIG: create a .env file in the project root directory to customize those values.
  29. const {
  30. VITE_UPLOADER : UPLOADER,
  31. VITE_COMPANION_URL : COMPANION_URL,
  32. VITE_TUS_ENDPOINT : TUS_ENDPOINT,
  33. VITE_XHR_ENDPOINT : XHR_ENDPOINT,
  34. VITE_TRANSLOADIT_KEY : TRANSLOADIT_KEY,
  35. VITE_TRANSLOADIT_TEMPLATE : TRANSLOADIT_TEMPLATE,
  36. VITE_TRANSLOADIT_SERVICE_URL : TRANSLOADIT_SERVICE_URL,
  37. } = import.meta.env
  38. import.meta.env.VITE_TRANSLOADIT_KEY = '***' // to avoid leaking secrets in screenshots.
  39. console.log(import.meta.env)
  40. // DEV CONFIG: enable or disable Golden Retriever
  41. const RESTORE = false
  42. // Rest is implementation! Obviously edit as necessary...
  43. export default () => {
  44. const uppyDashboard = new Uppy({
  45. logger: Uppy.debugLogger,
  46. meta: {
  47. username: 'John',
  48. license: 'Creative Commons',
  49. },
  50. allowMultipleUploadBatches: false,
  51. // restrictions: { requiredMetaFields: ['caption'] },
  52. })
  53. .use(Dashboard, {
  54. trigger: '#pick-files',
  55. // inline: true,
  56. target: '.foo',
  57. metaFields: [
  58. { id: 'license', name: 'License', placeholder: 'specify license' },
  59. { id: 'caption', name: 'Caption', placeholder: 'add caption' },
  60. ],
  61. showProgressDetails: true,
  62. proudlyDisplayPoweredByUppy: true,
  63. note: '2 files, images and video only',
  64. })
  65. .use(GoogleDrive, { target: Dashboard, companionUrl: COMPANION_URL })
  66. .use(Instagram, { target: Dashboard, companionUrl: COMPANION_URL })
  67. .use(Dropbox, { target: Dashboard, companionUrl: COMPANION_URL })
  68. .use(Box, { target: Dashboard, companionUrl: COMPANION_URL })
  69. .use(Facebook, { target: Dashboard, companionUrl: COMPANION_URL })
  70. .use(OneDrive, { target: Dashboard, companionUrl: COMPANION_URL })
  71. .use(Zoom, { target: Dashboard, companionUrl: COMPANION_URL })
  72. .use(Url, { target: Dashboard, companionUrl: COMPANION_URL })
  73. .use(Unsplash, { target: Dashboard, companionUrl: COMPANION_URL })
  74. .use(Webcam, {
  75. target: Dashboard,
  76. showVideoSourceDropdown: true,
  77. showRecordingLength: true,
  78. })
  79. .use(Audio, {
  80. target: Dashboard,
  81. showRecordingLength: true,
  82. })
  83. .use(ScreenCapture, { target: Dashboard })
  84. .use(Form, { target: '#upload-form' })
  85. .use(ImageEditor, { target: Dashboard })
  86. .use(DropTarget, {
  87. target: document.body,
  88. })
  89. .use(Compressor)
  90. switch (UPLOADER) {
  91. case 'tus':
  92. uppyDashboard.use(Tus, { endpoint: TUS_ENDPOINT, limit: 6 })
  93. break
  94. case 's3':
  95. uppyDashboard.use(AwsS3, { companionUrl: COMPANION_URL, limit: 6 })
  96. break
  97. case 's3-multipart':
  98. uppyDashboard.use(AwsS3Multipart, { companionUrl: COMPANION_URL, limit: 6 })
  99. break
  100. case 'xhr':
  101. uppyDashboard.use(XHRUpload, { endpoint: XHR_ENDPOINT, limit: 6, bundle: true })
  102. break
  103. case 'transloadit':
  104. uppyDashboard.use(Transloadit, {
  105. service: TRANSLOADIT_SERVICE_URL,
  106. waitForEncoding: true,
  107. params: {
  108. auth: { key: TRANSLOADIT_KEY },
  109. template_id: TRANSLOADIT_TEMPLATE,
  110. },
  111. })
  112. break
  113. case 'transloadit-s3':
  114. uppyDashboard.use(AwsS3, { companionUrl: COMPANION_URL })
  115. uppyDashboard.use(Transloadit, {
  116. waitForEncoding: true,
  117. importFromUploadURLs: true,
  118. params: {
  119. auth: { key: TRANSLOADIT_KEY },
  120. template_id: TRANSLOADIT_TEMPLATE,
  121. },
  122. })
  123. break
  124. case 'transloadit-xhr':
  125. uppyDashboard.setMeta({
  126. params: JSON.stringify({
  127. auth: { key: TRANSLOADIT_KEY },
  128. template_id: TRANSLOADIT_TEMPLATE,
  129. }),
  130. })
  131. uppyDashboard.use(XHRUpload, {
  132. method: 'POST',
  133. endpoint: `${TRANSLOADIT_SERVICE_URL}/assemblies`,
  134. metaFields: ['params'],
  135. bundle: true,
  136. })
  137. break
  138. default:
  139. }
  140. if (RESTORE) {
  141. uppyDashboard.use(GoldenRetriever, { serviceWorker: true })
  142. }
  143. window.uppy = uppyDashboard
  144. uppyDashboard.on('complete', (result) => {
  145. if (result.failed.length === 0) {
  146. console.log('Upload successful 😀')
  147. } else {
  148. console.warn('Upload failed 😞')
  149. }
  150. console.log('successful files:', result.successful)
  151. console.log('failed files:', result.failed)
  152. if (UPLOADER === 'transloadit') {
  153. console.log('Transloadit result:', result.transloadit)
  154. }
  155. })
  156. const modalTrigger = document.querySelector('#pick-files')
  157. if (modalTrigger) modalTrigger.click()
  158. }