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:
1 parent
edf118a044
commit
0b1101d384
3 files changed
+41
-1
No files matched your search
@@ -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')
|
||||
|
||||
|
||||
@@ -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
|
||||
}
|
||||
}
|
||||
@@ -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)
|
||||
})
|
||||
Reference in new issue
Block a user