Finanzen: Korrekturen aus dem Oberflaechentest

Seitenmenue startet auf schmalen Bildschirmen (bis 720 px) eingeklappt. Bei 390 px liess
das feste 248-px-Menue nur ~140 px Inhalt, jede Seite (auch /finance) scrollte waagerecht;
das fiel in den Einzeltests ohne App-Rahmen nicht auf.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
ClaudeandClaude Sonnet 5.5 committed 2026-10-01 15:12:18 +00:00
1 parent edf118a044
commit 0b1101d384
3 files changed
+41 -1

No files matched your search

+2 -1
View File
@@ -19,12 +19,13 @@ import {
} from '@tabler/icons-react'
import { openProjectAdmin } from '../lib/employeeAdminApi'
import { serverpulsApi } from '../lib/serverpulsApi'
import { startsCollapsed } from '../lib/sidebar'
export default function Sidebar() {
const { user, logout, isAdmin } = useAuth()
const navigate = useNavigate()
const location = useLocation()
const [collapsed, setCollapsed] = useState(false)
const [collapsed, setCollapsed] = useState(() => startsCollapsed())
const [switching, setSwitching] = useState(false)
const [pulseLevel, setPulseLevel] = useState('ok')
+12
View File
@@ -0,0 +1,12 @@
// Seitenmenue: auf schmalen Bildschirmen (Handy) startet es eingeklappt, sonst bleiben vom Inhalt bei 390 px nur
// etwa 140 px und jede Seite scrollt waagerecht. Ausklappen geht weiterhin per Knopf.
export const AUTO_COLLAPSE_MAX_WIDTH = 720
/** true, wenn das Menue eingeklappt starten soll (Fensterbreite bis 720 px); ohne window (Test, Server) false. */
export function startsCollapsed(win = typeof window !== 'undefined' ? window : null) {
try {
return Boolean(win?.matchMedia?.(`(max-width: ${AUTO_COLLAPSE_MAX_WIDTH}px)`)?.matches)
} catch {
return false
}
}
+27
View File
@@ -0,0 +1,27 @@
import test from 'node:test'
import assert from 'node:assert/strict'
import { loadModule } from './load.mjs'
const { startsCollapsed, AUTO_COLLAPSE_MAX_WIDTH } = await loadModule('src/lib/sidebar.js')
// Fenster mit matchMedia, das "(max-width: Npx)" gegen eine feste Breite prueft
const windowOf = (width) => ({
matchMedia: (query) => ({ matches: width <= Number(/max-width:\s*(\d+)px/.exec(query)?.[1]) }),
})
test('startsCollapsed: Handy (390 px) und Grenze (720 px) starten eingeklappt', () => {
assert.equal(AUTO_COLLAPSE_MAX_WIDTH, 720)
assert.equal(startsCollapsed(windowOf(390)), true)
assert.equal(startsCollapsed(windowOf(720)), true)
})
test('startsCollapsed: breitere Fenster starten ausgeklappt', () => {
assert.equal(startsCollapsed(windowOf(721)), false)
assert.equal(startsCollapsed(windowOf(1280)), false)
})
test('startsCollapsed: ohne window oder matchMedia (oder bei Fehler) ausgeklappt', () => {
assert.equal(startsCollapsed(null), false)
assert.equal(startsCollapsed({}), false)
assert.equal(startsCollapsed({ matchMedia: () => { throw new Error('kaputt') } }), false)
})