From 6ec2f5a0698d304188ed65df285e4d26164872dd Mon Sep 17 00:00:00 2001
From: hamed <15238-genius.ha@users.noreply.drupalcode.org>
Date: Sun, 21 Jun 2026 11:17:34 +0330
Subject: [PATCH] feat(avatar): create DoctorAvatar component for improved
doctor image handling
---
app/component/DoctorAvatar.js | 38 ++++++++++++++++++++++
app/component/ItemDoctor.js | 13 +++-----
components/appointment/information/Head.js | 14 +++-----
components/appointment/location/Head.js | 14 +++-----
components/doctor/detailDoctor/Title.js | 12 +++----
5 files changed, 55 insertions(+), 36 deletions(-)
create mode 100644 app/component/DoctorAvatar.js
diff --git a/app/component/DoctorAvatar.js b/app/component/DoctorAvatar.js
new file mode 100644
index 0000000..7f29d44
--- /dev/null
+++ b/app/component/DoctorAvatar.js
@@ -0,0 +1,38 @@
+import Image from "next/image";
+import { imageUrl } from "@/helper";
+
+function getInitials(name) {
+ if (!name) return "";
+ const parts = name.trim().split(/\s+/).filter(Boolean);
+ if (parts.length === 0) return "";
+ if (parts.length === 1) return parts[0][0];
+ return `${parts[0][0]}${parts[1][0]}`;
+}
+
+function DoctorAvatar({ doctor, size = 72, className = "", priority = false }) {
+ const url = doctor?.img?.[0]?.url;
+
+ if (!url) {
+ return (
+
+ {getInitials(doctor?.name)}
+
+ );
+ }
+
+ return (
+
+ );
+}
+
+export default DoctorAvatar;
diff --git a/app/component/ItemDoctor.js b/app/component/ItemDoctor.js
index 6822ffa..0a4bca5 100644
--- a/app/component/ItemDoctor.js
+++ b/app/component/ItemDoctor.js
@@ -1,11 +1,10 @@
import { memo } from "react";
-import Image from "next/image";
import { Button } from "@mui/material";
import Link from "next/link";
import CustomLoading from "./loading/Custom";
import TextLoading from "./loading/Text";
import CircularLoading from "./loading/Circular";
-import { imageUrl } from "@/helper";
+import DoctorAvatar from "./DoctorAvatar";
// Icons
import ArrowLeftD from "@/components/icons/ArrowLeftD";
@@ -29,12 +28,10 @@ function ItemDoctor({ doctor, loading, setDoctors, priority = false }) {
{/* Detail Doctor */}
-
diff --git a/components/appointment/information/Head.js b/components/appointment/information/Head.js
index efcf52b..2e86c01 100644
--- a/components/appointment/information/Head.js
+++ b/components/appointment/information/Head.js
@@ -1,10 +1,6 @@
-import Image from "next/image";
-import { imageUrl } from "@/helper";
+import DoctorAvatar from "@/app/component/DoctorAvatar";
function Head({ doctor }) {
- // تبدیل img array به string
- const doctorImage = imageUrl(doctor?.img?.[0]?.url, "/assets/images/doctor.png");
-
// تبدیل specialties array به string
const expertiseText = doctor?.specialties
?.map((exp) => exp.name)
@@ -19,15 +15,13 @@ function Head({ doctor }) {
mb-[12px] sm:mb-[19px] md:mb-[25px] lg:lg:mb-[32px]
"
>
-
diff --git a/components/appointment/location/Head.js b/components/appointment/location/Head.js
index d578e4d..4ddb285 100644
--- a/components/appointment/location/Head.js
+++ b/components/appointment/location/Head.js
@@ -1,10 +1,6 @@
-import Image from "next/image";
-import { imageUrl } from "@/helper";
+import DoctorAvatar from "@/app/component/DoctorAvatar";
function Head({ doctor }) {
- // تبدیل img array به string
- const doctorImage = imageUrl(doctor?.img?.[0]?.url, "/assets/images/doctor.png");
-
// تبدیل specialties array به string
const expertiseText = doctor?.specialties
?.map((exp) => exp.name)
@@ -12,15 +8,13 @@ function Head({ doctor }) {
return (
-
diff --git a/components/doctor/detailDoctor/Title.js b/components/doctor/detailDoctor/Title.js
index d4bc9a3..bfe836f 100644
--- a/components/doctor/detailDoctor/Title.js
+++ b/components/doctor/detailDoctor/Title.js
@@ -4,23 +4,19 @@ import TextLoading from "@/app/component/loading/Text";
import LikeDI from "@/components/icons/LikeDI";
import StarDI from "@/components/icons/StarDI";
import TickCircle from "@/components/icons/TickCircle";
-import Image from "next/image";
-import { imageUrl } from "@/helper";
+import DoctorAvatar from "@/app/component/DoctorAvatar";
function Title({ doctor }) {
return (