Skip to content

Commit c1b1451

Browse files
Ivan KitanovIvan Kitanov
authored andcommitted
Adding minor improvements to stories, visibleMonths setter and tests
1 parent 34e0bcd commit c1b1451

File tree

3 files changed

+59
-23
lines changed

3 files changed

+59
-23
lines changed

src/components/date-range-picker/date-range-picker.spec.ts

Lines changed: 44 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -169,19 +169,14 @@ describe('Date range picker', () => {
169169
});
170170
describe('Properties', () => {
171171
it('should set the visibleMonths property correctly', async () => {
172-
// picker = await fixture<IgcDateRangePickerComponent>(f
173-
// html`<igc-date-range-picker
174-
175-
// ></igc-date-range-picker>`
176-
// );
177-
178172
expect(picker.visibleMonths).to.equal(2);
179173

180174
picker.visibleMonths = 1;
181175
await elementUpdated(picker);
182176
expect(picker.visibleMonths).to.equal(1);
183177

184178
// in case value other than 1 or 2 the value defaults to 2
179+
// @ts-expect-error: testing with an invalid visibleMonths value
185180
picker.visibleMonths = 11;
186181
await elementUpdated(picker);
187182
expect(picker.visibleMonths).to.equal(2);
@@ -197,6 +192,15 @@ describe('Date range picker', () => {
197192
await elementUpdated(picker);
198193
expect(picker.visibleMonths).to.equal(1);
199194

195+
picker = await fixture<IgcDateRangePickerComponent>(
196+
html`<igc-date-range-picker
197+
visible-months="11"
198+
></igc-date-range-picker>`
199+
);
200+
201+
await elementUpdated(picker);
202+
expect(picker.visibleMonths).to.equal(2);
203+
200204
picker = await fixture<IgcDateRangePickerComponent>(
201205
html`<igc-date-range-picker visible-months="2"></igc-date-range-picker>`
202206
);
@@ -769,7 +773,7 @@ describe('Date range picker', () => {
769773
await elementUpdated(picker);
770774

771775
await selectDates(date1, date2, calendar);
772-
expect(eventSpy).not.to.be.calledWith('igcChange'); // TODO: should igcChange be emitted for dialog selection before clicking DONE?
776+
expect(eventSpy).not.to.be.calledWith('igcChange');
773777
let dialog = picker.renderRoot.querySelector('igc-dialog');
774778
expect(dialog?.hasAttribute('open')).to.equal(true);
775779
checkSelectedRange(picker, { start: date1.native, end: date2.native });
@@ -801,7 +805,7 @@ describe('Date range picker', () => {
801805
await elementUpdated(picker);
802806

803807
await selectDates(date1, date2, calendar);
804-
expect(eventSpy).not.to.be.calledWith('igcChange'); // TODO: should igcChange be emitted for dialog selection before clicking DONE?
808+
expect(eventSpy).not.to.be.calledWith('igcChange');
805809
let dialog = picker.renderRoot.querySelector('igc-dialog');
806810
expect(dialog?.hasAttribute('open')).to.equal(true);
807811
checkSelectedRange(picker, { start: date1.native, end: date2.native });
@@ -826,6 +830,38 @@ describe('Date range picker', () => {
826830
expect(dateTimeInputs[1].value).to.equal(null);
827831
expect(calendar.values).to.deep.equal([]);
828832
});
833+
834+
it('should not emit igcChange when escape is pressed and the value should be the initial value', async () => {
835+
const eventSpy = spy(picker, 'emitEvent');
836+
837+
picker.mode = 'dialog';
838+
const date1 = today.add('day', -3);
839+
const date2 = today.add('day', 3);
840+
picker.value = { start: today.native, end: tomorrow.native };
841+
await elementUpdated(picker);
842+
843+
picker.open = true;
844+
await elementUpdated(picker);
845+
846+
await selectDates(date1, date2, calendar);
847+
expect(eventSpy).not.to.be.calledWith('igcChange');
848+
let dialog = picker.renderRoot.querySelector('igc-dialog');
849+
expect(dialog?.hasAttribute('open')).to.equal(true);
850+
checkSelectedRange(picker, { start: date1.native, end: date2.native });
851+
852+
simulateKeyboard(picker, escapeKey);
853+
await elementUpdated(picker);
854+
await elementUpdated(dateTimeInputs[0]);
855+
await elementUpdated(dateTimeInputs[1]);
856+
expect(eventSpy).not.to.be.calledWith('igcChange');
857+
dialog = picker.renderRoot.querySelector('igc-dialog');
858+
expect(dialog?.hasAttribute('open')).to.equal(false);
859+
860+
checkSelectedRange(picker, {
861+
start: today.native,
862+
end: tomorrow.native,
863+
});
864+
});
829865
});
830866
describe('Selection via the range selection chips', () => {
831867
const previousThreeDaysStart = CalendarDay.from(today.native).add(

src/components/date-range-picker/date-range-picker.ts

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -386,12 +386,8 @@ export default class IgcDateRangePickerComponent extends FormAssociatedRequiredM
386386
return this._visibleMonths;
387387
}
388388
// setter used to ensure that the property is set to either 1 or 2
389-
public set visibleMonths(value: number) {
390-
if (value !== 1 && value !== 2) {
391-
this._visibleMonths = 2;
392-
} else {
393-
this._visibleMonths = value as 1 | 2;
394-
}
389+
public set visibleMonths(value: 1 | 2) {
390+
this._visibleMonths = [1, 2].includes(value) ? value : 2;
395391
}
396392

397393
/**
@@ -646,6 +642,7 @@ export default class IgcDateRangePickerComponent extends FormAssociatedRequiredM
646642

647643
protected handleDialogClosing(event: Event) {
648644
event.stopPropagation();
645+
this.revertValue();
649646
this._hide(true);
650647
}
651648

@@ -1049,8 +1046,8 @@ export default class IgcDateRangePickerComponent extends FormAssociatedRequiredM
10491046
? html`
10501047
<igc-popover ?open=${this.open} anchor="${id}" flip shift>
10511048
<igc-focus-trap ?disabled=${!this.open || this.disabled}>
1052-
${this.renderCalendar(id)} ${this.renderActions()}
1053-
${this.renderRanges()}
1049+
${this.renderCalendar(id)} ${this.renderRanges()}
1050+
${this.renderActions()}
10541051
</igc-focus-trap>
10551052
</igc-popover>
10561053
`

stories/date-range-picker.stories.ts

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -358,10 +358,12 @@ const disabledDates: DateRangeDescriptor[] = [
358358
},
359359
];
360360

361-
function selectToday() {
361+
function selectToday(
362+
pickerType: '#singleInput' | '#twoInputs' = '#singleInput'
363+
) {
362364
const picker =
363-
document.querySelector<IgcDateRangePickerComponent>('#picker')!;
364-
picker.value = { start: new Date(), end: new Date() };
365+
document.querySelector<IgcDateRangePickerComponent>(pickerType)!;
366+
picker.select({ start: new Date(), end: new Date() });
365367
picker.hide();
366368
}
367369

@@ -511,7 +513,7 @@ export const Slots: Story = {
511513
render: (args) =>
512514
html` <h5>Two inputs</h5>
513515
<igc-date-range-picker
514-
id="picker"
516+
id="twoInputs"
515517
.displayFormat=${args.displayFormat}
516518
.inputFormat=${args.inputFormat}
517519
.locale=${args.locale}
@@ -528,6 +530,7 @@ export const Slots: Story = {
528530
.activeDate=${args.activeDate}
529531
.visibleMonths=${args.visibleMonths}
530532
.useTwoInputs=${true}
533+
.usePredefinedRanges="${args.usePredefinedRanges};"
531534
?disabled=${args.disabled}
532535
?invalid=${args.invalid}
533536
?readonly=${args.readOnly}
@@ -559,14 +562,14 @@ export const Slots: Story = {
559562
<p slot="title">🎉 Custom title 🎉</p>
560563
561564
<div slot="actions">
562-
<igc-button variant="flat" @click=${selectToday}
565+
<igc-button variant="flat" @click=${() => selectToday('#twoInputs')}
563566
>Select today</igc-button
564567
>
565568
</div>
566569
</igc-date-range-picker>
567570
<h5>Single input</h5>
568571
<igc-date-range-picker
569-
id="picker"
572+
id="singleInput"
570573
.label=${args.label}
571574
.placeholder=${args.placeholder}
572575
.displayFormat=${args.displayFormat}
@@ -608,7 +611,7 @@ export const Slots: Story = {
608611
<p slot="title">🎉 Custom title 🎉</p>
609612
610613
<div slot="actions">
611-
<igc-button variant="flat" @click=${selectToday}
614+
<igc-button variant="flat" @click=${() => selectToday()}
612615
>Select today</igc-button
613616
>
614617
</div>

0 commit comments

Comments
 (0)