@@ -20,7 +20,7 @@ import { Subject } from 'rxjs';
20
20
import { AsyncPipe } from '@angular/common' ;
21
21
import { AnimationService } from '../services/animation/animation' ;
22
22
import { IgxAngularAnimationService } from '../services/animation/angular-animation-service' ;
23
- import { IgxPickerToggleComponent } from '../date-common/picker-icons.common' ;
23
+ import { IgxPickerClearComponent , IgxPickerToggleComponent } from '../date-common/picker-icons.common' ;
24
24
import { IgxIconComponent } from '../icon/icon.component' ;
25
25
import { registerLocaleData } from "@angular/common" ;
26
26
import localeJa from "@angular/common/locales/ja" ;
@@ -401,13 +401,15 @@ describe('IgxDateRangePicker', () => {
401
401
} ) ;
402
402
403
403
describe ( 'Clear tests' , ( ) => {
404
+ const range = { start : new Date ( 2025 , 1 , 1 ) , end : new Date ( 2025 , 1 , 2 ) } ;
405
+
404
406
describe ( 'Default clear icon' , ( ) => {
405
407
it ( 'should display default clear icon when value is set' , ( ) => {
406
408
const inputGroup = fixture . debugElement . query ( By . directive ( IgxInputGroupComponent ) ) ;
407
409
let suffix = inputGroup . query ( By . directive ( IgxSuffixDirective ) ) ;
408
410
expect ( suffix ) . toBeNull ( ) ;
409
411
410
- dateRange . value = { start : new Date ( 2025 , 1 , 1 ) , end : new Date ( 2025 , 1 , 2 ) } ;
412
+ dateRange . value = range ;
411
413
fixture . detectChanges ( ) ;
412
414
413
415
suffix = inputGroup . query ( By . directive ( IgxSuffixDirective ) ) ;
@@ -417,7 +419,7 @@ describe('IgxDateRangePicker', () => {
417
419
} ) ;
418
420
419
421
it ( 'should clear the value when clicking the default clear icon (suffix)' , fakeAsync ( ( ) => {
420
- dateRange . value = { start : new Date ( 2025 , 1 , 1 ) , end : new Date ( 2025 , 1 , 2 ) } ;
422
+ dateRange . value = range ;
421
423
fixture . detectChanges ( ) ;
422
424
423
425
const inputGroup = fixture . debugElement . query ( By . directive ( IgxInputGroupComponent ) ) ;
@@ -439,7 +441,6 @@ describe('IgxDateRangePicker', () => {
439
441
fixture . detectChanges ( ) ;
440
442
441
443
dateRange = fixture . debugElement . queryAll ( By . directive ( IgxDateRangePickerComponent ) ) [ 0 ] . componentInstance ;
442
- const range = { start : new Date ( 2025 , 1 , 1 ) , end : new Date ( 2025 , 1 , 2 ) } ;
443
444
dateRange . value = range ;
444
445
fixture . detectChanges ( ) ;
445
446
@@ -463,7 +464,34 @@ describe('IgxDateRangePicker', () => {
463
464
} ) ) ;
464
465
} ) ;
465
466
466
- //xdescribe('Projected clear icon', () => {});
467
+ describe ( 'Projected clear icon' , ( ) => {
468
+ it ( 'should clear the value when clicking the projected clear icon' , fakeAsync ( ( ) => {
469
+ fixture = TestBed . createComponent ( DateRangeTemplatesComponent ) ;
470
+ fixture . detectChanges ( ) ;
471
+
472
+ dateRange = fixture . debugElement . queryAll ( By . directive ( IgxDateRangePickerComponent ) ) [ 4 ] . componentInstance ;
473
+
474
+ const pickerClear = fixture . debugElement . queryAll ( By . directive ( IgxPickerClearComponent ) ) [ 0 ] ;
475
+ // Projected clear icon is rendered even if value is unassigned
476
+ expect ( pickerClear ) . not . toBeNull ( ) ;
477
+
478
+ const suffixes = dateRange . element . nativeElement . querySelectorAll ( CSS_CLASS_INPUT_END ) ;
479
+ expect ( suffixes . length ) . toBe ( 1 ) ;
480
+ // the default clear icon is overridden by the projected one
481
+ expect ( suffixes [ 0 ] . textContent . trim ( ) ) . toEqual ( 'delete' ) ;
482
+
483
+ dateRange . value = range ;
484
+ fixture . detectChanges ( ) ;
485
+
486
+ spyOn ( dateRange . valueChange , 'emit' ) ;
487
+ UIInteractions . simulateClickAndSelectEvent ( pickerClear . nativeElement ) ;
488
+ tick ( ) ;
489
+ fixture . detectChanges ( ) ;
490
+
491
+ expect ( dateRange . value ) . toBeNull ( ) ;
492
+ expect ( dateRange . valueChange . emit ) . toHaveBeenCalledOnceWith ( null ) ;
493
+ } ) ) ;
494
+ } ) ;
467
495
} ) ;
468
496
469
497
describe ( 'Properties & events tests' , ( ) => {
@@ -1629,6 +1657,39 @@ describe('IgxDateRangePicker', () => {
1629
1657
expect ( dateRange . locale ) . toEqual ( 'en-US' ) ;
1630
1658
expect ( dateRange . weekStart ) . toEqual ( WEEKDAYS . FRIDAY ) ;
1631
1659
} ) ) ;
1660
+
1661
+ it ( 'should render projected clear icons which clear the range on click' , ( ) => {
1662
+ fixture = TestBed . createComponent ( DateRangeTwoInputsClearComponent ) ;
1663
+ fixture . detectChanges ( ) ;
1664
+
1665
+ const drp = fixture . debugElement . query ( By . directive ( IgxDateRangePickerComponent ) ) . componentInstance ;
1666
+ const start = fixture . debugElement . query ( By . directive ( IgxDateRangeStartComponent ) ) ;
1667
+ const end = fixture . debugElement . query ( By . directive ( IgxDateRangeEndComponent ) ) ;
1668
+
1669
+ const startSuffix = start . nativeElement . querySelectorAll ( CSS_CLASS_INPUT_END ) [ 0 ] ;
1670
+ const endSuffix = end . nativeElement . querySelectorAll ( CSS_CLASS_INPUT_END ) [ 0 ] ;
1671
+
1672
+ expect ( startSuffix . innerText ) . toBe ( 'delete' ) ;
1673
+ expect ( endSuffix . innerText ) . toBe ( 'delete' ) ;
1674
+
1675
+ const pickerClearComponents = fixture . debugElement . queryAll ( By . directive ( IgxPickerClearComponent ) ) ;
1676
+
1677
+ drp . value = { start : new Date ( 2025 , 0 , 1 ) , end : new Date ( 2025 , 0 , 2 ) } ;
1678
+ fixture . detectChanges ( ) ;
1679
+
1680
+ UIInteractions . simulateClickAndSelectEvent ( pickerClearComponents [ 0 ] . nativeNode ) ;
1681
+ fixture . detectChanges ( ) ;
1682
+
1683
+ expect ( drp . value ) . toEqual ( null ) ;
1684
+
1685
+ drp . value = { start : new Date ( 2025 , 0 , 1 ) , end : new Date ( 2025 , 0 , 2 ) } ;
1686
+ fixture . detectChanges ( ) ;
1687
+
1688
+ UIInteractions . simulateClickAndSelectEvent ( pickerClearComponents [ 1 ] . nativeNode ) ;
1689
+ fixture . detectChanges ( ) ;
1690
+
1691
+ expect ( drp . value ) . toEqual ( null ) ;
1692
+ } ) ;
1632
1693
} ) ;
1633
1694
} ) ;
1634
1695
} ) ;
@@ -1722,6 +1783,29 @@ export class DateRangeTwoInputsNgModelTestComponent extends DateRangeTestCompone
1722
1783
public range = { start : new Date ( 2020 , 1 , 1 ) , end : new Date ( 2020 , 1 , 4 ) } ;
1723
1784
}
1724
1785
1786
+ @Component ( {
1787
+ selector : 'igx-date-range-two-inputs-clear' ,
1788
+ template : `
1789
+ <igx-date-range-picker>
1790
+ <igx-date-range-start>
1791
+ <input igxInput igxDateTimeEditor type="text">
1792
+ <igx-picker-clear igxSuffix>
1793
+ <igx-icon>delete</igx-icon>
1794
+ </igx-picker-clear>
1795
+ </igx-date-range-start>
1796
+ <igx-date-range-end>
1797
+ <input igxInput igxDateTimeEditor type="text">
1798
+ <igx-picker-clear igxSuffix>
1799
+ <igx-icon>delete</igx-icon>
1800
+ </igx-picker-clear>
1801
+ </igx-date-range-end>
1802
+ </igx-date-range-picker>` ,
1803
+ imports : [ IgxDateRangePickerComponent , IgxDateRangeStartComponent , IgxDateRangeEndComponent , IgxInputDirective ,
1804
+ IgxDateTimeEditorDirective , FormsModule , IgxPickerClearComponent , IgxIconComponent , IgxSuffixDirective ]
1805
+ } )
1806
+ export class DateRangeTwoInputsClearComponent extends DateRangeTestComponent {
1807
+ }
1808
+
1725
1809
@Component ( {
1726
1810
selector : 'igx-date-range-single-input-label-test' ,
1727
1811
template : `
@@ -1777,18 +1861,24 @@ export class DateRangeCustomComponent extends DateRangeTestComponent {
1777
1861
<igx-icon>flight_land</igx-icon>
1778
1862
</igx-picker-toggle>
1779
1863
<igx-suffix>
1780
- <igx-icon>
1781
- calendar_view_day
1782
- </igx-icon>
1783
- </igx-suffix>
1864
+ <igx-icon>
1865
+ calendar_view_day
1866
+ </igx-icon>
1867
+ </igx-suffix>
1784
1868
</igx-date-range-end>
1869
+ </igx-date-range-picker>
1870
+ <igx-date-range-picker>
1871
+ <igx-picker-clear igxSuffix>
1872
+ <igx-icon>delete</igx-icon>
1873
+ </igx-picker-clear>
1785
1874
</igx-date-range-picker>
1786
1875
` ,
1787
1876
imports : [
1788
1877
IgxDateRangePickerComponent ,
1789
1878
IgxDateRangeStartComponent ,
1790
1879
IgxDateRangeEndComponent ,
1791
1880
IgxPickerToggleComponent ,
1881
+ IgxPickerClearComponent ,
1792
1882
IgxIconComponent ,
1793
1883
FormsModule ,
1794
1884
IgxInputDirective ,
0 commit comments