@@ -4642,4 +4642,179 @@ describe("DatePicker", () => {
4642
4642
) ;
4643
4643
} ) ;
4644
4644
} ) ;
4645
+
4646
+ describe ( "Refocus Input" , ( ) => {
4647
+ it ( "should refocus the date input when a date is selected" , async ( ) => {
4648
+ const selectedDate = newDate ( "2025-11-01" ) ;
4649
+ const onChangeSpy = jest . fn ( ) ;
4650
+ const { container } = render (
4651
+ < DatePicker
4652
+ selected = { selectedDate }
4653
+ dateFormat = "yyyy-MM-dd"
4654
+ onChange = { onChangeSpy }
4655
+ /> ,
4656
+ ) ;
4657
+
4658
+ const input = safeQuerySelector < HTMLInputElement > ( container , "input" ) ;
4659
+ fireEvent . focus ( input ) ;
4660
+
4661
+ expect ( container . querySelector ( ".react-datepicker" ) ) . toBeTruthy ( ) ;
4662
+
4663
+ const newSelectedDateEl = safeQuerySelector (
4664
+ container ,
4665
+ ".react-datepicker__day--002" ,
4666
+ ) ;
4667
+ fireEvent . click ( newSelectedDateEl ) ;
4668
+
4669
+ await waitFor ( ( ) => {
4670
+ expect ( document . activeElement ) . not . toBe ( newSelectedDateEl ) ;
4671
+ expect ( document . activeElement ) . toBe ( input ) ;
4672
+ } ) ;
4673
+ } ) ;
4674
+
4675
+ describe ( "Date Range" , ( ) => {
4676
+ it ( "should not refocus the input when the endDate is not selected in the Date Range" , async ( ) => {
4677
+ const selectedDate = newDate ( "2025-11-01" ) ;
4678
+ let startDate , endDate ;
4679
+ const onChangeSpy = jest . fn ( ( dates ) => {
4680
+ [ startDate , endDate ] = dates ;
4681
+ } ) ;
4682
+
4683
+ const { container } = render (
4684
+ < DatePicker
4685
+ selectsRange
4686
+ selected = { selectedDate }
4687
+ startDate = { startDate }
4688
+ endDate = { endDate }
4689
+ dateFormat = "yyyy-MM-dd"
4690
+ onChange = { onChangeSpy }
4691
+ /> ,
4692
+ ) ;
4693
+ const input = safeQuerySelector < HTMLInputElement > ( container , "input" ) ;
4694
+ fireEvent . focus ( input ) ;
4695
+
4696
+ expect ( container . querySelector ( ".react-datepicker" ) ) . toBeTruthy ( ) ;
4697
+ const newStartDateEl = safeQuerySelector (
4698
+ container ,
4699
+ ".react-datepicker__day--002" ,
4700
+ ) ;
4701
+ fireEvent . click ( newStartDateEl ) ;
4702
+
4703
+ expect ( onChangeSpy ) . toHaveBeenCalledTimes ( 1 ) ;
4704
+
4705
+ await waitFor ( ( ) => {
4706
+ expect ( document . activeElement ) . not . toBe ( input ) ;
4707
+ expect ( document . activeElement ) . toBe ( newStartDateEl ) ;
4708
+ } ) ;
4709
+ } ) ;
4710
+
4711
+ it ( "should refocus the input when the endDate is selected in the Date Range (if the end date is after the start date)" , async ( ) => {
4712
+ const selectedDate = newDate ( "2025-11-01" ) ;
4713
+ let startDate = selectedDate ,
4714
+ endDate ;
4715
+ const onChangeSpy = jest . fn ( ( dates ) => {
4716
+ [ startDate , endDate ] = dates ;
4717
+ } ) ;
4718
+
4719
+ const { container } = render (
4720
+ < DatePicker
4721
+ selectsRange
4722
+ selected = { selectedDate }
4723
+ startDate = { startDate }
4724
+ endDate = { endDate }
4725
+ dateFormat = "yyyy-MM-dd"
4726
+ onChange = { onChangeSpy }
4727
+ /> ,
4728
+ ) ;
4729
+ const input = safeQuerySelector < HTMLInputElement > ( container , "input" ) ;
4730
+ fireEvent . focus ( input ) ;
4731
+
4732
+ expect ( container . querySelector ( ".react-datepicker" ) ) . toBeTruthy ( ) ;
4733
+ const endDateEl = safeQuerySelector (
4734
+ container ,
4735
+ ".react-datepicker__day--005" ,
4736
+ ) ;
4737
+ fireEvent . click ( endDateEl ) ;
4738
+
4739
+ expect ( onChangeSpy ) . toHaveBeenCalledTimes ( 1 ) ;
4740
+
4741
+ await waitFor ( ( ) => {
4742
+ expect ( document . activeElement ) . toBe ( input ) ;
4743
+ } ) ;
4744
+ } ) ;
4745
+
4746
+ it ( "should not refocus the input when the selected endDate is before the startDate" , async ( ) => {
4747
+ const selectedDate = newDate ( "2025-11-05" ) ;
4748
+ let startDate = selectedDate ,
4749
+ endDate ;
4750
+ const onChangeSpy = jest . fn ( ( dates ) => {
4751
+ [ startDate , endDate ] = dates ;
4752
+ } ) ;
4753
+
4754
+ const { container } = render (
4755
+ < DatePicker
4756
+ selectsRange
4757
+ selected = { selectedDate }
4758
+ startDate = { startDate }
4759
+ endDate = { endDate }
4760
+ dateFormat = "yyyy-MM-dd"
4761
+ onChange = { onChangeSpy }
4762
+ /> ,
4763
+ ) ;
4764
+ const input = safeQuerySelector < HTMLInputElement > ( container , "input" ) ;
4765
+ fireEvent . focus ( input ) ;
4766
+
4767
+ expect ( container . querySelector ( ".react-datepicker" ) ) . toBeTruthy ( ) ;
4768
+ const endDateEl = safeQuerySelector (
4769
+ container ,
4770
+ ".react-datepicker__day--002" ,
4771
+ ) ;
4772
+ fireEvent . click ( endDateEl ) ;
4773
+
4774
+ expect ( onChangeSpy ) . toHaveBeenCalledTimes ( 1 ) ;
4775
+
4776
+ await waitFor ( ( ) => {
4777
+ expect ( document . activeElement ) . not . toBe ( input ) ;
4778
+ expect ( document . activeElement ) . toBe ( endDateEl ) ;
4779
+ } ) ;
4780
+ } ) ;
4781
+
4782
+ it ( 'should refocus the input when the selected endDate is before the startDate when the "swapRange" prop is set' , async ( ) => {
4783
+ const selectedDate = newDate ( "2025-11-05" ) ;
4784
+ let startDate = selectedDate ,
4785
+ endDate ;
4786
+ const onChangeSpy = jest . fn ( ( dates ) => {
4787
+ [ startDate , endDate ] = dates ;
4788
+ } ) ;
4789
+
4790
+ const { container } = render (
4791
+ < DatePicker
4792
+ selectsRange
4793
+ swapRange
4794
+ selected = { selectedDate }
4795
+ startDate = { startDate }
4796
+ endDate = { endDate }
4797
+ dateFormat = "yyyy-MM-dd"
4798
+ onChange = { onChangeSpy }
4799
+ /> ,
4800
+ ) ;
4801
+ const input = safeQuerySelector < HTMLInputElement > ( container , "input" ) ;
4802
+ fireEvent . focus ( input ) ;
4803
+
4804
+ expect ( container . querySelector ( ".react-datepicker" ) ) . toBeTruthy ( ) ;
4805
+ const endDateEl = safeQuerySelector (
4806
+ container ,
4807
+ ".react-datepicker__day--002" ,
4808
+ ) ;
4809
+ fireEvent . click ( endDateEl ) ;
4810
+
4811
+ expect ( onChangeSpy ) . toHaveBeenCalledTimes ( 1 ) ;
4812
+
4813
+ await waitFor ( ( ) => {
4814
+ expect ( document . activeElement ) . not . toBe ( endDateEl ) ;
4815
+ expect ( document . activeElement ) . toBe ( input ) ;
4816
+ } ) ;
4817
+ } ) ;
4818
+ } ) ;
4819
+ } ) ;
4645
4820
} ) ;
0 commit comments