feat: add inline AI prompts to command palette
This commit is contained in:
44
src/components/useAiPanelPromptQueue.ts
Normal file
44
src/components/useAiPanelPromptQueue.ts
Normal file
@@ -0,0 +1,44 @@
|
||||
import { startTransition, useCallback, useEffect, useState } from 'react'
|
||||
import type { NoteReference } from '../utils/ai-context'
|
||||
import type { QueuedAiPrompt } from '../utils/aiPromptBridge'
|
||||
import { useQueuedAiPrompt } from './useQueuedAiPrompt'
|
||||
|
||||
interface AiAgentBridge {
|
||||
clearConversation: () => void
|
||||
sendMessage: (text: string, references: NoteReference[]) => void
|
||||
}
|
||||
|
||||
interface UseAiPanelPromptQueueArgs {
|
||||
agent: AiAgentBridge
|
||||
input: string
|
||||
isActive: boolean
|
||||
setInput: (value: string) => void
|
||||
}
|
||||
|
||||
export function useAiPanelPromptQueue({
|
||||
agent,
|
||||
input,
|
||||
isActive,
|
||||
setInput,
|
||||
}: UseAiPanelPromptQueueArgs) {
|
||||
const [queuedPrompt, setQueuedPrompt] = useState<QueuedAiPrompt | null>(null)
|
||||
|
||||
const handleQueuedPrompt = useCallback((prompt: QueuedAiPrompt) => {
|
||||
setInput(prompt.text)
|
||||
setQueuedPrompt(prompt)
|
||||
agent.clearConversation()
|
||||
}, [agent, setInput])
|
||||
|
||||
useQueuedAiPrompt(handleQueuedPrompt)
|
||||
|
||||
useEffect(() => {
|
||||
if (!queuedPrompt || isActive) return
|
||||
if (input !== queuedPrompt.text) return
|
||||
|
||||
agent.sendMessage(queuedPrompt.text, queuedPrompt.references)
|
||||
startTransition(() => {
|
||||
setInput('')
|
||||
setQueuedPrompt(null)
|
||||
})
|
||||
}, [agent, input, isActive, queuedPrompt, setInput])
|
||||
}
|
||||
Reference in New Issue
Block a user