Fix ts errors

This commit is contained in:
jeez26 2025-09-08 16:28:31 +03:00
parent 365f1bde7a
commit 65a9dddf08
2 changed files with 33 additions and 30 deletions

View File

@ -9,7 +9,7 @@ export default function InterviewPage() {
const params = useParams() const params = useParams()
const router = useRouter() const router = useRouter()
const resumeId = parseInt(params.id as string) const resumeId = parseInt(params.id as string)
const { data: validationData, isLoading, error } = useValidateInterview(resumeId) const { data: validationData, isLoading, error } = useValidateInterview(resumeId)
const handleInterviewEnd = () => { const handleInterviewEnd = () => {
@ -31,12 +31,15 @@ export default function InterviewPage() {
) )
} }
if (error || !validationData?.can_interview) { if (error || !validationData?.can_interview) {
const errorMessage = error?.response?.status === 404 let errorMessage = ''
? 'Резюме не найдено' if (error instanceof Response) {
: error?.response?.status === 400 if (error.status === 404) errorMessage = "Резюме не найдено";
? 'Резюме еще не готово к собеседованию' else if (error.status === 400) errorMessage = "Резюме еще не готово к собеседованию" ;
: validationData?.message || 'Собеседование недоступно' else errorMessage = validationData?.message || 'Собеседование недоступно' ;
}
return ( return (
<div className="flex flex-col items-center justify-center min-h-screen bg-gray-50"> <div className="flex flex-col items-center justify-center min-h-screen bg-gray-50">
@ -78,7 +81,7 @@ export default function InterviewPage() {
<ArrowLeft className="h-5 w-5 mr-2" /> <ArrowLeft className="h-5 w-5 mr-2" />
Вернуться назад Вернуться назад
</button> </button>
<div className="text-center"> <div className="text-center">
<h1 className="text-lg font-semibold text-gray-900"> <h1 className="text-lg font-semibold text-gray-900">
HR Собеседование HR Собеседование
@ -87,16 +90,16 @@ export default function InterviewPage() {
Резюме #{resumeId} Резюме #{resumeId}
</p> </p>
</div> </div>
<div className="w-24"></div> {/* Spacer for centering */} <div className="w-24"></div> {/* Spacer for centering */}
</div> </div>
</div> </div>
{/* Interview Session */} {/* Interview Session */}
<InterviewSession <InterviewSession
resumeId={resumeId} resumeId={ resumeId }
onEnd={handleInterviewEnd} onEnd={ handleInterviewEnd }
/> />
</div> </div>
) )
} }

View File

@ -5,10 +5,10 @@ import { Room, RoomEvent, Track, RemoteTrack, LocalTrack } from 'livekit-client'
import { useTracks, RoomAudioRenderer, LiveKitRoom, useRoomContext } from '@livekit/components-react' import { useTracks, RoomAudioRenderer, LiveKitRoom, useRoomContext } from '@livekit/components-react'
import { useInterviewToken } from '@/hooks/useResume' import { useInterviewToken } from '@/hooks/useResume'
import { useForceEndInterview } from '@/hooks/useSession' import { useForceEndInterview } from '@/hooks/useSession'
import { import {
Mic, Mic,
MicOff, MicOff,
Phone, Phone,
PhoneOff, PhoneOff,
Volume2, Volume2,
VolumeX, VolumeX,
@ -19,7 +19,7 @@ import {
interface InterviewSessionProps { interface InterviewSessionProps {
resumeId: number resumeId: number
sessionId: number sessionId?: number
onEnd?: () => void onEnd?: () => void
} }
@ -93,9 +93,9 @@ function InterviewRoom({ resumeId, onEnd, sessionId }: InterviewSessionProps) {
const tracks = useTracks([Track.Source.Microphone, Track.Source.ScreenShare], { const tracks = useTracks([Track.Source.Microphone, Track.Source.ScreenShare], {
onlySubscribed: false, onlySubscribed: false,
}) })
const forceEndMutation = useForceEndInterview() const forceEndMutation = useForceEndInterview()
const [state, setState] = useState<InterviewState>({ const [state, setState] = useState<InterviewState>({
isConnected: false, isConnected: false,
isRecording: false, isRecording: false,
@ -112,20 +112,20 @@ function InterviewRoom({ resumeId, onEnd, sessionId }: InterviewSessionProps) {
if (!room) return if (!room) return
const handleConnected = () => { const handleConnected = () => {
setState(prev => ({ setState(prev => ({
...prev, ...prev,
isConnected: true, isConnected: true,
connectionState: 'connected' connectionState: 'connected'
})) }))
// Начинаем собеседование // Начинаем собеседование
startInterview() startInterview()
} }
const handleDisconnected = () => { const handleDisconnected = () => {
setState(prev => ({ setState(prev => ({
...prev, ...prev,
isConnected: false, isConnected: false,
connectionState: 'disconnected' connectionState: 'disconnected'
})) }))
if (onEnd) { if (onEnd) {
onEnd() onEnd()
@ -152,7 +152,7 @@ function InterviewRoom({ resumeId, onEnd, sessionId }: InterviewSessionProps) {
const startInterview = async () => { const startInterview = async () => {
if (!room) return if (!room) return
try { try {
// Отправляем сигнал серверу о начале собеседования // Отправляем сигнал серверу о начале собеседования
await room.localParticipant.publishData( await room.localParticipant.publishData(
@ -269,7 +269,7 @@ function InterviewRoom({ resumeId, onEnd, sessionId }: InterviewSessionProps) {
return ( return (
<div className="flex flex-col items-center justify-center min-h-screen p-6"> <div className="flex flex-col items-center justify-center min-h-screen p-6">
<RoomAudioRenderer /> <RoomAudioRenderer />
<div className="bg-white rounded-2xl shadow-xl p-8 max-w-2xl w-full"> <div className="bg-white rounded-2xl shadow-xl p-8 max-w-2xl w-full">
{/* Header */} {/* Header */}
<div className="text-center mb-8"> <div className="text-center mb-8">
@ -339,4 +339,4 @@ function InterviewRoom({ resumeId, onEnd, sessionId }: InterviewSessionProps) {
</div> </div>
</div> </div>
) )
} }