From 9a96fd4788e5bfaa15f74ac5e42184184364c4c1 Mon Sep 17 00:00:00 2001 From: ItzCrazyKns Date: Sun, 23 Jun 2024 10:46:22 +0530 Subject: [PATCH] feat(message-input): focus on `/` key --- ui/components/EmptyChatMessageInput.tsx | 20 +++++++++++++++++++- ui/components/MessageInput.tsx | 20 +++++++++++++++++++- 2 files changed, 38 insertions(+), 2 deletions(-) diff --git a/ui/components/EmptyChatMessageInput.tsx b/ui/components/EmptyChatMessageInput.tsx index 37ecc8f..0ff9b2e 100644 --- a/ui/components/EmptyChatMessageInput.tsx +++ b/ui/components/EmptyChatMessageInput.tsx @@ -1,5 +1,5 @@ import { ArrowRight } from 'lucide-react'; -import { useState } from 'react'; +import { useEffect, useRef, useState } from 'react'; import TextareaAutosize from 'react-textarea-autosize'; import CopilotToggle from './MessageInputActions/Copilot'; import Focus from './MessageInputActions/Focus'; @@ -16,6 +16,23 @@ const EmptyChatMessageInput = ({ const [copilotEnabled, setCopilotEnabled] = useState(false); const [message, setMessage] = useState(''); + const inputRef = useRef(null); + + const handleKeyDown = (e: KeyboardEvent) => { + if (e.key === '/') { + e.preventDefault(); + inputRef.current?.focus(); + } + }; + + useEffect(() => { + document.addEventListener('keydown', handleKeyDown); + + return () => { + document.removeEventListener('keydown', handleKeyDown); + }; + }, []); + return (
{ @@ -34,6 +51,7 @@ const EmptyChatMessageInput = ({ >
setMessage(e.target.value)} minRows={2} diff --git a/ui/components/MessageInput.tsx b/ui/components/MessageInput.tsx index 7b54ea5..2229cdf 100644 --- a/ui/components/MessageInput.tsx +++ b/ui/components/MessageInput.tsx @@ -1,6 +1,6 @@ import { cn } from '@/lib/utils'; import { ArrowUp } from 'lucide-react'; -import { useEffect, useState } from 'react'; +import { useEffect, useRef, useState } from 'react'; import TextareaAutosize from 'react-textarea-autosize'; import Attach from './MessageInputActions/Attach'; import CopilotToggle from './MessageInputActions/Copilot'; @@ -25,6 +25,23 @@ const MessageInput = ({ } }, [textareaRows, mode, message]); + const inputRef = useRef(null); + + const handleKeyDown = (e: KeyboardEvent) => { + if (e.key === '/') { + e.preventDefault(); + inputRef.current?.focus(); + } + }; + + useEffect(() => { + document.addEventListener('keydown', handleKeyDown); + + return () => { + document.removeEventListener('keydown', handleKeyDown); + }; + }, []); + return ( { @@ -47,6 +64,7 @@ const MessageInput = ({ > {mode === 'single' && } setMessage(e.target.value)} onHeightChange={(height, props) => {