diff --git a/__tests__/components/shared/entity-dialog-layout.test.ts b/__tests__/components/shared/entity-dialog-layout.test.ts new file mode 100644 index 0000000..294ed3a --- /dev/null +++ b/__tests__/components/shared/entity-dialog-layout.test.ts @@ -0,0 +1,38 @@ +import { describe, it, expect } from 'vitest' +import { readFileSync } from 'node:fs' +import { resolve } from 'node:path' +import { entityDialogContentClasses } from '@/components/shared/entity-dialog-layout' + +describe('entityDialogContentClasses', () => { + it('bevat mobile-fullscreen classes (<640px)', () => { + const cls = entityDialogContentClasses + expect(cls).toContain('max-sm:w-screen') + expect(cls).toContain('max-sm:h-screen') + expect(cls).toContain('max-sm:max-w-none') + expect(cls).toContain('max-sm:rounded-none') + }) + + it('behoudt desktop-classes (>=640px)', () => { + const cls = entityDialogContentClasses + expect(cls).toContain('sm:max-w-[90vw]') + expect(cls).toContain('sm:max-h-[85vh]') + expect(cls).toContain('lg:max-w-[50vw]') + }) +}) + +describe('alle entity-dialogen gebruiken entityDialogContentClasses', () => { + // Regressie-vangnet: voorkomt dat een dialog zijn eigen className meegeeft en + // daarmee de gedeelde mobile-fullscreen-classes ontwijkt. + const files = [ + 'app/_components/tasks/task-dialog.tsx', + 'components/solo/task-detail-dialog.tsx', + 'components/backlog/pbi-dialog.tsx', + 'components/backlog/story-dialog.tsx', + ] + for (const f of files) { + it(`${f} importeert + gebruikt entityDialogContentClasses`, () => { + const src = readFileSync(resolve(process.cwd(), f), 'utf-8') + expect(src).toContain('entityDialogContentClasses') + }) + } +}) diff --git a/components/shared/entity-dialog-layout.ts b/components/shared/entity-dialog-layout.ts index c97ddfb..e70e24e 100644 --- a/components/shared/entity-dialog-layout.ts +++ b/components/shared/entity-dialog-layout.ts @@ -3,6 +3,7 @@ import { cn } from '@/lib/utils' export const entityDialogContentClasses = cn( 'flex flex-col p-0 gap-0', 'max-h-[90vh] w-full max-w-[calc(100%-2rem)]', + 'max-sm:w-screen max-sm:h-screen max-sm:max-h-screen max-sm:max-w-none max-sm:rounded-none', 'sm:max-w-[90vw] sm:max-h-[85vh]', 'lg:max-w-[50vw] lg:min-w-[480px]', )