diff --git a/fe_repo/src/App.tsx b/fe_repo/src/App.tsx index 80bc90833..d8b49caa2 100644 --- a/fe_repo/src/App.tsx +++ b/fe_repo/src/App.tsx @@ -1,6 +1,6 @@ import {ChatBox, Content, Header} from './pages' import {ReactNode, useState} from "react"; -import {analyze, sendMessage} from "./functions/api.ts"; +import {analyze, sendMessage, suggest} from "./functions/api.ts"; export type Message = { text: string | ReactNode, @@ -77,11 +77,35 @@ function App() { setMessages((messages) => [...messages]); } + const onSuggest = async () => { + const sendingMessage: Message = { + text: 'Waiting for interview question suggestions...', + isUser: false + }; + // show loading message + setMessages((messages) => [...messages, { + text: 'Suggest interview questions', + isUser: true + }, sendingMessage]); + // show loading message + const response = await suggest(); + if (null === response) { + sendingMessage.text = "Something went wrong, please try again later." + } else { + sendingMessage.text = ( + <> +
Suggested questions:
{response.response}
+ + ); + } + setMessages((messages) => [...messages]); + } + return (
- +
) } diff --git a/fe_repo/src/functions/api.test.ts b/fe_repo/src/functions/api.test.ts index 7242e82b7..f4e05360d 100644 --- a/fe_repo/src/functions/api.test.ts +++ b/fe_repo/src/functions/api.test.ts @@ -1,5 +1,5 @@ import {expect, test} from 'vitest'; -import {analyze, login, sendMessage, uploadFile} from "./api.ts"; +import {analyze, login, sendMessage, suggest, uploadFile} from "./api.ts"; test('sendMessage', () => { expect(sendMessage("I'm adam")).toBeDefined(); @@ -24,3 +24,8 @@ test('login', () => { // make sure message is always returned expect(login('')).toBeDefined(); }) + +test('suggest', () => { + // make sure message is always returned + expect(async () => (await suggest())).toBeDefined(); +}) diff --git a/fe_repo/src/functions/api.ts b/fe_repo/src/functions/api.ts index 4f109d4e5..80d909bbe 100644 --- a/fe_repo/src/functions/api.ts +++ b/fe_repo/src/functions/api.ts @@ -24,6 +24,22 @@ export type LoginResponse = { user_id: string } +export async function suggest(): Promise { + try { + return axios.post(uri + '/suggest/interiew_question', + {user_id: getUserId()}, + {headers: {'Content-Type': 'multipart/form-data'}}) + .then(response => response.data) + .catch(error => { + console.error('Error fetching response', error); + return null; + }); + } catch (error) { + console.error('Error fetching the backend response', error); + return null; + } +} + export async function sendMessage(message: string): Promise { console.log("Sending message: " + message); try { diff --git a/fe_repo/src/pages/ChatBox.tsx b/fe_repo/src/pages/ChatBox.tsx index 9dec15c94..d9b5ea016 100644 --- a/fe_repo/src/pages/ChatBox.tsx +++ b/fe_repo/src/pages/ChatBox.tsx @@ -7,9 +7,10 @@ import xss from "xss"; interface IChatBoxProps { onSendMessage: (message: string) => void; onAnalyze: (jd: string) => void; + onSuggest: () => void; } -export const ChatBox = ({onSendMessage, onAnalyze}: IChatBoxProps) => { +export const ChatBox = ({onSendMessage, onAnalyze, onSuggest}: IChatBoxProps) => { const [message, setMessage] = useState(""); const [showPrompt, setShowPrompt] = useState(false); @@ -87,11 +88,17 @@ export const ChatBox = ({onSendMessage, onAnalyze}: IChatBoxProps) => { /> + {/*🛈 /!* Example icon - you can use actual icons here *!/*/} {/*💼 /!* Example icon for interview *!/*/}