second commit

This commit is contained in:
2025-11-18 23:11:35 +03:30
parent acfea140a3
commit 4aa26ed219
17 changed files with 4863 additions and 3568 deletions

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -11,17 +11,6 @@ export const metadata: Metadata = {
title: pages_titles.doctors['fa'] + ' | ' +'بیمارستان شمال',
description: "Shomal Hospital IPD Doctors page",
};
async function getDoctorsData() {
const res = await fetch(`http://localhost:4000/doctors`, {cache: "no-cache"});
if (!res.ok) {
return [];
}
const data = await res.json();
// console.log(data)
return data;
}
export default async function DoctorsPage({
params,
@@ -32,11 +21,10 @@ export default async function DoctorsPage({
}) {
const {lang} = await params;
const {name = "", expertise = ""} = await searchParams;
const data = await getDoctorsData();
const {our_doctors,license_number,search_by_name,search,select_this}=await getDictionary(lang)
const filteredData = data.filter((doctor:DoctorDataType) => {
const {our_doctors,license_number,search_by_name,search,select_this,doctors}=await getDictionary(lang)
const filteredData = doctors.filter((doctor) => {
const nameMatch = name
? Object.values(doctor.fullname)
? Object.values(doctor.fullname.toString())
.join(" ")
.toLowerCase()
.includes(name.toLowerCase())
@@ -68,7 +56,7 @@ export default async function DoctorsPage({
dict={{search,search_by_name,select_this}}
/>
<div className="grid grid-cols-4 gap-10 mt-10 ">
{filteredData?.map((doctor: DoctorDataType) => (
{filteredData?.map((doctor) => (
<div
key={doctor.id}
className="lg:col-span-1 col-span-3 rounded-2xl border-[1px] border-neutral-200 overflow-hidden relative"
@@ -81,12 +69,12 @@ export default async function DoctorsPage({
className="object-fill"
/>
<span className="absolute top-2 right-2 p-2 rounded-full text-center text-xs font-semibold bg-blue-primary text-white flex items-center whitespace-nowrap">
{doctor.category.name[lang]}
{doctor.category.name.toString()}
</span>
</div>
<div className=" h-full px-6 py-10 space-y-2 bg-white">
<h3 className="lg:text-xl text-lg font-black text-black">
{doctor.fullname[lang]}
{doctor.fullname.toString()}
</h3>
<div>
@@ -97,7 +85,7 @@ export default async function DoctorsPage({
key={item.id}
className="list-inside list-disc md:text-base text-sm font-medium"
>
{item.name[lang]}
{item.name.toString()}
</li>
))}
</ul>

View File

@@ -1,20 +1,8 @@
import { sub_packages_data_type } from "@/types";
import Accordion from "@/ui/components/global/Accordion";
import PageHeaderSlider from "@/ui/page-header-slider/PageHeaderSlider";
import {notFound} from "next/navigation";
import React from "react";
async function getData(slug: string) {
const res = await fetch(
`http://localhost:4000/medical_packages?slug=${slug}`
);
if (!res.ok) {
return [];
}
const data = await res.json();
return data;
}
import {getDictionary} from "../../dictionaries";
export default async function SingleMedicalService({
params,
@@ -22,9 +10,11 @@ export default async function SingleMedicalService({
params: Promise<{slug: string; lang: "fa" | "en"}>;
}) {
const {slug, lang} = await params;
const data = (await getData(slug)) || [];
const {medical_packages_data} = await getDictionary(lang);
if (!data || !data.length) {
const data = medical_packages_data.find((p) => p.slug.toString() === slug);
if (!data) {
return notFound();
}
@@ -32,26 +22,26 @@ export default async function SingleMedicalService({
<>
<PageHeaderSlider
lang={lang}
pageTitle={data[0].title[lang]}
pageTitle={data.title.toString()}
imageSrc="/header-slider-1.webp"
/>
<section className="mt-16 container">
<div className="bg-[#F8F9FA] rounded-4xl px-20 py-16">
<h3 className="text-[3em] font-black text-blue-primary text-center relative before:absolute before:w-[100px] before:block before:bg-secondary before:-bottom-5 before:h-[2px] before:left-[50%] before:translate-x-[-50%] ">
انواع خدمات پزشکی {data[0]?.title[lang]}
انواع خدمات پزشکی {data?.title.toString()}
</h3>
<div className="mt-10 space-y-6">
{data[0].sub_packages.map((item:sub_packages_data_type, index: number) =>
item?.description?.[lang] ? (
{data.sub_packages.map((item, index: number) =>
item?.description?.toString() ? (
<Accordion
key={item.id}
title={item.title[lang]}
title={item.title.toString()}
index={index}
description={item?.description?.[lang] ?? ""}
services={item?.services?.[lang] ?? ""}
price={item?.price?.[lang] ?? ""}
description={item?.description?.toString() ?? ""}
services={item?.services?.toString() ?? ""}
price={item?.price?.toString() ?? ""}
thumbnail={item?.thumbnail ?? ""}
notes={item?.notes?.[lang] ?? ""}
notes={item?.notes?.toString() || ""}
/>
) : (
""

View File

@@ -9,25 +9,15 @@ export const metadata: Metadata = {
title: pages_titles.medical_services['fa'] + ' | ' +'بیمارستان شمال',
description: "Shomal Hospital IPD medical services page",
};
async function getHeadPackages() {
const res = await fetch(
`http://localhost:4000/medical_packages?is_parent=true`
);
if (!res.ok) {
return [];
}
const data = await res.json();
return data;
}
export default async function MedicalServices({
params,
}: {
params: Promise<{lang: "fa" | "en"}>;
}) {
const packages = await getHeadPackages();
const {lang} = await params;
const {medical_packages_headTitle,our_medical_packages} =await getDictionary(lang)
const {medical_packages_headTitle,our_medical_packages,medical_packages_data} =await getDictionary(lang)
return (
<>
@@ -48,7 +38,7 @@ export default async function MedicalServices({
<br /> */}
<div className="introduction_description_subText" dangerouslySetInnerHTML={{__html:our_medical_packages}}/>
<div className="w-full mt-20 grid grid-cols-12 gap-6">
{packages.map((item: packages_types) => {
{medical_packages_data.map((item) => {
const LazyComponent = lazy(
() => import(`@/ui/components/icons/${item.svg}.tsx`)
);
@@ -67,7 +57,7 @@ export default async function MedicalServices({
</Suspense>
</span>
<span className="text-xl font-medium mt-4">
{item.title[lang]}
{item.title.toString()}
</span>
</Link>
</div>