Compare commits
2 Commits
981117629a
...
d8dda59f4c
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
d8dda59f4c | ||
|
|
541251f065 |
2
Client-Registration/dist/bundle.js
vendored
2
Client-Registration/dist/bundle.js
vendored
File diff suppressed because one or more lines are too long
@@ -41,12 +41,17 @@ export function useAuth() {
|
|||||||
|
|
||||||
// ── Map ID token claims → user object ─────────────────────────────────────
|
// ── Map ID token claims → user object ─────────────────────────────────────
|
||||||
function claimsToUser(claims, provider) {
|
function claimsToUser(claims, provider) {
|
||||||
|
const firstName = claims.given_name ?? null;
|
||||||
|
const surname = claims.family_name ?? null;
|
||||||
|
const displayName = claims.name
|
||||||
|
?? [firstName, surname].filter(Boolean).join(' ')
|
||||||
|
?? null;
|
||||||
return {
|
return {
|
||||||
entraSubjectId: claims.oid ?? claims.sub ?? null,
|
entraSubjectId: claims.oid ?? claims.sub ?? null,
|
||||||
email: claims.email ?? claims.preferred_username ?? null,
|
email: claims.email ?? claims.preferred_username ?? null,
|
||||||
displayName: claims.name ?? null,
|
displayName,
|
||||||
firstName: claims.given_name ?? null,
|
firstName,
|
||||||
surname: claims.family_name ?? null,
|
surname,
|
||||||
provider: provider ?? 'unknown',
|
provider: provider ?? 'unknown',
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,12 +6,13 @@ export default function ContactStep() {
|
|||||||
const { user } = useAuth();
|
const { user } = useAuth();
|
||||||
const { contactData, setContactData, saveContact, goBack, loading, error } = useRegistration();
|
const { contactData, setContactData, saveContact, goBack, loading, error } = useRegistration();
|
||||||
|
|
||||||
// Pre-fill from auth claims on mount
|
// Pre-fill from CIAM claims on mount
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
if (user) {
|
if (user) {
|
||||||
setContactData(prev => ({
|
setContactData(prev => ({
|
||||||
contactName: prev.contactName || user.displayName || '',
|
firstName: prev.firstName || user.firstName || '',
|
||||||
contactEmail: prev.contactEmail || user.email || '',
|
lastName: prev.lastName || user.surname || '',
|
||||||
|
contactEmail: prev.contactEmail || user.email || '',
|
||||||
contactPhone: prev.contactPhone || '',
|
contactPhone: prev.contactPhone || '',
|
||||||
}));
|
}));
|
||||||
}
|
}
|
||||||
@@ -39,7 +40,9 @@ export default function ContactStep() {
|
|||||||
|
|
||||||
{user && (
|
{user && (
|
||||||
<div className="info-card">
|
<div className="info-card">
|
||||||
<div className="info-card-primary">{user.displayName}</div>
|
<div className="info-card-primary">
|
||||||
|
{[user.firstName, user.surname].filter(Boolean).join(' ') || user.displayName || user.email}
|
||||||
|
</div>
|
||||||
<div className="info-card-secondary">{user.email}</div>
|
<div className="info-card-secondary">{user.email}</div>
|
||||||
</div>
|
</div>
|
||||||
)}
|
)}
|
||||||
@@ -47,17 +50,32 @@ export default function ContactStep() {
|
|||||||
{error && <div className="error-message">{error}</div>}
|
{error && <div className="error-message">{error}</div>}
|
||||||
|
|
||||||
<form onSubmit={handleSubmit}>
|
<form onSubmit={handleSubmit}>
|
||||||
<div className="form-group">
|
<div className="form-row">
|
||||||
<label htmlFor="contactName">Full Name <span className="required">*</span></label>
|
<div className="form-group">
|
||||||
<input
|
<label htmlFor="firstName">First Name <span className="required">*</span></label>
|
||||||
type="text"
|
<input
|
||||||
id="contactName"
|
type="text"
|
||||||
name="contactName"
|
id="firstName"
|
||||||
value={contactData.contactName}
|
name="firstName"
|
||||||
onChange={handleChange}
|
value={contactData.firstName || ''}
|
||||||
placeholder="Jane Smith"
|
onChange={handleChange}
|
||||||
required
|
placeholder="Jane"
|
||||||
/>
|
required
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div className="form-group">
|
||||||
|
<label htmlFor="lastName">Last Name <span className="required">*</span></label>
|
||||||
|
<input
|
||||||
|
type="text"
|
||||||
|
id="lastName"
|
||||||
|
name="lastName"
|
||||||
|
value={contactData.lastName || ''}
|
||||||
|
onChange={handleChange}
|
||||||
|
placeholder="Smith"
|
||||||
|
required
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div className="form-group">
|
<div className="form-group">
|
||||||
@@ -66,7 +84,7 @@ export default function ContactStep() {
|
|||||||
type="email"
|
type="email"
|
||||||
id="contactEmail"
|
id="contactEmail"
|
||||||
name="contactEmail"
|
name="contactEmail"
|
||||||
value={contactData.contactEmail}
|
value={contactData.contactEmail || ''}
|
||||||
onChange={handleChange}
|
onChange={handleChange}
|
||||||
placeholder="jane@example.com"
|
placeholder="jane@example.com"
|
||||||
required
|
required
|
||||||
@@ -79,7 +97,7 @@ export default function ContactStep() {
|
|||||||
type="tel"
|
type="tel"
|
||||||
id="contactPhone"
|
id="contactPhone"
|
||||||
name="contactPhone"
|
name="contactPhone"
|
||||||
value={contactData.contactPhone}
|
value={contactData.contactPhone || ''}
|
||||||
onChange={handleChange}
|
onChange={handleChange}
|
||||||
placeholder="(555) 123-4567"
|
placeholder="(555) 123-4567"
|
||||||
/>
|
/>
|
||||||
|
|||||||
@@ -53,7 +53,8 @@ export function RegistrationProvider({ children }) {
|
|||||||
|
|
||||||
// Form data — maps to RegisterRequest model fields (minus entraSubjectId)
|
// Form data — maps to RegisterRequest model fields (minus entraSubjectId)
|
||||||
const [contactData, setContactData] = useState({
|
const [contactData, setContactData] = useState({
|
||||||
contactName: '',
|
firstName: '',
|
||||||
|
lastName: '',
|
||||||
contactEmail: '',
|
contactEmail: '',
|
||||||
contactPhone: '',
|
contactPhone: '',
|
||||||
});
|
});
|
||||||
@@ -83,8 +84,9 @@ export function RegistrationProvider({ children }) {
|
|||||||
// ─── Validation ─────────────────────────────────────────────────────
|
// ─── Validation ─────────────────────────────────────────────────────
|
||||||
|
|
||||||
const validateContact = useCallback(() => {
|
const validateContact = useCallback(() => {
|
||||||
if (!contactData.contactName.trim()) return 'Contact name is required';
|
if (!contactData.firstName?.trim()) return 'First name is required';
|
||||||
if (!contactData.contactEmail.trim()) return 'Email is required';
|
if (!contactData.lastName?.trim()) return 'Last name is required';
|
||||||
|
if (!contactData.contactEmail?.trim()) return 'Email is required';
|
||||||
return null;
|
return null;
|
||||||
}, [contactData]);
|
}, [contactData]);
|
||||||
|
|
||||||
@@ -132,6 +134,8 @@ export function RegistrationProvider({ children }) {
|
|||||||
const request = {
|
const request = {
|
||||||
...contactData,
|
...contactData,
|
||||||
...businessData,
|
...businessData,
|
||||||
|
// Combine for server-side contactName field
|
||||||
|
contactName: [contactData.firstName, contactData.lastName].filter(Boolean).join(' '),
|
||||||
};
|
};
|
||||||
|
|
||||||
// Pre-fill email from auth if the user left it blank
|
// Pre-fill email from auth if the user left it blank
|
||||||
|
|||||||
@@ -326,6 +326,16 @@ body {
|
|||||||
Forms
|
Forms
|
||||||
============================================================ */
|
============================================================ */
|
||||||
|
|
||||||
|
.form-row {
|
||||||
|
display: flex;
|
||||||
|
gap: 12px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.form-row .form-group {
|
||||||
|
flex: 1;
|
||||||
|
margin-bottom: 0;
|
||||||
|
}
|
||||||
|
|
||||||
.form-group {
|
.form-group {
|
||||||
margin-bottom: 16px;
|
margin-bottom: 16px;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user