dcfa2f8c8d
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
45 lines
1.8 KiB
TypeScript
45 lines
1.8 KiB
TypeScript
import type { Metadata } from "next";
|
||
import { notFound } from "next/navigation";
|
||
import { PageHeader } from "@/components/page-header";
|
||
import { listMemberOptions } from "@/features/accounts/service";
|
||
import { hasHouseholdRole } from "@/features/households/roles";
|
||
import { TransactionsView } from "@/features/transactions/components/transactions-view";
|
||
import { getTransactionFormOptions, listTransactions } from "@/features/transactions/service";
|
||
import { tr } from "@/i18n/tr";
|
||
import { requireActiveHousehold } from "@/lib/dal";
|
||
import { transactionFilterSchema } from "@/shared/schemas/transaction";
|
||
|
||
export const metadata: Metadata = { title: tr.transactions.title };
|
||
|
||
export default async function TransactionsPage({ searchParams }: PageProps<"/islemler">) {
|
||
const { user, household } = await requireActiveHousehold("viewer");
|
||
const params = await searchParams;
|
||
// Yalnızca tekil string değerler (dizi parametreleri yok sayılır).
|
||
const raw = Object.fromEntries(
|
||
Object.entries(params).filter(
|
||
(e): e is [string, string] => typeof e[1] === "string" && e[1] !== "",
|
||
),
|
||
);
|
||
const filters = transactionFilterSchema.parse(raw);
|
||
const [data, options, members] = await Promise.all([
|
||
listTransactions(user.id, household.id, filters),
|
||
getTransactionFormOptions(user.id, household.id),
|
||
listMemberOptions(user.id, household.id),
|
||
]);
|
||
if (!data || !options || !members) notFound();
|
||
return (
|
||
<>
|
||
<PageHeader title={tr.transactions.title} description={tr.transactions.description} />
|
||
<TransactionsView
|
||
// Filtre değişince istemci durumu (açık diyaloglar) sıfırlansın.
|
||
key={JSON.stringify(raw)}
|
||
data={data}
|
||
filters={filters}
|
||
raw={raw}
|
||
options={{ ...options, members }}
|
||
canWrite={hasHouseholdRole(household.role, "member")}
|
||
/>
|
||
</>
|
||
);
|
||
}
|