Siddharaj Shirke
fix: update frontend API calls to use relative paths for production
c0bd6ec
import { useState } from 'react';
import axios from 'axios';
import { ArrowRight } from 'lucide-react';
export default function Form({ setResult, setLoading }) {
const [formData, setFormData] = useState({
gender: 'Male',
married: 'No',
dependents: '0',
education: 'Graduate',
self_employed: 'No',
applicant_income: 5000,
coapplicant_income: 0,
loan_amount: 100,
loan_amount_term: 360,
credit_history: 1.0,
property_area: 'Urban'
});
const handleChange = (e) => {
const { name, value } = e.target;
setFormData(prev => ({
...prev,
[name]: ['applicant_income', 'coapplicant_income', 'loan_amount', 'loan_amount_term', 'credit_history'].includes(name)
? parseFloat(value)
: value
}));
};
const handleSubmit = async (e) => {
e.preventDefault();
setLoading(true);
try {
const response = await axios.post('/api/predict', formData);
setResult(response.data);
} catch (error) {
console.error("Prediction error", error);
alert('Error predicting. Make sure backend is running.');
} finally {
setLoading(false);
}
};
return (
<div className="glass-card" style={{ maxWidth: '800px', margin: '0 auto' }}>
<h2 style={{ marginBottom: '1.5rem' }}>Application Details</h2>
<form onSubmit={handleSubmit}>
<div className="form-grid">
<div className="form-group">
<label>Gender</label>
<select name="gender" value={formData.gender} onChange={handleChange}>
<option>Male</option>
<option>Female</option>
</select>
</div>
<div className="form-group">
<label>Married</label>
<select name="married" value={formData.married} onChange={handleChange}>
<option>No</option>
<option>Yes</option>
</select>
</div>
<div className="form-group">
<label>Dependents</label>
<select name="dependents" value={formData.dependents} onChange={handleChange}>
<option>0</option>
<option>1</option>
<option>2</option>
<option>3+</option>
</select>
</div>
<div className="form-group">
<label>Education</label>
<select name="education" value={formData.education} onChange={handleChange}>
<option>Graduate</option>
<option>Not Graduate</option>
</select>
</div>
<div className="form-group">
<label>Self Employed</label>
<select name="self_employed" value={formData.self_employed} onChange={handleChange}>
<option>No</option>
<option>Yes</option>
</select>
</div>
<div className="form-group">
<label>Applicant Income (Monthly)</label>
<input type="number" name="applicant_income" value={formData.applicant_income} onChange={handleChange} required />
</div>
<div className="form-group">
<label>Co-Applicant Income</label>
<input type="number" name="coapplicant_income" value={formData.coapplicant_income} onChange={handleChange} required />
</div>
<div className="form-group">
<label>Loan Amount (in Thousands)</label>
<input type="number" name="loan_amount" value={formData.loan_amount} onChange={handleChange} required />
</div>
<div className="form-group">
<label>Loan Term (Months)</label>
<input type="number" name="loan_amount_term" value={formData.loan_amount_term} onChange={handleChange} required />
</div>
<div className="form-group">
<label>Credit History</label>
<select name="credit_history" value={formData.credit_history} onChange={handleChange}>
<option value="1.0">Good (1.0)</option>
<option value="0.0">Bad (0.0)</option>
</select>
</div>
<div className="form-group">
<label>Property Area</label>
<select name="property_area" value={formData.property_area} onChange={handleChange}>
<option>Urban</option>
<option>Semiurban</option>
<option>Rural</option>
</select>
</div>
</div>
<div style={{ marginTop: '2rem', textAlign: 'right' }}>
<button type="submit" className="btn">
Analyze Application <ArrowRight size={18} />
</button>
</div>
</form>
</div>
);
}