import { useState } from 'react' function HomeView({ positions, candidates, onAddPosition, onDeletePosition, onUpdatePosition }) { const [isAddingPosition, setIsAddingPosition] = useState(false) const [isEditingPosition, setIsEditingPosition] = useState(false) const [editingPositionId, setEditingPositionId] = useState(null) const [formData, setFormData] = useState({ name: '', deadline: '', requirements: '', niceToHave: '', aboutWork: '', locationType: 'Hybrid', }) const getCandidateCountByPosition = (positionName) => { return candidates.filter( (c) => (c.appliedPosition ?? c.role) === positionName ).length } const getPositionStyleClass = (positionName) => { if (positionName.toLowerCase().includes('fullstack') || positionName.toLowerCase().includes('full stack') || positionName.toLowerCase().includes('frontend') || positionName.toLowerCase().includes('backend')) { return 'position-card--green' } if (positionName.toLowerCase().includes('product') || positionName.toLowerCase().includes('manager') || positionName.toLowerCase().includes('lead')) { return 'position-card--red' } if (positionName.toLowerCase().includes('research') || positionName.toLowerCase().includes('development') || positionName.toLowerCase().includes('scientist') || positionName.toLowerCase().includes('engineer')) { return 'position-card--blue' } return 'position-card--default' } const handleInputChange = (e) => { const { name, value } = e.target setFormData(prev => ({ ...prev, [name]: value })) } const handleAddPosition = (e) => { e.preventDefault() const newPosition = { id: crypto.randomUUID(), name: formData.name, deadline: formData.deadline, requirements: formData.requirements.split('\n').filter(r => r.trim()), niceToHave: formData.niceToHave.split('\n').filter(r => r.trim()), aboutWork: formData.aboutWork, locationType: formData.locationType, } onAddPosition(newPosition) resetForm() setIsAddingPosition(false) } const handleEditPosition = (position) => { setEditingPositionId(position.id) setFormData({ name: position.name, deadline: position.deadline, requirements: Array.isArray(position.requirements) ? position.requirements.join('\n') : position.requirements, niceToHave: Array.isArray(position.niceToHave) ? position.niceToHave.join('\n') : position.niceToHave, aboutWork: position.aboutWork, locationType: position.locationType, }) setIsEditingPosition(true) } const handleSaveEdit = (e) => { e.preventDefault() const updatedPosition = { id: editingPositionId, name: formData.name, deadline: formData.deadline, requirements: formData.requirements.split('\n').filter(r => r.trim()), niceToHave: formData.niceToHave.split('\n').filter(r => r.trim()), aboutWork: formData.aboutWork, locationType: formData.locationType, } onUpdatePosition(updatedPosition) resetForm() setIsEditingPosition(false) setEditingPositionId(null) } const resetForm = () => { setFormData({ name: '', deadline: '', requirements: '', niceToHave: '', aboutWork: '', locationType: 'Hybrid', }) } return (

Hiring Overview

Available Positions

Manage open positions and track applications per role.

{isAddingPosition && (
setIsAddingPosition(false)}>
e.stopPropagation()}>

Create New Position