RenderMetaFields.tsx 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. import { h } from 'preact'
  2. type $TSFixMe = any
  3. export default function RenderMetaFields(props: $TSFixMe): JSX.Element {
  4. const {
  5. computedMetaFields,
  6. requiredMetaFields,
  7. updateMeta,
  8. form,
  9. formState,
  10. } = props
  11. const fieldCSSClasses = {
  12. text: 'uppy-u-reset uppy-c-textInput uppy-Dashboard-FileCard-input',
  13. }
  14. return computedMetaFields.map((field: $TSFixMe) => {
  15. const id = `uppy-Dashboard-FileCard-input-${field.id}`
  16. const required = requiredMetaFields.includes(field.id)
  17. return (
  18. <fieldset key={field.id} className="uppy-Dashboard-FileCard-fieldset">
  19. <label className="uppy-Dashboard-FileCard-label" htmlFor={id}>
  20. {field.name}
  21. </label>
  22. {field.render !== undefined ?
  23. field.render(
  24. {
  25. value: formState[field.id],
  26. onChange: (newVal: $TSFixMe) => updateMeta(newVal, field.id),
  27. fieldCSSClasses,
  28. required,
  29. form: form.id,
  30. },
  31. h,
  32. )
  33. : <input
  34. className={fieldCSSClasses.text}
  35. id={id}
  36. form={form.id}
  37. type={field.type || 'text'}
  38. required={required}
  39. value={formState[field.id]}
  40. placeholder={field.placeholder}
  41. onInput={(ev) =>
  42. updateMeta((ev.target as HTMLInputElement).value, field.id)
  43. }
  44. data-uppy-super-focusable
  45. />
  46. }
  47. </fieldset>
  48. )
  49. })
  50. }