first commit
This commit is contained in:
65
src/app/[lang]/medical-services/[slug]/page.tsx
Normal file
65
src/app/[lang]/medical-services/[slug]/page.tsx
Normal file
@@ -0,0 +1,65 @@
|
||||
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;
|
||||
}
|
||||
|
||||
export default async function SingleMedicalService({
|
||||
params,
|
||||
}: {
|
||||
params: Promise<{slug: string; lang: "fa" | "en"}>;
|
||||
}) {
|
||||
const {slug, lang} = await params;
|
||||
const data = (await getData(slug)) || [];
|
||||
|
||||
if (!data || !data.length) {
|
||||
return notFound();
|
||||
}
|
||||
|
||||
return (
|
||||
<>
|
||||
<PageHeaderSlider
|
||||
lang={lang}
|
||||
pageTitle={data[0].title[lang]}
|
||||
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]}
|
||||
</h3>
|
||||
<div className="mt-10 space-y-6">
|
||||
{data[0].sub_packages.map((item:sub_packages_data_type, index: number) =>
|
||||
item?.description?.[lang] ? (
|
||||
<Accordion
|
||||
key={item.id}
|
||||
title={item.title[lang]}
|
||||
index={index}
|
||||
description={item?.description?.[lang] ?? ""}
|
||||
services={item?.services?.[lang] ?? ""}
|
||||
price={item?.price?.[lang] ?? ""}
|
||||
thumbnail={item?.thumbnail ?? ""}
|
||||
notes={item?.notes?.[lang] ?? ""}
|
||||
/>
|
||||
) : (
|
||||
""
|
||||
)
|
||||
)}
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
</>
|
||||
);
|
||||
}
|
||||
124
src/app/[lang]/medical-services/page.tsx
Normal file
124
src/app/[lang]/medical-services/page.tsx
Normal file
@@ -0,0 +1,124 @@
|
||||
import PageHeaderSlider from "@/ui/page-header-slider/PageHeaderSlider";
|
||||
import Link from "next/link";
|
||||
import React, {lazy, Suspense} from "react";
|
||||
import {packages_types} from "@/types";
|
||||
import { getDictionary } from "../dictionaries";
|
||||
import { Metadata } from "next";
|
||||
import { pages_titles } from "@/constants";
|
||||
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)
|
||||
|
||||
return (
|
||||
<>
|
||||
<PageHeaderSlider
|
||||
pageTitle={medical_packages_headTitle}
|
||||
lang={lang}
|
||||
imageSrc="/header-slider-1.webp"
|
||||
/>
|
||||
<section className="mb-24 mt-10 container ">
|
||||
<div className="bg-[#F8F9FA] rounded-4xl px-40 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%] ">
|
||||
{medical_packages_headTitle}
|
||||
</h3>
|
||||
<div className="mt-16">
|
||||
{/* <p className="text-justify text-[1.2rem] leading-relaxed text-[#454547]">
|
||||
</p>
|
||||
<br />
|
||||
<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) => {
|
||||
const LazyComponent = lazy(
|
||||
() => import(`@/ui/components/icons/${item.svg}.tsx`)
|
||||
);
|
||||
return (
|
||||
<div className="col-span-4" key={item.id}>
|
||||
<Link
|
||||
href={`/medical-services/${item.slug}`}
|
||||
className="flex flex-col items-center justify-center py-10 w-full h-full rounded-xl border-[1px] border-neutral-200 bg-white hover:border-secondary"
|
||||
>
|
||||
<span>
|
||||
<Suspense
|
||||
fallback={<div>در حال بارگذاری...</div>}
|
||||
key={item.id}
|
||||
>
|
||||
<LazyComponent />
|
||||
</Suspense>
|
||||
</span>
|
||||
<span className="text-xl font-medium mt-4">
|
||||
{item.title[lang]}
|
||||
</span>
|
||||
</Link>
|
||||
</div>
|
||||
);
|
||||
})}
|
||||
|
||||
{/* <div className="col-span-4 rounded-xl border-[1px] border-neutral-200 bg-white flex flex-col items-center justify-center py-10">
|
||||
<span>
|
||||
<HysterectomySvg />
|
||||
</span>
|
||||
<span className="text-xl font-medium mt-4">
|
||||
پکیج هیسترکتومی
|
||||
</span>
|
||||
</div>
|
||||
<div className="col-span-4 rounded-xl border-[1px] border-neutral-200 bg-white flex flex-col items-center justify-center py-10">
|
||||
<span>
|
||||
<CardiacSvg />
|
||||
</span>
|
||||
<span className="text-xl font-medium mt-4">پکیج قلب</span>
|
||||
</div>
|
||||
<div className="col-span-4 rounded-xl border-[1px] border-neutral-200 bg-white flex flex-col items-center justify-center py-10">
|
||||
<span>
|
||||
<BeautySvg />
|
||||
</span>
|
||||
<span className="text-xl font-medium mt-4">پکیج زیبایی</span>
|
||||
</div>
|
||||
<div className="col-span-4 rounded-xl border-[1px] border-neutral-200 bg-white flex flex-col items-center justify-center py-10">
|
||||
<span className="text-blue-primary">
|
||||
<OrthopedicSvg />
|
||||
</span>
|
||||
<span className="text-xl font-medium mt-4">پکیج ارتوپدی</span>
|
||||
</div>
|
||||
<div className="col-span-4 rounded-xl border-[1px] border-neutral-200 bg-white flex flex-col items-center justify-center py-10">
|
||||
<span className="text-blue-primary">
|
||||
<BrainSurgerySvg />
|
||||
</span>
|
||||
<span className="text-xl font-medium mt-4">پکیج جراحی مغز</span>
|
||||
</div>
|
||||
<div className="col-span-4 rounded-xl border-[1px] border-neutral-200 bg-white flex flex-col items-center justify-center py-10">
|
||||
<span className="text-blue-primary">
|
||||
<EntSvg />
|
||||
</span>
|
||||
<span className="text-xl font-medium mt-4">
|
||||
پکیج گوش و حلق و بینی
|
||||
</span>
|
||||
</div> */}
|
||||
{/* <Accordion items={PACKAGE_SERVICES} /> */}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
</>
|
||||
);
|
||||
}
|
||||
Reference in New Issue
Block a user