update apply diff

This commit is contained in:
duanfuxiang
2025-03-23 09:34:44 +08:00
parent 570e8d9564
commit 635db9babd
34 changed files with 3161 additions and 410 deletions

View File

@@ -9,6 +9,7 @@ import { AppProvider } from './contexts/AppContext'
import { DarkModeProvider } from './contexts/DarkModeContext'
import { DatabaseProvider } from './contexts/DatabaseContext'
import { DialogProvider } from './contexts/DialogContext'
import { DiffStrategyProvider } from './contexts/DiffStrategyContext'
import { LLMProvider } from './contexts/LLMContext'
import { RAGProvider } from './contexts/RAGContext'
import { SettingsProvider } from './contexts/SettingsContext'
@@ -17,101 +18,103 @@ import { MentionableBlockData } from './types/mentionable'
import { InfioSettings } from './types/settings'
export class ChatView extends ItemView {
private root: Root | null = null
private settings: InfioSettings
private initialChatProps?: ChatProps
private chatRef: React.RefObject<ChatRef> = React.createRef()
private root: Root | null = null
private settings: InfioSettings
private initialChatProps?: ChatProps
private chatRef: React.RefObject<ChatRef> = React.createRef()
constructor(
leaf: WorkspaceLeaf,
private plugin: InfioPlugin,
) {
super(leaf)
this.settings = plugin.settings
this.initialChatProps = plugin.initChatProps
}
constructor(
leaf: WorkspaceLeaf,
private plugin: InfioPlugin,
) {
super(leaf)
this.settings = plugin.settings
this.initialChatProps = plugin.initChatProps
}
getViewType() {
return CHAT_VIEW_TYPE
}
getViewType() {
return CHAT_VIEW_TYPE
}
getIcon() {
return 'wand-sparkles'
}
getIcon() {
return 'wand-sparkles'
}
getDisplayText() {
return 'Infio chat'
}
getDisplayText() {
return 'Infio chat'
}
async onOpen() {
await this.render()
async onOpen() {
await this.render()
// Consume chatProps
this.initialChatProps = undefined
}
// Consume chatProps
this.initialChatProps = undefined
}
async onClose() {
this.root?.unmount()
}
async onClose() {
this.root?.unmount()
}
async render() {
if (!this.root) {
this.root = createRoot(this.containerEl.children[1])
}
async render() {
if (!this.root) {
this.root = createRoot(this.containerEl.children[1])
}
const queryClient = new QueryClient({
defaultOptions: {
queries: {
gcTime: 0, // Immediately garbage collect queries. It prevents memory leak on ChatView close.
},
mutations: {
gcTime: 0, // Immediately garbage collect mutations. It prevents memory leak on ChatView close.
},
},
})
const queryClient = new QueryClient({
defaultOptions: {
queries: {
gcTime: 0, // Immediately garbage collect queries. It prevents memory leak on ChatView close.
},
mutations: {
gcTime: 0, // Immediately garbage collect mutations. It prevents memory leak on ChatView close.
},
},
})
this.root.render(
<AppProvider app={this.app}>
<SettingsProvider
settings={this.settings}
setSettings={(newSettings) => this.plugin.setSettings(newSettings)}
addSettingsChangeListener={(listener) =>
this.plugin.addSettingsListener(listener)
}
>
<DarkModeProvider>
<LLMProvider>
<DatabaseProvider
getDatabaseManager={() => this.plugin.getDbManager()}
>
<RAGProvider getRAGEngine={() => this.plugin.getRAGEngine()}>
<QueryClientProvider client={queryClient}>
<React.StrictMode>
<DialogProvider
container={this.containerEl.children[1] as HTMLElement}
>
<Chat ref={this.chatRef} {...this.initialChatProps} />
</DialogProvider>
</React.StrictMode>
</QueryClientProvider>
</RAGProvider>
</DatabaseProvider>
</LLMProvider>
</DarkModeProvider>
</SettingsProvider>
</AppProvider>,
)
}
this.root.render(
<AppProvider app={this.app}>
<SettingsProvider
settings={this.settings}
setSettings={(newSettings) => this.plugin.setSettings(newSettings)}
addSettingsChangeListener={(listener) =>
this.plugin.addSettingsListener(listener)
}
>
<DarkModeProvider>
<LLMProvider>
<DatabaseProvider
getDatabaseManager={() => this.plugin.getDbManager()}
>
<DiffStrategyProvider diffStrategy={this.plugin.diffStrategy}>
<RAGProvider getRAGEngine={() => this.plugin.getRAGEngine()}>
<QueryClientProvider client={queryClient}>
<React.StrictMode>
<DialogProvider
container={this.containerEl.children[1] as HTMLElement}
>
<Chat ref={this.chatRef} {...this.initialChatProps} />
</DialogProvider>
</React.StrictMode>
</QueryClientProvider>
</RAGProvider>
</DiffStrategyProvider>
</DatabaseProvider>
</LLMProvider>
</DarkModeProvider>
</SettingsProvider>
</AppProvider>,
)
}
openNewChat(selectedBlock?: MentionableBlockData) {
this.chatRef.current?.openNewChat(selectedBlock)
}
openNewChat(selectedBlock?: MentionableBlockData) {
this.chatRef.current?.openNewChat(selectedBlock)
}
addSelectionToChat(selectedBlock: MentionableBlockData) {
this.chatRef.current?.addSelectionToChat(selectedBlock)
}
addSelectionToChat(selectedBlock: MentionableBlockData) {
this.chatRef.current?.addSelectionToChat(selectedBlock)
}
focusMessage() {
this.chatRef.current?.focusMessage()
}
focusMessage() {
this.chatRef.current?.focusMessage()
}
}