From 8a24579a50a27cedffcefa66c35b089bca7d52ff Mon Sep 17 00:00:00 2001 From: hamed <15238-genius.ha@users.noreply.drupalcode.org> Date: Thu, 30 Jul 2026 09:16:13 +0330 Subject: [PATCH] refactor: remove FEATURE flags for doctor ratings and sharing in components --- app/doctor/[slug]/page.js | 5 +---- components/doctor/detailDoctor/Title.js | 3 +-- components/doctor/detailDoctor/cards/comments/index.js | 6 +----- components/doctor/detailDoctor/index.js | 9 +++------ components/doctor/index.js | 9 +++------ components/doctor/poster/PosterLight.js | 5 +++-- components/doctor/poster/index.js | 5 +++-- config/features.js | 10 ++++------ 8 files changed, 19 insertions(+), 33 deletions(-) diff --git a/app/doctor/[slug]/page.js b/app/doctor/[slug]/page.js index fc71ef2..bbb1d5f 100644 --- a/app/doctor/[slug]/page.js +++ b/app/doctor/[slug]/page.js @@ -10,7 +10,6 @@ import { isNoindexDoctor } from "@/lib/entityQuality"; import specialtiesData from "@/data/specialties.json"; import { safeJsonLd } from "@/lib/sanitize"; import { imageUrl, doctorTitle } from "@/helper"; -import { FEATURES } from "@/config/features"; const API_URL = process.env.NEXT_PUBLIC_API_URL; const FALLBACK_IMG = "/assets/images/og-image.png"; @@ -190,9 +189,7 @@ async function Doctor({ params }) { url: imageUrl(doctor.img[0].url), }, }), - // امتیاز وقتی در صفحه پنهان است نباید در schema بیاید؛ گوگل داده ساخت‌یافتهٔ - // نامرئی را نقض راهنما می‌داند. - ...(FEATURES.doctorRatings && !isUnclaimed && Number(doctor.point) > 0 && { + ...(!isUnclaimed && Number(doctor.point) > 0 && { aggregateRating: { "@type": "AggregateRating", ratingValue: doctor.point, diff --git a/components/doctor/detailDoctor/Title.js b/components/doctor/detailDoctor/Title.js index e7d6778..b5e8841 100644 --- a/components/doctor/detailDoctor/Title.js +++ b/components/doctor/detailDoctor/Title.js @@ -11,7 +11,6 @@ import Telegram from "@/components/icons/Telegram"; import Aparat from "@/components/icons/Aparat"; import Youtube from "@/components/icons/Youtube"; import Linkedin from "@/components/icons/Linkedin"; -import { FEATURES } from "@/config/features"; const SOCIAL_ICONS = { instagram: Instagram, @@ -23,7 +22,7 @@ const SOCIAL_ICONS = { function Title({ doctor }) { const isUnclaimed = doctor?.owner_status !== "claimed"; - const hasRating = FEATURES.doctorRatings && Number(doctor?.point) > 0; + const hasRating = Number(doctor?.point) > 0; return (
diff --git a/components/doctor/detailDoctor/cards/comments/index.js b/components/doctor/detailDoctor/cards/comments/index.js index dc31069..0c31ddb 100644 --- a/components/doctor/detailDoctor/cards/comments/index.js +++ b/components/doctor/detailDoctor/cards/comments/index.js @@ -3,7 +3,6 @@ import Chart from "./chart"; import Comment from "@/app/component/comment"; import ModalAnswer from "./modal/ModalAnswer"; -import { FEATURES } from "@/config/features"; function Comments({ doctor, comments, rateAggregate }) { const isUnclaimed = doctor?.owner_status !== "claimed"; @@ -31,10 +30,7 @@ function Comments({ doctor, comments, rateAggregate }) {

) : ( <> - {/* نمودار امتیاز/رضایت فعلاً پنهان است؛ خودِ نظرات نمایش داده می‌شود. */} - {FEATURES.doctorRatings && ( - - )} + )} diff --git a/components/doctor/detailDoctor/index.js b/components/doctor/detailDoctor/index.js index baa807e..bc94c31 100644 --- a/components/doctor/detailDoctor/index.js +++ b/components/doctor/detailDoctor/index.js @@ -4,16 +4,13 @@ import Title from "./Title"; import AboutDcotor from "./cards/AboutDcotor"; import Comments from "./cards/comments"; import Locations from "./cards/locations"; -import { FEATURES } from "@/config/features"; function DetailDoctor({ doctor, comments, rateAggregate, addresses, bookableAddressUuids = [] }) { return (
- {FEATURES.doctorShare && ( -
- -
- )} +
+ +
<Link /> <AboutDcotor doctor={doctor} /> diff --git a/components/doctor/index.js b/components/doctor/index.js index 33ce6f5..7f13cf1 100644 --- a/components/doctor/index.js +++ b/components/doctor/index.js @@ -7,7 +7,6 @@ import CustomLoading from "@/app/component/loading/Custom"; import Faq from "@/components/specialties/detail/Faq"; import specialtiesData from "@/data/specialties.json"; import { doctorTitle } from "@/helper"; -import { FEATURES } from "@/config/features"; // مقصد تمیز صفحهٔ فرود تخصص؛ اگر تخصص slug نداشت، لیست پزشکان با کوئری قدیمی. const specialtyHref = (name) => { @@ -36,11 +35,9 @@ function DoctorPage({ doctor, comments, rateAggregate, addresses, bookableAddres <p className="text-[#525252] text-nowrap mr-1">{doctorTitle(doctor?.name)}</p> </div> </CustomLoading> - {FEATURES.doctorShare && ( - <div className="flex lg:hidden"> - <Share data={doctor} /> - </div> - )} + <div className="flex lg:hidden"> + <Share data={doctor} /> + </div> </div> <div className="flex items-start justify-center gap-6 mt-[30px]"> <DetailDoctor diff --git a/components/doctor/poster/PosterLight.js b/components/doctor/poster/PosterLight.js index c59075d..37f3d9d 100644 --- a/components/doctor/poster/PosterLight.js +++ b/components/doctor/poster/PosterLight.js @@ -7,6 +7,7 @@ import { getStateInfoClient } from "@/lib/getStateInfoClient"; import { doctorTitle } from "@/helper"; import StarDI from "@/components/icons/StarDI"; +import { FEATURES } from "@/config/features"; const ACCENT = "#16528C"; const ACCENT_LIGHT = "#2E77C4"; @@ -36,8 +37,8 @@ function PosterLight({ data, onQrReady }) { const badges = [ Number(data?.experience) > 0 && { label: `${data.experience} سال تجربه` }, - (data?.point ?? 0) > 0 && { icon: <StarDI />, label: `امتیاز ${data.point}` }, - (data?.satisfaction ?? 0) > 0 && { label: `${data.satisfaction}% رضایت بیماران` }, + FEATURES.posterRatings && (data?.point ?? 0) > 0 && { icon: <StarDI />, label: `امتیاز ${data.point}` }, + FEATURES.posterRatings && (data?.satisfaction ?? 0) > 0 && { label: `${data.satisfaction}% رضایت بیماران` }, ].filter(Boolean); return ( diff --git a/components/doctor/poster/index.js b/components/doctor/poster/index.js index 1eb5a47..592f72f 100644 --- a/components/doctor/poster/index.js +++ b/components/doctor/poster/index.js @@ -13,6 +13,7 @@ import TelefonPoster from "@/components/icons/TelefonPoster"; import Instagram from "@/components/icons/Instagram"; import Telegram from "@/components/icons/Telegram"; import Whatsapp from "@/components/icons/Whatsapp"; +import { FEATURES } from "@/config/features"; const POSTER_BG = "linear-gradient(160deg, #0B2A4A 0%, #16528C 52%, #2E77C4 100%)"; @@ -66,11 +67,11 @@ function Poster({ data, onQrReady }) { icon: <span className="text-[#F6B93B] text-[20px] leading-none">◆</span>, label: `${data.experience} سال تجربه`, }, - (data?.point ?? 0) > 0 && { + FEATURES.posterRatings && (data?.point ?? 0) > 0 && { icon: <StarDI />, label: `امتیاز ${data.point}`, }, - (data?.satisfaction ?? 0) > 0 && { + FEATURES.posterRatings && (data?.satisfaction ?? 0) > 0 && { icon: <span className="text-[#4ADE80] text-[20px] leading-none">♥</span>, label: `${data.satisfaction}% رضایت`, }, diff --git a/config/features.js b/config/features.js index 1763a07..ebafc63 100644 --- a/config/features.js +++ b/config/features.js @@ -4,11 +4,9 @@ */ export const FEATURES = { /** - * دکمهٔ «اشتراک گذاری» صفحهٔ پزشک. ساخت **پوستر** هم داخل همین مودال است، پس - * خاموش‌کردن این سوییچ هر دو را با هم پنهان می‌کند. + * امتیاز و درصد رضایت **روی پوسترِ اشتراک‌گذاری** (هر دو طرح تیره و روشن). + * بقیهٔ نشان‌های پوستر (سابقه، تخصص، تماس، QR) دست‌نخورده می‌مانند و خودِ + * صفحهٔ پزشک هم امتیازش را مثل قبل نشان می‌دهد. */ - doctorShare: false, - - /** امتیاز و درصد رضایت کاربران — هم زیر نام پزشک و هم نمودارِ بخش نظرات. */ - doctorRatings: false, + posterRatings: false, };