Story 1 van PBI "Alle dialogen conform docs/patterns/dialog.md". - components/shared/use-dirty-close-guard.tsx — hook + paired AlertDialog - components/shared/use-dialog-submit-shortcut.ts — Cmd/Ctrl+Enter handler - components/shared/entity-dialog-layout.ts — MD3-conforme classes voor §4 - TaskDialog refactored om beide hooks + classes te gebruiken (geen gedragsverandering) - 8 nieuwe unit-tests Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
57 lines
1.5 KiB
TypeScript
57 lines
1.5 KiB
TypeScript
// @vitest-environment jsdom
|
|
import { describe, it, expect, vi } from 'vitest'
|
|
import { useDialogSubmitShortcut } from '@/components/shared/use-dialog-submit-shortcut'
|
|
|
|
function makeEvent(opts: Partial<KeyboardEvent>) {
|
|
return {
|
|
metaKey: false,
|
|
ctrlKey: false,
|
|
key: '',
|
|
preventDefault: vi.fn(),
|
|
...opts,
|
|
} as unknown as React.KeyboardEvent
|
|
}
|
|
|
|
describe('useDialogSubmitShortcut', () => {
|
|
it('triggert submit op Cmd+Enter', () => {
|
|
const submit = vi.fn()
|
|
const handler = useDialogSubmitShortcut(submit)
|
|
const e = makeEvent({ metaKey: true, key: 'Enter' })
|
|
|
|
handler(e)
|
|
|
|
expect(submit).toHaveBeenCalledTimes(1)
|
|
expect(e.preventDefault).toHaveBeenCalled()
|
|
})
|
|
|
|
it('triggert submit op Ctrl+Enter', () => {
|
|
const submit = vi.fn()
|
|
const handler = useDialogSubmitShortcut(submit)
|
|
const e = makeEvent({ ctrlKey: true, key: 'Enter' })
|
|
|
|
handler(e)
|
|
|
|
expect(submit).toHaveBeenCalledTimes(1)
|
|
})
|
|
|
|
it('triggert NIET op Enter zonder modifier', () => {
|
|
const submit = vi.fn()
|
|
const handler = useDialogSubmitShortcut(submit)
|
|
const e = makeEvent({ key: 'Enter' })
|
|
|
|
handler(e)
|
|
|
|
expect(submit).not.toHaveBeenCalled()
|
|
expect(e.preventDefault).not.toHaveBeenCalled()
|
|
})
|
|
|
|
it('triggert NIET op Cmd+andere toets', () => {
|
|
const submit = vi.fn()
|
|
const handler = useDialogSubmitShortcut(submit)
|
|
const e = makeEvent({ metaKey: true, key: 'a' })
|
|
|
|
handler(e)
|
|
|
|
expect(submit).not.toHaveBeenCalled()
|
|
})
|
|
})
|