import React, { useState } from 'react'; import { Box, Button, Container, Grid, Paper, TextField, Typography, Avatar, IconButton, Stepper, Step, StepLabel, useMediaQuery, CircularProgress, Snackbar, Alert } from '@mui/material'; import { styled } from '@mui/material/styles'; import { CloudUpload, PhotoCamera } from '@mui/icons-material'; import { useTheme } from '@mui/material/styles'; // import { Beta } from '../components/Beta'; // Interfaces interface ProfileFormData { firstName: string; lastName: string; email: string; phoneNumber: string; jobTitle: string; location: string; bio: string; } // Styled components const VisuallyHiddenInput = styled('input')({ clip: 'rect(0 0 0 0)', clipPath: 'inset(50%)', height: 1, overflow: 'hidden', position: 'absolute', bottom: 0, left: 0, whiteSpace: 'nowrap', width: 1, }); const CreateProfilePage: React.FC = () => { const theme = useTheme(); const isMobile = useMediaQuery(theme.breakpoints.down('sm')); // State management const [activeStep, setActiveStep] = useState(0); const [profileImage, setProfileImage] = useState(null); const [resumeFile, setResumeFile] = useState(null); const [loading, setLoading] = useState(false); const [snackbar, setSnackbar] = useState<{open: boolean, message: string, severity: "success" | "error"}>({ open: false, message: '', severity: 'success' }); const [formData, setFormData] = useState({ firstName: '', lastName: '', email: '', phoneNumber: '', jobTitle: '', location: '', bio: '', }); // Steps for the profile creation process const steps = ['Personal Information', 'Professional Details', 'Resume Upload']; // Handle form input changes const handleInputChange = (e: React.ChangeEvent) => { const { name, value } = e.target; setFormData({ ...formData, [name]: value, }); }; // Handle profile image upload const handleImageUpload = (e: React.ChangeEvent) => { if (e.target.files && e.target.files[0]) { const reader = new FileReader(); reader.onload = (event) => { if (event.target?.result) { setProfileImage(event.target.result.toString()); } }; reader.readAsDataURL(e.target.files[0]); } }; // Handle resume file upload const handleResumeUpload = (e: React.ChangeEvent) => { if (e.target.files && e.target.files[0]) { setResumeFile(e.target.files[0]); setSnackbar({ open: true, message: `Resume uploaded: ${e.target.files[0].name}`, severity: 'success' }); } }; // Navigation functions const handleNext = () => { if (activeStep === steps.length - 1) { handleSubmit(); } else { setActiveStep((prevStep) => prevStep + 1); } }; const handleBack = () => { setActiveStep((prevStep) => prevStep - 1); }; // Form submission const handleSubmit = async () => { setLoading(true); // Simulate API call with timeout setTimeout(() => { setLoading(false); setSnackbar({ open: true, message: 'Profile created successfully! Redirecting to dashboard...', severity: 'success' }); // Redirect would happen here in a real application // history.push('/dashboard'); }, 2000); }; // Form validation const isStepValid = () => { switch (activeStep) { case 0: return formData.firstName.trim() !== '' && formData.lastName.trim() !== '' && formData.email.trim() !== ''; case 1: return formData.jobTitle.trim() !== ''; case 2: return resumeFile !== null; default: return true; } }; // Stepper content based on active step const getStepContent = (step: number) => { switch (step) { case 0: return ( Add profile photo ); case 1: return ( ); case 2: return ( Upload your resume to complete your profile. We'll analyze it to better understand your skills and experience. (Supported formats: .pdf, .docx, .md, and .txt) {resumeFile && ( File uploaded: {resumeFile.name} )} ); default: return 'Unknown step'; } }; return ( Create Your Profile {steps.map((label) => ( {label} ))} {getStepContent(activeStep)} setSnackbar({ ...snackbar, open: false })} > setSnackbar({ ...snackbar, open: false })} severity={snackbar.severity} sx={{ width: '100%' }} > {snackbar.message} ); }; export { CreateProfilePage };