From fa36cd508bccdedddfd2f3c2d362c37eabe52ed9 Mon Sep 17 00:00:00 2001 From: Mathias Jakobsen Date: Thu, 4 Jun 2026 14:55:21 +0100 Subject: [PATCH] Merge pull request #34310 from overleaf/mj-handle-lazy-errors-for-search-and-share [web] Handle errors while loading full project search and share modal GitOrigin-RevId: 29d863324a54fa872022002f612498335f88f377 --- .../share-project-modal-content.tsx | 46 ++++++++++++++++++- .../js/components/full-project-search.tsx | 6 ++- 2 files changed, 49 insertions(+), 3 deletions(-) diff --git a/services/web/frontend/js/features/share-project-modal/components/share-project-modal-content.tsx b/services/web/frontend/js/features/share-project-modal/components/share-project-modal-content.tsx index a26de262d0..df7bdaa106 100644 --- a/services/web/frontend/js/features/share-project-modal/components/share-project-modal-content.tsx +++ b/services/web/frontend/js/features/share-project-modal/components/share-project-modal-content.tsx @@ -19,6 +19,8 @@ import GiveFeedbackLink from '@/features/share-project-modal/components/give-fee import classNames from 'classnames' import { useFeatureFlag } from '@/shared/context/split-test-context' import { useShareProjectContext } from '@/features/share-project-modal/components/share-project-modal' +import { ErrorBoundaryFallback } from '@/shared/components/error-boundary-fallback' +import withErrorBoundary from '@/infrastructure/error-boundary' const ReadOnlyTokenLink = lazy(() => import('./link-sharing').then(({ ReadOnlyTokenLink }) => ({ @@ -46,6 +48,27 @@ export default function ShareProjectModalContent({ error, projectName, }: ShareProjectModalContentProps) { + return ( + + + + ) +} + +function ShareProjectModalContentInner({ + inFlight, + error, + projectName, + cancel, +}: Pick< + ShareProjectModalContentProps, + 'inFlight' | 'error' | 'projectName' | 'cancel' +>) { const { t } = useTranslation() const isSharingUpdatesEnabled = useFeatureFlag('sharing-updates') const [isInvitedPeopleScreen, setIsInvitedPeopleScreen] = useState(false) @@ -53,7 +76,7 @@ export default function ShareProjectModalContent({ const { isRestrictedTokenMember, isProjectOwner } = useEditorContext() return ( - + <>
{isSharingUpdatesEnabled && isInvitedPeopleScreen ? ( @@ -142,6 +165,25 @@ export default function ShareProjectModalContent({ {t('close')} - + ) } + +const ShareProjectModalContentInnerFallback = () => { + const { t } = useTranslation() + return ( + <> + + {t('generic_something_went_wrong')} + + + + + + ) +} + +const ShareProjectModalContentInnerWithErrorBoundary = withErrorBoundary( + ShareProjectModalContentInner, + () => +) diff --git a/services/web/modules/full-project-search/frontend/js/components/full-project-search.tsx b/services/web/modules/full-project-search/frontend/js/components/full-project-search.tsx index 8ddb7a83ca..12d1da6fdd 100644 --- a/services/web/modules/full-project-search/frontend/js/components/full-project-search.tsx +++ b/services/web/modules/full-project-search/frontend/js/components/full-project-search.tsx @@ -1,4 +1,6 @@ import React, { FC, lazy, Suspense } from 'react' +import withErrorBoundary from '@/infrastructure/error-boundary' +import { ErrorBoundaryFallback } from '@/shared/components/error-boundary-fallback' const FullProjectSearchUI = lazy(() => import('./full-project-search-ui')) @@ -10,4 +12,6 @@ const FullProjectSearch: FC = () => { ) } -export default FullProjectSearch +export default withErrorBoundary(FullProjectSearch, () => ( + +))