From d48518e01d52e81f5e396fd2aea8446370ab84d2 Mon Sep 17 00:00:00 2001 From: David <33458145+davidmcpowell@users.noreply.github.com> Date: Tue, 4 Nov 2025 12:55:17 +0000 Subject: [PATCH] Merge pull request #29495 from overleaf/dp-remove-new-logs-position Remove error logs from new editor rail GitOrigin-RevId: 9d0b134345b63618334c5507089debf2df104274 --- .../web/frontend/extracted-translations.json | 16 +- .../components/error-logs/error-indicator.tsx | 25 -- .../error-logs/error-logs-header.tsx | 98 -------- .../error-logs/error-logs-panel.tsx | 14 -- .../components/error-logs/error-logs.tsx | 6 +- .../compile-timeout-error-state.tsx | 227 ------------------ .../pdf-error-state/error-state.tsx | 65 ----- .../pdf-error-state/general-error-state.tsx | 64 ----- .../pdf-error-state/pdf-error-state.tsx | 148 ------------ .../rendering-error-expected-state.tsx | 36 --- .../pdf-error-state/rendering-error-state.tsx | 55 ----- .../pdf-preview-hybrid-toolbar.tsx | 4 +- .../components/rail/rail-panel.tsx | 2 +- .../ide-redesign/components/rail/rail.tsx | 38 +-- .../ide-redesign/contexts/rail-context.tsx | 1 - .../ide-redesign/utils/new-editor-utils.ts | 19 +- .../components/pdf-preview-pane.tsx | 11 +- .../components/timeout-upgrade-prompt-new.tsx | 8 +- .../pdf-preview/hooks/use-log-events.ts | 29 +-- .../preview-logs-pane-max-entries.tsx | 12 +- .../stories/pdf-error-state.stories.tsx | 95 -------- .../web/frontend/stylesheets/pages/all.scss | 1 - .../stylesheets/pages/editor/logs.scss | 6 - .../pages/editor/pdf-error-state.scss | 91 ------- services/web/locales/en.json | 13 - .../pdf-preview/new-editor-utils.test.tsx | 25 +- 26 files changed, 44 insertions(+), 1065 deletions(-) delete mode 100644 services/web/frontend/js/features/ide-redesign/components/error-logs/error-indicator.tsx delete mode 100644 services/web/frontend/js/features/ide-redesign/components/error-logs/error-logs-header.tsx delete mode 100644 services/web/frontend/js/features/ide-redesign/components/error-logs/error-logs-panel.tsx delete mode 100644 services/web/frontend/js/features/ide-redesign/components/pdf-preview/pdf-error-state/compile-timeout-error-state.tsx delete mode 100644 services/web/frontend/js/features/ide-redesign/components/pdf-preview/pdf-error-state/error-state.tsx delete mode 100644 services/web/frontend/js/features/ide-redesign/components/pdf-preview/pdf-error-state/general-error-state.tsx delete mode 100644 services/web/frontend/js/features/ide-redesign/components/pdf-preview/pdf-error-state/pdf-error-state.tsx delete mode 100644 services/web/frontend/js/features/ide-redesign/components/pdf-preview/pdf-error-state/rendering-error-expected-state.tsx delete mode 100644 services/web/frontend/js/features/ide-redesign/components/pdf-preview/pdf-error-state/rendering-error-state.tsx delete mode 100644 services/web/frontend/stories/pdf-error-state.stories.tsx delete mode 100644 services/web/frontend/stylesheets/pages/editor/pdf-error-state.scss diff --git a/services/web/frontend/extracted-translations.json b/services/web/frontend/extracted-translations.json index d32a4dd8f2..3064df50b0 100644 --- a/services/web/frontend/extracted-translations.json +++ b/services/web/frontend/extracted-translations.json @@ -124,7 +124,6 @@ "ai_feedback_the_suggestion_wasnt_the_best_fix_available": "", "ai_feedback_there_was_no_code_fix_suggested": "", "alignment": "", - "all": "", "all_borders": "", "all_events": "", "all_features_in_group_standard_plus": "", @@ -257,7 +256,6 @@ "characters": "", "chat": "", "chat_error": "", - "check_error_logs": "", "checking_dropbox_status": "", "checking_project_github_status": "", "choose_a_custom_color": "", @@ -573,7 +571,6 @@ "equation_preview": "", "error": "", "error_assist": "", - "error_log": "", "error_opening_document": "", "error_opening_document_detail": "", "error_performing_request": "", @@ -620,7 +617,7 @@ "file_size": "", "file_tree": "", "files_cannot_include_invalid_characters": "", - "files_collaboration_integrations_logs": "", + "files_collaboration_integrations": "", "files_selected": "", "filter_projects": "", "find": "", @@ -1011,7 +1008,6 @@ "log_entry_maximum_entries": "", "log_entry_maximum_entries_enable_stop_on_first_error": "", "log_entry_maximum_entries_see_full_logs": "", - "log_entry_maximum_entries_see_full_logs_new": "", "log_entry_maximum_entries_title": "", "log_hint_extra_info": "", "log_in": "", @@ -1023,7 +1019,6 @@ "login_count": "", "login_to_accept_invitation": "", "login_with_service": "", - "logs": "", "logs_and_output_files": "", "looking_multiple_licenses": "", "looks_like_youre_at": "", @@ -1097,7 +1092,6 @@ "more_compile_time": "", "more_editor_toolbar_item": "", "more_info": "", - "more_logs_and_files": "", "more_options": "", "my_library": "", "n_items": "", @@ -1268,7 +1262,6 @@ "pdf_compile_in_progress_error": "", "pdf_compile_rate_limit_hit": "", "pdf_compile_try_again": "", - "pdf_couldnt_compile": "", "pdf_in_separate_tab": "", "pdf_only": "", "pdf_only_hide_editor": "", @@ -1376,7 +1369,6 @@ "project_timed_out_enable_stop_on_first_error": "", "project_timed_out_fatal_error": "", "project_timed_out_intro": "", - "project_timed_out_intro_short": "", "project_timed_out_learn_more": "", "project_timed_out_optimize_images": "", "project_title_options": "", @@ -1667,7 +1659,6 @@ "something_went_wrong_processing_the_request": "", "something_went_wrong_rendering_pdf": "", "something_went_wrong_rendering_pdf_expected": "", - "something_went_wrong_rendering_pdf_expected_new": "", "something_went_wrong_server": "", "somthing_went_wrong_compiling": "", "sorry_it_looks_like_that_didnt_work_this_time": "", @@ -1842,7 +1833,6 @@ "thanks_settings_updated": "", "the_add_on_will_remain_active_until": "", "the_code_editor_color_scheme": "", - "the_document_environment_contains_no_content_learn_about_environments": "", "the_following_files_already_exist_in_this_project": "", "the_following_files_and_folders_already_exist_in_this_project": "", "the_following_folder_already_exists_in_this_project": "", @@ -1862,7 +1852,6 @@ "then_x_price_per_month": "", "then_x_price_per_year": "", "there_are_lots_of_options_to_edit_and_customize_your_figures": "", - "there_is_a_latex_error_check_logs": "", "there_was_a_problem_restoring_the_project_please_try_again_in_a_few_moments_or_contact_us": "", "they_lose_access_to_account": "", "they_will_be_removed_from_the_group": "", @@ -1884,7 +1873,6 @@ "this_is_the_file_that_references_pulled_from_your_reference_manager_will_be_added_to": "", "this_organization_is_tax_exempt": "", "this_project_already_has_maximum_collaborators": "", - "this_project_contains_a_file_called_output_pdf": "", "this_project_exceeded_collaborator_limit": "", "this_project_exceeded_compile_timeout_limit_on_free_plan": "", "this_project_has_more_than_max_collabs": "", @@ -2175,7 +2163,6 @@ "what_should_we_call_you": "", "whats_different": "", "when_you_tick_the_include_caption_box": "", - "why_might_this_happen": "", "why_not_pause_instead": "", "wide": "", "will_lose_edit_access_on_date": "", @@ -2235,7 +2222,6 @@ "you_have_been_invited_to_transfer_management_of_your_account": "", "you_have_been_invited_to_transfer_management_of_your_account_to": "", "you_have_been_removed_from_this_project_and_will_be_redirected_to_project_dashboard": "", - "you_have_errors_the_pdf_couldnt_compile": "", "you_have_x_licenses_and_your_plan_supports_up_to_y": "", "you_have_x_licenses_on_your_subscription": "", "you_need_to_configure_your_sso_settings": "", diff --git a/services/web/frontend/js/features/ide-redesign/components/error-logs/error-indicator.tsx b/services/web/frontend/js/features/ide-redesign/components/error-logs/error-indicator.tsx deleted file mode 100644 index f534176c43..0000000000 --- a/services/web/frontend/js/features/ide-redesign/components/error-logs/error-indicator.tsx +++ /dev/null @@ -1,25 +0,0 @@ -import { useDetachCompileContext as useCompileContext } from '@/shared/context/detach-compile-context' -import { RailIndicator } from '../rail/rail-indicator' - -export default function ErrorIndicator() { - const { logEntries } = useCompileContext() - - if (!logEntries) { - return null - } - - const errorCount = Number(logEntries.errors?.length) - const warningCount = Number(logEntries.warnings?.length) - const totalCount = errorCount + warningCount - - if (totalCount === 0) { - return null - } - - return ( - 0 ? 'danger' : 'warning'} - /> - ) -} diff --git a/services/web/frontend/js/features/ide-redesign/components/error-logs/error-logs-header.tsx b/services/web/frontend/js/features/ide-redesign/components/error-logs/error-logs-header.tsx deleted file mode 100644 index 0a5136178f..0000000000 --- a/services/web/frontend/js/features/ide-redesign/components/error-logs/error-logs-header.tsx +++ /dev/null @@ -1,98 +0,0 @@ -import { useTranslation } from 'react-i18next' -import RailPanelHeader from '../rail/rail-panel-header' -import OLIconButton from '@/shared/components/ol/ol-icon-button' -import { useDetachCompileContext as useCompileContext } from '@/shared/context/detach-compile-context' -import { - Dropdown, - DropdownMenu, - DropdownToggle, -} from '@/shared/components/dropdown/dropdown-menu' -import PdfFileList from '@/features/pdf-preview/components/pdf-file-list' -import { forwardRef } from 'react' -import OLTooltip from '@/shared/components/ol/ol-tooltip' - -export default function ErrorLogsHeader() { - const { t } = useTranslation() - - return ( - , - , - ]} - /> - ) -} - -const ClearCacheButton = () => { - const { compiling, clearCache, clearingCache } = useCompileContext() - const { t } = useTranslation() - - return ( - - clearCache()} - className="rail-panel-header-button-subdued" - icon="auto_delete" - isLoading={clearingCache} - disabled={clearingCache || compiling} - accessibilityLabel={t('clear_cached_files')} - size="sm" - /> - - ) -} - -const DownloadFileDropdown = () => { - const { fileList } = useCompileContext() - - const { t } = useTranslation() - - return ( - - - {t('other_logs_and_files')} - - {fileList && ( - - - - )} - - ) -} - -const DownloadFileDropdownToggleButton = forwardRef< - HTMLButtonElement, - { onClick: React.MouseEventHandler } ->(function DownloadFileDropdownToggleButton({ onClick }, ref) { - const { compiling, fileList } = useCompileContext() - const { t } = useTranslation() - - return ( - - - - ) -}) diff --git a/services/web/frontend/js/features/ide-redesign/components/error-logs/error-logs-panel.tsx b/services/web/frontend/js/features/ide-redesign/components/error-logs/error-logs-panel.tsx deleted file mode 100644 index 2cff048256..0000000000 --- a/services/web/frontend/js/features/ide-redesign/components/error-logs/error-logs-panel.tsx +++ /dev/null @@ -1,14 +0,0 @@ -import { PdfPreviewProvider } from '@/features/pdf-preview/components/pdf-preview-provider' -import ErrorLogs from './error-logs' -import ErrorLogsHeader from './error-logs-header' - -export default function ErrorLogsPanel() { - return ( - -
- - -
-
- ) -} diff --git a/services/web/frontend/js/features/ide-redesign/components/error-logs/error-logs.tsx b/services/web/frontend/js/features/ide-redesign/components/error-logs/error-logs.tsx index c8953c5c5b..6fe6408fcb 100644 --- a/services/web/frontend/js/features/ide-redesign/components/error-logs/error-logs.tsx +++ b/services/web/frontend/js/features/ide-redesign/components/error-logs/error-logs.tsx @@ -16,7 +16,6 @@ import TimeoutUpgradePromptNew from '@/features/pdf-preview/components/timeout-u import getMeta from '@/utils/meta' import PdfClearCacheButton from '@/features/pdf-preview/components/pdf-clear-cache-button' import PdfDownloadFilesButton from '@/features/pdf-preview/components/pdf-download-files-button' -import { useIsNewErrorLogsPositionEnabled } from '../../utils/new-editor-utils' import RollingBuildSelectedReminder from './rolling-build-selected-reminder' import ClsiCachePrompt from '@/features/pdf-preview/components/clsi-cache-prompt' @@ -39,21 +38,20 @@ function ErrorLogs({ const { error, logEntries, rawLog, validationIssues, stoppedOnFirstError } = useCompileContext() const { compileTimeout } = getMeta('ol-compileSettings') - const newLogsPosition = useIsNewErrorLogsPositionEnabled() const { t } = useTranslation() const tabs = useMemo(() => { return [ { key: 'all', - label: newLogsPosition ? t('all') : t('all_logs'), + label: t('all_logs'), entries: logEntries?.all, }, { key: 'errors', label: t('errors'), entries: logEntries?.errors }, { key: 'warnings', label: t('warnings'), entries: logEntries?.warnings }, { key: 'info', label: t('info'), entries: logEntries?.typesetting }, ] - }, [logEntries, newLogsPosition, t]) + }, [logEntries, t]) const { loadingError } = usePdfPreviewContext() diff --git a/services/web/frontend/js/features/ide-redesign/components/pdf-preview/pdf-error-state/compile-timeout-error-state.tsx b/services/web/frontend/js/features/ide-redesign/components/pdf-preview/pdf-error-state/compile-timeout-error-state.tsx deleted file mode 100644 index 6a301a9635..0000000000 --- a/services/web/frontend/js/features/ide-redesign/components/pdf-preview/pdf-error-state/compile-timeout-error-state.tsx +++ /dev/null @@ -1,227 +0,0 @@ -import OLButton from '@/shared/components/ol/ol-button' -import MaterialIcon from '@/shared/components/material-icon' -import { Trans, useTranslation } from 'react-i18next' -import { useDetachCompileContext as useCompileContext } from '@/shared/context/detach-compile-context' -import { useStopOnFirstError } from '@/shared/hooks/use-stop-on-first-error' -import { sendMB } from '@/infrastructure/event-tracking' -import { useCallback, useMemo } from 'react' -import ErrorState from './error-state' -import StartFreeTrialButton from '@/shared/components/start-free-trial-button' -import getMeta from '@/utils/meta' -import { populateEditorRedesignSegmentation } from '@/shared/hooks/use-editor-analytics' -import { - isNewUser, - useIsNewEditorEnabled, -} from '@/features/ide-redesign/utils/new-editor-utils' -import { getSplitTestVariant, isSplitTestEnabled } from '@/utils/splitTestUtils' - -export const ShortCompileTimeoutErrorState = () => { - const { t } = useTranslation() - const { isProjectOwner } = useCompileContext() - const newEditor = useIsNewEditorEnabled() - const shouldHideCompileTimeoutInfo = isSplitTestEnabled( - 'compile-timeout-remove-info' - ) - - const { compileTimeout } = getMeta('ol-compileSettings') - const segmentation = useMemo( - () => - populateEditorRedesignSegmentation( - { - 'is-owner': isProjectOwner, - compileTime: compileTimeout, - location: 'error-state', - }, - newEditor - ), - [isProjectOwner, compileTimeout, newEditor] - ) - - const extraSearchParams = useMemo(() => { - if (!isNewUser()) { - return undefined - } - - const variant = getSplitTestVariant('editor-redesign-new-users') - - if (!variant) { - return undefined - } - - return { - itm_content: variant, - } - }, []) - - return ( - -

- {isProjectOwner - ? t('your_project_exceeded_compile_timeout_limit_on_free_plan') - : t('this_project_exceeded_compile_timeout_limit_on_free_plan')} -

- {isProjectOwner ? ( -

- {t('upgrade_for_more_compile_time')}{' '} - {t( - 'plus_additional_collaborators_document_history_track_changes_and_more' - )} -

- ) : ( - , - ]} - /> - )} - - } - iconType="running_with_errors" - extraContent={ - !shouldHideCompileTimeoutInfo && ( -
- -
- ) - } - actions={ - isProjectOwner && ( - - {t('start_a_free_trial')} - - ) - } - /> - ) -} - -export const LongCompileTimeoutErrorState = () => { - const { t } = useTranslation() - - return ( - - - - } - /> - ) -} - -const ReasonsForTimeoutInfo = () => { - const { t } = useTranslation() - - const { enableStopOnFirstError } = useStopOnFirstError({ - eventSource: 'timeout', - }) - const { startCompile, lastCompileOptions, setAnimateCompileDropdownArrow } = - useCompileContext() - - const handleEnableStopOnFirstErrorClick = useCallback(() => { - enableStopOnFirstError() - startCompile({ stopOnFirstError: true }) - setAnimateCompileDropdownArrow(true) - }, [enableStopOnFirstError, startCompile, setAnimateCompileDropdownArrow]) - - return ( - <> -
- - {t('common_causes_of_compile_timeouts_include')}: -
-
-
    -
  • - { - sendMB('paywall-info-click', { - 'paywall-type': 'compile-timeout', - content: 'docs', - type: 'optimize', - }) - }} - />, - ]} - /> -
  • -
  • - { - sendMB('paywall-info-click', { - 'paywall-type': 'compile-timeout', - content: 'docs', - type: 'fatal-error', - }) - }} - />, - ]} - /> - {!lastCompileOptions.stopOnFirstError && ( - <> - {' '} - , - // eslint-disable-next-line react/jsx-key - , - ]} - /> - - )} -
  • -
-

- { - sendMB('paywall-info-click', { - 'paywall-type': 'compile-timeout', - content: 'docs', - type: 'learn-more', - }) - }} - />, - ]} - /> -

-
- - ) -} diff --git a/services/web/frontend/js/features/ide-redesign/components/pdf-preview/pdf-error-state/error-state.tsx b/services/web/frontend/js/features/ide-redesign/components/pdf-preview/pdf-error-state/error-state.tsx deleted file mode 100644 index 2449d3737e..0000000000 --- a/services/web/frontend/js/features/ide-redesign/components/pdf-preview/pdf-error-state/error-state.tsx +++ /dev/null @@ -1,65 +0,0 @@ -import { useRailContext } from '@/features/ide-redesign/contexts/rail-context' -import { sendMB } from '@/infrastructure/event-tracking' -import MaterialIcon from '@/shared/components/material-icon' -import OLButton from '@/shared/components/ol/ol-button' -import classNames from 'classnames' -import { useCallback } from 'react' -import { useTranslation } from 'react-i18next' -import { useDetachCompileContext as useCompileContext } from '@/shared/context/detach-compile-context' - -export default function ErrorState({ - title, - description, - iconType = 'warning', - actions, - iconClassName, - extraContent, -}: { - title: string - description?: React.ReactNode - iconType?: string - actions?: React.ReactNode - iconClassName?: string - extraContent?: React.ReactNode -}) { - return ( -
-
-
- -
-
-

{title}

- {description && ( -

{description}

- )} -
- {actions} -
- {extraContent} -
- ) -} - -export const CheckLogsButton = () => { - const { t } = useTranslation() - const { openTab: openRailTab } = useRailContext() - const { error } = useCompileContext() - - const onClick = useCallback(() => { - openRailTab('errors') - sendMB('check-logs-click', { error }) - }, [openRailTab, error]) - - return ( - - {t('check_error_logs')} - - ) -} diff --git a/services/web/frontend/js/features/ide-redesign/components/pdf-preview/pdf-error-state/general-error-state.tsx b/services/web/frontend/js/features/ide-redesign/components/pdf-preview/pdf-error-state/general-error-state.tsx deleted file mode 100644 index a4ffe98c11..0000000000 --- a/services/web/frontend/js/features/ide-redesign/components/pdf-preview/pdf-error-state/general-error-state.tsx +++ /dev/null @@ -1,64 +0,0 @@ -import { Trans, useTranslation } from 'react-i18next' -import ErrorState, { CheckLogsButton } from './error-state' -import MaterialIcon from '@/shared/components/material-icon' -import { useDetachCompileContext as useCompileContext } from '@/shared/context/detach-compile-context' - -export default function GeneralErrorState() { - const { logEntries } = useCompileContext() - const hasErrors = (logEntries?.errors?.length || 0) > 0 - - if (hasErrors) { - return - } - - return -} - -function GeneralErrorStateWithErrors() { - const { t } = useTranslation() - - return ( - } - /> - ) -} - -function GeneralErrorStateWithoutErrors() { - const { t } = useTranslation() - - return ( - } - extraContent={ -
-
- - {t('why_might_this_happen')} -
-
-
    -
  • {t('there_is_a_latex_error_check_logs')}
  • -
  • - , - ]} - /> -
  • -
  • {t('this_project_contains_a_file_called_output_pdf')}
  • -
-
-
- } - /> - ) -} diff --git a/services/web/frontend/js/features/ide-redesign/components/pdf-preview/pdf-error-state/pdf-error-state.tsx b/services/web/frontend/js/features/ide-redesign/components/pdf-preview/pdf-error-state/pdf-error-state.tsx deleted file mode 100644 index c7f3cb91ac..0000000000 --- a/services/web/frontend/js/features/ide-redesign/components/pdf-preview/pdf-error-state/pdf-error-state.tsx +++ /dev/null @@ -1,148 +0,0 @@ -import { Trans, useTranslation } from 'react-i18next' -import { usePdfPreviewContext } from '@/features/pdf-preview/components/pdf-preview-provider' -import { useDetachCompileContext as useCompileContext } from '@/shared/context/detach-compile-context' -import { useIsNewEditorEnabled } from '../../../utils/new-editor-utils' -import ErrorState, { CheckLogsButton } from './error-state' -import { - LongCompileTimeoutErrorState, - ShortCompileTimeoutErrorState, -} from './compile-timeout-error-state' -import GeneralErrorState from './general-error-state' -import RenderingErrorExpectedState from './rendering-error-expected-state' -import RenderingErrorState from './rendering-error-state' -import getMeta from '@/utils/meta' - -// AvailableStates -// - rendering-error-expected -// - rendering-error -// - clsi-maintenance -// - clsi-unavailable -// - too-recently-compiled -// - terminated -// - rate-limited -// - compile-in-progress -// - autocompile-disabled -// - project-too-large -// - timedout -// - failure -// - clear-cache -// - pdf-viewer-loading-error -// - validation-problems -function PdfErrorState() { - const { loadingError } = usePdfPreviewContext() - // TODO ide-redesign-cleanup: rename showLogs to something else and check usages - const { error, showLogs } = useCompileContext() - const { compileTimeout } = getMeta('ol-compileSettings') - - const newEditor = useIsNewEditorEnabled() - const { t } = useTranslation() - - if (!newEditor || (!loadingError && !showLogs)) { - return null - } - - switch (error) { - case 'timedout': { - if (compileTimeout < 60) { - return - } else { - return - } - } - case 'compile-in-progress': - return ( - - ) - case 'clsi-maintenance': - return ( - - ) - case 'clsi-unavailable': - return ( - - ) - case 'too-recently-compiled': - return ( - - ) - case 'terminated': - return ( - } - /> - ) - case 'rate-limited': - return ( - - ) - case 'autocompile-disabled': - return ( - - ) - case 'project-too-large': - return ( - - ) - case 'clear-cache': - return ( - - ) - case 'pdf-viewer-loading-error': - return ( - , - // eslint-disable-next-line jsx-a11y/anchor-has-content - , - // eslint-disable-next-line jsx-a11y/anchor-has-content - , - ]} - /> - } - /> - ) - case 'rendering-error-expected': - return - case 'rendering-error': - return - default: - return - } -} - -export default PdfErrorState diff --git a/services/web/frontend/js/features/ide-redesign/components/pdf-preview/pdf-error-state/rendering-error-expected-state.tsx b/services/web/frontend/js/features/ide-redesign/components/pdf-preview/pdf-error-state/rendering-error-expected-state.tsx deleted file mode 100644 index 3ff36e0127..0000000000 --- a/services/web/frontend/js/features/ide-redesign/components/pdf-preview/pdf-error-state/rendering-error-expected-state.tsx +++ /dev/null @@ -1,36 +0,0 @@ -import { Trans, useTranslation } from 'react-i18next' -import ErrorState from './error-state' -import OLButton from '@/shared/components/ol/ol-button' -import { useDetachCompileContext as useCompileContext } from '@/shared/context/detach-compile-context' -import ClsiCachePrompt from '@/features/pdf-preview/components/clsi-cache-prompt' - -export default function RenderingErrorExpectedState() { - const { t } = useTranslation() - - const { startCompile } = useCompileContext() - - return ( - , - ]} - /> - } - actions={ - startCompile()}> - {t('recompile')} - - } - extraContent={} - /> - ) -} diff --git a/services/web/frontend/js/features/ide-redesign/components/pdf-preview/pdf-error-state/rendering-error-state.tsx b/services/web/frontend/js/features/ide-redesign/components/pdf-preview/pdf-error-state/rendering-error-state.tsx deleted file mode 100644 index a43b23d3b7..0000000000 --- a/services/web/frontend/js/features/ide-redesign/components/pdf-preview/pdf-error-state/rendering-error-state.tsx +++ /dev/null @@ -1,55 +0,0 @@ -import { Trans, useTranslation } from 'react-i18next' -import ErrorState from './error-state' -import getMeta from '@/utils/meta' - -export default function RenderingErrorState() { - const { t } = useTranslation() - - return ( - - {t('something_went_wrong_rendering_pdf')} -   - , - ]} - /> - {getMeta('ol-compilesUserContentDomain') && ( - <> -
-
- , - /* eslint-disable-next-line jsx-a11y/anchor-has-content */ -
, - ]} - /> - - )} - - } - /> - ) -} diff --git a/services/web/frontend/js/features/ide-redesign/components/pdf-preview/pdf-preview-hybrid-toolbar.tsx b/services/web/frontend/js/features/ide-redesign/components/pdf-preview/pdf-preview-hybrid-toolbar.tsx index 3b4c2d5866..654b32c1f1 100644 --- a/services/web/frontend/js/features/ide-redesign/components/pdf-preview/pdf-preview-hybrid-toolbar.tsx +++ b/services/web/frontend/js/features/ide-redesign/components/pdf-preview/pdf-preview-hybrid-toolbar.tsx @@ -6,11 +6,9 @@ import PdfHybridDownloadButton from '@/features/pdf-preview/components/pdf-hybri import { DetachedSynctexControl } from '@/features/pdf-preview/components/detach-synctex-control' import SwitchToEditorButton from '@/features/pdf-preview/components/switch-to-editor-button' import PdfHybridLogsButton from '@/features/pdf-preview/components/pdf-hybrid-logs-button' -import { useIsNewErrorLogsPositionEnabled } from '../../utils/new-editor-utils' function PdfPreviewHybridToolbar() { const { t } = useTranslation() - const newErrorLogsPosition = useIsNewErrorLogsPositionEnabled() // TODO: add detached pdf logic return ( @@ -20,7 +18,7 @@ function PdfPreviewHybridToolbar() { >
- {!newErrorLogsPosition && } +
diff --git a/services/web/frontend/js/features/ide-redesign/components/rail/rail-panel.tsx b/services/web/frontend/js/features/ide-redesign/components/rail/rail-panel.tsx index 3b8902ca9c..8d6e2285c8 100644 --- a/services/web/frontend/js/features/ide-redesign/components/rail/rail-panel.tsx +++ b/services/web/frontend/js/features/ide-redesign/components/rail/rail-panel.tsx @@ -36,7 +36,7 @@ export default function RailPanel({ id={`ide-redesign-sidebar-panel-${isHistoryView ? 'file-tree' : selectedTab}`} className={classNames({ hidden: isReviewPanelOpen })} order={1} - defaultSize={selectedTab === 'errors' ? 20 : 15} + defaultSize={15} minSize={5} maxSize={80} ref={panelRef} diff --git a/services/web/frontend/js/features/ide-redesign/components/rail/rail.tsx b/services/web/frontend/js/features/ide-redesign/components/rail/rail.tsx index a5d43cfd88..56efbcacd8 100644 --- a/services/web/frontend/js/features/ide-redesign/components/rail/rail.tsx +++ b/services/web/frontend/js/features/ide-redesign/components/rail/rail.tsx @@ -1,8 +1,7 @@ -import { useCallback, useMemo } from 'react' +import { useCallback, useEffect, useMemo } from 'react' import { useTranslation } from 'react-i18next' import { Nav, TabContainer } from 'react-bootstrap' import { useLayoutContext } from '@/shared/context/layout-context' -import ErrorIndicator from '../error-logs/error-indicator' import { RailTabKey, useRailContext } from '../../contexts/rail-context' import FileTreeOutlinePanel from '../file-tree/file-tree-outline-panel' import { ChatIndicator, ChatPane } from '../chat/chat' @@ -16,8 +15,6 @@ import { hasFullProjectSearch, } from '../full-project-search-panel' import { sendSearchEvent } from '@/features/event-tracking/search-events' -import ErrorLogsPanel from '../error-logs/error-logs-panel' -import { useDetachCompileContext as useCompileContext } from '@/shared/context/detach-compile-context' import { useProjectContext } from '@/shared/context/project-context' import { useCommandProvider } from '@/features/ide-react/hooks/use-command-provider' import RailHelpDropdown from './rail-help-dropdown' @@ -29,15 +26,12 @@ import RailResizeHandle from './rail-resize-handle' import RailModals from './rail-modals' import RailOverflowDropdown from './rail-overflow-dropdown' import useRailOverflow from '../../hooks/use-rail-overflow' -import { useIsNewErrorLogsPositionEnabled } from '../../utils/new-editor-utils' export const RailLayout = () => { const { sendEvent } = useEditorAnalytics() const { t } = useTranslation() const { selectedTab, openTab, isOpen, togglePane } = useRailContext() - const { logEntries } = useCompileContext() const { features } = useProjectContext() - const errorLogsDisabled = !logEntries const { view, setLeftMenuShown } = useLayoutContext() @@ -45,8 +39,6 @@ export const RailLayout = () => { const isHistoryView = view === 'history' - const newErrorlogsPosition = useIsNewErrorLogsPositionEnabled() - const railTabs: RailElement[] = useMemo( () => [ { @@ -87,23 +79,8 @@ export const RailLayout = () => { title: t('chat'), hide: !getMeta('ol-capabilities')?.includes('chat'), }, - { - key: 'errors', - icon: 'report', - title: t('error_log'), - component: , - indicator: , - disabled: errorLogsDisabled, - hide: !newErrorlogsPosition, - }, ], - [ - t, - features.trackChangesVisible, - newErrorlogsPosition, - errorLogsDisabled, - view, - ] + [t, features.trackChangesVisible, view] ) const railActions: RailAction[] = useMemo( @@ -172,6 +149,15 @@ export const RailLayout = () => { [openTab, togglePane, selectedTab, railTabs, sendEvent, markMessagesAsRead] ) + useEffect(() => { + const validTabKeys = railTabs.filter(tab => !tab.hide).map(tab => tab.key) + if (!validTabKeys.includes(selectedTab) && isOpen) { + // If the selected tab is no longer valid (e.g. due to permissions changes), + // switch back to the file tree + openTab('file-tree') + } + }, [railTabs, selectedTab, openTab, isOpen]) + const isReviewPanelOpen = selectedTab === 'review-panel' && isOpen && !isHistoryView @@ -208,7 +194,7 @@ export const RailLayout = () => { Therefore, we nest them: the parent