Some checks failed
Client Admin / build-deploy (push) Failing after 8s
Client Client / build-deploy (push) Failing after 3s
Client Registration / build-deploy (push) Failing after 20s
Client Tech / build-deploy (push) Failing after 1s
Client Home / build-deploy (push) Successful in 14s
100 lines
3.6 KiB
JavaScript
100 lines
3.6 KiB
JavaScript
import React, { useCallback, useEffect } from 'react';
|
|
import { useAuth } from '../../auth/AuthProvider';
|
|
import { useRegistration } from '../../context/RegistrationContext';
|
|
|
|
export default function ContactStep() {
|
|
const { user } = useAuth();
|
|
const { contactData, setContactData, saveContact, goBack, loading, error } = useRegistration();
|
|
|
|
// Pre-fill from auth claims on mount
|
|
useEffect(() => {
|
|
if (user) {
|
|
setContactData(prev => ({
|
|
contactName: prev.contactName || user.displayName || '',
|
|
contactEmail: prev.contactEmail || user.email || '',
|
|
contactPhone: prev.contactPhone || '',
|
|
}));
|
|
}
|
|
}, [user, setContactData]);
|
|
|
|
const handleChange = useCallback((e) => {
|
|
const { name, value } = e.target;
|
|
setContactData(prev => ({ ...prev, [name]: value }));
|
|
}, [setContactData]);
|
|
|
|
const handleSubmit = useCallback((e) => {
|
|
e.preventDefault();
|
|
saveContact();
|
|
}, [saveContact]);
|
|
|
|
return (
|
|
<div className="step-card">
|
|
<div className="step-header">
|
|
<span className="step-icon">👤</span>
|
|
<h2>Contact Information</h2>
|
|
<p className="step-description">
|
|
How should we reach you about your advertising account?
|
|
</p>
|
|
</div>
|
|
|
|
{user && (
|
|
<div className="info-card">
|
|
<div className="info-card-primary">{user.displayName}</div>
|
|
<div className="info-card-secondary">{user.email}</div>
|
|
</div>
|
|
)}
|
|
|
|
{error && <div className="error-message">{error}</div>}
|
|
|
|
<form onSubmit={handleSubmit}>
|
|
<div className="form-group">
|
|
<label htmlFor="contactName">Full Name <span className="required">*</span></label>
|
|
<input
|
|
type="text"
|
|
id="contactName"
|
|
name="contactName"
|
|
value={contactData.contactName}
|
|
onChange={handleChange}
|
|
placeholder="Jane Smith"
|
|
required
|
|
/>
|
|
</div>
|
|
|
|
<div className="form-group">
|
|
<label htmlFor="contactEmail">Email <span className="required">*</span></label>
|
|
<input
|
|
type="email"
|
|
id="contactEmail"
|
|
name="contactEmail"
|
|
value={contactData.contactEmail}
|
|
onChange={handleChange}
|
|
placeholder="jane@example.com"
|
|
required
|
|
/>
|
|
</div>
|
|
|
|
<div className="form-group">
|
|
<label htmlFor="contactPhone">Phone</label>
|
|
<input
|
|
type="tel"
|
|
id="contactPhone"
|
|
name="contactPhone"
|
|
value={contactData.contactPhone}
|
|
onChange={handleChange}
|
|
placeholder="(555) 123-4567"
|
|
/>
|
|
</div>
|
|
|
|
<div className="step-actions">
|
|
<button type="button" className="btn-secondary" onClick={goBack}>
|
|
← Back
|
|
</button>
|
|
<button type="submit" className="btn-primary" disabled={loading}>
|
|
{loading ? 'Saving...' : 'Continue →'}
|
|
</button>
|
|
</div>
|
|
</form>
|
|
</div>
|
|
);
|
|
}
|