Skip to content

Commit 554e0f8

Browse files
committed
feat(dateRange): Adding toggle calendar icon to the end
1 parent 4df9f17 commit 554e0f8

File tree

4 files changed

+53
-7
lines changed

4 files changed

+53
-7
lines changed

projects/igniteui-angular/src/lib/date-range-picker/date-range-picker-inputs.common.ts

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { Component, ContentChild, Pipe, PipeTransform, Directive } from '@angular/core';
1+
import { Component, ContentChild, Pipe, PipeTransform, Directive, ViewChild, ViewContainerRef } from '@angular/core';
22
import { NgControl } from '@angular/forms';
33
import { IgxInputDirective, IgxInputState } from '../input-group/public_api';
44
import { IgxInputGroupComponent } from '../input-group/input-group.component';
@@ -10,7 +10,8 @@ import { IgxIconComponent } from '../icon/icon.component';
1010
import { IgxSuffixDirective } from '../directives/suffix/suffix.directive';
1111
import { IgxButtonDirective } from '../directives/button/button.directive';
1212
import { IgxPrefixDirective } from '../directives/prefix/prefix.directive';
13-
import { NgTemplateOutlet, NgClass } from '@angular/common';
13+
import { NgTemplateOutlet } from '@angular/common';
14+
import { IgxPickerToggleComponent } from 'igniteui-angular';
1415

1516
/** Represents a range between two dates. */
1617
export interface DateRange {
@@ -67,6 +68,9 @@ export class IgxDateRangeInputsBaseComponent extends IgxInputGroupComponent {
6768
@ContentChild(IgxInputDirective)
6869
public inputDirective: IgxInputDirective;
6970

71+
@ViewChild('toggleSlot', { read: ViewContainerRef, static: false })
72+
public toggleSlot: ViewContainerRef;
73+
7074
@ContentChild(NgControl)
7175
protected ngControl: NgControl;
7276

@@ -128,7 +132,10 @@ export class IgxDateRangeInputsBaseComponent extends IgxInputGroupComponent {
128132
],
129133
imports: [NgTemplateOutlet, IgxPrefixDirective, IgxButtonDirective, IgxSuffixDirective, IgxIconComponent]
130134
})
131-
export class IgxDateRangeStartComponent extends IgxDateRangeInputsBaseComponent { }
135+
export class IgxDateRangeStartComponent extends IgxDateRangeInputsBaseComponent {
136+
@ContentChild(IgxPickerToggleComponent)
137+
public projectedToggle?: IgxPickerToggleComponent;
138+
}
132139

133140
/**
134141
* Defines the end input for a date range picker
@@ -163,7 +170,10 @@ export class IgxDateRangeStartComponent extends IgxDateRangeInputsBaseComponent
163170
],
164171
imports: [NgTemplateOutlet, IgxPrefixDirective, IgxButtonDirective, IgxSuffixDirective, IgxIconComponent]
165172
})
166-
export class IgxDateRangeEndComponent extends IgxDateRangeInputsBaseComponent { }
173+
export class IgxDateRangeEndComponent extends IgxDateRangeInputsBaseComponent {
174+
@ContentChild(IgxPickerToggleComponent)
175+
public projectedToggle?: IgxPickerToggleComponent;
176+
}
167177

168178
/**
169179
* Replaces the default separator `to` with the provided value

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
</ng-template>
1717

1818
<ng-template #defIcon>
19-
<igx-icon family="default" name="date_range" [attr.aria-hidden]="true"></igx-icon>
19+
<igx-icon family="default" name="date_range" [attr.aria-hidden]="true" (click)="toggle()"></igx-icon>
2020
</ng-template>
2121

2222
<ng-template #defDateSeparatorTemplate>{{ dateSeparator }}</ng-template>

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

Lines changed: 35 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ import { IgxPrefixDirective } from '../directives/prefix/prefix.directive';
3535
import { IgxIconComponent } from '../icon/icon.component';
3636
import { getCurrentResourceStrings } from '../core/i18n/resources';
3737
import { fadeIn, fadeOut } from 'igniteui-angular/animations';
38+
import { IgxInputGroupBase } from '../input-group/input-group.common';
3839

3940
const SingleInputDatesConcatenationString = ' - ';
4041

@@ -293,13 +294,17 @@ export class IgxDateRangePickerComponent extends PickerBaseDirective
293294
@ViewChild(IgxInputGroupComponent, { read: ViewContainerRef })
294295
private viewContainerRef: ViewContainerRef;
295296

297+
/** @hidden @internal */
298+
@ViewChild('defIcon', { read: TemplateRef })
299+
private defIcon: TemplateRef<any>;
300+
296301
/** @hidden @internal */
297302
@ViewChild(IgxInputDirective)
298303
public inputDirective: IgxInputDirective;
299304

300305
/** @hidden @internal */
301-
@ContentChildren(IgxDateRangeInputsBaseComponent)
302-
public projectedInputs: QueryList<IgxDateRangeInputsBaseComponent>;
306+
@ContentChildren(IgxInputGroupBase as any, { descendants: true, read: IgxDateRangeInputsBaseComponent })
307+
public projectedInputs!: QueryList<IgxDateRangeInputsBaseComponent>;
303308

304309
@ContentChild(IgxLabelDirective)
305310
public label: IgxLabelDirective;
@@ -649,6 +654,7 @@ export class IgxDateRangePickerComponent extends PickerBaseDirective
649654
this.attachOnTouched();
650655

651656
this.setRequiredToInputs();
657+
this.renderDefaultToggleIcons();
652658

653659
if (this._ngControl) {
654660
this._statusChanges$ = this._ngControl.statusChanges.subscribe(this.onStatusChanged.bind(this));
@@ -855,6 +861,33 @@ export class IgxDateRangePickerComponent extends PickerBaseDirective
855861
});
856862
}
857863

864+
private renderDefaultToggleIcons(): void {
865+
if (!this.projectedInputs || this.projectedInputs.length === 0) {
866+
return;
867+
}
868+
869+
const start = this.projectedInputs.find(i => i instanceof IgxDateRangeStartComponent) as IgxDateRangeStartComponent;
870+
const end = this.projectedInputs.find(i => i instanceof IgxDateRangeEndComponent) as IgxDateRangeEndComponent;
871+
872+
if (start && !this.hasStartToggle) {
873+
start.toggleSlot.createEmbeddedView(this.defIcon);
874+
}
875+
876+
if (end && !this.hasEndToggle) {
877+
end.toggleSlot.createEmbeddedView(this.defIcon);
878+
}
879+
}
880+
881+
private get hasStartToggle(): boolean {
882+
const start = this.projectedInputs.find(i => i instanceof IgxDateRangeStartComponent) as IgxDateRangeStartComponent;
883+
return !!start?.projectedToggle;
884+
}
885+
886+
private get hasEndToggle(): boolean {
887+
const end = this.projectedInputs.find(i => i instanceof IgxDateRangeEndComponent) as IgxDateRangeEndComponent;
888+
return !!end?.projectedToggle;
889+
}
890+
858891
private parseMinValue(value: string | Date): Date | null {
859892
let minValue: Date = parseDate(value);
860893
if (!minValue && this.hasProjectedInputs) {

projects/igniteui-angular/src/lib/input-group/input-group.component.html

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,7 @@
7474
<div class="igx-input-group__bundle">
7575
<div class="igx-input-group__bundle-start">
7676
<ng-container *ngTemplateOutlet="prefix"></ng-container>
77+
<ng-template #toggleSlot></ng-template>
7778
</div>
7879

7980
<ng-container>
@@ -107,6 +108,7 @@
107108
<div class="igx-input-group__bundle">
108109
<div class="igx-input-group__bundle-start">
109110
<ng-container *ngTemplateOutlet="prefix"></ng-container>
111+
<ng-template #toggleSlot></ng-template>
110112
</div>
111113

112114

@@ -133,6 +135,7 @@
133135
<div class="igx-input-group__bundle">
134136
<div class="igx-input-group__bundle-start">
135137
<ng-container *ngTemplateOutlet="prefix"></ng-container>
138+
<ng-template #toggleSlot></ng-template>
136139
</div>
137140

138141
<ng-container *ngTemplateOutlet="input"></ng-container>

0 commit comments

Comments
 (0)