feat: refactor product components and add sitemap support

- Updated product components to use new IPageParams interface for better type safety.
- Added next-sitemap configuration and generated sitemap.xml and robots.txt files.
- Removed deprecated ProductCard component and its associated types.
- Enhanced internationalization support across various pages.
This commit is contained in:
2025-06-09 11:29:54 +03:30
parent 7073310a22
commit 429256f512
27 changed files with 187 additions and 87 deletions
+2 -3
View File
@@ -1,15 +1,14 @@
import images from '@/assets/images/images';
import InnerPageBanner from '@/components/layout/innerPages/banner';
import AboutTopInfo from '@/components/pages/about/TopInfo';
import { ILayoutLocaleParams } from '@/models/layout';
import { useTranslations } from 'next-intl';
import { IPageParams } from '@/models/layout';
import { setRequestLocale } from 'next-intl/server';
import { getTranslations } from 'next-intl/server';
export default async function AboutUs({
params,
}: Readonly<{
params: ILayoutLocaleParams;
params: IPageParams;
}>) {
const { locale } = await params;
+4 -7
View File
@@ -1,15 +1,12 @@
import images from '@/assets/images/images';
import InnerPageBanner from '@/components/layout/innerPages/banner';
import PostsGrid from '@/components/pages/blog/PostsGrid';
import { ILayoutLocaleParams } from '@/models/layout';
import { IPageParams } from '@/models/layout';
import { getTranslations } from 'next-intl/server';
export default async function Blog({
params,
}: {
params: ILayoutLocaleParams;
}) {
const t = await getTranslations({ locale: params.locale });
export default async function Blog({ params }: { params: IPageParams }) {
const paramsData = await params;
const t = await getTranslations({ locale: paramsData.locale });
return (
<main className="flex flex-col items-center justify-between">
+5 -7
View File
@@ -5,14 +5,12 @@ import ContactForm from '@/components/pages/contact/ContactMeForm';
import TouchUs from '@/components/pages/contact/TouchUs';
import Image from 'next/image';
import { getTranslations } from 'next-intl/server';
import { ILayoutLocaleParams } from '@/models/layout';
import { IPageParams } from '@/models/layout';
export default async function Contact({
params,
}: {
params: ILayoutLocaleParams;
}) {
const t = await getTranslations({ locale: params.locale });
export default async function Contact({ params }: { params: IPageParams }) {
const { locale } = await params;
const t = await getTranslations({ locale });
return (
<main className="flex flex-col items-center justify-between">
+2 -8
View File
@@ -2,24 +2,18 @@ import Footer from '@/components/layout/footer/Footer';
import '@/app/globals.css';
import 'leaflet/dist/leaflet.css';
import { notFound } from 'next/navigation';
// import { cookies } from 'next/headers';
import { NextIntlClientProvider } from 'next-intl';
import type { ILayoutLocaleParams } from '@/models/layout.d';
import { cookies } from 'next/headers';
import type { IPageParams } from '@/models/layout.d';
export default async function RootLayout({
children,
params,
}: Readonly<{
children: React.ReactNode;
params: ILayoutLocaleParams;
params: IPageParams;
}>) {
const paramsData = await params;
const locale = paramsData.locale;
// const cookieStore = await cookies();
// // Set locale cookie on the server
// cookieStore.set('locale', locale, { path: '/', httpOnly: false });
const fontClass = locale === 'fa' ? 'font-fa' : 'font-en';
+3 -7
View File
@@ -2,17 +2,13 @@ import Header from '@/components/layout/header';
import AboutTopInfo from '@/components/pages/about/TopInfo';
import HomeStorySection from '@/components/pages/home/HomeStorySection';
import HomePageProducts from '@/components/pages/home/Products';
import { ILayoutLocaleParams } from '@/models/layout';
import type { IPageParams } from '@/models/layout.d';
import { getTranslations } from 'next-intl/server';
interface IPageParams {
params: ILayoutLocaleParams;
}
export default async function Home({ params }: IPageParams) {
export default async function Home({ params }: { params: IPageParams }) {
const { locale } = await params;
const t = await getTranslations({ locale });
await getTranslations({ locale });
return (
<main className="flex flex-col items-center justify-between">
@@ -3,22 +3,20 @@ import images from '@/assets/images/images';
import Breadcrumb from '@/components/layout/breadcrumb';
import { IBreadcrumbItem } from '@/components/layout/breadcrumb/breadcrumb';
import InnerPageBanner from '@/components/layout/innerPages/banner';
import Pagination from '@/components/layout/pagination';
import ProductCategoryCardInProducts from '@/components/pages/productCategories/ProductCategoryCardInProducts';
import ProductCard from '@/components/pages/products/ProductCard';
import ProductList from '@/components/pages/products/productList';
import { ILayoutLocaleParams } from '@/models/layout';
import { IPageParams } from '@/models/layout';
import { getProductCategoryById, getProducts } from '@/services/products';
import { getTranslations } from 'next-intl/server';
interface IParams extends ILayoutLocaleParams {
interface IParams {
product_category_id: string;
}
export default async function ProductPage({
params,
}: {
params: Promise<IParams>;
params: IPageParams<IParams>;
}) {
const { product_category_id: productCategoryId, locale } = await params;
const t = await getTranslations({ locale });
+4 -4
View File
@@ -2,17 +2,17 @@ import images from '@/assets/images/images';
import InnerPageBanner from '@/components/layout/innerPages/banner';
import ProductsCategoryCard from '@/components/pages/productCategories/ProductCategoryCard';
import type { IProductCategoryCardProps } from '@/components/pages/productCategories/productCategoryCard.d';
import { ILayoutLocaleParams } from '@/models/layout';
import { IPageParams } from '@/models/layout';
import { getProductCategories } from '@/services/products';
import { getTranslations } from 'next-intl/server';
export default async function ProductsPage({
params,
}: {
params: ILayoutLocaleParams;
params: IPageParams;
}) {
const awaitedParams = await params;
const t = await getTranslations({ locale: awaitedParams.locale });
const { locale } = await params;
const t = await getTranslations({ locale });
const productCategories: IProductCategoryCardProps[] =
await getProductCategories();
+4 -7
View File
@@ -1,15 +1,12 @@
import images from '@/assets/images/images';
import InnerPageBanner from '@/components/layout/innerPages/banner';
import ProjectsGrid from '@/components/pages/project/ProjectGrid';
import { ILayoutLocaleParams } from '@/models/layout';
import { IPageParams } from '@/models/layout';
import { getTranslations } from 'next-intl/server';
export default async function Projects({
params,
}: {
params: ILayoutLocaleParams;
}) {
const t = await getTranslations({ locale: params.locale });
export default async function Projects({ params }: { params: IPageParams }) {
const { locale } = await params;
const t = await getTranslations({ locale });
return (
<main className="flex flex-col items-center justify-between">