优化 代码块主题

This commit is contained in:
tianyaxiang 2025-02-02 10:44:38 +08:00
parent 5938930cdb
commit a6f8d32ae0
2 changed files with 38 additions and 8 deletions

View File

@ -53,7 +53,7 @@ export default function WechatEditor() {
const [readingTime, setReadingTime] = useState('1 分钟') const [readingTime, setReadingTime] = useState('1 分钟')
// 添加 codeTheme 状态 // 添加 codeTheme 状态
const [codeTheme] = useLocalStorage<CodeThemeId>('code-theme', codeThemes[0].id) const [codeTheme, setCodeTheme] = useLocalStorage<CodeThemeId>('code-theme', codeThemes[0].id)
// 使用自定义 hooks // 使用自定义 hooks
const { handleScroll } = useEditorSync(editorRef) const { handleScroll } = useEditorSync(editorRef)
@ -484,6 +484,26 @@ export default function WechatEditor() {
} }
}, [handleEditorChange, toast]) }, [handleEditorChange, toast])
// 处理代码主题变化
const handleCodeThemeChange = useCallback((theme: CodeThemeId) => {
setCodeTheme(theme)
// 立即重新生成预览内容
setIsConverting(true)
try {
const content = getPreviewContent()
setPreviewContent(content)
} catch (error) {
console.error('Error updating preview:', error)
toast({
variant: "destructive",
title: "预览更新失败",
description: "生成预览内容时发生错误",
})
} finally {
setIsConverting(false)
}
}, [getPreviewContent, toast])
return ( return (
<div className="h-screen flex flex-col overflow-hidden"> <div className="h-screen flex flex-col overflow-hidden">
<div className="hidden sm:block"> <div className="hidden sm:block">
@ -502,6 +522,10 @@ export default function WechatEditor() {
onStyleOptionsChange={setStyleOptions} onStyleOptionsChange={setStyleOptions}
onPreviewToggle={() => setShowPreview(!showPreview)} onPreviewToggle={() => setShowPreview(!showPreview)}
styleOptions={styleOptions} styleOptions={styleOptions}
wordCount={wordCount}
readingTime={readingTime}
codeTheme={codeTheme}
onCodeThemeChange={handleCodeThemeChange}
/> />
</div> </div>

View File

@ -8,7 +8,7 @@ import { TemplateManager } from '../../template/TemplateManager'
import { StyleConfigDialog } from '../StyleConfigDialog' import { StyleConfigDialog } from '../StyleConfigDialog'
import { ArticleList } from '../ArticleList' import { ArticleList } from '../ArticleList'
import { type Article } from '../constants' import { type Article } from '../constants'
import { type RendererOptions } from '@/lib/markdown' import { type RendererOptions } from '@/lib/types'
import { ThemeToggle } from '@/components/theme/ThemeToggle' import { ThemeToggle } from '@/components/theme/ThemeToggle'
import { Logo } from '@/components/icons/Logo' import { Logo } from '@/components/icons/Logo'
import Link from 'next/link' import Link from 'next/link'
@ -24,16 +24,18 @@ interface EditorToolbarProps {
isDraft: boolean isDraft: boolean
showPreview: boolean showPreview: boolean
selectedTemplate: string selectedTemplate: string
styleOptions: RendererOptions
codeTheme: CodeThemeId
onSave: () => void onSave: () => void
onCopy: () => Promise<boolean> onCopy: () => Promise<boolean>
onCopyPreview: () => Promise<boolean> onCopyPreview: () => Promise<boolean>
onNewArticle: () => void onNewArticle: () => void
onArticleSelect: (article: Article) => void onArticleSelect: (article: { content: string, template: string }) => void
onTemplateSelect: (template: string) => void onTemplateSelect: (templateId: string) => void
onTemplateChange: () => void onTemplateChange: () => void
onStyleOptionsChange: (options: RendererOptions) => void onStyleOptionsChange: (options: RendererOptions) => void
onPreviewToggle: () => void onPreviewToggle: () => void
styleOptions: RendererOptions onCodeThemeChange: (theme: CodeThemeId) => void
} }
export function EditorToolbar({ export function EditorToolbar({
@ -50,10 +52,11 @@ export function EditorToolbar({
onTemplateChange, onTemplateChange,
onStyleOptionsChange, onStyleOptionsChange,
onPreviewToggle, onPreviewToggle,
styleOptions styleOptions,
codeTheme,
onCodeThemeChange
}: EditorToolbarProps) { }: EditorToolbarProps) {
const { toast } = useToast() const { toast } = useToast()
const [codeTheme, setCodeTheme] = useLocalStorage<CodeThemeId>('code-theme', codeThemes[0].id)
const handleCopy = async () => { const handleCopy = async () => {
try { try {
@ -128,7 +131,10 @@ export function EditorToolbar({
value={selectedTemplate} value={selectedTemplate}
onSelect={onTemplateSelect} onSelect={onTemplateSelect}
/> />
<CodeThemeSelector value={codeTheme} onChange={setCodeTheme} /> <CodeThemeSelector
value={codeTheme}
onChange={onCodeThemeChange}
/>
<StyleConfigDialog <StyleConfigDialog
value={styleOptions} value={styleOptions}
onChangeAction={onStyleOptionsChange} onChangeAction={onStyleOptionsChange}