feat(ui): mağazalar sayfası, ürün kataloğu ve ürün tipi detayında ürünler

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
2026-11-06 11:48:04 +03:00
parent f0b570284e
commit d52f41ab0c
14 changed files with 1228 additions and 8 deletions
+20 -3
View File
@@ -1,5 +1,7 @@
import type { Metadata } from "next";
import { notFound } from "next/navigation";
import { ProductsSection } from "@/features/products/components/products-section";
import { listProducts, listProductTypeOptions } from "@/features/products/service";
import { ProductDetailView } from "@/features/stock/components/product-detail-view";
import { getProductType, getStockOptions } from "@/features/stock/service";
import { tr } from "@/i18n/tr";
@@ -11,10 +13,25 @@ export const metadata: Metadata = { title: tr.stock.detail.movements };
export default async function ProductTypePage({ params }: PageProps<"/stok/[id]">) {
const { user, household } = await requireActiveHousehold("viewer");
const { id } = await params;
const [data, options] = await Promise.all([
const [data, options, products, types] = await Promise.all([
getProductType(user.id, household.id, id),
getStockOptions(user.id, household.id),
listProducts(user.id, household.id, { productTypeId: id, includeArchived: true }),
listProductTypeOptions(user.id, household.id),
]);
if (!data || !options) notFound();
return <ProductDetailView data={data} categories={options.categories} />;
if (!data || !options || !products || !types) notFound();
return (
<ProductDetailView
data={data}
categories={options.categories}
products={
<ProductsSection
productTypeId={data.id}
products={products.products}
types={types}
canWrite={products.canWrite}
/>
}
/>
);
}