99 lines
2.6 KiB
JavaScript
99 lines
2.6 KiB
JavaScript
import { request } from '../lib/apiClient'
|
|
import { toDate } from '../lib/format'
|
|
|
|
/** Assessments — backend/assessments/app.py. Dual-key: exactly one of inbox_id / manual_upload_candidate_id. */
|
|
|
|
export const ASSESSMENT_TYPES = [
|
|
'Coding Challenge',
|
|
'Take-home Project',
|
|
'Cognitive Test',
|
|
'Personality Assessment',
|
|
'SQL Test',
|
|
'Case Study',
|
|
]
|
|
|
|
export const ASSESSMENT_STATUSES = ['pending', 'in_progress', 'completed', 'expired']
|
|
|
|
const STATUS_LABEL = {
|
|
pending: 'Pending',
|
|
in_progress: 'In Progress',
|
|
completed: 'Completed',
|
|
expired: 'Expired',
|
|
}
|
|
|
|
export function list({ assessmentId, inboxId, manualUploadCandidateId, jobPostId, assessmentStatus, top, skip } = {}) {
|
|
return request('/assessments/fetch', {
|
|
params: {
|
|
assessment_id: assessmentId,
|
|
inbox_id: inboxId,
|
|
manual_upload_candidate_id: manualUploadCandidateId,
|
|
job_post_id: jobPostId,
|
|
assessment_status: assessmentStatus,
|
|
top,
|
|
skip,
|
|
},
|
|
})
|
|
}
|
|
|
|
export function counts() {
|
|
return request('/assessments/counts')
|
|
}
|
|
|
|
export function create(body) {
|
|
return request('/assessments/create', { method: 'POST', body })
|
|
}
|
|
|
|
export function update(assessmentId, body) {
|
|
return request('/assessments/update', {
|
|
method: 'PATCH',
|
|
params: { assessment_id: assessmentId },
|
|
body,
|
|
})
|
|
}
|
|
|
|
export function remove(assessmentId) {
|
|
return request('/assessments/delete', {
|
|
method: 'DELETE',
|
|
params: { assessment_id: assessmentId },
|
|
})
|
|
}
|
|
|
|
export function remind(assessmentId) {
|
|
return request('/assessments/remind', {
|
|
method: 'POST',
|
|
params: { assessment_id: assessmentId },
|
|
})
|
|
}
|
|
|
|
function durationLabel(minutes) {
|
|
if (minutes == null) return null
|
|
if (minutes >= 1440 && minutes % 1440 === 0) {
|
|
const days = minutes / 1440
|
|
return days === 1 ? '1 day' : `${days} days`
|
|
}
|
|
return `${minutes} min`
|
|
}
|
|
|
|
export function toAssessmentView(row) {
|
|
const name = row.candidate_name || 'Unknown'
|
|
return {
|
|
id: row.id,
|
|
inboxId: row.inbox_id,
|
|
manualUploadCandidateId: row.manual_upload_candidate_id,
|
|
jobPostId: row.job_post_id,
|
|
candidate: name,
|
|
jobTitle: row.job_title || '—',
|
|
type: row.assessment_type,
|
|
status: STATUS_LABEL[row.assessment_status] ?? row.assessment_status,
|
|
statusKey: row.assessment_status,
|
|
score: row.score ?? null,
|
|
sectionScores: Array.isArray(row.section_scores) ? row.section_scores : [],
|
|
duration: durationLabel(row.duration_minutes) || '—',
|
|
durationMinutes: row.duration_minutes,
|
|
assigned: toDate(row.assigned_at),
|
|
due: toDate(row.due_at),
|
|
completedAt: toDate(row.completed_at),
|
|
remindedAt: toDate(row.reminded_at),
|
|
}
|
|
}
|