@@ -16,6 +16,7 @@ import { TextareaAutosize } from "../ui/textarea-autosize"
16
16
import { ChatCommandInput } from "./chat-command-input"
17
17
import { ChatFilesDisplay } from "./chat-files-display"
18
18
import { useChatHandler } from "./chat-hooks/use-chat-handler"
19
+ import { useChatHistoryHandler } from "./chat-hooks/use-chat-history"
19
20
import { usePromptAndCommand } from "./chat-hooks/use-prompt-and-command"
20
21
import { useSelectFileHandler } from "./chat-hooks/use-select-file-handler"
21
22
@@ -66,6 +67,11 @@ export const ChatInput: FC<ChatInputProps> = ({}) => {
66
67
67
68
const { filesToAccept, handleSelectDeviceFile } = useSelectFileHandler ( )
68
69
70
+ const {
71
+ setNewMessageContentToNextUserMessage,
72
+ setNewMessageContentToPreviousUserMessage
73
+ } = useChatHistoryHandler ( )
74
+
69
75
const fileInputRef = useRef < HTMLInputElement > ( null )
70
76
71
77
useEffect ( ( ) => {
@@ -81,34 +87,46 @@ export const ChatInput: FC<ChatInputProps> = ({}) => {
81
87
handleSendMessage ( userInput , chatMessages , false )
82
88
}
83
89
90
+ // Consolidate conditions to avoid TypeScript error
84
91
if (
85
- isPromptPickerOpen &&
86
- ( event . key === "Tab" ||
87
- event . key === "ArrowUp" ||
88
- event . key === "ArrowDown" )
92
+ isPromptPickerOpen ||
93
+ isFilePickerOpen ||
94
+ isToolPickerOpen ||
95
+ isAssistantPickerOpen
89
96
) {
97
+ if (
98
+ event . key === "Tab" ||
99
+ event . key === "ArrowUp" ||
100
+ event . key === "ArrowDown"
101
+ ) {
102
+ event . preventDefault ( )
103
+ // Toggle focus based on picker type
104
+ if ( isPromptPickerOpen ) setFocusPrompt ( ! focusPrompt )
105
+ if ( isFilePickerOpen ) setFocusFile ( ! focusFile )
106
+ if ( isToolPickerOpen ) setFocusTool ( ! focusTool )
107
+ if ( isAssistantPickerOpen ) setFocusAssistant ( ! focusAssistant )
108
+ }
109
+ }
110
+
111
+ if ( event . key === "ArrowUp" && event . shiftKey && event . ctrlKey ) {
90
112
event . preventDefault ( )
91
- setFocusPrompt ( ! focusPrompt )
113
+ setNewMessageContentToPreviousUserMessage ( )
92
114
}
93
115
94
- if (
95
- isFilePickerOpen &&
96
- ( event . key === "Tab" ||
97
- event . key === "ArrowUp" ||
98
- event . key === "ArrowDown" )
99
- ) {
116
+ if ( event . key === "ArrowDown" && event . shiftKey && event . ctrlKey ) {
100
117
event . preventDefault ( )
101
- setFocusFile ( ! focusFile )
118
+ setNewMessageContentToNextUserMessage ( )
102
119
}
103
120
104
- if (
105
- isToolPickerOpen &&
106
- ( event . key === "Tab" ||
107
- event . key === "ArrowUp" ||
108
- event . key === "ArrowDown" )
109
- ) {
121
+ //use shift+ctrl+up and shift+ctrl+down to navigate through chat history
122
+ if ( event . key === "ArrowUp" && event . shiftKey && event . ctrlKey ) {
123
+ event . preventDefault ( )
124
+ setNewMessageContentToPreviousUserMessage ( )
125
+ }
126
+
127
+ if ( event . key === "ArrowDown" && event . shiftKey && event . ctrlKey ) {
110
128
event . preventDefault ( )
111
- setFocusTool ( ! focusTool )
129
+ setNewMessageContentToNextUserMessage ( )
112
130
}
113
131
114
132
if (
0 commit comments