file-tree-create-new-doc.js 1.1 KB

1234567891011121314151617181920212223242526272829303132333435
  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 ErrorMessage from '../error-message'
  7. export default function FileTreeCreateNewDoc() {
  8. const { name, validName } = useFileTreeCreateName()
  9. const { setValid } = useFileTreeCreateForm()
  10. const { error, finishCreatingDoc } = useFileTreeActionable()
  11. // form validation: name is valid
  12. useEffect(() => {
  13. setValid(validName)
  14. }, [setValid, validName])
  15. // form submission: create an empty doc with this name
  16. const handleSubmit = useCallback(
  17. event => {
  18. event.preventDefault()
  19. finishCreatingDoc({ name })
  20. },
  21. [finishCreatingDoc, name]
  22. )
  23. return (
  24. <form noValidate id="create-file" onSubmit={handleSubmit}>
  25. <FileTreeCreateNameInput focusName error={error} />
  26. {error && <ErrorMessage error={error} />}
  27. </form>
  28. )
  29. }