form.js 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. const Uppy = require('@uppy/core')
  2. const Form = require('@uppy/form')
  3. const StatusBar = require('@uppy/status-bar')
  4. const Dashboard = require('@uppy/dashboard')
  5. const findDOMElement = require('@uppy/utils/lib/findDOMElement')
  6. const AttachFileInputs = require('./AttachFileInputs')
  7. const TransloaditFormResult = require('./TransloaditFormResult')
  8. const addTransloaditPlugin = require('./addTransloaditPlugin')
  9. const addProviders = require('./addProviders')
  10. function form (target, opts) {
  11. const uppy = Uppy(opts)
  12. addTransloaditPlugin(uppy, opts)
  13. uppy.use(TransloaditFormResult, {
  14. target,
  15. transloaditPluginId: 'Transloadit',
  16. name: 'transloadit'
  17. })
  18. let submitOnSuccess = true
  19. if (opts.hasOwnProperty('submitOnSuccess')) {
  20. submitOnSuccess = !!opts.submitOnSuccess
  21. }
  22. uppy.use(Form, {
  23. target,
  24. triggerUploadOnSubmit: true,
  25. submitOnSuccess: submitOnSuccess,
  26. addResultToForm: false // using custom implementation instead
  27. })
  28. const useDashboard = opts.dashboard || opts.modal
  29. if (useDashboard) {
  30. const dashboardTarget = findDOMElement(opts.dashboard) || document.body
  31. const dashboardId = 'form:Dashboard'
  32. const dashboardOpts = {
  33. id: dashboardId,
  34. target: dashboardTarget
  35. }
  36. if (opts.modal) {
  37. const trigger = 'input[type="file"]'
  38. const button = document.createElement('button')
  39. button.textContent = 'Select files'
  40. button.type = 'button'
  41. const old = findDOMElement(trigger, findDOMElement(target))
  42. old.parentNode.replaceChild(button, old)
  43. dashboardOpts.trigger = button
  44. } else {
  45. dashboardOpts.inline = true
  46. dashboardOpts.hideUploadButton = true
  47. }
  48. uppy.use(Dashboard, dashboardOpts)
  49. if (Array.isArray(opts.providers)) {
  50. addProviders(uppy, opts.providers, {
  51. ...opts,
  52. target: uppy.getPlugin(dashboardId)
  53. })
  54. }
  55. } else {
  56. uppy.use(AttachFileInputs, { target })
  57. }
  58. if (opts.statusBar) {
  59. uppy.use(StatusBar, {
  60. target: opts.statusBar,
  61. // hide most of the things to keep our api simple,
  62. // we can change this in the future if someone needs it
  63. hideUploadButton: true,
  64. hideAfterFinish: true,
  65. hideRetryButton: true,
  66. hidePauseResumeButtons: true,
  67. hideCancelButtons: true
  68. })
  69. }
  70. return uppy
  71. }
  72. module.exports = form