diff --git a/src/renderer/src/components/editor/EditorPanelShell.header.test.tsx b/src/renderer/src/components/editor/EditorPanelShell.header.test.tsx index 2ea5003dbd4..547062c6204 100644 --- a/src/renderer/src/components/editor/EditorPanelShell.header.test.tsx +++ b/src/renderer/src/components/editor/EditorPanelShell.header.test.tsx @@ -10,7 +10,11 @@ vi.mock('./EditorPanelHeader', () => ({ })) vi.mock('./EditorContent', () => ({ - EditorContent: () =>
+ EditorContent: ({ onOpenMarkdownPreview }: { onOpenMarkdownPreview?: () => void }) => ( +
+ {onOpenMarkdownPreview && } +
+ ) })) vi.mock('./UntitledFileRenameDialog', () => ({ @@ -48,7 +52,7 @@ function renderShell(file: OpenFile, isCombinedDiff = false): string { availableEditorToggleModes: [], effectiveToggleValue: 'edit', canOpenPreviewToSide: false, - canShowMarkdownPreview: false, + canShowMarkdownPreview: file.language === 'markdown' && file.mode === 'edit', canShowMarkdownTableOfContents: false, isMarkdownTableOfContentsDisabled: false, shouldShowMarkdownExportAction: false, @@ -122,3 +126,9 @@ describe('EditorPanelShell path header', () => { expect(renderShell(openFile('edit'))).toContain('data-editor-content') }) }) + +it('offers Markdown preview through the shell even when HTML side preview is unavailable', () => { + const file = { ...openFile('edit'), language: 'markdown' } + expect(renderShell(file)).toContain('Open preview') + expect(renderShell(openFile('edit'))).not.toContain('Open preview') +}) diff --git a/src/renderer/src/components/editor/EditorPanelShell.tsx b/src/renderer/src/components/editor/EditorPanelShell.tsx index 48cfca89a2b..eadcb77e44e 100644 --- a/src/renderer/src/components/editor/EditorPanelShell.tsx +++ b/src/renderer/src/components/editor/EditorPanelShell.tsx @@ -163,7 +163,7 @@ export function EditorPanelShell({ showMarkdownFrontmatter={markdownFrontmatterVisible} onCloseMarkdownTableOfContents={onCloseMarkdownTableOfContents} markdownAnnotationsEnabled={markdownAnnotationsEnabled} - onOpenMarkdownPreview={model.canOpenPreviewToSide ? onOpenMarkdownPreview : undefined} + onOpenMarkdownPreview={model.canShowMarkdownPreview ? onOpenMarkdownPreview : undefined} /> { }) }) -it('hides disk preview while a fallback draft is unsaved', () => { +it('offers the live Markdown preview while a fallback draft is unsaved', () => { const model = renderModel({ editorDrafts: { '/repo/README.md': '[reference]: https://example.com' } }) - expect(model.availableEditorToggleModes).not.toContain('preview') + expect(model.availableEditorToggleModes).toContain('preview') + expect(model.canShowMarkdownPreview).toBe(true) expect(model.canOpenPreviewToSide).toBe(false) }) diff --git a/src/renderer/src/components/editor/editor-panel-render-model.ts b/src/renderer/src/components/editor/editor-panel-render-model.ts index af23a8557d2..e45cb9731bf 100644 --- a/src/renderer/src/components/editor/editor-panel-render-model.ts +++ b/src/renderer/src/components/editor/editor-panel-render-model.ts @@ -144,16 +144,11 @@ export function getEditorPanelRenderModel({ richModeEligibility !== null ? richModeEligibility.exceedsSizeLimit || richModeUnsupportedMessage !== null : richModeFaultedForCurrentContent - const hasUnsavedMarkdownDraft = - viewerLanguage === 'markdown' && - activeFile.mode === 'edit' && - editorDrafts[activeFile.id] !== undefined && - editorDrafts[activeFile.id] !== inlineFileContent?.content const editorToggleModes = getEditorToggleModes({ language: viewerLanguage, mode: activeFile.mode, diffSource: activeFile.diffSource, - richModeFallsBackToSource: richModeFallsBackToSource && !hasUnsavedMarkdownDraft + richModeFallsBackToSource }) const availableEditorToggleModes = isBinaryEditSurface || !canUseChangesModeForFile(activeFile) @@ -205,7 +200,6 @@ export function getEditorPanelRenderModel({ // files and commit diffs whose content may not match the working tree). canOpenPreviewToSide: canOpenWorkspaceFileBrowser && - !hasUnsavedMarkdownDraft && canPreviewLanguage(viewerLanguage) && (activeFile.mode === 'edit' || (isSingleDiff && openFileState.canOpen)), mdViewMode,