Răsfoiți Sursa

Merge pull request #27678 from overleaf/dp-open-new-file

Immediately open doc after creation

GitOrigin-RevId: a202a9ed4e03668a04594e7fe352d5c52d5d5572
David 1 an în urmă
părinte
comite
a169f90b76

+ 9 - 3
services/web/frontend/js/features/file-tree/components/file-tree-create/modes/file-tree-create-new-doc.jsx

@@ -5,28 +5,34 @@ import { useFileTreeCreateName } from '../../../contexts/file-tree-create-name'
 import { useFileTreeCreateForm } from '../../../contexts/file-tree-create-form'
 import * as eventTracking from '../../../../../infrastructure/event-tracking'
 import ErrorMessage from '../error-message'
+import { useEditorManagerContext } from '@/features/ide-react/context/editor-manager-context'
 
 export default function FileTreeCreateNewDoc() {
   const { name, validName } = useFileTreeCreateName()
   const { setValid } = useFileTreeCreateForm()
   const { error, finishCreatingDoc, inFlight } = useFileTreeActionable()
+
   // form validation: name is valid
   useEffect(() => {
     setValid(validName)
   }, [setValid, validName])
 
+  const { openDoc } = useEditorManagerContext()
+
   // form submission: create an empty doc with this name
   const handleSubmit = useCallback(
-    event => {
+    async event => {
       event.preventDefault()
 
-      finishCreatingDoc({ name })
+      const doc = await finishCreatingDoc({ name })
       eventTracking.sendMB('new-file-created', {
         method: 'doc',
         extension: name.split('.').length > 1 ? name.split('.').pop() : '',
       })
+
+      openDoc(doc)
     },
-    [finishCreatingDoc, name]
+    [finishCreatingDoc, name, openDoc]
   )
 
   return (

+ 2 - 1
services/web/frontend/js/features/file-tree/contexts/file-tree-actionable.tsx

@@ -445,8 +445,9 @@ export const FileTreeActionableProvider: FC<React.PropsWithChildren> = ({
       dispatch({ type: ACTION_TYPES.CREATING_FILE })
 
       return finishCreatingEntity(entity)
-        .then(() => {
+        .then(docOrFile => {
           dispatch({ type: ACTION_TYPES.CLEAR })
+          return docOrFile
         })
         .catch(error => {
           dispatch({ type: ACTION_TYPES.ERROR, error })