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 +}