feat: normalize doctor name query to enhance search functionality and improve URL building
This commit is contained in:
+37
-3
@@ -10,6 +10,40 @@ import cities from "@/data/city.json";
|
|||||||
|
|
||||||
export const numberToArStyle = (num) => num?.toLocaleString("ar-AE") || "";
|
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;
|
export const isActiveURL = (link, name) => link === name;
|
||||||
|
|
||||||
// نگاشت پاسخ API بلاگ (image_url/tags/created_at/body/author-object) به شکلی که
|
// نگاشت پاسخ API بلاگ (image_url/tags/created_at/body/author-object) به شکلی که
|
||||||
@@ -461,7 +495,7 @@ export const QueryForDoctorsReq = (newFilter) => {
|
|||||||
if (newFilter.gender && newFilter.gender !== "هر دو")
|
if (newFilter.gender && newFilter.gender !== "هر دو")
|
||||||
params.gender = newFilter.gender === "مرد" ? "man" : "woman";
|
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) {
|
||||||
if (newFilter.sort === 3) params.sort = "ASC";
|
if (newFilter.sort === 3) params.sort = "ASC";
|
||||||
@@ -502,7 +536,7 @@ export const QueryForDoctorsClinicReq = (newFilter) => {
|
|||||||
if (newFilter.gender && newFilter.gender !== "هر دو")
|
if (newFilter.gender && newFilter.gender !== "هر دو")
|
||||||
params.gender = newFilter.gender === "مرد" ? "man" : "woman";
|
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) {
|
||||||
if (newFilter.sort === 3) params.sort = "ASC";
|
if (newFilter.sort === 3) params.sort = "ASC";
|
||||||
@@ -571,7 +605,7 @@ export const buildDoctorParams = (searchParams) => {
|
|||||||
|
|
||||||
// 🔹 name
|
// 🔹 name
|
||||||
if (searchParams.name) {
|
if (searchParams.name) {
|
||||||
params.name = searchParams.name;
|
params.name = normalizeDoctorNameQuery(searchParams.name);
|
||||||
}
|
}
|
||||||
|
|
||||||
// 🔹 sort (3 = ASC, 4|5 = DESC)
|
// 🔹 sort (3 = ASC, 4|5 = DESC)
|
||||||
|
|||||||
@@ -1,17 +1,18 @@
|
|||||||
import specialties from "@/data/specialties.json";
|
import specialties from "@/data/specialties.json";
|
||||||
|
import { normalizeDoctorNameQuery } from "@/helper";
|
||||||
|
|
||||||
export function buildSearchUrl(data = {}) {
|
export function buildSearchUrl(data = {}) {
|
||||||
const filters = {};
|
const filters = {};
|
||||||
if (data.city && data.city !== "نوبت 724") filters.city = data.city;
|
if (data.city && data.city !== "نوبت 724") filters.city = data.city;
|
||||||
if (data.province) filters.state = data.province;
|
if (data.province) filters.state = data.province;
|
||||||
if (data.search) {
|
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) {
|
if (specialtyItem) {
|
||||||
filters.specialty = specialtyItem.name;
|
filters.specialty = specialtyItem.name;
|
||||||
} else {
|
} else {
|
||||||
filters.name = data.search;
|
filters.name = term;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user