diff --git a/app/interview/[id]/page.tsx b/app/interview/[id]/page.tsx
index 96b377d..c6652f3 100644
--- a/app/interview/[id]/page.tsx
+++ b/app/interview/[id]/page.tsx
@@ -9,7 +9,7 @@ export default function InterviewPage() {
const params = useParams()
const router = useRouter()
const resumeId = parseInt(params.id as string)
-
+
const { data: validationData, isLoading, error } = useValidateInterview(resumeId)
const handleInterviewEnd = () => {
@@ -31,12 +31,15 @@ export default function InterviewPage() {
)
}
+
if (error || !validationData?.can_interview) {
- const errorMessage = error?.response?.status === 404
- ? 'Резюме не найдено'
- : error?.response?.status === 400
- ? 'Резюме еще не готово к собеседованию'
- : validationData?.message || 'Собеседование недоступно'
+ let errorMessage = ''
+ if (error instanceof Response) {
+ if (error.status === 404) errorMessage = "Резюме не найдено";
+ else if (error.status === 400) errorMessage = "Резюме еще не готово к собеседованию" ;
+ else errorMessage = validationData?.message || 'Собеседование недоступно' ;
+ }
+
return (
@@ -78,7 +81,7 @@ export default function InterviewPage() {
Вернуться назад
-
+
HR Собеседование
@@ -87,16 +90,16 @@ export default function InterviewPage() {
Резюме #{resumeId}
-
+
{/* Spacer for centering */}
{/* Interview Session */}
-
)
-}
\ No newline at end of file
+}
diff --git a/components/InterviewSession.tsx b/components/InterviewSession.tsx
index b06da45..e601a9c 100644
--- a/components/InterviewSession.tsx
+++ b/components/InterviewSession.tsx
@@ -5,10 +5,10 @@ import { Room, RoomEvent, Track, RemoteTrack, LocalTrack } from 'livekit-client'
import { useTracks, RoomAudioRenderer, LiveKitRoom, useRoomContext } from '@livekit/components-react'
import { useInterviewToken } from '@/hooks/useResume'
import { useForceEndInterview } from '@/hooks/useSession'
-import {
- Mic,
- MicOff,
- Phone,
+import {
+ Mic,
+ MicOff,
+ Phone,
PhoneOff,
Volume2,
VolumeX,
@@ -19,7 +19,7 @@ import {
interface InterviewSessionProps {
resumeId: number
- sessionId: number
+ sessionId?: number
onEnd?: () => void
}
@@ -93,9 +93,9 @@ function InterviewRoom({ resumeId, onEnd, sessionId }: InterviewSessionProps) {
const tracks = useTracks([Track.Source.Microphone, Track.Source.ScreenShare], {
onlySubscribed: false,
})
-
+
const forceEndMutation = useForceEndInterview()
-
+
const [state, setState] = useState({
isConnected: false,
isRecording: false,
@@ -112,20 +112,20 @@ function InterviewRoom({ resumeId, onEnd, sessionId }: InterviewSessionProps) {
if (!room) return
const handleConnected = () => {
- setState(prev => ({
- ...prev,
- isConnected: true,
- connectionState: 'connected'
+ setState(prev => ({
+ ...prev,
+ isConnected: true,
+ connectionState: 'connected'
}))
// Начинаем собеседование
startInterview()
}
const handleDisconnected = () => {
- setState(prev => ({
- ...prev,
- isConnected: false,
- connectionState: 'disconnected'
+ setState(prev => ({
+ ...prev,
+ isConnected: false,
+ connectionState: 'disconnected'
}))
if (onEnd) {
onEnd()
@@ -152,7 +152,7 @@ function InterviewRoom({ resumeId, onEnd, sessionId }: InterviewSessionProps) {
const startInterview = async () => {
if (!room) return
-
+
try {
// Отправляем сигнал серверу о начале собеседования
await room.localParticipant.publishData(
@@ -269,7 +269,7 @@ function InterviewRoom({ resumeId, onEnd, sessionId }: InterviewSessionProps) {
return (
-
+
{/* Header */}
@@ -339,4 +339,4 @@ function InterviewRoom({ resumeId, onEnd, sessionId }: InterviewSessionProps) {
)
-}
\ No newline at end of file
+}