From a169f90b7667af4380a60b767448b83ac941ebba Mon Sep 17 00:00:00 2001 From: David <33458145+davidmcpowell@users.noreply.github.com> Date: Thu, 7 Aug 2025 11:42:14 +0100 Subject: [PATCH] Merge pull request #27678 from overleaf/dp-open-new-file Immediately open doc after creation GitOrigin-RevId: a202a9ed4e03668a04594e7fe352d5c52d5d5572 --- .../modes/file-tree-create-new-doc.jsx | 12 +++++++++--- .../file-tree/contexts/file-tree-actionable.tsx | 3 ++- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/services/web/frontend/js/features/file-tree/components/file-tree-create/modes/file-tree-create-new-doc.jsx b/services/web/frontend/js/features/file-tree/components/file-tree-create/modes/file-tree-create-new-doc.jsx index 2d471a741c..eb1b015d34 100644 --- a/services/web/frontend/js/features/file-tree/components/file-tree-create/modes/file-tree-create-new-doc.jsx +++ b/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 ( diff --git a/services/web/frontend/js/features/file-tree/contexts/file-tree-actionable.tsx b/services/web/frontend/js/features/file-tree/contexts/file-tree-actionable.tsx index 1c144bcf80..dacfe6b62d 100644 --- a/services/web/frontend/js/features/file-tree/contexts/file-tree-actionable.tsx +++ b/services/web/frontend/js/features/file-tree/contexts/file-tree-actionable.tsx @@ -445,8 +445,9 @@ export const FileTreeActionableProvider: FC = ({ 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 })