Rajiv
Deploy to Hugging Face
e7c08a9
Raw
History Blame Contribute Delete
4.31 kB
import { getAllInterviewReports, generateInterviewReport, getInterviewReportById, generateResumePdf, evaluateAnswerAPI } from "../services/interview.api"
import { useContext, useEffect } from "react"
import { InterviewContext } from "../interview.context"
import { useParams } from "react-router"
export const useInterview = () => {
const context = useContext(InterviewContext)
const { interviewId } = useParams()
if (!context) {
throw new Error("useInterview must be used within an InterviewProvider")
}
const { loading, setLoading, report, setReport, reports, setReports } = context
const evaluateAnswer = async ({ question, answer }) => {
try {
const response = await evaluateAnswerAPI({ question, answer })
return response.evaluation
} catch (error) {
console.error("Error evaluating answer:", error)
return null
}
}
const generateReport = async ({ jobDescription, selfDescription, resumeFile }) => {
setLoading(true)
let response = null
try {
response = await generateInterviewReport({ jobDescription, selfDescription, resumeFile })
if (response && response.interviewReport) {
setReport(response.interviewReport)
}
} catch (error) {
console.error("Error generating report:", error)
setLoading(false)
return { error: error.response?.data?.error || error.response?.data?.message || error.message }
} finally {
setLoading(false)
}
return response && response.interviewReport ? response.interviewReport : null
}
const getReportById = async (interviewId) => {
setLoading(true)
let response = null
try {
response = await getInterviewReportById(interviewId)
if (response && response.interviewReport) {
setReport(response.interviewReport)
}
} catch (error) {
console.error("Error fetching report by ID:", error)
} finally {
setLoading(false)
}
return response && response.interviewReport ? response.interviewReport : null
}
const getReports = async () => {
setLoading(true)
let response = null
try {
response = await getAllInterviewReports()
if (response && response.interviewReports) {
setReports(response.interviewReports)
}
} catch (error) {
console.error("Error fetching reports:", error)
} finally {
setLoading(false)
}
return response && response.interviewReports ? response.interviewReports : []
}
const getResumePdf = async (interviewReportId, candidateAnswers = []) => {
setLoading(true)
let response = null
try {
response = await generateResumePdf({ interviewReportId, candidateAnswers })
const url = window.URL.createObjectURL(new Blob([ response ], { type: "application/pdf" }))
const link = document.createElement("a")
link.href = url
link.setAttribute("download", `resume_${interviewReportId}.pdf`)
document.body.appendChild(link)
link.click()
link.remove()
window.URL.revokeObjectURL(url)
}
catch (error) {
console.error("PDF Download Error:", error)
let errorMessage = "Failed to download resume.\nError message: " + error.message;
if (error.response && error.response.data instanceof Blob) {
try {
const text = await error.response.data.text();
const json = JSON.parse(text);
errorMessage += "\n\nServer Reason: " + (json.error || json.message);
} catch(e){}
}
alert(errorMessage)
} finally {
setLoading(false)
}
}
useEffect(() => {
if (interviewId) {
getReportById(interviewId)
} else {
getReports()
}
}, [ interviewId ])
return { loading, report, reports, generateReport, getReportById, getReports, getResumePdf, evaluateAnswer }
}