import React, { useContext, useEffect, useState } from "react"; import { Modal, Form, message, Input, Button } from "antd"; import type { FormProps } from "antd"; import { SessionEditorProps } from "./types"; import { Team } from "../types/datamodel"; import { teamAPI } from "./api"; import { appContext } from "../../hooks/provider"; type FieldType = { name: string; team_id?: number; }; export const SessionEditor: React.FC = ({ session, onSave, onCancel, isOpen, }) => { const [form] = Form.useForm(); const [teams, setTeams] = useState([]); const [loading, setLoading] = useState(false); const { user } = useContext(appContext); const [messageApi, contextHolder] = message.useMessage(); const getDefaultSessionName = () => { const today = new Date(); return today.toLocaleDateString(undefined, { year: "numeric", month: "long", day: "numeric", hour: "2-digit", minute: "2-digit", }); }; // Fetch teams when modal opens useEffect(() => { const fetchTeams = async () => { if (isOpen) { try { setLoading(true); const userId = user?.email || ""; const teamsData = await teamAPI.listTeams(userId); setTeams(teamsData); } catch (error) { messageApi.error("Error loading teams"); console.error("Error loading teams:", error); } finally { setLoading(false); } } }; fetchTeams(); }, [isOpen, user?.email]); // Set form values when modal opens or session changes useEffect(() => { if (isOpen) { form.setFieldsValue({ name: session?.name || getDefaultSessionName(), team_id: session?.team_id || undefined, }); } else { form.resetFields(); } }, [form, session, isOpen]); const onFinish: FormProps["onFinish"] = async (values: any) => { try { await onSave({ ...values, id: session?.id, }); messageApi.success( `Session ${session ? "updated" : "created"} successfully` ); } catch (error) { if (error instanceof Error) { messageApi.error(error.message); } } }; const onFinishFailed: FormProps["onFinishFailed"] = ( errorInfo: any ) => { messageApi.error("Please check the form for errors"); console.error("Form validation failed:", errorInfo); }; const hasNoTeams = false; return ( {contextHolder}
label="Session Name" name="name" rules={[ { required: true, message: "Please enter a session name" }, { max: 100, message: "Session name cannot exceed 100 characters" }, ]} >
); }; export default SessionEditor;