diff --git a/src/main.tsx b/src/main.tsx index b0cde97..807e8d2 100644 --- a/src/main.tsx +++ b/src/main.tsx @@ -96,7 +96,7 @@ export default class MyPlugin extends Plugin { const container = el.createDiv(); // 创建一个 MarkdownRenderChild 实例 - const reactComponent = new ReactDemo(container, source); + const reactComponent = new ReactDemo(container, source,this.app); ctx.addChild(reactComponent); }); diff --git a/src/pages/ReactDemo.tsx b/src/pages/ReactDemo.tsx index 91ac185..d845613 100644 --- a/src/pages/ReactDemo.tsx +++ b/src/pages/ReactDemo.tsx @@ -10,10 +10,7 @@ export default class ReactComponent extends MarkdownRenderChild { root: Root; container: HTMLElement; - - - - constructor(container: HTMLElement, private source: string) { + constructor(container: HTMLElement, private source: string, private app: App) { super(container); this.container = container; } @@ -28,6 +25,6 @@ export default class ReactComponent extends MarkdownRenderChild { // 使用 createRoot 渲染 React 组件 const root = createRoot(this.container); - root.render(); + root.render(); } } diff --git a/src/pages/TableDemo.tsx b/src/pages/TableDemo.tsx index 03f556b..789c02d 100644 --- a/src/pages/TableDemo.tsx +++ b/src/pages/TableDemo.tsx @@ -5,7 +5,8 @@ import {Button, Dropdown, Space, Tag} from 'antd'; import {useEffect, useRef} from 'react'; import React from 'react'; import request from 'umi-request'; -import { getAPI } from 'obsidian-dataview'; +import {getAPI} from 'obsidian-dataview'; +import {App,Workspace} from "obsidian"; export const waitTimePromise = async (time: number = 100) => { return new Promise((resolve) => { @@ -39,37 +40,11 @@ type GithubIssueItem = { text: string; }; -const columns: ProColumns[] = [ - { - dataIndex: 'index', - valueType: 'indexBorder', - width: 48, - }, - { - title: '标题', - render: (_, record) => ( - - {record.header.path} - - ), - }, - { - title: '文本', - dataIndex: 'text', - filters: true, - onFilter: true, - ellipsis: true, - render: (_, record) => ( - console.log("record",record), - - {record.text} - - ), - }, -]; - -export default () => { +interface MyReactComponentProps { + app: any; // Obsidian的App对象 +} +const MyReactComponent: React.FC = ({ app }) => { const actionRef = useRef(); const dataviewAPI = getAPI(); @@ -83,6 +58,44 @@ export default () => { setData(data); }, []); + const columns: ProColumns[] = [ + { + dataIndex: 'index', + valueType: 'indexBorder', + width: 48, + }, + { + title: '标题', + render: (_, record) => ( + console.log("record",_), + { + // 调用 Obsidian API + const file = app.vault.getAbstractFileByPath(record.header.path); + if (file) { + app.workspace.activeLeaf?.openFile(file); + } + }} > + {record.header.path} + + + ), + }, + { + title: '文本', + dataIndex: 'text', + filters: true, + onFilter: true, + ellipsis: true, + render: (_, record) => ( + console.log("record",record), + + {record.text} + + + ), + }, + ]; + return ( columns={columns} @@ -167,3 +180,4 @@ export default () => { /> ); }; +export default MyReactComponent;