import { useEffect, useState } from 'react' import type { OrgRole, TalentTemplate, RoleId, TemplateId } from '../types/visual' import { asRoleId, asTemplateId } from '../types/visual' interface HireToRoleModalProps { open: boolean template: TalentTemplate | null vacantRoles: OrgRole[] onConfirm: (template: TemplateId, role: RoleId) => void onClose: () => void } export function HireToRoleModal({ open, template, vacantRoles, onConfirm, onClose, }: HireToRoleModalProps) { const [selectedRoleId, setSelectedRoleId] = useState('') useEffect(() => { if (open) setSelectedRoleId('') }, [open, template?.template_id]) useEffect(() => { if (!open) return const onKey = (event: KeyboardEvent) => { if (event.key === 'Escape') onClose() } window.addEventListener('keydown', onKey) return () => window.removeEventListener('keydown', onKey) }, [open, onClose]) if (!open || !template) return null const noVacancies = vacantRoles.length === 0 const canConfirm = !noVacancies && selectedRoleId !== '' const handleConfirm = () => { if (!canConfirm) return onConfirm(asTemplateId(template.template_id), asRoleId(selectedRoleId)) } return (
event.stopPropagation()}>

Hire {template.name}

Pick the role to fill with this employee.

{noVacancies ? (

No vacant roles.

Add a role in the Team tab first, then come back to hire.

) : (
{vacantRoles.map(role => { const selected = role.role_id === selectedRoleId return ( ) })}
)}
) }