TransloaditFormResult.js 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. const { Plugin } = require('@uppy/core')
  2. const findDOMElement = require('@uppy/utils/lib/findDOMElement')
  3. /**
  4. * After an upload completes, inject result data from Transloadit in a hidden input.
  5. *
  6. * Must be added _after_ the Transloadit plugin.
  7. */
  8. class TransloaditFormResult extends Plugin {
  9. constructor (uppy, opts) {
  10. super(uppy, opts)
  11. this.id = opts.id || 'TransloaditFormResult'
  12. this.type = 'modifier'
  13. this.handleUpload = this.handleUpload.bind(this)
  14. }
  15. getAssemblyStatuses (fileIDs) {
  16. const assemblyIds = []
  17. fileIDs.forEach((fileID) => {
  18. const file = this.uppy.getFile(fileID)
  19. const assembly = file.transloadit && file.transloadit.assembly
  20. if (assembly && assemblyIds.indexOf(assembly) === -1) {
  21. assemblyIds.push(assembly)
  22. }
  23. })
  24. const tl = this.uppy.getPlugin(this.opts.transloaditPluginId || 'Transloadit')
  25. return assemblyIds.map((id) => tl.getAssembly(id))
  26. }
  27. handleUpload (fileIDs) {
  28. const assemblies = this.getAssemblyStatuses(fileIDs)
  29. const input = document.createElement('input')
  30. input.type = 'hidden'
  31. input.name = this.opts.name
  32. input.value = JSON.stringify(assemblies)
  33. const target = findDOMElement(this.opts.target)
  34. target.appendChild(input)
  35. }
  36. install () {
  37. this.uppy.addPostProcessor(this.handleUpload)
  38. }
  39. uninstall () {
  40. this.uppy.removePostProcessor(this.handleUpload)
  41. }
  42. }
  43. module.exports = TransloaditFormResult