diff --git a/helper/index.js b/helper/index.js index 6d013c2..682a756 100644 --- a/helper/index.js +++ b/helper/index.js @@ -10,6 +10,40 @@ import cities from "@/data/city.json"; export const numberToArStyle = (num) => num?.toLocaleString("ar-AE") || ""; +// عناوین احترامی که در نام ذخیره‌شدهٔ پزشک وجود ندارند و باید پیش از جستجو حذف شوند +const NAME_HONORIFICS = [ + "دکتر", + "دكتر", + "پروفسور", + "خانم", + "آقای", + "اقای", + "آقا", + "اقا", + "جناب", + "سرکار", +]; + +// «دکتر مهدیه» → «مهدیه» تا جستجوی نام در API نتیجه بدهد. +// اگر بعد از حذف چیزی نماند، مقدار اصلی برگردانده می‌شود. +export const normalizeDoctorNameQuery = (value) => { + if (typeof value !== "string") return value; + + let result = value.trim(); + let changed = true; + while (changed) { + changed = false; + for (const honorific of NAME_HONORIFICS) { + if (result === honorific || result.startsWith(`${honorific} `)) { + result = result.slice(honorific.length).trim(); + changed = true; + } + } + } + + return result || value.trim(); +}; + export const isActiveURL = (link, name) => link === name; // نگاشت پاسخ API بلاگ (image_url/tags/created_at/body/author-object) به شکلی که @@ -461,7 +495,7 @@ export const QueryForDoctorsReq = (newFilter) => { if (newFilter.gender && newFilter.gender !== "هر دو") params.gender = newFilter.gender === "مرد" ? "man" : "woman"; - if (newFilter.name) params.name = newFilter.name; + if (newFilter.name) params.name = normalizeDoctorNameQuery(newFilter.name); if (newFilter.sort) { if (newFilter.sort === 3) params.sort = "ASC"; @@ -502,7 +536,7 @@ export const QueryForDoctorsClinicReq = (newFilter) => { if (newFilter.gender && newFilter.gender !== "هر دو") params.gender = newFilter.gender === "مرد" ? "man" : "woman"; - if (newFilter.name) params.name = newFilter.name; + if (newFilter.name) params.name = normalizeDoctorNameQuery(newFilter.name); if (newFilter.sort) { if (newFilter.sort === 3) params.sort = "ASC"; @@ -571,7 +605,7 @@ export const buildDoctorParams = (searchParams) => { // 🔹 name if (searchParams.name) { - params.name = searchParams.name; + params.name = normalizeDoctorNameQuery(searchParams.name); } // 🔹 sort (3 = ASC, 4|5 = DESC) diff --git a/lib/buildSearchUrl.js b/lib/buildSearchUrl.js index e0fd18e..0d88ae7 100644 --- a/lib/buildSearchUrl.js +++ b/lib/buildSearchUrl.js @@ -1,17 +1,18 @@ import specialties from "@/data/specialties.json"; +import { normalizeDoctorNameQuery } from "@/helper"; export function buildSearchUrl(data = {}) { const filters = {}; if (data.city && data.city !== "نوبت 724") filters.city = data.city; if (data.province) filters.state = data.province; if (data.search) { - const specialtyItem = specialties.find((item) => - item.name.includes(data.search) - ); + // عناوین احترامی («دکتر قلب» → «قلب») حذف می‌شوند تا تطبیق تخصص و نام درست کار کند + const term = normalizeDoctorNameQuery(data.search); + const specialtyItem = specialties.find((item) => item.name.includes(term)); if (specialtyItem) { filters.specialty = specialtyItem.name; } else { - filters.name = data.search; + filters.name = term; } }