refactor: pagina transações e modulariza ações

This commit is contained in:
Felipe Coutinho
2026-03-20 18:39:49 +00:00
parent 41fd8226cb
commit 3c31ee5d90
20 changed files with 4261 additions and 1782 deletions

View File

@@ -5,7 +5,7 @@ import { AccountStatementCard } from "@/features/accounts/components/account-sta
import type { Account } from "@/features/accounts/components/types";
import {
fetchAccountData,
fetchAccountLancamentos,
fetchAccountLancamentosPage,
fetchAccountSummary,
} from "@/features/accounts/statement-queries";
import { fetchUserPreferences } from "@/features/settings/queries";
@@ -19,6 +19,7 @@ import {
getSingleParam,
mapTransactionsData,
type ResolvedSearchParams,
resolveTransactionPagination,
} from "@/features/transactions/page-helpers";
import {
fetchRecentEstablishments,
@@ -53,6 +54,7 @@ export default async function Page({ params, searchParams }: PageProps) {
} = parsePeriodParam(periodoParamRaw);
const searchFilters = extractTransactionSearchFilters(resolvedSearchParams);
const pagination = resolveTransactionPagination(resolvedSearchParams);
const account = await fetchAccountData(userId, accountId);
@@ -84,9 +86,12 @@ export default async function Page({ params, searchParams }: PageProps) {
accountId: account.id,
});
const transactionRows = await fetchAccountLancamentos(filters);
const transactionsPage = await fetchAccountLancamentosPage(
filters,
pagination,
);
const transactionData = mapTransactionsData(transactionRows);
const transactionData = mapTransactionsData(transactionsPage.rows);
const { openingBalance, currentBalance, totalIncomes, totalExpenses } =
accountSummary;
@@ -169,6 +174,19 @@ export default async function Page({ params, searchParams }: PageProps) {
accountCardFilterOptions={accountCardFilterOptions}
selectedPeriod={selectedPeriod}
estabelecimentos={estabelecimentos}
pagination={{
page: transactionsPage.page,
pageSize: transactionsPage.pageSize,
totalItems: transactionsPage.totalItems,
totalPages: transactionsPage.totalPages,
}}
exportContext={{
source: "account-statement",
period: selectedPeriod,
filters: searchFilters,
accountId: account.id,
settledOnly: true,
}}
allowCreate={false}
noteAsColumn={userPreferences?.statementNoteAsColumn ?? false}
columnOrder={userPreferences?.transactionsColumnOrder ?? null}

View File

@@ -9,11 +9,12 @@ import {
getSingleParam,
mapTransactionsData,
type ResolvedSearchParams,
resolveTransactionPagination,
} from "@/features/transactions/page-helpers";
import {
fetchRecentEstablishments,
fetchTransactionFilterSources,
fetchTransactions,
fetchTransactionsPage,
} from "@/features/transactions/queries";
import MonthNavigation from "@/shared/components/month-picker/month-navigation";
import { getUserId } from "@/shared/lib/auth/server";
@@ -33,6 +34,7 @@ export default async function Page({ searchParams }: PageProps) {
const { period: selectedPeriod } = parsePeriodParam(periodoParamRaw);
const searchFilters = extractTransactionSearchFilters(resolvedSearchParams);
const pagination = resolveTransactionPagination(resolvedSearchParams);
const [filterSources, userPreferences] = await Promise.all([
fetchTransactionFilterSources(userId),
@@ -49,11 +51,11 @@ export default async function Page({ searchParams }: PageProps) {
slugMaps,
});
const [transactionRows, estabelecimentos] = await Promise.all([
fetchTransactions(filters),
const [transactionsPage, estabelecimentos] = await Promise.all([
fetchTransactionsPage(filters, pagination),
fetchRecentEstablishments(userId),
]);
const transactionData = mapTransactionsData(transactionRows);
const transactionData = mapTransactionsData(transactionsPage.rows);
const {
payerOptions,
@@ -87,6 +89,17 @@ export default async function Page({ searchParams }: PageProps) {
accountCardFilterOptions={accountCardFilterOptions}
selectedPeriod={selectedPeriod}
estabelecimentos={estabelecimentos}
pagination={{
page: transactionsPage.page,
pageSize: transactionsPage.pageSize,
totalItems: transactionsPage.totalItems,
totalPages: transactionsPage.totalPages,
}}
exportContext={{
source: "transactions",
period: selectedPeriod,
filters: searchFilters,
}}
noteAsColumn={userPreferences?.statementNoteAsColumn ?? false}
columnOrder={userPreferences?.transactionsColumnOrder ?? null}
/>