chore: prepara versão 2.5.5

Filtros multi-seleção em lançamentos (condição, forma de pagamento, pessoa,
categoria, conta/cartão), changelog redesenhado como timeline colapsável com
detecção de bump e resumo, e diálogos migrados para as animações utilitárias
do tw-animate-css. Inclui ajustes de label no BulkActionDialog, refinamentos
visuais na landing page e atualização da navbar.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
Felipe Coutinho
2026-05-07 13:11:59 +00:00
parent 18893bfe02
commit a6fba5f953
20 changed files with 873 additions and 505 deletions

View File

@@ -1,5 +1,6 @@
"use client";
import { RiAddFill } from "@remixicon/react";
import { useState } from "react";
import { toast } from "sonner";
import {
@@ -18,6 +19,7 @@ import {
getPresignedUploadUrlAction,
} from "@/features/transactions/actions/attachments";
import { ConfirmActionDialog } from "@/shared/components/confirm-action-dialog";
import { Button } from "@/shared/components/ui/button";
import type {
TransactionsExportContext,
TransactionsPaginationState,
@@ -115,7 +117,6 @@ export function TransactionsPage({
const [selectedTransaction, setSelectedTransaction] =
useState<TransactionItem | null>(null);
const [editOpen, setEditOpen] = useState(false);
const [createOpen, setCreateOpen] = useState(false);
const [copyOpen, setCopyOpen] = useState(false);
const [transactionToCopy, setTransactionToCopy] =
useState<TransactionItem | null>(null);
@@ -411,15 +412,6 @@ export function TransactionsPage({
setPendingMultipleDeleteData([]);
};
const [transactionTypeForCreate, setTransactionTypeForCreate] = useState<
"Despesa" | "Receita" | null
>(null);
const handleCreate = (type: "Despesa" | "Receita") => {
setTransactionTypeForCreate(type);
setCreateOpen(true);
};
const handleMassAdd = () => {
setMassAddOpen(true);
};
@@ -558,6 +550,57 @@ export function TransactionsPage({
setAnticipationHistoryOpen(true);
};
const createSlot = allowCreate ? (
<>
<TransactionDialog
mode="create"
payerOptions={payerOptions}
splitPayerOptions={splitPayerOptions}
defaultPayerId={defaultPayerId}
accountOptions={accountOptions}
cardOptions={cardOptions}
categoryOptions={categoryOptions}
estabelecimentos={estabelecimentos}
defaultPeriod={selectedPeriod}
defaultCardId={defaultCardId}
defaultPaymentMethod={defaultPaymentMethod}
lockCardSelection={lockCardSelection}
lockPaymentMethod={lockPaymentMethod}
defaultTransactionType="Receita"
maxSizeMb={attachmentMaxSizeMb}
trigger={
<Button className="w-full sm:w-auto">
<RiAddFill className="size-4" />
Nova Receita
</Button>
}
/>
<TransactionDialog
mode="create"
payerOptions={payerOptions}
splitPayerOptions={splitPayerOptions}
defaultPayerId={defaultPayerId}
accountOptions={accountOptions}
cardOptions={cardOptions}
categoryOptions={categoryOptions}
estabelecimentos={estabelecimentos}
defaultPeriod={selectedPeriod}
defaultCardId={defaultCardId}
defaultPaymentMethod={defaultPaymentMethod}
lockCardSelection={lockCardSelection}
lockPaymentMethod={lockPaymentMethod}
defaultTransactionType="Despesa"
maxSizeMb={attachmentMaxSizeMb}
trigger={
<Button className="w-full sm:w-auto">
<RiAddFill className="size-4" />
Nova Despesa
</Button>
}
/>
</>
) : null;
return (
<>
<TransactionsTable
@@ -571,7 +614,7 @@ export function TransactionsPage({
selectedPeriod={selectedPeriod}
pagination={pagination}
exportContext={exportContext}
onCreate={allowCreate ? handleCreate : undefined}
createSlot={createSlot}
onMassAdd={allowCreate ? handleMassAdd : undefined}
onEdit={handleEdit}
onCopy={handleCopy}
@@ -587,28 +630,6 @@ export function TransactionsPage({
isSettlementLoading={(id) => settlementLoadingId === id}
/>
{allowCreate ? (
<TransactionDialog
mode="create"
open={createOpen}
onOpenChange={setCreateOpen}
payerOptions={payerOptions}
splitPayerOptions={splitPayerOptions}
defaultPayerId={defaultPayerId}
accountOptions={accountOptions}
cardOptions={cardOptions}
categoryOptions={categoryOptions}
estabelecimentos={estabelecimentos}
defaultPeriod={selectedPeriod}
defaultCardId={defaultCardId}
defaultPaymentMethod={defaultPaymentMethod}
lockCardSelection={lockCardSelection}
lockPaymentMethod={lockPaymentMethod}
defaultTransactionType={transactionTypeForCreate ?? undefined}
maxSizeMb={attachmentMaxSizeMb}
/>
) : null}
<TransactionDialog
mode="create"
open={copyOpen && !!transactionToCopy}