diff --git a/src/app/dashboard/cms/page.tsx b/src/app/dashboard/cms/page.tsx
index 7970071..f616949 100644
--- a/src/app/dashboard/cms/page.tsx
+++ b/src/app/dashboard/cms/page.tsx
@@ -11,6 +11,7 @@ import {
HeroContent,
FeaturesContent,
FeatureItem,
+ FeaturedAgentItem,
TopProfessionalsContent,
ProfessionalItem,
TestimonialsContent,
@@ -74,7 +75,11 @@ function defaultHero(): HeroContent {
}
function defaultFeatures(): FeaturesContent {
- return { title: '', subtitle: '', features: [] };
+ return { title: '', subtitle: '', features: [], featuredAgents: [] };
+}
+
+function emptyFeaturedAgent(): FeaturedAgentItem {
+ return { name: '', role: '', rating: '', location: '', experience: '', imageUrl: '' };
}
function defaultTopProfessionals(): TopProfessionalsContent {
@@ -158,6 +163,7 @@ export default function CmsPage() {
const [isSubmitting, setIsSubmitting] = useState(false);
const [modalError, setModalError] = useState('');
const [professionalsTab, setProfessionalsTab] = useState<'agents' | 'lenders'>('agents');
+ const [featuresTab, setFeaturesTab] = useState<'features' | 'agents'>('features');
const [isUploadingImage, setIsUploadingImage] = useState(false);
// Agent search
@@ -389,26 +395,80 @@ export default function CmsPage() {
update({ subtitle: e.target.value })} placeholder="Section subtitle" />
-
-
-
-
-
- {data.features.length === 0 &&
No features added yet.
}
-
- {data.features.map((feat, idx) => (
-
-
- Feature {idx + 1}
-
-
- {renderImageUploadField('Icon', feat.iconPath, (url) => updateFeature(idx, { iconPath: url }))}
-
updateFeature(idx, { title: e.target.value })} placeholder="Feature title" />
-
- ))}
-
+ {/* Tabs */}
+
+
+
+ {/* Features Tab */}
+ {featuresTab === 'features' && (
+
+
+
+
+
+ {data.features.length === 0 &&
No features added yet.
}
+
+ {data.features.map((feat, idx) => (
+
+
+ Feature {idx + 1}
+
+
+ {renderImageUploadField('Icon', feat.iconPath, (url) => updateFeature(idx, { iconPath: url }))}
+
updateFeature(idx, { title: e.target.value })} placeholder="Feature title" />
+
+ ))}
+
+
+ )}
+
+ {/* Featured Agents Tab */}
+ {featuresTab === 'agents' && (
+
+
+
+ {(data.featuredAgents || []).length < 3 && (
+
+ )}
+
+ {(data.featuredAgents || []).length >= 3 &&
Maximum of 3 agents reached.
}
+
+ {(data.featuredAgents || []).map((agent, idx) => (
+
+ ))}
+
+
+ )}
);
}
diff --git a/src/services/cms.service.ts b/src/services/cms.service.ts
index 2cef5bb..e7f42c9 100644
--- a/src/services/cms.service.ts
+++ b/src/services/cms.service.ts
@@ -14,10 +14,20 @@ export interface FeatureItem {
description: string;
}
+export interface FeaturedAgentItem {
+ name: string;
+ role: string;
+ rating: string;
+ location: string;
+ experience: string;
+ imageUrl: string;
+}
+
export interface FeaturesContent {
title: string;
subtitle: string;
features: FeatureItem[];
+ featuredAgents?: FeaturedAgentItem[];
}
export interface ProfessionalItem {
diff --git a/src/services/index.ts b/src/services/index.ts
index f19dd42..7d1217b 100644
--- a/src/services/index.ts
+++ b/src/services/index.ts
@@ -68,6 +68,7 @@ export type {
HeroContent,
FeaturesContent,
FeatureItem,
+ FeaturedAgentItem,
TopProfessionalsContent,
ProfessionalItem,
TestimonialsContent,