Feature/quick review scroll (#110)

* fix: allow scrolling in QuickReviewDialog when content overflows viewport

The dialog had no max-height or overflow handling, so tall content (e.g.
extern representation with warnings + journal preview) was clipped with
no way to scroll.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* feat: add detailed error logging to Enable Banking integration

Adds structured console logging with full context (status codes,
response bodies, connection IDs, account UIDs, stack traces) to all
Enable Banking operations: connect, callback, sync, disconnect,
and the API client retry/error paths.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* feat: add detailed error logging to login and register flows

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* feat: implement KPI settings management with preferences and dynamic KPI display

---------

Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
Mattsson
2026-03-23 20:04:34 +01:00
committed by GitHub
co-authored by Claude Opus 4.6
parent 4d4a9a40c9
commit c1630068b3
15 changed files with 1097 additions and 130 deletions
@@ -53,6 +53,11 @@ export default function BankingSettingsPanel() {
setConnectingBankName(bank.name)
try {
console.log('[enable-banking] Initiating bank connection', {
bankName: bank.name,
bankCountry: bank.country,
})
const response = await fetch('/api/extensions/ext/enable-banking/connect', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
@@ -62,11 +67,26 @@ export default function BankingSettingsPanel() {
const data = await response.json()
if (!response.ok) {
console.error('[enable-banking] Connect request failed', {
status: response.status,
statusText: response.statusText,
error: data.error,
bankName: bank.name,
})
throw new Error(data.error)
}
console.log('[enable-banking] Redirecting to bank authorization', {
connectionId: data.connection_id,
hasAuthUrl: !!data.authorization_url,
})
window.location.href = data.authorization_url
} catch (error) {
console.error('[enable-banking] Connect flow failed', {
message: error instanceof Error ? error.message : String(error),
stack: error instanceof Error ? error.stack : undefined,
bankName: bank.name,
})
toast({
title: 'Fel',
description: error instanceof Error ? error.message : 'Kunde inte ansluta bank',
@@ -82,6 +102,8 @@ export default function BankingSettingsPanel() {
setSyncingConnectionId(connectionId)
try {
console.log('[enable-banking] Starting sync', { connectionId })
const response = await fetch('/api/extensions/ext/enable-banking/sync', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
@@ -91,9 +113,21 @@ export default function BankingSettingsPanel() {
const data = await response.json()
if (!response.ok) {
console.error('[enable-banking] Sync request failed', {
status: response.status,
statusText: response.statusText,
error: data.error,
connectionId,
})
throw new Error(data.error)
}
console.log('[enable-banking] Sync completed', {
connectionId,
imported: data.imported,
duplicates: data.duplicates,
})
toast({
title: 'Synkronisering klar',
description: `${data.imported} nya transaktioner importerade`,
@@ -102,6 +136,11 @@ export default function BankingSettingsPanel() {
setShowCsvFallback(false)
fetchConnections()
} catch (error) {
console.error('[enable-banking] Sync flow failed', {
message: error instanceof Error ? error.message : String(error),
stack: error instanceof Error ? error.stack : undefined,
connectionId,
})
toast({
title: 'Fel',
description: error instanceof Error ? error.message : 'Synkronisering misslyckades',
@@ -123,6 +162,8 @@ export default function BankingSettingsPanel() {
if (!ok) return
try {
console.log('[enable-banking] Disconnecting bank', { connectionId })
const response = await fetch('/api/extensions/ext/enable-banking/disconnect', {
method: 'DELETE',
headers: { 'Content-Type': 'application/json' },
@@ -131,15 +172,27 @@ export default function BankingSettingsPanel() {
if (!response.ok) {
const data = await response.json()
console.error('[enable-banking] Disconnect request failed', {
status: response.status,
statusText: response.statusText,
error: data.error,
connectionId,
})
throw new Error(data.error || 'Disconnect failed')
}
console.log('[enable-banking] Bank disconnected', { connectionId })
toast({
title: 'Bank bortkopplad',
description: 'Bankanslutningen och PSD2-samtycket har återkallats',
})
fetchConnections()
} catch (error) {
console.error('[enable-banking] Disconnect flow failed', {
message: error instanceof Error ? error.message : String(error),
stack: error instanceof Error ? error.stack : undefined,
connectionId,
})
toast({
title: 'Fel',
description: error instanceof Error ? error.message : 'Kunde inte koppla bort bank',