feat(doctor): enhance doctor schema with addresses, ratings, and social media links

feat(robots): update disallow rules to include '/panel'
feat(sitemap): implement separate sitemaps for doctors, clinics, and blogs
feat(icons): add social media icons for doctor profiles
This commit is contained in:
hamed
2026-06-21 12:35:15 +03:30
parent 93b2710ae1
commit a8c3a57114
10 changed files with 540 additions and 97 deletions
+33
View File
@@ -5,6 +5,19 @@ import LikeDI from "@/components/icons/LikeDI";
import StarDI from "@/components/icons/StarDI";
import TickCircle from "@/components/icons/TickCircle";
import DoctorAvatar from "@/app/component/DoctorAvatar";
import Instagram from "@/components/icons/Instagram";
import Telegram from "@/components/icons/Telegram";
import Aparat from "@/components/icons/Aparat";
import Youtube from "@/components/icons/Youtube";
import Linkedin from "@/components/icons/Linkedin";
const SOCIAL_ICONS = {
instagram: Instagram,
telegram: Telegram,
aparat: Aparat,
youtube: Youtube,
linkedin: Linkedin,
};
function Title({ doctor }) {
return (
@@ -67,6 +80,26 @@ function Title({ doctor }) {
</div>
</div>
</CustomLoading>
{doctor?.social_media && Object.values(doctor.social_media).some(Boolean) && (
<div className="flex items-center gap-2">
{Object.entries(doctor.social_media).map(([key, url]) => {
if (!url) return null;
const Icon = SOCIAL_ICONS[key];
if (!Icon) return null;
return (
<a
key={key}
href={url}
target="_blank"
rel="noopener noreferrer"
className="flex items-center justify-center p-1.5 rounded-full bg-[#F8F8FF]"
>
<Icon />
</a>
);
})}
</div>
)}
</div>
</div>
);
+27
View File
@@ -0,0 +1,27 @@
function Aparat() {
return (
<svg
className="transition-all duration-500"
xmlns="http://www.w3.org/2000/svg"
width="20"
height="20"
viewBox="0 0 20 20"
fill="none"
>
<path
d="M18.3334 10.0001C18.3334 14.6025 14.6025 18.3334 10.0001 18.3334C5.39771 18.3334 1.66675 14.6025 1.66675 10.0001C1.66675 5.39771 5.39771 1.66675 10.0001 1.66675C14.6025 1.66675 18.3334 5.39771 18.3334 10.0001Z"
stroke="#5559CE"
strokeLinecap="round"
strokeLinejoin="round"
/>
<path
d="M8.33325 7.08331L12.9166 9.99998L8.33325 12.9166V7.08331Z"
stroke="#5559CE"
strokeLinecap="round"
strokeLinejoin="round"
/>
</svg>
);
}
export default Aparat;
+27
View File
@@ -0,0 +1,27 @@
function Youtube() {
return (
<svg
className="transition-all duration-500"
xmlns="http://www.w3.org/2000/svg"
width="20"
height="20"
viewBox="0 0 20 20"
fill="none"
>
<path
d="M1.66675 10.0001C1.66675 6.27106 1.66675 4.40656 2.78731 3.18996C3.90787 1.97337 5.66881 1.97337 9.19069 1.97337H10.8092C14.331 1.97337 16.092 1.97337 17.2125 3.18996C18.3331 4.40656 18.3334 6.27106 18.3334 10.0001C18.3334 13.7291 18.3334 15.5936 17.2125 16.8102C16.092 18.0268 14.331 18.0268 10.8092 18.0268H9.19069C5.66881 18.0268 3.90787 18.0268 2.78731 16.8102C1.66675 15.5936 1.66675 13.7291 1.66675 10.0001Z"
stroke="#5559CE"
strokeLinecap="round"
strokeLinejoin="round"
/>
<path
d="M8.33325 7.50002L12.5 10.0001L8.33325 12.5V7.50002Z"
stroke="#5559CE"
strokeLinecap="round"
strokeLinejoin="round"
/>
</svg>
);
}
export default Youtube;