Files
nobat724_front/app/clinics/page.js
T

64 lines
2.4 KiB
JavaScript

import { fetchReq } from "@/lib/req";
import ClinicsPage from "@/components/clinics";
import Layout from "@/components/layout/StLayout";
import { getStateInfo } from "@/lib/getStateInfo";
import { buildClinicParams } from "@/helper";
export async function generateMetadata() {
const { matchedCity, matchedState } = await getStateInfo();
const siteName = matchedCity?.site_name || "نوبت 724";
const cityName = matchedCity?.name || matchedState?.name || "";
const title = cityName
? `کلینیک‌های ${cityName} | جستجو و رزرو نوبت | ${siteName}`
: `جستجوی کلینیک و مراکز درمانی | ${siteName}`;
const description = cityName
? `لیست کلینیک‌ها و مراکز درمانی در ${cityName}. رزرو آنلاین نوبت از بهترین مراکز درمانی ${cityName}.`
: `جستجوی کلینیک‌ها و مراکز درمانی در سراسر کشور. رزرو آنلاین نوبت سریع و آسان.`;
const image = "https://www.nobat724.com/assets/images/logo.png";
return {
title,
description,
openGraph: { title, description, images: [image] },
twitter: { card: "summary_large_image", title, description, images: [image] },
};
}
export default async function Clinics({ searchParams }) {
const awaitedSearchParams = await searchParams;
const { matchedCity, matchedState, isRoot } = await getStateInfo();
const API_URL = process.env.NEXT_PUBLIC_API_URL;
const stateParams = awaitedSearchParams.state;
const cityParams = awaitedSearchParams.city;
let clinics;
try {
// Params
let newSearchParams = awaitedSearchParams;
// Conditional State — روی دامنهٔ ریشه (nobat724) فیلتر اعمال نمی‌شود.
if (stateParams) newSearchParams.state = stateParams;
else if (matchedState && !isRoot) newSearchParams.state = matchedState.name;
// Conditional City
if (cityParams) newSearchParams.city = cityParams;
else if (matchedCity && !isRoot) newSearchParams.city = matchedCity.name;
const params = buildClinicParams(newSearchParams);
// Req
clinics = await fetchReq(`${API_URL}/api/v1/clinics`, {
params,
});
} catch (err) { }
return (
<Layout name="/clinics">
<ClinicsPage
clinics={clinics}
matchedCity={matchedCity}
matchedState={matchedState}
/>
</Layout>
);
}