mirror of
				https://github.com/ItzCrazyKns/Perplexica.git
				synced 2025-11-04 04:38:15 +00:00 
			
		
		
		
	feat(message-input): focus on / key
				
					
				
			This commit is contained in:
		@@ -1,5 +1,5 @@
 | 
				
			|||||||
import { ArrowRight } from 'lucide-react';
 | 
					import { ArrowRight } from 'lucide-react';
 | 
				
			||||||
import { useState } from 'react';
 | 
					import { useEffect, useRef, useState } from 'react';
 | 
				
			||||||
import TextareaAutosize from 'react-textarea-autosize';
 | 
					import TextareaAutosize from 'react-textarea-autosize';
 | 
				
			||||||
import CopilotToggle from './MessageInputActions/Copilot';
 | 
					import CopilotToggle from './MessageInputActions/Copilot';
 | 
				
			||||||
import Focus from './MessageInputActions/Focus';
 | 
					import Focus from './MessageInputActions/Focus';
 | 
				
			||||||
@@ -16,6 +16,23 @@ const EmptyChatMessageInput = ({
 | 
				
			|||||||
  const [copilotEnabled, setCopilotEnabled] = useState(false);
 | 
					  const [copilotEnabled, setCopilotEnabled] = useState(false);
 | 
				
			||||||
  const [message, setMessage] = useState('');
 | 
					  const [message, setMessage] = useState('');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  const inputRef = useRef<HTMLTextAreaElement | null>(null);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  const handleKeyDown = (e: KeyboardEvent) => {
 | 
				
			||||||
 | 
					    if (e.key === '/') {
 | 
				
			||||||
 | 
					      e.preventDefault();
 | 
				
			||||||
 | 
					      inputRef.current?.focus();
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  useEffect(() => {
 | 
				
			||||||
 | 
					    document.addEventListener('keydown', handleKeyDown);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    return () => {
 | 
				
			||||||
 | 
					      document.removeEventListener('keydown', handleKeyDown);
 | 
				
			||||||
 | 
					    };
 | 
				
			||||||
 | 
					  }, []);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  return (
 | 
					  return (
 | 
				
			||||||
    <form
 | 
					    <form
 | 
				
			||||||
      onSubmit={(e) => {
 | 
					      onSubmit={(e) => {
 | 
				
			||||||
@@ -34,6 +51,7 @@ const EmptyChatMessageInput = ({
 | 
				
			|||||||
    >
 | 
					    >
 | 
				
			||||||
      <div className="flex flex-col bg-light-secondary dark:bg-dark-secondary px-5 pt-5 pb-2 rounded-lg w-full border border-light-200 dark:border-dark-200">
 | 
					      <div className="flex flex-col bg-light-secondary dark:bg-dark-secondary px-5 pt-5 pb-2 rounded-lg w-full border border-light-200 dark:border-dark-200">
 | 
				
			||||||
        <TextareaAutosize
 | 
					        <TextareaAutosize
 | 
				
			||||||
 | 
					          ref={inputRef}
 | 
				
			||||||
          value={message}
 | 
					          value={message}
 | 
				
			||||||
          onChange={(e) => setMessage(e.target.value)}
 | 
					          onChange={(e) => setMessage(e.target.value)}
 | 
				
			||||||
          minRows={2}
 | 
					          minRows={2}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,6 +1,6 @@
 | 
				
			|||||||
import { cn } from '@/lib/utils';
 | 
					import { cn } from '@/lib/utils';
 | 
				
			||||||
import { ArrowUp } from 'lucide-react';
 | 
					import { ArrowUp } from 'lucide-react';
 | 
				
			||||||
import { useEffect, useState } from 'react';
 | 
					import { useEffect, useRef, useState } from 'react';
 | 
				
			||||||
import TextareaAutosize from 'react-textarea-autosize';
 | 
					import TextareaAutosize from 'react-textarea-autosize';
 | 
				
			||||||
import Attach from './MessageInputActions/Attach';
 | 
					import Attach from './MessageInputActions/Attach';
 | 
				
			||||||
import CopilotToggle from './MessageInputActions/Copilot';
 | 
					import CopilotToggle from './MessageInputActions/Copilot';
 | 
				
			||||||
@@ -25,6 +25,23 @@ const MessageInput = ({
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
  }, [textareaRows, mode, message]);
 | 
					  }, [textareaRows, mode, message]);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  const inputRef = useRef<HTMLTextAreaElement | null>(null);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  const handleKeyDown = (e: KeyboardEvent) => {
 | 
				
			||||||
 | 
					    if (e.key === '/') {
 | 
				
			||||||
 | 
					      e.preventDefault();
 | 
				
			||||||
 | 
					      inputRef.current?.focus();
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  useEffect(() => {
 | 
				
			||||||
 | 
					    document.addEventListener('keydown', handleKeyDown);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    return () => {
 | 
				
			||||||
 | 
					      document.removeEventListener('keydown', handleKeyDown);
 | 
				
			||||||
 | 
					    };
 | 
				
			||||||
 | 
					  }, []);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  return (
 | 
					  return (
 | 
				
			||||||
    <form
 | 
					    <form
 | 
				
			||||||
      onSubmit={(e) => {
 | 
					      onSubmit={(e) => {
 | 
				
			||||||
@@ -47,6 +64,7 @@ const MessageInput = ({
 | 
				
			|||||||
    >
 | 
					    >
 | 
				
			||||||
      {mode === 'single' && <Attach />}
 | 
					      {mode === 'single' && <Attach />}
 | 
				
			||||||
      <TextareaAutosize
 | 
					      <TextareaAutosize
 | 
				
			||||||
 | 
					        ref={inputRef}
 | 
				
			||||||
        value={message}
 | 
					        value={message}
 | 
				
			||||||
        onChange={(e) => setMessage(e.target.value)}
 | 
					        onChange={(e) => setMessage(e.target.value)}
 | 
				
			||||||
        onHeightChange={(height, props) => {
 | 
					        onHeightChange={(height, props) => {
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user