Skip to content

Commit 05eecb9

Browse files
Ivan KitanovIvan Kitanov
authored andcommitted
Moving from array to an object value
1 parent 35fbd12 commit 05eecb9

File tree

6 files changed

+217
-101
lines changed

6 files changed

+217
-101
lines changed

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

Lines changed: 62 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,9 @@ import {
1818
import IgcDateTimeInputComponent from '../date-time-input/date-time-input.js';
1919
import { DateTimeUtil } from '../date-time-input/date-util.js';
2020
import IgcInputComponent from '../input/input.js';
21-
import IgcDateRangePickerComponent from './date-range-picker.js';
21+
import IgcDateRangePickerComponent, {
22+
type DateRangeValue,
23+
} from './date-range-picker.js';
2224

2325
describe('Date range picker', () => {
2426
before(() => defineComponents(IgcDateRangePickerComponent));
@@ -103,7 +105,7 @@ describe('Date range picker', () => {
103105
});
104106

105107
it('should be successfully initialized with value', async () => {
106-
const expectedValue = [today.native, tomorrow.native];
108+
const expectedValue = { start: today.native, end: tomorrow.native };
107109
picker = await fixture<IgcDateRangePickerComponent>(
108110
html`<igc-date-range-picker
109111
.value="${expectedValue}"
@@ -163,7 +165,7 @@ describe('Date range picker', () => {
163165
});
164166
describe('Properties', () => {
165167
it('should set value through attribute correctly in case the date values are valid ISO 8601 strings', async () => {
166-
const expectedValue = [today.native, tomorrow.native];
168+
const expectedValue = { start: today.native, end: tomorrow.native };
167169
const attributeValue = `${today.native.toISOString()}, ${tomorrow.native.toISOString()}`;
168170
picker = await fixture<IgcDateRangePickerComponent>(
169171
html`<igc-date-range-picker
@@ -176,7 +178,7 @@ describe('Date range picker', () => {
176178
});
177179

178180
it('should keep the calendar selection and input values on changing the mode', async () => {
179-
const expectedValue = [today.native, tomorrow.native];
181+
const expectedValue = { start: today.native, end: tomorrow.native };
180182
picker = await fixture<IgcDateRangePickerComponent>(
181183
html`<igc-date-range-picker
182184
.value="${expectedValue}"
@@ -192,7 +194,7 @@ describe('Date range picker', () => {
192194
});
193195

194196
it('should keep the calendar selection and input values on switching to singleInput and back', async () => {
195-
const expectedValue = [today.native, tomorrow.native];
197+
const expectedValue = { start: today.native, end: tomorrow.native };
196198
picker = await fixture<IgcDateRangePickerComponent>(
197199
html`<igc-date-range-picker
198200
.value="${expectedValue}"
@@ -272,7 +274,7 @@ describe('Date range picker', () => {
272274
await selectDates(today, tomorrow, calendar);
273275

274276
expect(eventSpy).calledWith('igcChange');
275-
checkSelectedRange(picker, [today.native, tomorrow.native]);
277+
checkSelectedRange(picker, { start: today.native, end: tomorrow.native });
276278
expect(picker.open).to.equal(true);
277279

278280
await picker.hide();
@@ -284,23 +286,23 @@ describe('Date range picker', () => {
284286
await picker.show();
285287
await selectDates(today.add('day', 2), tomorrow.add('day', 2), calendar);
286288

287-
checkSelectedRange(picker, [
288-
today.add('day', 2).native,
289-
tomorrow.add('day', 2).native,
290-
]);
289+
checkSelectedRange(picker, {
290+
start: today.add('day', 2).native,
291+
end: tomorrow.add('day', 2).native,
292+
});
291293
expect(picker.open).to.equal(true);
292294
});
293295

294296
it('should not modify value through selection or typing when readOnly is true', async () => {
295297
const eventSpy = spy(picker, 'emitEvent');
296298
picker.readOnly = true;
297299
await elementUpdated(picker);
298-
expect(picker.value).to.deep.equal([null, null]); //TODO: refactor
300+
expect(picker.value).to.deep.equal({ start: null, end: null });
299301

300302
await picker.show();
301303
await selectDates(today, tomorrow, calendar);
302304

303-
expect(picker.value).to.deep.equal([null, null]);
305+
expect(picker.value).to.deep.equal({ start: null, end: null });
304306
expect(calendar.values).to.deep.equal([]);
305307
expect(eventSpy).not.to.be.called;
306308

@@ -312,7 +314,7 @@ describe('Date range picker', () => {
312314

313315
expect(isFocused(dateTimeInputs[0])).to.be.true;
314316
expect(dateTimeInputs[0].value).to.equal(null);
315-
expect(picker.value).to.deep.equal([null, null]);
317+
expect(picker.value).to.deep.equal({ start: null, end: null });
316318
expect(calendar.values).to.deep.equal([]);
317319
expect(eventSpy).not.to.be.called;
318320

@@ -324,7 +326,7 @@ describe('Date range picker', () => {
324326
calendar = picker.renderRoot.querySelector(IgcCalendarComponent.tagName)!;
325327
await selectDates(today, tomorrow, calendar);
326328

327-
expect(picker.value).to.deep.equal([null, null]);
329+
expect(picker.value).to.deep.equal({ start: null, end: null });
328330
expect(calendar.values).to.deep.equal([]);
329331
expect(eventSpy).not.to.be.called;
330332
});
@@ -340,14 +342,14 @@ describe('Date range picker', () => {
340342

341343
expect(isFocused(dateTimeInputs[0])).to.be.true;
342344
expect(dateTimeInputs[0].value).to.equal(null);
343-
expect(picker.value).to.deep.equal([null, null]);
345+
expect(picker.value).to.deep.equal({ start: null, end: null });
344346
expect(calendar.values).to.deep.equal([]);
345347
expect(eventSpy).not.to.be.called;
346348

347349
await picker.show();
348350
await selectDates(today, tomorrow, calendar);
349351

350-
checkSelectedRange(picker, [today.native, tomorrow.native]);
352+
checkSelectedRange(picker, { start: today.native, end: tomorrow.native });
351353
expect(eventSpy).calledWith('igcChange');
352354
});
353355
});
@@ -361,9 +363,8 @@ describe('Date range picker', () => {
361363
await selectDates(today, null, calendar);
362364

363365
expect(eventSpy).calledWith('igcChange');
364-
expect(picker.value?.length).to.equal(2);
365-
expect(picker.value?.[0]).to.deep.equal(today.native);
366-
expect(picker.value?.[1]).to.deep.equal(today.native);
366+
expect(picker.value?.start).to.deep.equal(today.native);
367+
expect(picker.value?.end).to.deep.equal(today.native);
367368

368369
const popover = picker.renderRoot.querySelector('igc-popover');
369370
// when selecting a single date, the calendar won't close
@@ -379,9 +380,8 @@ describe('Date range picker', () => {
379380
await selectDates(today, tomorrow, calendar);
380381

381382
expect(eventSpy).calledWith('igcChange');
382-
expect(picker.value?.length).to.equal(2);
383-
expect(picker.value?.[0]).to.deep.equal(today.native);
384-
expect(picker.value?.[1]).to.deep.equal(tomorrow.native);
383+
expect(picker.value?.start).to.deep.equal(today.native);
384+
expect(picker.value?.end).to.deep.equal(tomorrow.native);
385385

386386
const popover = picker.renderRoot.querySelector('igc-popover');
387387
// with the second click, the calendar closes
@@ -409,9 +409,8 @@ describe('Date range picker', () => {
409409
await elementUpdated(picker);
410410

411411
expect(eventSpy).calledWith('igcChange');
412-
expect(picker.value?.length).to.equal(2);
413-
expect(picker.value?.[0]).to.deep.equal(today.native);
414-
expect(picker.value?.[1]).to.deep.equal(tomorrow.native);
412+
expect(picker.value?.start).to.deep.equal(today.native);
413+
expect(picker.value?.end).to.deep.equal(tomorrow.native);
415414

416415
dialog = picker.renderRoot.querySelector('igc-dialog');
417416
expect(dialog?.hasAttribute('open')).to.equal(false);
@@ -423,7 +422,7 @@ describe('Date range picker', () => {
423422
picker.mode = 'dialog';
424423
const date1 = today.add('day', -2);
425424
const date2 = today.add('day', 2);
426-
picker.value = [date1.native, date2.native];
425+
picker.value = { start: date1.native, end: date2.native };
427426
await elementUpdated(picker);
428427
picker.open = true;
429428
await elementUpdated(picker);
@@ -441,9 +440,7 @@ describe('Date range picker', () => {
441440
await elementUpdated(picker);
442441

443442
expect(eventSpy).not.to.be.calledWith('igcChange');
444-
expect(picker.value?.length).to.equal(2);
445-
expect(picker.value?.[0]).to.deep.equal(date1.native);
446-
expect(picker.value?.[1]).to.deep.equal(date2.native);
443+
picker.value = { start: date1.native, end: date2.native };
447444
dialog = picker.renderRoot.querySelector('igc-dialog');
448445
expect(dialog?.hasAttribute('open')).to.equal(false);
449446
});
@@ -562,7 +559,7 @@ describe('Date range picker', () => {
562559
await elementUpdated(picker);
563560

564561
expect(eventSpy).not.called;
565-
expect(picker.value).to.deep.equal([null, null]);
562+
expect(picker.value).to.deep.equal({ start: null, end: null });
566563
});
567564

568565
it('should open the picker on calendar show icon click in dropdown mode', async () => {
@@ -600,26 +597,26 @@ describe('Date range picker', () => {
600597
});
601598

602599
it('should not open the picker in dropdown mode when clicking the clear icon', async () => {
603-
picker.value = [today.native, tomorrow.native];
600+
picker.value = { start: today.native, end: tomorrow.native };
604601
await elementUpdated(picker);
605602

606603
simulateClick(getIcon(pickerClearIcon));
607604
await elementUpdated(picker);
608605

609606
expect(picker.open).to.be.false;
610-
expect(picker.value).to.deep.equal([null, null]);
607+
expect(picker.value).to.deep.equal({ start: null, end: null });
611608
});
612609

613610
it('should not open the picker in dialog mode when clicking the clear icon', async () => {
614611
picker.mode = 'dialog';
615-
picker.value = [today.native, tomorrow.native];
612+
picker.value = { start: today.native, end: tomorrow.native };
616613
await elementUpdated(picker);
617614

618615
simulateClick(getIcon(pickerClearIcon));
619616
await elementUpdated(picker);
620617

621618
expect(picker.open).to.be.false;
622-
expect(picker.value).to.deep.equal([null, null]);
619+
picker.value = { start: null, end: null };
623620
});
624621
});
625622
});
@@ -645,35 +642,50 @@ const selectDates = async (
645642

646643
const checkSelectedRange = (
647644
picker: IgcDateRangePickerComponent,
648-
expectedValue: (Date | null)[],
645+
expectedValue: DateRangeValue | null,
649646
singleInput = false
650647
) => {
651648
const calendar = picker.renderRoot.querySelector(
652649
IgcCalendarComponent.tagName
653650
)!;
654651

655-
expect(picker.value).not.to.be.null;
656-
expect(picker.value).to.deep.equal(expectedValue);
652+
expect(picker.value?.start).to.deep.equal(expectedValue?.start);
653+
expect(picker.value?.end).to.deep.equal(expectedValue?.end);
657654

658655
if (singleInput) {
659656
const input = picker.renderRoot.querySelector(IgcInputComponent.tagName)!;
660-
const start = DateTimeUtil.formatDate(
661-
expectedValue[0]!,
662-
picker.locale,
663-
picker.displayFormat || picker.inputFormat
664-
);
665-
const end = DateTimeUtil.formatDate(
666-
expectedValue[1]!,
667-
picker.locale,
668-
picker.displayFormat || picker.inputFormat
669-
);
657+
const start = expectedValue?.start
658+
? DateTimeUtil.formatDate(
659+
expectedValue.start,
660+
picker.locale,
661+
picker.displayFormat || picker.inputFormat
662+
)
663+
: '';
664+
const end = expectedValue?.end
665+
? DateTimeUtil.formatDate(
666+
expectedValue.end,
667+
picker.locale,
668+
picker.displayFormat || picker.inputFormat
669+
)
670+
: '';
670671
expect(input.value).to.equal(`${start} - ${end}`);
671672
} else {
672673
const inputs = picker.renderRoot.querySelectorAll(
673674
IgcDateTimeInputComponent.tagName
674675
);
675-
expect(inputs[0].value).to.deep.equal(expectedValue[0]);
676-
expect(inputs[1].value).to.deep.equal(expectedValue[1]);
676+
expect(inputs[0].value).to.deep.equal(expectedValue?.start);
677+
expect(inputs[1].value).to.deep.equal(expectedValue?.end);
678+
}
679+
680+
// Calendar values are still expected as array:
681+
if (expectedValue?.start && expectedValue?.end) {
682+
expect(calendar.values).to.deep.equal([
683+
expectedValue.start,
684+
expectedValue.end,
685+
]);
686+
} else if (expectedValue?.start) {
687+
expect(calendar.values).to.deep.equal([expectedValue.start]);
688+
} else {
689+
expect(calendar.values).to.deep.equal([]);
677690
}
678-
expect(calendar.values).to.deep.equal(expectedValue);
679691
};

0 commit comments

Comments
 (0)