diff --git a/resources/js/components/transactions/transaction-columns.test.tsx b/resources/js/components/transactions/transaction-columns.test.tsx new file mode 100644 index 00000000..7ee7a82c --- /dev/null +++ b/resources/js/components/transactions/transaction-columns.test.tsx @@ -0,0 +1,44 @@ +import type { DecryptedTransaction } from '@/types/transaction'; +import type { ColumnDef } from '@tanstack/react-table'; +import { describe, expect, it } from 'vitest'; +import { createTransactionColumns } from './transaction-columns'; + +function categoryClassName(columns: ColumnDef[]): string { + const category = columns.find( + (column) => + 'accessorKey' in column && column.accessorKey === 'category_id', + ); + + return (category?.meta as { cellClassName?: string }).cellClassName ?? ''; +} + +function buildColumns(isDateHidden: boolean) { + return createTransactionColumns({ + categories: [], + accounts: [], + banks: [], + labels: [], + locale: 'en', + onEdit: () => {}, + onDelete: () => {}, + onUpdate: () => {}, + onReEvaluateRules: () => {}, + isDateHidden, + }); +} + +describe('createTransactionColumns category padding', () => { + it('collapses the Category left padding while the Date column is shown', () => { + const className = categoryClassName(buildColumns(false)); + + expect(className).toContain('pl-0'); + expect(className).not.toContain('pl-2'); + }); + + it('restores the Category left padding when the Date column is hidden', () => { + const className = categoryClassName(buildColumns(true)); + + expect(className).toContain('pl-2'); + expect(className).not.toContain('pl-0'); + }); +}); diff --git a/resources/js/components/transactions/transaction-columns.tsx b/resources/js/components/transactions/transaction-columns.tsx index f1180261..700e8358 100644 --- a/resources/js/components/transactions/transaction-columns.tsx +++ b/resources/js/components/transactions/transaction-columns.tsx @@ -42,6 +42,7 @@ interface CreateColumnsOptions { source: 'transaction_table', ) => void; onReEvaluateRules: (transaction: DecryptedTransaction) => void; + isDateHidden?: boolean; } export function createTransactionColumns({ @@ -55,6 +56,7 @@ export function createTransactionColumns({ onUpdate, onCategorized, onReEvaluateRules, + isDateHidden = false, }: CreateColumnsOptions): ColumnDef[] { return [ { @@ -138,8 +140,7 @@ export function createTransactionColumns({ accessorKey: 'category_id', meta: { label: __('Category'), - cellClassName: - 'pl-0 first:pl-2 max-w-[170px] !sm:max-w-[170px] md:max-w-[190px] !min-w-[170px] whitespace-normal', + cellClassName: `${isDateHidden ? 'pl-2' : 'pl-0'} max-w-[170px] !sm:max-w-[170px] md:max-w-[190px] !min-w-[170px] whitespace-normal`, }, header: () => __('Category'), cell: ({ row }) => { diff --git a/resources/js/components/transactions/transaction-list.tsx b/resources/js/components/transactions/transaction-list.tsx index 32946b05..ef9f6525 100644 --- a/resources/js/components/transactions/transaction-list.tsx +++ b/resources/js/components/transactions/transaction-list.tsx @@ -820,6 +820,7 @@ export function TransactionList({ onUpdate: updateTransaction, onCategorized: showAutomatizeToast, onReEvaluateRules: handleReEvaluateRules, + isDateHidden: columnVisibility.transaction_date === false, }); if (hideColumns.length === 0) { @@ -841,6 +842,7 @@ export function TransactionList({ showAutomatizeToast, handleReEvaluateRules, hideColumns, + columnVisibility, ]); const table = useReactTable({