cherry-studio/src/renderer/src/components/Popups/ObsidianExportPopup.tsx
Dawn-spring 1e4d6f196f
refactor: 改进 Obsidian 导出,不再依赖 Obsidian 第三方插件 (#3637)
改进 Obsidian 导出,不在依赖 Obsidian 第三方插件
2025-03-22 10:11:49 +08:00

57 lines
1.6 KiB
TypeScript

import ObsidianExportDialog from '@renderer/components/ObsidianExportDialog'
import i18n from '@renderer/i18n'
import store from '@renderer/store'
import { createRoot } from 'react-dom/client'
interface ObsidianExportOptions {
title: string
markdown: string
processingMethod: string | '3' // 默认新增(存在就覆盖)
}
/**
* 配置Obsidian 笔记属性弹窗
* @param options.title 标题
* @param options.markdown markdown内容
* @param options.processingMethod 处理方式
* @returns
*/
const showObsidianExportDialog = async (options: ObsidianExportOptions): Promise<boolean> => {
const obsidianValut = store.getState().settings.obsidianValut
const obsidianFolder = store.getState().settings.obsidianFolder
if (!obsidianValut || !obsidianFolder) {
window.message.error(i18n.t('chat.topics.export.obsidian_not_configured'))
return false
}
return new Promise<boolean>((resolve) => {
const div = document.createElement('div')
document.body.appendChild(div)
const root = createRoot(div)
const handleClose = (success: boolean) => {
root.unmount()
document.body.removeChild(div)
resolve(success)
}
const obsidianTags = store.getState().settings.obsidianTages
root.render(
<ObsidianExportDialog
title={options.title}
markdown={options.markdown}
obsidianTags={obsidianTags}
processingMethod={options.processingMethod}
open={true}
onClose={handleClose}
/>
)
})
}
const ObsidianExportPopup = {
show: showObsidianExportDialog
}
export default ObsidianExportPopup