feat: fetch and integrate detailed agent field values for CMS profile selection
This commit is contained in:
@@ -3,6 +3,7 @@
|
|||||||
import { useEffect, useState, useCallback, useRef } from 'react';
|
import { useEffect, useState, useCallback, useRef } from 'react';
|
||||||
import { useRouter } from 'next/navigation';
|
import { useRouter } from 'next/navigation';
|
||||||
import {
|
import {
|
||||||
|
api,
|
||||||
cmsService,
|
cmsService,
|
||||||
usersService,
|
usersService,
|
||||||
uploadService,
|
uploadService,
|
||||||
@@ -261,18 +262,42 @@ export default function CmsPage() {
|
|||||||
}, 300);
|
}, 300);
|
||||||
}
|
}
|
||||||
|
|
||||||
function selectAgent(user: User, onChange: (items: ProfessionalItem[]) => void, currentItems: ProfessionalItem[]) {
|
async function selectAgent(user: User, onChange: (items: ProfessionalItem[]) => void, currentItems: ProfessionalItem[]) {
|
||||||
if (currentItems.length >= 3) return;
|
if (currentItems.length >= 3) return;
|
||||||
const agent = user.agentProfile;
|
const agent = user.agentProfile;
|
||||||
const profile = user.profile;
|
const profile = user.profile;
|
||||||
const name = `${profile?.firstName || ''} ${profile?.lastName || ''}`.trim() || user.email;
|
const name = `${profile?.firstName || ''} ${profile?.lastName || ''}`.trim() || user.email;
|
||||||
const subtitle = agent?.agentType?.name || agent?.headline || '';
|
const subtitle = agent?.agentType?.name || agent?.headline || '';
|
||||||
const location = [profile?.city, profile?.state].filter(Boolean).join(', ');
|
|
||||||
const experience = agent?.yearsOfExperience ? `${agent.yearsOfExperience}+ years in real estate.` : '';
|
|
||||||
const imageUrl = profile?.avatar || '';
|
const imageUrl = profile?.avatar || '';
|
||||||
const isVerified = agent?.isVerified || false;
|
|
||||||
|
|
||||||
const newItem: ProfessionalItem = { name, subtitle, location, experience, expertise: [], imageUrl };
|
// Fetch full agent profile with field values for location/experience/expertise
|
||||||
|
let location = [profile?.city, profile?.state].filter(Boolean).join(', ');
|
||||||
|
let experience = agent?.yearsOfExperience ? `${agent.yearsOfExperience}+ years in real estate.` : '';
|
||||||
|
let expertise: string[] = [];
|
||||||
|
|
||||||
|
if (agent?.id) {
|
||||||
|
try {
|
||||||
|
const res = await api.get(`/agents/${agent.id}/field-values`);
|
||||||
|
const fieldValues = res.data?.data?.fieldValues || res.data?.data || [];
|
||||||
|
for (const fv of fieldValues) {
|
||||||
|
const slug = fv.field?.slug || fv.fieldSlug || '';
|
||||||
|
if (!location && (slug === 'city' || slug === 'state')) {
|
||||||
|
const vals = Array.isArray(fv.jsonValue) ? fv.jsonValue.join(', ') : (fv.textValue || '');
|
||||||
|
if (vals) location = location ? `${location}, ${vals}` : vals;
|
||||||
|
}
|
||||||
|
if (!experience && (slug === 'years_in_business' || slug === 'experience')) {
|
||||||
|
experience = fv.textValue ? `${fv.textValue} years in real estate.` : '';
|
||||||
|
}
|
||||||
|
if (slug === 'about_me_expertise' || slug === 'expertise_areas') {
|
||||||
|
if (Array.isArray(fv.jsonValue)) expertise = [...expertise, ...fv.jsonValue];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch {
|
||||||
|
// Use basic profile data as fallback
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const newItem: ProfessionalItem = { name, subtitle, location, experience, expertise, imageUrl };
|
||||||
onChange([...currentItems, newItem]);
|
onChange([...currentItems, newItem]);
|
||||||
setAgentSearchQuery('');
|
setAgentSearchQuery('');
|
||||||
setAgentSearchResults([]);
|
setAgentSearchResults([]);
|
||||||
@@ -280,18 +305,38 @@ export default function CmsPage() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Select agent for Featured Agent Cards (different format)
|
// Select agent for Featured Agent Cards (different format)
|
||||||
function selectFeaturedAgent(user: User) {
|
async function selectFeaturedAgent(user: User) {
|
||||||
const data = editContent as FeaturesContent;
|
const data = editContent as FeaturesContent;
|
||||||
if ((data.featuredAgents || []).length >= 3) return;
|
if ((data.featuredAgents || []).length >= 3) return;
|
||||||
const agent = user.agentProfile;
|
const agent = user.agentProfile;
|
||||||
const profile = user.profile;
|
const profile = user.profile;
|
||||||
const name = `${profile?.firstName || ''} ${profile?.lastName || ''}`.trim() || user.email;
|
const name = `${profile?.firstName || ''} ${profile?.lastName || ''}`.trim() || user.email;
|
||||||
const role = agent?.agentType?.name || agent?.headline || '';
|
const role = agent?.agentType?.name || agent?.headline || '';
|
||||||
const location = [profile?.city, profile?.state].filter(Boolean).join(', ');
|
|
||||||
const experience = agent?.yearsOfExperience ? `${agent.yearsOfExperience}+ years in real estate.` : '';
|
|
||||||
const rating = '';
|
|
||||||
const imageUrl = profile?.avatar || '';
|
const imageUrl = profile?.avatar || '';
|
||||||
|
|
||||||
|
let location = [profile?.city, profile?.state].filter(Boolean).join(', ');
|
||||||
|
let experience = agent?.yearsOfExperience ? `${agent.yearsOfExperience}+ years in real estate.` : '';
|
||||||
|
const rating = '';
|
||||||
|
|
||||||
|
if (agent?.id) {
|
||||||
|
try {
|
||||||
|
const res = await api.get(`/agents/${agent.id}/field-values`);
|
||||||
|
const fieldValues = res.data?.data?.fieldValues || res.data?.data || [];
|
||||||
|
for (const fv of fieldValues) {
|
||||||
|
const slug = fv.field?.slug || fv.fieldSlug || '';
|
||||||
|
if (!location && (slug === 'city' || slug === 'state')) {
|
||||||
|
const vals = Array.isArray(fv.jsonValue) ? fv.jsonValue.join(', ') : (fv.textValue || '');
|
||||||
|
if (vals) location = location ? `${location}, ${vals}` : vals;
|
||||||
|
}
|
||||||
|
if (!experience && (slug === 'years_in_business' || slug === 'experience')) {
|
||||||
|
experience = fv.textValue ? `${fv.textValue} years in real estate.` : '';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch {
|
||||||
|
// Use basic profile data as fallback
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
const newAgent: FeaturedAgentItem = { name, role, rating, location, experience, imageUrl };
|
const newAgent: FeaturedAgentItem = { name, role, rating, location, experience, imageUrl };
|
||||||
setEditContent({ ...data, featuredAgents: [...(data.featuredAgents || []), newAgent] });
|
setEditContent({ ...data, featuredAgents: [...(data.featuredAgents || []), newAgent] });
|
||||||
setAgentSearchQuery('');
|
setAgentSearchQuery('');
|
||||||
|
|||||||
Reference in New Issue
Block a user