File tree Expand file tree Collapse file tree 5 files changed +72
-4
lines changed
@headlessui-react/src/components/dialog
@headlessui-vue/src/components/dialog Expand file tree Collapse file tree 5 files changed +72
-4
lines changed Original file line number Diff line number Diff line change @@ -7,11 +7,15 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
8
8
## [ Unreleased - React]
9
9
10
- - Nothing yet!
10
+ ### Fixes
11
+
12
+ - Fix form submission within Dialog ([ #460 ] ( https://github.com/tailwindlabs/headlessui/pull/460 ) )
11
13
12
14
## [ Unreleased - Vue]
13
15
14
- - Nothing yet!
16
+ ### Fixes
17
+
18
+ - Fix form submission within Dialog ([ #460 ] ( https://github.com/tailwindlabs/headlessui/pull/460 ) )
15
19
16
20
## [ @headlessui/react @v1.1.0] - 2021-04-26
17
21
Original file line number Diff line number Diff line change @@ -533,6 +533,35 @@ describe('Mouse interactions', () => {
533
533
} )
534
534
)
535
535
536
+ it (
537
+ 'should be possible to submit a form inside a Dialog' ,
538
+ suppressConsoleLogs ( async ( ) => {
539
+ let submitFn = jest . fn ( )
540
+ function Example ( ) {
541
+ let [ isOpen , setIsOpen ] = useState ( true )
542
+ return (
543
+ < Dialog open = { isOpen } onClose = { setIsOpen } >
544
+ < form onSubmit = { submitFn } >
545
+ < input type = "hidden" value = "abc" />
546
+ < button type = "submit" > Submit</ button >
547
+ </ form >
548
+ < TabSentinel />
549
+ </ Dialog >
550
+ )
551
+ }
552
+ render ( < Example /> )
553
+
554
+ // Verify it is open
555
+ assertDialog ( { state : DialogState . Visible } )
556
+
557
+ // Submit the form
558
+ await click ( getByText ( 'Submit' ) )
559
+
560
+ // Verify that the submitFn function has been called
561
+ expect ( submitFn ) . toHaveBeenCalledTimes ( 1 )
562
+ } )
563
+ )
564
+
536
565
it (
537
566
'should stop propagating click events when clicking on an element inside the Dialog' ,
538
567
suppressConsoleLogs ( async ( ) => {
Original file line number Diff line number Diff line change @@ -244,7 +244,6 @@ let DialogRoot = forwardRefWithAs(function Dialog<
244
244
'aria-labelledby' : state . titleId ,
245
245
'aria-describedby' : describedby ,
246
246
onClick ( event : ReactMouseEvent ) {
247
- event . preventDefault ( )
248
247
event . stopPropagation ( )
249
248
} ,
250
249
Original file line number Diff line number Diff line change @@ -652,6 +652,43 @@ describe('Mouse interactions', () => {
652
652
} )
653
653
)
654
654
655
+ it (
656
+ 'should be possible to submit a form inside a Dialog' ,
657
+ suppressConsoleLogs ( async ( ) => {
658
+ let submitFn = jest . fn ( )
659
+ renderTemplate ( {
660
+ template : `
661
+ <Dialog v-if="true" :open="isOpen" @close="setIsOpen">
662
+ <form @submit.prevent="submitFn">
663
+ <input type="hidden" value="abc" />
664
+ <button type="submit">Submit</button>
665
+ </form>
666
+ <TabSentinel />
667
+ </Dialog>
668
+ ` ,
669
+ setup ( ) {
670
+ let isOpen = ref ( true )
671
+ return {
672
+ isOpen,
673
+ submitFn,
674
+ setIsOpen ( value : boolean ) {
675
+ isOpen . value = value
676
+ } ,
677
+ }
678
+ } ,
679
+ } )
680
+
681
+ // Verify it is open
682
+ assertDialog ( { state : DialogState . Visible } )
683
+
684
+ // Submit the form
685
+ await click ( getByText ( 'Submit' ) )
686
+
687
+ // Verify that the submitFn function has been called
688
+ expect ( submitFn ) . toHaveBeenCalledTimes ( 1 )
689
+ } )
690
+ )
691
+
655
692
it (
656
693
'should stop propagating click events when clicking on an element inside the Dialog' ,
657
694
suppressConsoleLogs ( async ( ) => {
Original file line number Diff line number Diff line change @@ -236,7 +236,6 @@ export let Dialog = defineComponent({
236
236
titleId,
237
237
describedby,
238
238
handleClick ( event : MouseEvent ) {
239
- event . preventDefault ( )
240
239
event . stopPropagation ( )
241
240
} ,
242
241
You can’t perform that action at this time.
0 commit comments