From 24858111b2dee8138d1a3f6c8c8f57e39ccf7503 Mon Sep 17 00:00:00 2001 From: Mathias Jakobsen Date: Wed, 13 Aug 2025 10:18:48 +0100 Subject: [PATCH] Merge pull request #27840 from overleaf/mj-file-tree-ts [web] Convert most remaining file tree components and functions to Typescript GitOrigin-RevId: 1aabe371af489def891ffc420c7f28b4efc309ef --- ...body.jsx => file-tree-modal-create-file-body.tsx} | 12 +++++++++--- ...eate-new-doc.jsx => file-tree-create-new-doc.tsx} | 4 ++-- ...rt-from-url.jsx => file-tree-import-from-url.tsx} | 12 +++++++++--- .../js/features/file-tree/{errors.js => errors.ts} | 0 4 files changed, 20 insertions(+), 8 deletions(-) rename services/web/frontend/js/features/file-tree/components/file-tree-create/{file-tree-modal-create-file-body.jsx => file-tree-modal-create-file-body.tsx} (93%) rename services/web/frontend/js/features/file-tree/components/file-tree-create/modes/{file-tree-create-new-doc.jsx => file-tree-create-new-doc.tsx} (92%) rename services/web/frontend/js/features/file-tree/components/file-tree-create/modes/{file-tree-import-from-url.jsx => file-tree-import-from-url.tsx} (91%) rename services/web/frontend/js/features/file-tree/{errors.js => errors.ts} (100%) diff --git a/services/web/frontend/js/features/file-tree/components/file-tree-create/file-tree-modal-create-file-body.jsx b/services/web/frontend/js/features/file-tree/components/file-tree-create/file-tree-modal-create-file-body.tsx similarity index 93% rename from services/web/frontend/js/features/file-tree/components/file-tree-create/file-tree-modal-create-file-body.jsx rename to services/web/frontend/js/features/file-tree/components/file-tree-create/file-tree-modal-create-file-body.tsx index 75c5754b5d..fa8c4a3858 100644 --- a/services/web/frontend/js/features/file-tree/components/file-tree-create/file-tree-modal-create-file-body.jsx +++ b/services/web/frontend/js/features/file-tree/components/file-tree-create/file-tree-modal-create-file-body.tsx @@ -8,11 +8,14 @@ import { useFileTreeActionable } from '../../contexts/file-tree-actionable' import { useFileTreeData } from '../../../../shared/context/file-tree-data-context' import importOverleafModules from '../../../../../macros/import-overleaf-module.macro' -import { lazy, Suspense } from 'react' +import { ElementType, lazy, Suspense } from 'react' import { FullSizeLoadingSpinner } from '@/shared/components/loading-spinner' import getMeta from '@/utils/meta' -const createFileModeModules = importOverleafModules('createFileModes') +const createFileModeModules = importOverleafModules('createFileModes') as { + import: { CreateFilePane: ElementType; CreateFileMode: ElementType } + path: string +}[] const FileTreeUploadDoc = lazy(() => import('./modes/file-tree-upload-doc')) @@ -27,7 +30,10 @@ export default function FileTreeModalCreateFileBody() { hasLinkUrlFeature, } = getMeta('ol-ExposedSettings') - if (!fileCount || fileCount.status === 'error') { + if ( + !fileCount || + (typeof fileCount === 'object' && fileCount.status === 'error') + ) { return null } 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.tsx similarity index 92% rename from services/web/frontend/js/features/file-tree/components/file-tree-create/modes/file-tree-create-new-doc.jsx rename to services/web/frontend/js/features/file-tree/components/file-tree-create/modes/file-tree-create-new-doc.tsx index eb1b015d34..c932540ba2 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.tsx @@ -1,4 +1,4 @@ -import { useCallback, useEffect } from 'react' +import { FormEventHandler, useCallback, useEffect } from 'react' import FileTreeCreateNameInput from '../file-tree-create-name-input' import { useFileTreeActionable } from '../../../contexts/file-tree-actionable' import { useFileTreeCreateName } from '../../../contexts/file-tree-create-name' @@ -20,7 +20,7 @@ export default function FileTreeCreateNewDoc() { const { openDoc } = useEditorManagerContext() // form submission: create an empty doc with this name - const handleSubmit = useCallback( + const handleSubmit: FormEventHandler = useCallback( async event => { event.preventDefault() diff --git a/services/web/frontend/js/features/file-tree/components/file-tree-create/modes/file-tree-import-from-url.jsx b/services/web/frontend/js/features/file-tree/components/file-tree-create/modes/file-tree-import-from-url.tsx similarity index 91% rename from services/web/frontend/js/features/file-tree/components/file-tree-create/modes/file-tree-import-from-url.jsx rename to services/web/frontend/js/features/file-tree/components/file-tree-create/modes/file-tree-import-from-url.tsx index ad0cb7c6ac..dc8e113a68 100644 --- a/services/web/frontend/js/features/file-tree/components/file-tree-create/modes/file-tree-import-from-url.jsx +++ b/services/web/frontend/js/features/file-tree/components/file-tree-create/modes/file-tree-import-from-url.tsx @@ -1,4 +1,10 @@ -import { useCallback, useEffect, useState } from 'react' +import { + ChangeEvent, + FormEventHandler, + useCallback, + useEffect, + useState, +} from 'react' import { useTranslation } from 'react-i18next' import FileTreeCreateNameInput from '../file-tree-create-name-input' import { useFileTreeActionable } from '../../../contexts/file-tree-actionable' @@ -18,7 +24,7 @@ export default function FileTreeImportFromUrl() { const [url, setUrl] = useState('') - const handleChange = useCallback(event => { + const handleChange = useCallback((event: ChangeEvent) => { setUrl(event.target.value) }, []) @@ -36,7 +42,7 @@ export default function FileTreeImportFromUrl() { }, [setValid, validName, url]) // form submission: create a linked file with this name, from this URL - const handleSubmit = event => { + const handleSubmit: FormEventHandler = event => { event.preventDefault() eventTracking.sendMB('new-file-created', { method: 'url', diff --git a/services/web/frontend/js/features/file-tree/errors.js b/services/web/frontend/js/features/file-tree/errors.ts similarity index 100% rename from services/web/frontend/js/features/file-tree/errors.js rename to services/web/frontend/js/features/file-tree/errors.ts