SessionForm
🧩 Syntax:
import React from 'react';
import { Input } from "@/components/ui/input";
import { Textarea } from "@/components/ui/textarea";
import { Label } from "@/components/ui/label";
import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "@/components/ui/select";
import { Badge } from "@/components/ui/badge";
import { X } from "lucide-react";
export default function SessionForm({ sessionData, setSessionData }) {
const [interventionInput, setInterventionInput] = React.useState("");
const handleInputChange = (field, value) => {
setSessionData(prev => ({ ...prev, [field]: value }));
};
const addIntervention = (e) => {
if (e.key === 'Enter' && interventionInput.trim()) {
e.preventDefault();
setSessionData(prev => ({
...prev,
interventions_used: [...prev.interventions_used, interventionInput.trim()]
}));
setInterventionInput("");
}
};
const removeIntervention = (index) => {
setSessionData(prev => ({
...prev,
interventions_used: prev.interventions_used.filter((_, i) => i !== index)
}));
};
return (
<div className="space-y-6">
<div className="grid md:grid-cols-2 gap-6">
<div className="space-y-2">
<Label htmlFor="client_name">Client Name</Label>
<Input
id="client_name"
value={sessionData.client_name}
onChange={(e) => handleInputChange('client_name', e.target.value)}
placeholder="Client identifier"
className="h-11"
/>
</div>
<div className="space-y-2">
<Label htmlFor="session_date">Session Date</Label>
<Input
id="session_date"
type="date"
value={sessionData.session_date}
onChange={(e) => handleInputChange('session_date', e.target.value)}
className="h-11"
/>
</div>
<div className="space-y-2">
<Label htmlFor="session_type">Session Type</Label>
<Select
value={sessionData.session_type}
onValueChange={(value) => handleInputChange('session_type', value)}
>
<SelectTrigger className="h-11">
<SelectValue />
</SelectTrigger>
<SelectContent>
<SelectItem value="individual">Individual</SelectItem>
<SelectItem value="couple">Couple</SelectItem>
<SelectItem value="family">Family</SelectItem>
<SelectItem value="group">Group</SelectItem>
</SelectContent>
</Select>
</div>
<div className="space-y-2">
<Label htmlFor="duration_minutes">Duration (minutes)</Label>
<Input
id="duration_minutes"
type="number"
value={sessionData.duration_minutes}
onChange={(e) => handleInputChange('duration_minutes', parseInt(e.target.value))}
className="h-11"
/>
</div>
<div className="space-y-2">
<Label htmlFor="mood_assessment">Mood Assessment</Label>
<Select
value={sessionData.mood_assessment}
onValueChange={(value) => handleInputChange('mood_assessment', value)}
>
<SelectTrigger className="h-11">
<SelectValue />
</SelectTrigger>
<SelectContent>
<SelectItem value="excellent">Excellent</SelectItem>
<SelectItem value="good">Good</SelectItem>
<SelectItem value="neutral">Neutral</SelectItem>
<SelectItem value="struggling">Struggling</SelectItem>
<SelectItem value="crisis">Crisis</SelectItem>
</SelectContent>
</Select>
</div>
<div className="space-y-2">
<Label htmlFor="risk_assessment">Risk Assessment</Label>
<Select
value={sessionData.risk_assessment}
onValueChange={(value) => handleInputChange('risk_assessment', value)}
>
<SelectTrigger className="h-11">
<SelectValue />
</SelectTrigger>
<SelectContent>
<SelectItem value="none">None</SelectItem>
<SelectItem value="low">Low</SelectItem>
<SelectItem value="moderate">Moderate</SelectItem>
<SelectItem value="high">High</SelectItem>
</SelectContent>
</Select>
</div>
</div>
<div className="space-y-2">
<Label htmlFor="presenting_concerns">Presenting Concerns</Label>
<Textarea
id="presenting_concerns"
value={sessionData.presenting_concerns}
onChange={(e) => handleInputChange('presenting_concerns', e.target.value)}
placeholder="What brought the client to this session?"
rows={3}
/>
</div>
<div className="space-y-2">
<Label htmlFor="session_notes">Session Notes</Label>
<Textarea
id="session_notes"
value={sessionData.session_notes}
onChange={(e) => handleInputChange('session_notes', e.target.value)}
placeholder="Document the session... What was discussed? What progress was made?"
rows={8}
className="font-mono text-sm"
/>
</div>
<div className="space-y-2">
<Label htmlFor="interventions">Interventions Used</Label>
<Input
id="interventions"
value={interventionInput}
onChange={(e) => setInterventionInput(e.target.value)}
onKeyDown={addIntervention}
placeholder="Type intervention and press Enter"
className="h-11"
/>
{sessionData.interventions_used.length > 0 && (
<div className="flex flex-wrap gap-2 mt-2">
{sessionData.interventions_used.map((intervention, index) => (
<Badge key={index} variant="secondary" className="px-3 py-1">
{intervention}
<button
onClick={() => removeIntervention(index)}
className="ml-2 hover:text-red-600"
>
<X className="w-3 h-3" />
</button>
</Badge>
))}
</div>
)}
</div>
<div className="space-y-2">
<Label htmlFor="homework_assigned">Homework Assigned</Label>
<Textarea
id="homework_assigned"
value={sessionData.homework_assigned}
onChange={(e) => handleInputChange('homework_assigned', e.target.value)}
placeholder="Any homework or tasks for the client?"
rows={3}
/>
</div>
<div className="space-y-2">
<Label htmlFor="next_session_goals">Goals for Next Session</Label>
<Textarea
id="next_session_goals"
value={sessionData.next_session_goals}
onChange={(e) => handleInputChange('next_session_goals', e.target.value)}
placeholder="What do you want to focus on next time?"
rows={3}
/>
</div>
</div>
);
}