diff --git a/client/pages/community/MentorApply.tsx b/client/pages/community/MentorApply.tsx new file mode 100644 index 00000000..4fe46747 --- /dev/null +++ b/client/pages/community/MentorApply.tsx @@ -0,0 +1,138 @@ +import React, { useEffect, useMemo, useState } from "react"; +import Layout from "@/components/Layout"; +import { useAuth } from "@/contexts/AuthContext"; +import { aethexToast } from "@/lib/aethex-toast"; +import { aethexSocialService } from "@/lib/aethex-social-service"; +import { Badge } from "@/components/ui/badge"; +import { Button } from "@/components/ui/button"; +import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@/components/ui/card"; +import { Input } from "@/components/ui/input"; +import { Label } from "@/components/ui/label"; +import { Switch } from "@/components/ui/switch"; +import { Textarea } from "@/components/ui/textarea"; +import { useNavigate } from "react-router-dom"; + +export default function MentorApply() { + const { user, loading } = useAuth(); + const navigate = useNavigate(); + const [bio, setBio] = useState(""); + const [expertise, setExpertise] = useState([]); + const [expertiseInput, setExpertiseInput] = useState(""); + const [available, setAvailable] = useState(true); + const [hourlyRate, setHourlyRate] = useState(""); + const [submitting, setSubmitting] = useState(false); + + useEffect(() => { + if (!loading && !user) { + aethexToast.info({ title: "Sign in required", description: "Please sign in to apply as a mentor" }); + navigate("/login"); + } + }, [user, loading, navigate]); + + const addExpertise = () => { + const parts = expertiseInput + .split(",") + .map((s) => s.trim()) + .filter(Boolean); + if (!parts.length) return; + const next = Array.from(new Set([...expertise, ...parts])) + .slice(0, 20); + setExpertise(next); + setExpertiseInput(""); + }; + + const removeExpertise = (tag: string) => { + setExpertise((prev) => prev.filter((t) => t.toLowerCase() !== tag.toLowerCase())); + }; + + const canSubmit = useMemo(() => { + return Boolean(user?.id) && expertise.length > 0 && !submitting; + }, [user, expertise, submitting]); + + const onSubmit = async (e: React.FormEvent) => { + e.preventDefault(); + if (!user?.id) return; + try { + setSubmitting(true); + const rate = hourlyRate ? Number(hourlyRate) : undefined; + await aethexSocialService.applyToBeMentor(user.id, { + bio: bio || null, + expertise, + hourlyRate: Number.isFinite(rate as number) ? (rate as number) : undefined, + available, + }); + aethexToast.success({ title: "Mentor profile saved", description: "You're ready to receive mentorship requests" }); + navigate("/community#mentorship"); + } catch (e: any) { + aethexToast.error({ title: "Failed to save", description: String(e?.message || e) }); + } finally { + setSubmitting(false); + } + }; + + return ( + +
+
+ Mentorship +

Become a mentor

+

Share your expertise and guide community members through 1:1 sessions and clinics.

+
+ + + + Mentor profile + Tell mentees how you can help and set your availability. + + +
+
+ +