| 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), |
| }; |
| }; |
|
|