Skip to content

Commit 42cfa28

Browse files
authored
Clear icon enhancements for IgxDateRangePicker (#16115)
1 parent 03f661d commit 42cfa28

File tree

9 files changed

+288
-47
lines changed

9 files changed

+288
-47
lines changed

projects/igniteui-angular/src/lib/date-common/picker-base.directive.ts

Lines changed: 24 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ import { IToggleView } from '../core/navigation';
1313
import { IBaseCancelableBrowserEventArgs, IBaseEventArgs } from '../core/utils';
1414
import { IgxOverlayOutletDirective } from '../directives/toggle/toggle.directive';
1515
import { OverlaySettings } from '../services/overlay/utilities';
16-
import { IgxPickerToggleComponent } from './picker-icons.common';
16+
import { IgxPickerClearComponent, IgxPickerToggleComponent } from './picker-icons.common';
1717
import { PickerHeaderOrientation, PickerInteractionMode } from './types';
1818
import { WEEKDAYS } from '../calendar/calendar';
1919
import { DateRange } from '../date-range-picker/date-range-picker-inputs.common';
@@ -261,6 +261,10 @@ export abstract class PickerBaseDirective implements IToggleView, EditorProvider
261261
@ContentChildren(IgxPickerToggleComponent, { descendants: true })
262262
public toggleComponents: QueryList<IgxPickerToggleComponent>;
263263

264+
/** @hidden @internal */
265+
@ContentChildren(IgxPickerClearComponent, { descendants: true })
266+
public clearComponents: QueryList<IgxPickerClearComponent>;
267+
264268
@ContentChildren(IgxPrefixDirective, { descendants: true })
265269
protected prefixes: QueryList<IgxPrefixDirective>;
266270

@@ -321,9 +325,8 @@ export abstract class PickerBaseDirective implements IToggleView, EditorProvider
321325

322326
/** @hidden @internal */
323327
public ngAfterViewInit(): void {
324-
this.subToIconsClicked(this.toggleComponents, () => this.open());
325-
this.toggleComponents.changes.pipe(takeUntil(this._destroy$))
326-
.subscribe(() => this.subToIconsClicked(this.toggleComponents, () => this.open()));
328+
this.subToIconsClicked(this.toggleComponents, () => this.toggle());
329+
this.subToIconsClicked(this.clearComponents, () => this.clear());
327330
}
328331

329332
/** @hidden @internal */
@@ -344,17 +347,28 @@ export abstract class PickerBaseDirective implements IToggleView, EditorProvider
344347
}
345348

346349
/** Subscribes to the click events of toggle/clear icons in a query */
347-
protected subToIconsClicked(components: QueryList<IgxPickerToggleComponent>, next: () => any): void {
348-
components.forEach(toggle => {
349-
toggle.clicked
350-
.pipe(takeUntil(merge(components.changes, this._destroy$)))
351-
.subscribe(next);
352-
});
350+
private subToIconsClicked(
351+
components: QueryList<IgxPickerToggleComponent | IgxPickerClearComponent>,
352+
handler: () => void
353+
): void {
354+
const subscribeToClick = componentList => {
355+
componentList.forEach(component => {
356+
component.clicked
357+
.pipe(takeUntil(merge(componentList.changes, this._destroy$)))
358+
.subscribe(handler);
359+
});
360+
};
361+
362+
subscribeToClick(components);
363+
364+
components.changes.pipe(takeUntil(this._destroy$))
365+
.subscribe(() => subscribeToClick(components));
353366
}
354367

355368
public abstract select(value: Date | DateRange | string): void;
356369
public abstract open(settings?: OverlaySettings): void;
357370
public abstract toggle(settings?: OverlaySettings): void;
358371
public abstract close(): void;
372+
public abstract clear(): void;
359373
public abstract getEditElement(): HTMLInputElement;
360374
}

projects/igniteui-angular/src/lib/date-picker/date-picker.component.ts

Lines changed: 1 addition & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@ import {
55
ChangeDetectorRef,
66
Component,
77
ContentChild,
8-
ContentChildren,
98
ElementRef,
109
EventEmitter,
1110
HostBinding,
@@ -19,7 +18,6 @@ import {
1918
Optional,
2019
Output,
2120
PipeTransform,
22-
QueryList,
2321
Renderer2,
2422
ViewChild,
2523
ViewContainerRef,
@@ -50,7 +48,7 @@ import { DatePickerResourceStringsEN, IDatePickerResourceStrings } from '../core
5048
import { IBaseCancelableBrowserEventArgs, isDate, PlatformUtil } from '../core/utils';
5149
import { IgxCalendarContainerComponent } from '../date-common/calendar-container/calendar-container.component';
5250
import { PickerBaseDirective } from '../date-common/picker-base.directive';
53-
import { IgxPickerActionsDirective, IgxPickerClearComponent } from '../date-common/public_api';
51+
import { IgxPickerActionsDirective } from '../date-common/public_api';
5452
import { DateTimeUtil } from '../date-common/util/date-time.util';
5553
import { DatePart, DatePartDeltas, IgxDateTimeEditorDirective } from '../directives/date-time-editor/public_api';
5654
import { IgxOverlayOutletDirective } from '../directives/toggle/toggle.directive';
@@ -414,10 +412,6 @@ export class IgxDatePickerComponent extends PickerBaseDirective implements Contr
414412
@Output()
415413
public validationFailed = new EventEmitter<IDatePickerValidationFailedEventArgs>();
416414

417-
/** @hidden @internal */
418-
@ContentChildren(IgxPickerClearComponent)
419-
public clearComponents: QueryList<IgxPickerClearComponent>;
420-
421415
/** @hidden @internal */
422416
@ContentChild(IgxLabelDirective)
423417
public label: IgxLabelDirective;
@@ -784,10 +778,6 @@ export class IgxDatePickerComponent extends PickerBaseDirective implements Contr
784778
this.subscribeToOverlayEvents();
785779
this.subscribeToDateEditorEvents();
786780

787-
this.subToIconsClicked(this.clearComponents, () => this.clear());
788-
this.clearComponents.changes.pipe(takeUntil(this._destroy$))
789-
.subscribe(() => this.subToIconsClicked(this.clearComponents, () => this.clear()));
790-
791781
this._dropDownOverlaySettings.excludeFromOutsideClick = [this.inputGroup.element.nativeElement];
792782

793783
fromEvent(this.inputDirective.nativeElement, 'blur')

projects/igniteui-angular/src/lib/date-range-picker/date-range-picker.component.html

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,21 +19,31 @@
1919
<igx-icon family="default" name="date_range"></igx-icon>
2020
</ng-template>
2121

22+
<ng-template #clearIcon>
23+
<igx-icon family="default" name="input_clear" [attr.aria-hidden]="true"></igx-icon>
24+
</ng-template>
25+
2226
<ng-template #defDateSeparatorTemplate>{{ dateSeparator }}</ng-template>
2327

2428
<ng-template #defTemplate>
25-
<igx-input-group [type]="type" (click)="open()">
29+
<igx-input-group [type]="type">
2630
<!-- only set mask placeholder when empty, otherwise input group might use it as label if none is set -->
2731
<input #singleInput igxInput type="text" readonly [disabled]="disabled" [placeholder]="value ? '' : singleInputFormat"
2832
role="combobox" aria-haspopup="grid" [attr.aria-expanded]="!collapsed" [attr.aria-labelledby]="label?.id"
2933
[value]="value | dateRange: appliedFormat : locale : formatter" />
3034

3135
@if (!toggleComponents.length) {
32-
<igx-prefix>
36+
<igx-prefix (click)="toggle()">
3337
<ng-container *ngTemplateOutlet="defIcon"></ng-container>
3438
</igx-prefix>
3539
}
3640

41+
@if (!clearComponents.length && value) {
42+
<igx-suffix (click)="clear()">
43+
<ng-container *ngTemplateOutlet="clearIcon"></ng-container>
44+
</igx-suffix>
45+
}
46+
3747
<ng-container ngProjectAs="[igxLabel]">
3848
<ng-content select="[igxLabel]"></ng-content>
3949
</ng-container>

0 commit comments

Comments
 (0)