diff --git a/apps/dimentorin/src/app/auth/register-mentor/page.tsx b/apps/dimentorin/src/app/auth/register-mentor/page.tsx index 88b6305..8eedbe6 100644 --- a/apps/dimentorin/src/app/auth/register-mentor/page.tsx +++ b/apps/dimentorin/src/app/auth/register-mentor/page.tsx @@ -1,11 +1,80 @@ import { FC, ReactElement, useState } from 'react'; -import { ControlledInputField, RegisterResetBanner } from '@imphnen-frontend-service/ui/organisms'; -import { Button, Select } from '@imphnen-frontend-service/ui/atoms'; +import { RegisterResetBanner } from '@imphnen-frontend-service/ui/organisms'; +import { Button } from '@imphnen-frontend-service/ui/atoms'; import { ArrowLeftOutlined, ArrowRightOutlined } from '@ant-design/icons'; import { InputField, RegisterMentorStep, SelectField } from '@imphnen-frontend-service/ui/molecules'; +import { usePostRegisterMentor, TMentorRegisterRequest } from '@imphnen-frontend-service/service'; +import { useNavigate } from 'react-router-dom'; export const Components: FC = (): ReactElement => { - const [ step, setStep ] = useState(1) + const [step, setStep] = useState(1) + const [submitting, setSubmitting] = useState(false) + const [error, setError] = useState("") + const [form, setForm] = useState({ + email: "", password: "", confirmPassword: "", + fullname: "", phone_number: "", gender: "", domicile: "", + legal_name: "", phone_for_verification: "", identity_document_url: "", + last_education: "", bio: "", linkedin_url: "", github_url: "", + cv_url: "", portfolio_url: "", industries: "", expertise: "", languages: "", + current_company: "", current_role: "", years_of_experience: "", + topics_of_interest: "", preferred_mentee_level: "", preferred_mentoring_formats: "", + availability_commitment: "", mentoring_rate_amount: "", + }) + const setF = (k: string, v: string) => setForm((f) => ({ ...f, [k]: v })) + const registerMutation = usePostRegisterMentor() + const navigate = useNavigate() + + const handleSubmit = async () => { + setError("") + if (form.password !== form.confirmPassword) { + setError("Password dan konfirmasi tidak sama.") + return + } + const payload: TMentorRegisterRequest = { + email: form.email, + password: form.password, + fullname: form.fullname, + phone_number: form.phone_number || null, + identity_and_verification: { + legal_name: form.legal_name || form.fullname, + gender: form.gender || null, + domicile: form.domicile || null, + identity_document_url: form.identity_document_url || "https://example.com/identity.jpg", + phone_for_verification: form.phone_for_verification || null, + }, + professional_profile: { + bio: form.bio, + last_education: form.last_education || null, + linkedin_url: form.linkedin_url || null, + github_url: form.github_url || null, + cv_url: form.cv_url || null, + portfolio_url: form.portfolio_url || null, + industries: form.industries.split(",").map((s) => s.trim()).filter(Boolean), + expertise: form.expertise.split(",").map((s) => s.trim()).filter(Boolean), + languages: form.languages.split(",").map((s) => s.trim()).filter(Boolean), + current_company: form.current_company, + current_role: form.current_role, + years_of_experience: Number(form.years_of_experience) || 0, + }, + mentoring_logistics: { + topics_of_interest: form.topics_of_interest.split(",").map((s) => s.trim()).filter(Boolean), + preferred_mentee_level: [form.preferred_mentee_level].filter(Boolean), + preferred_mentoring_formats: form.preferred_mentoring_formats.split(",").map((s) => s.trim()).filter(Boolean), + availability_commitment: form.availability_commitment, + mentoring_rate_amount: Number(form.mentoring_rate_amount) || 0, + }, + } + setSubmitting(true) + try { + await registerMutation.mutateAsync(payload) + navigate('/auth/register-mentor/pending') + } catch (e: unknown) { + const msg = (e as { response?: { data?: { message?: string } } })?.response?.data?.message + setError(msg || "Gagal mendaftar sebagai mentor. Coba lagi.") + } finally { + setSubmitting(false) + } + } return (