d52f41ab0c
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
38 lines
1.5 KiB
TypeScript
38 lines
1.5 KiB
TypeScript
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";
|
||
import { requireActiveHousehold } from "@/lib/dal";
|
||
|
||
export const metadata: Metadata = { title: tr.stock.detail.movements };
|
||
|
||
/** /stok/:id — ürün tipi: mevcut durum, partiler ve hareketler (başka hanenin kaydı → 404). */
|
||
export default async function ProductTypePage({ params }: PageProps<"/stok/[id]">) {
|
||
const { user, household } = await requireActiveHousehold("viewer");
|
||
const { id } = await params;
|
||
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 || !products || !types) notFound();
|
||
return (
|
||
<ProductDetailView
|
||
data={data}
|
||
categories={options.categories}
|
||
products={
|
||
<ProductsSection
|
||
productTypeId={data.id}
|
||
products={products.products}
|
||
types={types}
|
||
canWrite={products.canWrite}
|
||
/>
|
||
}
|
||
/>
|
||
);
|
||
}
|