'use client'; import { useState, useEffect } from 'react'; import Modal from '@/src/components/modals/Modal'; import ModalHeader from '@/src/components/modals/ModalHeader'; import ModalBody from '@/src/components/modals/ModalBody'; import ModalFooter from '@/src/components/modals/ModalFooter'; import { addMember, listPlans } from '@/src/lib/api/facility-admin'; import type { AddMemberRequest, MemberRole, MemberStatus, MembershipPlan } from '@/src/types/facility-admin'; interface AddMemberModalProps { isOpen: boolean; onClose: () => void; facilityId: number; onSuccess: () => void; } export default function AddMemberModal({ isOpen, onClose, facilityId, onSuccess }: AddMemberModalProps) { const [plans, setPlans] = useState([]); const [formData, setFormData] = useState({ app_user_id: 0, role: 'member', facility_membership_plan_id: null, sport_id: null, status: 'active', starts_at: new Date().toISOString().split('T')[0], ends_at: null }); const [submitting, setSubmitting] = useState(false); const [error, setError] = useState(null); useEffect(() => { fetchPlans(); }, [facilityId]); async function fetchPlans() { const result = await listPlans(facilityId, { include_inactive: false }); if (result.success) { setPlans(result.data); } } async function handleSubmit(e: React.FormEvent) { e.preventDefault(); setSubmitting(true); setError(null); if (formData.app_user_id === 0) { setError('Please enter a valid user ID'); setSubmitting(false); return; } const result = await addMember(facilityId, formData); setSubmitting(false); if (result.success) { onSuccess(); onClose(); } else { setError(result.error.detail || 'Failed to add member'); } } return (
Add Member {error && (
{error}
)}
{/* User ID (simplified - in production, use email lookup) */}
setFormData({ ...formData, app_user_id: parseInt(e.target.value) || 0 })} className="w-full px-3 py-2 border border-gray-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-purple-500 focus:border-transparent" placeholder="Enter user ID" required />

Enter the app_user_id of the user to add

{/* Role */}
{/* Membership Plan */}
{/* Status */}
{/* End Date */}
setFormData({ ...formData, ends_at: e.target.value || null })} className="w-full px-3 py-2 border border-gray-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-purple-500 focus:border-transparent" />

Leave empty for indefinite membership

); }