Fix ts errors
This commit is contained in:
parent
365f1bde7a
commit
65a9dddf08
@ -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>
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
@ -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>
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user