modal.js 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. const Dashboard = require('@uppy/dashboard')
  2. const createUppy = require('./createUppy')
  3. const addTransloaditPlugin = require('./addTransloaditPlugin')
  4. const addProviders = require('./addProviders')
  5. const CANCEL = {}
  6. function modal (target, opts = {}) {
  7. const pluginId = 'modal'
  8. const uppy = createUppy(opts, {
  9. allowMultipleUploads: false
  10. })
  11. addTransloaditPlugin(uppy, opts)
  12. uppy.use(Dashboard, {
  13. id: pluginId,
  14. target,
  15. closeAfterFinish: true
  16. })
  17. if (Array.isArray(opts.providers)) {
  18. addProviders(uppy, opts.providers, {
  19. ...opts,
  20. // Install providers into the Dashboard.
  21. target: uppy.getPlugin(pluginId)
  22. })
  23. }
  24. return new Promise((resolve, reject) => {
  25. uppy.on('complete', (result) => {
  26. if (result.failed.length === 0) {
  27. resolve(result)
  28. }
  29. })
  30. uppy.on('error', reject)
  31. uppy.on('cancel-all', () => reject(CANCEL))
  32. uppy.getPlugin(pluginId)
  33. .openModal()
  34. }).then((result) => {
  35. return result
  36. }, (err) => {
  37. if (err === CANCEL) {
  38. uppy.getPlugin(pluginId)
  39. .requestCloseModal()
  40. return null
  41. }
  42. throw err
  43. })
  44. }
  45. module.exports = modal