file-tree-create-new-doc.jsx 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738
  1. import { useCallback, useEffect } from 'react'
  2. import FileTreeCreateNameInput from '../file-tree-create-name-input'
  3. import { useFileTreeActionable } from '../../../contexts/file-tree-actionable'
  4. import { useFileTreeCreateName } from '../../../contexts/file-tree-create-name'
  5. import { useFileTreeCreateForm } from '../../../contexts/file-tree-create-form'
  6. import * as eventTracking from '../../../../../infrastructure/event-tracking'
  7. import ErrorMessage from '../error-message'
  8. export default function FileTreeCreateNewDoc() {
  9. const { name, validName } = useFileTreeCreateName()
  10. const { setValid } = useFileTreeCreateForm()
  11. const { error, finishCreatingDoc, inFlight } = useFileTreeActionable()
  12. // form validation: name is valid
  13. useEffect(() => {
  14. setValid(validName)
  15. }, [setValid, validName])
  16. // form submission: create an empty doc with this name
  17. const handleSubmit = useCallback(
  18. event => {
  19. event.preventDefault()
  20. finishCreatingDoc({ name })
  21. eventTracking.sendMB('new-file-created', {
  22. method: 'doc',
  23. extension: name.split('.').length > 1 ? name.split('.').pop() : '',
  24. })
  25. },
  26. [finishCreatingDoc, name]
  27. )
  28. return (
  29. <form noValidate id="create-file" onSubmit={handleSubmit}>
  30. <FileTreeCreateNameInput focusName error={error} inFlight={inFlight} />
  31. {error && <ErrorMessage error={error} />}
  32. </form>
  33. )
  34. }