Skip to content

Commit 79e2ba6

Browse files
authored
Merge branch 'master' into overflow-links
2 parents 391ecf0 + 5a975ff commit 79e2ba6

File tree

2 files changed

+33
-8
lines changed

2 files changed

+33
-8
lines changed

src/datepicker-input/datepicker-input.component.ts

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,9 @@
1-
import { Component, Input } from "@angular/core";
1+
import {
2+
Component,
3+
Input,
4+
Output,
5+
EventEmitter
6+
} from "@angular/core";
27

38
@Component({
49
selector: "ibm-date-picker-input",
@@ -28,6 +33,7 @@ import { Component, Input } from "@angular/core";
2833
fill-rule="nonzero"/>
2934
</svg>
3035
<input
36+
#dateInput
3137
*ngIf="!skeleton"
3238
autocomplete="off"
3339
type="text"
@@ -38,7 +44,8 @@ import { Component, Input } from "@angular/core";
3844
[attr.data-input] = "type == 'single' || type == 'range' ? '' : null"
3945
[id]= "id"
4046
[attr.disabled]="(disabled ? '' : null)"
41-
[attr.data-invalid]="(invalid ? '' : null)"/>
47+
[attr.data-invalid]="(invalid ? '' : null)"
48+
(change) = "valueChange.emit(dateInput.value)"/>
4249
<div *ngIf="invalid" class="bx--form-requirement">
4350
{{invalidText}}
4451
</div>
@@ -78,7 +85,9 @@ export class DatePickerInput {
7885

7986
@Input() placeholder = "mm/dd/yyyy";
8087

81-
@Input() pattern = "\d{1,2}/\d{1,2}/\d{4}";
88+
@Input() pattern = "\\d{1,2}/\\d{1,2}/\\d{4}";
89+
90+
@Output() valueChange: EventEmitter<string> = new EventEmitter();
8291

8392
@Input() theme: "light" | "dark" = "dark";
8493

src/datepicker/datepicker.component.ts

Lines changed: 21 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,9 @@ import {
77
OnDestroy
88
} from "@angular/core";
99
import { FlatpickrOptions } from "ng2-flatpickr";
10+
import flatpickr from "flatpickr";
1011
import rangePlugin from "flatpickr/dist/plugins/rangePlugin";
1112

12-
1313
@Component({
1414
selector: "ibm-date-picker",
1515
template: `
@@ -41,7 +41,7 @@ import rangePlugin from "flatpickr/dist/plugins/rangePlugin";
4141
[invalid]="invalid"
4242
[invalidText]="invalidText"
4343
[skeleton]="skeleton"
44-
(valueChange)="valueChange.emit($event)">
44+
(valueChange)="onInputValueChange($event, 0)">
4545
</ibm-date-picker-input>
4646
</div>
4747
@@ -57,7 +57,7 @@ import rangePlugin from "flatpickr/dist/plugins/rangePlugin";
5757
[invalid]="invalid"
5858
[invalidText]="invalidText"
5959
[skeleton]="skeleton"
60-
(valueChange)="valueChange.emit($event)">
60+
(valueChange)="onInputValueChange($event, 1)">
6161
</ibm-date-picker-input>
6262
</div>
6363
</div>
@@ -87,11 +87,11 @@ export class DatePicker implements OnDestroy {
8787

8888
@Input() placeholder = "mm/dd/yyyy";
8989

90-
@Input() pattern = "\d{1,2}/\d{1,2}/\d{4}";
90+
@Input() pattern = "\\d{1,2}/\\d{1,2}/\\d{4}";
9191

9292
@Input() id = `datepicker-${DatePicker.datePickerCount++}`;
9393

94-
@Input() value: Array<any>;
94+
@Input() value: Array<any> = [];
9595

9696
@Input() theme: "light" | "dark" = "dark";
9797

@@ -175,6 +175,22 @@ export class DatePicker implements OnDestroy {
175175
});
176176
}
177177

178+
onInputValueChange(event: string, index: number): void {
179+
const eventDate = flatpickr.parseDate(event, this.dateFormat, true);
180+
const previousDate = flatpickr.parseDate(this.value[index], this.dateFormat, true);
181+
if (eventDate) {
182+
if (!previousDate || previousDate.getTime() !== eventDate.getTime()) {
183+
this.value = [...this.value];
184+
this.value[index] = eventDate;
185+
}
186+
} else {
187+
if (previousDate || event) {
188+
this.value = [...this.value];
189+
this.value[index] = undefined;
190+
}
191+
}
192+
}
193+
178194
ngOnDestroy() {
179195
// clean up our flatpickr element - needed because the wrapper doesn't handle this
180196
const ng2FlatPickrElement = this.elementRef.nativeElement.querySelector(".ng2-flatpickr-input-container");

0 commit comments

Comments
 (0)