import moment from "jalali-moment"; import { toast } from "react-toastify"; import specialties from "@/data/specialties.json"; export const numberToArStyle = (num) => num?.toLocaleString("ar-AE") || ""; export const isActiveURL = (link, name) => link === name; export const convertToJalali = (date) => { const currentDate = date; const jalaliDate = moment(currentDate).format("jYYYY/jM/jD"); const jalaliYear = moment(jalaliDate, "jYYYY/jM/jD").jYear(); const jalaliMonth = moment(jalaliDate, "jYYYY/jM/jD").jMonth() + 1; const jalaliDay = moment(jalaliDate, "jYYYY/jM/jD").jDate(); return `${jalaliYear}/${jalaliMonth}/${jalaliDay}`; }; export const handleTwoLength = (value) => String(value).length === 1 ? `0${value}` : value; export const checkAllValues = (data) => { for (let key in data) { if (typeof data[key] === "object" && data[key] !== null) { if ("value" in data[key]) { if (!data[key].value) { return false; } } else { if (!checkAllValues(data[key])) { return false; } } } } return true; }; export const checkTimes = (arr) => { return arr.map((day) => { const hasMorningTime = day.morning_time.some((time) => time !== ""); const hasEveningTime = day.evening_time.some((time) => time !== ""); return hasMorningTime && hasEveningTime; }); }; export const uploadImage = async (event) => { let obj = { file: "", blob: "", }; const file = event.target.files[0]; if (file) { obj.file = file; const readFileAsDataURL = (file) => { return new Promise((resolve, reject) => { const reader = new FileReader(); reader.onload = () => resolve(reader.result); reader.onerror = (error) => reject(error); reader.readAsDataURL(file); }); }; try { obj.blob = await readFileAsDataURL(file); return obj; } catch (error) { console.error("Error reading file: ", error); throw error; } } else { throw new Error("No file selected"); } }; export const alert = (type, text, prop) => { toast[type](

پیغام{" "} {type === "error" ? "خطا" : type === "warning" ? "هشدار" : type === "info" ? "اعلام" : "موفقیت"}

{text}

, { prop } ); }; export const addLabelToList = (list) => list.map((item) => { return { ...item, label: item.name, }; }); export const formatPhoneNumber = (input) => { if (typeof input !== "string") input = String(input); const normalized = input .replace(/[\u06F0-\u06F9]/g, (d) => String(d.charCodeAt(0) - 0x06f0)) .replace(/[\u0660-\u0669]/g, (d) => String(d.charCodeAt(0) - 0x0660)); const digits = normalized.replace(/\D/g, ""); const trimmed = digits.substring(0, 9); const match = trimmed.match(/^(\d{0,2})(\d{0,3})(\d{0,4})$/); if (!match) return trimmed; return [match[1], match[2], match[3]].filter(Boolean).join(" "); }; export function validatePhoneNumber(input) { const digits = input.replace(/\D/g, ""); if (!digits) { return { valid: false, text: "شماره موبایل نمی‌تواند خالی باشد." }; } if (digits.length !== 9) { return { valid: false, text: "شماره موبایل باید دقیقا 11 رقم باشد." }; } const isValid = /^[1-9]\d{8}$/.test(digits); if (!isValid) { return { valid: false, text: "شماره موبایل نامعتبر است." }; } return { valid: true, text: null }; } export const searchOnList = (list, value, name) => { let newList = list; newList = list.filter((item) => item[name]?.toLowerCase()?.includes(value)); return newList; }; export function clearFilterParams(router, listRemove) { const currentParams = new URLSearchParams(window.location.search); const keysToRemove = listRemove; keysToRemove.forEach((key) => currentParams.delete(key)); const queryString = currentParams.toString(); const newUrl = queryString ? `/doctors?${queryString}` : "/doctors"; router.push(newUrl); } export const filterList = (data) => { const parentList = specialties.filter((item) => !item.parent); const childrenList = specialties.filter((item) => item.parent); const filteredChildrenList = data && data.category ? childrenList.filter((item) => item.parent === data.category.id) : []; return { parentList: parentList, childrenList: filteredChildrenList, }; }; export function getCleanNumberValue(value, defaultValue = 0) { if (typeof value !== "string") value = String(value); const persianArabicToEnglish = value .replace(/[\u06F0-\u06F9]/g, (d) => String(d.charCodeAt(0) - 0x06f0)) .replace(/[\u0660-\u0669]/g, (d) => String(d.charCodeAt(0) - 0x0660)); const cleaned = persianArabicToEnglish.replace(/[^0-9.]/g, ""); const number = parseFloat(cleaned); return isNaN(number) ? defaultValue : number; } export const changeNumToDefault = (num) => `09${num.replace(/\D/g, "")}`;