diff --git a/src/app/(user)/home/page.tsx b/src/app/(user)/home/page.tsx new file mode 100644 index 0000000..c13e202 --- /dev/null +++ b/src/app/(user)/home/page.tsx @@ -0,0 +1,11 @@ +import { HomeDashboard } from '@/components/home/HomeDashboard'; + +export const metadata = { + title: 'RE-Quest - Connect with Trusted Real Estate Professionals', + description: + 'Discover verified real estate professionals for buying, selling, renting, and investing. Search by location, specialization, and expertise to connect with trusted agents on RE-Quest.', +}; + +export default function HomePage() { + return ; +} diff --git a/src/app/(user)/user/dashboard/page.tsx b/src/app/(user)/user/dashboard/page.tsx index 814fc08..458f751 100644 --- a/src/app/(user)/user/dashboard/page.tsx +++ b/src/app/(user)/user/dashboard/page.tsx @@ -1,53 +1,7 @@ 'use client'; -import { useState, useEffect } from 'react'; -import { HeroSection } from '@/components/home/HeroSection'; -import { FeaturesSection } from '@/components/home/FeaturesSection'; -import { TopProfessionals } from '@/components/home/TopProfessionals'; -import { TestimonialsSection } from '@/components/home/TestimonialsSection'; -import { cmsService, resolveImageUrl } from '@/services/cms.service'; -import type { HeroContent, FeaturesContent, TopProfessionalsContent, TestimonialsContent, CmsContentRecord } from '@/types/cms'; +import { HomeDashboard } from '@/components/home/HomeDashboard'; export default function UserDashboard() { - const [cmsData, setCmsData] = useState>({}); - const [cmsLoaded, setCmsLoaded] = useState(false); - - useEffect(() => { - const fetchCms = async () => { - try { - const sections = await cmsService.getPageContent('landing'); - const data: Record = {}; - for (const s of sections) { - const content = s.content as Record; - // Resolve S3 keys in image fields - if (s.sectionKey === 'features' && Array.isArray(content.features)) { - for (const feat of content.features as { iconPath?: string }[]) { - if (feat.iconPath) feat.iconPath = await resolveImageUrl(feat.iconPath); - } - } - if (s.sectionKey === 'testimonials' && Array.isArray(content.stats)) { - for (const stat of content.stats as { iconPath?: string }[]) { - if (stat.iconPath) stat.iconPath = await resolveImageUrl(stat.iconPath); - } - } - data[s.sectionKey] = content; - } - setCmsData(data); - } catch { - // Use default content on error - } finally { - setCmsLoaded(true); - } - }; - fetchCms(); - }, []); - - return ( -
- - {cmsLoaded && } - - -
- ); + return ; } diff --git a/src/app/home/page.tsx b/src/app/home/page.tsx deleted file mode 100644 index eefe108..0000000 --- a/src/app/home/page.tsx +++ /dev/null @@ -1,16 +0,0 @@ -import UserLayout from "../(user)/layout"; -import DashboardPage from "../(user)/user/dashboard/page"; - -export const metadata = { - title: "RE-Quest - Connect with Trusted Real Estate Professionals", - description: - "Discover verified real estate professionals for buying, selling, renting, and investing. Search by location, specialization, and expertise to connect with trusted agents on RE-Quest.", -}; - -export default function HomePage() { - return ( - - - - ); -} diff --git a/src/components/home/HomeDashboard.tsx b/src/components/home/HomeDashboard.tsx new file mode 100644 index 0000000..c83bb92 --- /dev/null +++ b/src/components/home/HomeDashboard.tsx @@ -0,0 +1,54 @@ +'use client'; + +import { useState, useEffect } from 'react'; +import { HeroSection } from '@/components/home/HeroSection'; +import { FeaturesSection } from '@/components/home/FeaturesSection'; +import { TopProfessionals } from '@/components/home/TopProfessionals'; +import { TestimonialsSection } from '@/components/home/TestimonialsSection'; +import { cmsService, resolveImageUrl } from '@/services/cms.service'; +import type { HeroContent, FeaturesContent, TopProfessionalsContent, TestimonialsContent } from '@/types/cms'; + +// Shared landing/dashboard content rendered by both /home and /user/dashboard. +export function HomeDashboard() { + const [cmsData, setCmsData] = useState>({}); + const [cmsLoaded, setCmsLoaded] = useState(false); + + useEffect(() => { + const fetchCms = async () => { + try { + const sections = await cmsService.getPageContent('landing'); + const data: Record = {}; + for (const s of sections) { + const content = s.content as Record; + // Resolve S3 keys in image fields + if (s.sectionKey === 'features' && Array.isArray(content.features)) { + for (const feat of content.features as { iconPath?: string }[]) { + if (feat.iconPath) feat.iconPath = await resolveImageUrl(feat.iconPath); + } + } + if (s.sectionKey === 'testimonials' && Array.isArray(content.stats)) { + for (const stat of content.stats as { iconPath?: string }[]) { + if (stat.iconPath) stat.iconPath = await resolveImageUrl(stat.iconPath); + } + } + data[s.sectionKey] = content; + } + setCmsData(data); + } catch { + // Use default content on error + } finally { + setCmsLoaded(true); + } + }; + fetchCms(); + }, []); + + return ( +
+ + {cmsLoaded && } + + +
+ ); +}