| | import { useEffect, useState } from 'react'; |
| | import { MessageExtraContext } from './types'; |
| |
|
| | |
| | |
| |
|
| | interface SetTextEvData { |
| | text: string; |
| | context: string; |
| | } |
| |
|
| | |
| | |
| | |
| | |
| |
|
| | export const useVSCodeContext = ( |
| | inputRef: React.RefObject<HTMLTextAreaElement>, |
| | setInputMsg: (text: string) => void |
| | ) => { |
| | const [extraContext, setExtraContext] = useState<MessageExtraContext | null>( |
| | null |
| | ); |
| |
|
| | |
| | useEffect(() => { |
| | const handleMessage = (event: MessageEvent) => { |
| | if (event.data?.command === 'setText') { |
| | const data: SetTextEvData = event.data; |
| | setInputMsg(data?.text); |
| | if (data?.context && data.context.length > 0) { |
| | setExtraContext({ |
| | type: 'context', |
| | content: data.context, |
| | }); |
| | } |
| | inputRef.current?.focus(); |
| | } |
| | }; |
| |
|
| | window.addEventListener('message', handleMessage); |
| | return () => window.removeEventListener('message', handleMessage); |
| | }, [inputRef, setInputMsg]); |
| |
|
| | |
| | useEffect(() => { |
| | const handleKeyDown = (event: KeyboardEvent) => { |
| | if (event.key === 'Escape') { |
| | window.parent.postMessage({ command: 'escapePressed' }, '*'); |
| | } |
| | }; |
| |
|
| | window.addEventListener('keydown', handleKeyDown); |
| | return () => window.removeEventListener('keydown', handleKeyDown); |
| | }, []); |
| |
|
| | return { |
| | extraContext, |
| | |
| | clearExtraContext: () => setExtraContext(null), |
| | }; |
| | }; |
| |
|