Skip to content

Commit

Permalink
fix(kit): CalendarRange not update selectedActivePeriod, when `va…
Browse files Browse the repository at this point in the history
…lue` updates
  • Loading branch information
mdlufy committed Aug 14, 2024
1 parent fb150f8 commit 8aba4f6
Show file tree
Hide file tree
Showing 2 changed files with 44 additions and 1 deletion.
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,11 @@ import {
HostListener,
Inject,
Input,
OnChanges,
Optional,
Output,
Self,
SimpleChanges,
} from '@angular/core';
import {
ALWAYS_FALSE_HANDLER,
Expand Down Expand Up @@ -47,7 +49,9 @@ import {takeUntil} from 'rxjs/operators';
changeDetection: ChangeDetectionStrategy.OnPush,
providers: [TuiDestroyService],
})
export class TuiCalendarRangeComponent implements TuiWithOptionalMinMax<TuiDay> {
export class TuiCalendarRangeComponent
implements TuiWithOptionalMinMax<TuiDay>, OnChanges
{
@Input()
defaultViewedMonth: TuiMonth = TuiMonth.currentLocal();

Expand Down Expand Up @@ -107,6 +111,10 @@ export class TuiCalendarRangeComponent implements TuiWithOptionalMinMax<TuiDay>
}

valueChanges.pipe(tuiWatch(cdr), takeUntil(destroy$)).subscribe(value => {
if (value?.toString() !== this.selectedActivePeriod?.range?.toString()) {
this.selectedActivePeriod = null;
}

this.value = value;
});
}
Expand All @@ -121,6 +129,15 @@ export class TuiCalendarRangeComponent implements TuiWithOptionalMinMax<TuiDay>
this.value = this.previousValue;
}

ngOnChanges({value}: SimpleChanges): void {
if (
value?.currentValue?.toString() !==
this.selectedActivePeriod?.range.toString()
) {
this.selectedActivePeriod = null;
}
}

readonly monthOffset: TuiTypedMapper<[TuiMonth, number], TuiMonth> = (value, month) =>
value.append({month});

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -226,6 +226,32 @@ describe('rangeCalendarComponent', () => {
expect(items[0].nativeElement.contains(getCheckmark())).toBe(false);
expect(items[1].nativeElement.contains(getCheckmark())).toBe(true);
});

it('when value updates, displays appropriate checkbox', () => {
const today = TuiDay.currentLocal();
const yesterday = TuiDay.currentLocal().append({day: -1});
const previousMonth = today.append({month: -1});

testComponent.items = [
new TuiDayRangePeriod(new TuiDayRange(previousMonth, today), '1'),
new TuiDayRangePeriod(new TuiDayRange(previousMonth, yesterday), '2'),
];
fixture.detectChanges();

component.onItemSelect(component.items[1]);
fixture.detectChanges();

const items = getItems();

expect(items[0].nativeElement.contains(getCheckmark())).toBe(false);
expect(items[1].nativeElement.contains(getCheckmark())).toBe(true);

testComponent.value = new TuiDayRange(previousMonth, today);
fixture.detectChanges();

expect(items[0].nativeElement.contains(getCheckmark())).toBe(true);
expect(items[1].nativeElement.contains(getCheckmark())).toBe(false);
});
});

function getCalendar(): DebugElement | null {
Expand Down

0 comments on commit 8aba4f6

Please sign in to comment.