FileCard.js 3.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. const html = require('yo-yo')
  2. const getFileTypeIcon = require('./getFileTypeIcon')
  3. const onload = require('on-load')
  4. const { checkIcon } = require('./icons')
  5. let file
  6. const meta = {}
  7. module.exports = function fileCard (props) {
  8. file = props.fileCardFor ? props.files[props.fileCardFor] : false
  9. // const meta = {}
  10. const handleEnterKey = (ev) => {
  11. if (event.keyCode === 13) {
  12. props.done(meta, file.id)
  13. }
  14. }
  15. const tempStoreMeta = (ev) => {
  16. const value = ev.target.value
  17. const name = ev.target.dataset.name
  18. meta[name] = value
  19. }
  20. function renderMetaFields (file) {
  21. const metaFields = props.metaFields || []
  22. return metaFields.map((field) => {
  23. return html`<fieldset class="UppyDashboardFileCard-fieldset">
  24. <label class="UppyDashboardFileCard-label">${field.name}</label>
  25. <input class="UppyDashboardFileCard-input"
  26. type="text"
  27. data-name="${field.id}"
  28. value="${file.meta[field.id]}"
  29. placeholder="${field.placeholder || ''}"
  30. onkeyup=${tempStoreMeta} /></fieldset>`
  31. })
  32. }
  33. const fileCardEl = html`<div class="UppyDashboardFileCard" aria-hidden="${!props.fileCardFor}">
  34. <div class="UppyDashboardContent-bar">
  35. <h2 class="UppyDashboardContent-title">Editing <span class="UppyDashboardContent-titleFile">${file.meta ? file.meta.name : file.name}</span></h2>
  36. <button class="UppyDashboardContent-back" type="button" title="Finish editing file"
  37. onclick=${() => props.done(meta, file.id)}>Done</button>
  38. </div>
  39. ${props.fileCardFor
  40. ? html`<div class="UppyDashboardFileCard-inner">
  41. <div class="UppyDashboardFileCard-preview" style="background-color: ${getFileTypeIcon(file.type.general, file.type.specific).color}">
  42. ${file.preview
  43. ? html`<img alt="${file.name}" src="${file.preview}">`
  44. : html`<div class="UppyDashboardItem-previewIconWrap">
  45. <span class="UppyDashboardItem-previewIcon" style="color: ${getFileTypeIcon(file.type.general, file.type.specific).color}">${getFileTypeIcon(file.type.general, file.type.specific).icon}</span>
  46. <svg class="UppyDashboardItem-previewIconBg" width="72" height="93" viewBox="0 0 72 93"><g><path d="M24.08 5h38.922A2.997 2.997 0 0 1 66 8.003v74.994A2.997 2.997 0 0 1 63.004 86H8.996A2.998 2.998 0 0 1 6 83.01V22.234L24.08 5z" fill="#FFF"/><path d="M24 5L6 22.248h15.007A2.995 2.995 0 0 0 24 19.244V5z" fill="#E4E4E4"/></g></svg>
  47. </div>`
  48. }
  49. </div>
  50. <div class="UppyDashboardFileCard-info">
  51. <fieldset class="UppyDashboardFileCard-fieldset">
  52. <label class="UppyDashboardFileCard-label">Name</label>
  53. <input class="UppyDashboardFileCard-input" name="name" type="text" value="${file.meta.name}"
  54. onkeyup=${tempStoreMeta} />
  55. </fieldset>
  56. ${renderMetaFields(file)}
  57. </div>
  58. </div>`
  59. : null
  60. }
  61. <div class="UppyDashboard-actions">
  62. <button class="UppyButton--circular UppyButton--blue UppyDashboardFileCard-done"
  63. type="button"
  64. title="Finish editing file"
  65. onclick=${() => props.done(meta, file.id)}>${checkIcon()}</button>
  66. </div>
  67. </div>`
  68. return onload(html`<div>${fileCardEl}</div>`,
  69. () => document.body.addEventListener('keyup', handleEnterKey),
  70. () => document.body.removeEventListener('keyup', handleEnterKey)
  71. )
  72. }