diff --git a/src/features/settings/queries.ts b/src/features/settings/queries.ts
index ce5e768..da9fa95 100644
--- a/src/features/settings/queries.ts
+++ b/src/features/settings/queries.ts
@@ -6,6 +6,7 @@ interface UserPreferences {
statementNoteAsColumn: boolean;
transactionsColumnOrder: string[] | null;
attachmentMaxSizeMb: number;
+ showTransactionSummary: boolean;
}
interface ApiToken {
@@ -34,6 +35,7 @@ export async function fetchUserPreferences(
statementNoteAsColumn: schema.userPreferences.statementNoteAsColumn,
transactionsColumnOrder: schema.userPreferences.transactionsColumnOrder,
attachmentMaxSizeMb: schema.userPreferences.attachmentMaxSizeMb,
+ showTransactionSummary: schema.userPreferences.showTransactionSummary,
})
.from(schema.userPreferences)
.where(eq(schema.userPreferences.userId, userId))
diff --git a/src/features/transactions/components/dialogs/transaction-dialog/transaction-dialog.tsx b/src/features/transactions/components/dialogs/transaction-dialog/transaction-dialog.tsx
index db8a17d..a8756e2 100644
--- a/src/features/transactions/components/dialogs/transaction-dialog/transaction-dialog.tsx
+++ b/src/features/transactions/components/dialogs/transaction-dialog/transaction-dialog.tsx
@@ -17,6 +17,7 @@ import {
buildTransactionInitialState,
deriveCreditCardPeriod,
} from "@/features/transactions/lib/form-helpers";
+import { useAppPreferences } from "@/shared/components/providers/app-preferences-provider";
import { Button } from "@/shared/components/ui/button";
import {
Collapsible,
@@ -104,6 +105,7 @@ export function TransactionDialog({
const [pendingUploadFiles, setPendingUploadFiles] = useState([]);
const [extrasOpen, setExtrasOpen] = useState(false);
const scrollContainerRef = useRef(null);
+ const { showTransactionSummary } = useAppPreferences();
useEffect(() => {
if (dialogOpen) {
@@ -730,15 +732,17 @@ export function TransactionDialog({
)}
-
-
-
+ {showTransactionSummary ? (
+
+
+
+ ) : null}
{errorMessage ? (
diff --git a/src/shared/components/providers/app-preferences-provider.tsx b/src/shared/components/providers/app-preferences-provider.tsx
new file mode 100644
index 0000000..6b0b6bb
--- /dev/null
+++ b/src/shared/components/providers/app-preferences-provider.tsx
@@ -0,0 +1,31 @@
+"use client";
+
+import { createContext, useContext } from "react";
+import type { AppPreferences } from "@/shared/lib/preferences/queries";
+
+const DEFAULT_APP_PREFERENCES: AppPreferences = {
+ showTransactionSummary: true,
+};
+
+const AppPreferencesContext = createContext(
+ DEFAULT_APP_PREFERENCES,
+);
+
+type AppPreferencesProviderProps = AppPreferences & {
+ children: React.ReactNode;
+};
+
+export function AppPreferencesProvider({
+ children,
+ ...preferences
+}: AppPreferencesProviderProps) {
+ return (
+
+ {children}
+
+ );
+}
+
+export function useAppPreferences() {
+ return useContext(AppPreferencesContext);
+}
diff --git a/src/shared/lib/preferences/queries.ts b/src/shared/lib/preferences/queries.ts
new file mode 100644
index 0000000..8db1ad2
--- /dev/null
+++ b/src/shared/lib/preferences/queries.ts
@@ -0,0 +1,24 @@
+import { eq } from "drizzle-orm";
+import { db, schema } from "@/shared/lib/db";
+
+export type AppPreferences = {
+ showTransactionSummary: boolean;
+};
+
+const DEFAULT_APP_PREFERENCES: AppPreferences = {
+ showTransactionSummary: true,
+};
+
+export async function fetchAppPreferences(
+ userId: string,
+): Promise {
+ const [preferences] = await db
+ .select({
+ showTransactionSummary: schema.userPreferences.showTransactionSummary,
+ })
+ .from(schema.userPreferences)
+ .where(eq(schema.userPreferences.userId, userId))
+ .limit(1);
+
+ return preferences ?? DEFAULT_APP_PREFERENCES;
+}