Merge pull request 'Backend changes' (#23) from React-Group/interstellar_ai:main into main

Reviewed-on: https://interstellardevelopment.org/code/code/sageTheDm/interstellar_ai/pulls/23
This commit is contained in:
sageTheDm 2024-09-26 15:00:50 +02:00
commit 0d1522bbea
2 changed files with 26 additions and 3 deletions

View file

@ -5,6 +5,7 @@ import InputFrontend from "../components/InputFrontend";
import VoiceSend from "./voice_backend" import VoiceSend from "./voice_backend"
import { AudioRecorder } from "./AudioRecorder"; import { AudioRecorder } from "./AudioRecorder";
import axios from "axios"; import axios from "axios";
import { resolve } from "path";
const InputOutputBackend: React.FC = () => { const InputOutputBackend: React.FC = () => {
@ -13,6 +14,7 @@ const InputOutputBackend: React.FC = () => {
content: string content: string
} }
const [copyClicked, setCopyClicked] = useState(false)
const [accessToken, setAccessToken] = useState("") const [accessToken, setAccessToken] = useState("")
const postWorkerRef = useRef<Worker | null>(null) const postWorkerRef = useRef<Worker | null>(null)
const getWorkerRef = useRef<Worker | null>(null) const getWorkerRef = useRef<Worker | null>(null)
@ -199,13 +201,26 @@ const InputOutputBackend: React.FC = () => {
} }
const handleCopyClick = async () => { const handleCopyClick = async () => {
setCopyClicked(false)
try { try {
await navigator.clipboard.writeText(messages[messages.length - 1]['content']); await navigator.clipboard.writeText(messages[messages.length - 1]['content']);
fadeCopyText()
} catch (err) { } catch (err) {
console.error('Failed to copy: ', err); console.error('Failed to copy: ', err);
} }
} }
const wait = (time: number) => {
return new Promise(resolve => setTimeout(resolve, time));
}
const fadeCopyText = async () => {
setCopyClicked(true)
await wait(1000)
setCopyClicked(false)
}
return ( return (
<div> <div>
<ConversationFrontend <ConversationFrontend
@ -213,6 +228,7 @@ const InputOutputBackend: React.FC = () => {
onResendClick={handleResendClick} onResendClick={handleResendClick}
onEditClick={handleEditClick} onEditClick={handleEditClick}
onCopyClick={handleCopyClick} onCopyClick={handleCopyClick}
isClicked={copyClicked}
/> />
<InputFrontend <InputFrontend
message={inputMessage} message={inputMessage}

View file

@ -10,10 +10,11 @@ interface ConversationProps {
onResendClick: () => void; onResendClick: () => void;
onEditClick: () => void; onEditClick: () => void;
onCopyClick: () => void; onCopyClick: () => void;
isClicked:boolean
} }
const ConversationFrontend = React.forwardRef<HTMLDivElement, ConversationProps>( const ConversationFrontend = React.forwardRef<HTMLDivElement, ConversationProps>(
({ messages, onResendClick, onEditClick, onCopyClick }, ref: ForwardedRef<HTMLDivElement>) => { ({ messages, onResendClick, onEditClick, onCopyClick, isClicked}, ref: ForwardedRef<HTMLDivElement>) => {
const endOfMessagesRef = useRef<HTMLDivElement>(null); const endOfMessagesRef = useRef<HTMLDivElement>(null);
// Auto-scroll to the bottom of the conversation whenever a new message is added // Auto-scroll to the bottom of the conversation whenever a new message is added
@ -23,6 +24,11 @@ const ConversationFrontend = React.forwardRef<HTMLDivElement, ConversationProps>
} }
}, [messages]); // Triggers the effect whenever the 'messages' array changes }, [messages]); // Triggers the effect whenever the 'messages' array changes
useEffect(() => {
console.log(isClicked);
},[isClicked])
return ( return (
<div className="output"> <div className="output">
<div className="conversation resize" id="conversation" ref={ref}> <div className="conversation resize" id="conversation" ref={ref}>
@ -52,6 +58,7 @@ const ConversationFrontend = React.forwardRef<HTMLDivElement, ConversationProps>
<button type="button" onClick={onCopyClick}> <button type="button" onClick={onCopyClick}>
<img src="/img/copy.svg" alt="copy" /> <img src="/img/copy.svg" alt="copy" />
</button> </button>
<p style={{opacity:isClicked?"1":"0", transition:"all 0.3s ease-in-out"}}>Copied!</p>
</div> </div>
</div> </div>
</div> </div>