dev1/src/components/UserProfile.js

212 lines
6.3 KiB
JavaScript

import React, { useState, useEffect } from 'react';
import { useNavigate } from 'react-router-dom';
import './UserProfile.css';
function UserProfile() {
const [firstName, setFirstName] = useState('');
const [lastName, setLastName] = useState('');
const [email, setEmail] = useState('');
const [zipCode, setZipCode] = useState('');
const [selectedState, setSelectedState] = useState('');
const [areas, setAreas] = useState([]);
const [selectedArea, setSelectedArea] = useState('');
const navigate = useNavigate(); // Add navigation
const [loadingAreas, setLoadingAreas] = useState(false); // To show a loading spinner for areas
// Fetch areas when a state is selected
useEffect(() => {
if (!selectedState) {
setAreas([]); // Clear areas if no state is selected
return;
}
const fetchAreas = async () => {
setLoadingAreas(true);
try {
const response = await fetch(`/api/areas?state=${selectedState}`);
if (!response.ok) {
throw new Error('Failed to fetch areas');
}
const data = await response.json();
setAreas(data.areas); // Set the areas from the API response
} catch (error) {
console.error('Error fetching areas:', error);
setAreas([]); // Reset areas on error
} finally {
setLoadingAreas(false);
}
};
fetchAreas();
}, [selectedState]);
// Handle form submission
const handleFormSubmit = async (e) => {
e.preventDefault();
const profileData = {
firstName,
lastName,
email,
zipCode,
state: selectedState,
area: selectedArea,
};
try {
const response = await fetch('/api/user-profile', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify(profileData),
});
if (!response.ok) {
throw new Error('Failed to save profile');
}
console.log('Profile saved successfully');
// Add success feedback for the user, if needed
navigate('/interest-inventory');
} catch (error) {
console.error('Error saving profile:', error);
}
};
const states = [
{ name: "Alabama", code: "AL" },
{ name: "Alaska", code: "AK" },
{ name: "Arizona", code: "AZ" },
{ name: "Arkansas", code: "AR" },
{ name: "California", code: "CA" },
{ name: "Colorado", code: "CO" },
{ name: "Connecticut", code: "CT" },
{ name: "Delaware", code: "DE" },
{ name: "Florida", code: "FL" },
{ name: "Georgia", code: "GA" },
{ name: "Hawaii", code: "HI" },
{ name: "Idaho", code: "ID" },
{ name: "Illinois", code: "IL" },
{ name: "Indiana", code: "IN" },
{ name: "Iowa", code: "IA" },
{ name: "Kansas", code: "KS" },
{ name: "Kentucky", code: "KY" },
{ name: "Louisiana", code: "LA" },
{ name: "Maine", code: "ME" },
{ name: "Maryland", code: "MD" },
{ name: "Massachusetts", code: "MA" },
{ name: "Michigan", code: "MI" },
{ name: "Minnesota", code: "MN" },
{ name: "Mississippi", code: "MS" },
{ name: "Missouri", code: "MO" },
{ name: "Montana", code: "MT" },
{ name: "Nebraska", code: "NE" },
{ name: "Nevada", code: "NV" },
{ name: "New Hampshire", code: "NH" },
{ name: "New Jersey", code: "NJ" },
{ name: "New Mexico", code: "NM" },
{ name: "New York", code: "NY" },
{ name: "North Carolina", code: "NC" },
{ name: "North Dakota", code: "ND" },
{ name: "Ohio", code: "OH" },
{ name: "Oklahoma", code: "OK" },
{ name: "Oregon", code: "OR" },
{ name: "Pennsylvania", code: "PA" },
{ name: "Rhode Island", code: "RI" },
{ name: "South Carolina", code: "SC" },
{ name: "South Dakota", code: "SD" },
{ name: "Tennessee", code: "TN" },
{ name: "Texas", code: "TX" },
{ name: "Utah", code: "UT" },
{ name: "Vermont", code: "VT" },
{ name: "Virginia", code: "VA" },
{ name: "Washington", code: "WA" },
{ name: "West Virginia", code: "WV" },
{ name: "Wisconsin", code: "WI" },
{ name: "Wyoming", code: "WY" }
];
return (
<div className="user-profile-container">
<h2>User Profile</h2>
<form onSubmit={handleFormSubmit}>
<div className="form-group">
<label>First Name:</label>
<input
type="text"
value={firstName}
onChange={(e) => setFirstName(e.target.value)}
required
/>
</div>
<div className="form-group">
<label>Last Name:</label>
<input
type="text"
value={lastName}
onChange={(e) => setLastName(e.target.value)}
required
/>
</div>
<div className="form-group">
<label>Email:</label>
<input
type="email"
value={email}
onChange={(e) => setEmail(e.target.value)}
required
/>
</div>
<div className="form-group">
<label>ZIP Code:</label>
<input
type="text"
value={zipCode}
onChange={(e) => setZipCode(e.target.value)}
required
/>
</div>
<div className="form-group">
<label>State:</label>
<select
value={selectedState}
onChange={(e) => setSelectedState(e.target.value)}
required
>
<option value="">Select a State</option>
{states.map((s) => (
<option key={s.code} value={s.code}>
{s.name}
</option>
))}
</select>
</div>
{loadingAreas ? (
<p>Loading areas...</p>
) : areas.length > 0 && (
<div className="form-group">
<label>Area:</label>
<select
value={selectedArea}
onChange={(e) => setSelectedArea(e.target.value)}
required
>
<option value="">Select an Area</option>
{areas.map((area, index) => (
<option key={index} value={area}>
{area}
</option>
))}
</select>
</div>
)}
<button type="submit">Save Profile</button>
</form>
</div>
);
}
export default UserProfile;