Skip to content

Commit ce1dc30

Browse files
lijimJimmy Li
andauthored
[datepicker] Add fixes for composed date range selections (#5391)
* [datepicker] Add fixes for composed date range selections * Add major version --------- Co-authored-by: Jimmy Li <jimmy.li+UBER@uber.com>
1 parent acc868a commit ce1dc30

11 files changed

Lines changed: 882 additions & 15 deletions

documentation-site/examples/datepicker/composed-range-pickers.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ export default function Example() {
5454
value={dates[0]}
5555
onChange={(time) => {
5656
if (time) {
57-
if (isAfter(time, dates[1])) {
57+
if (dates[1] && isAfter(time, dates[1])) {
5858
setDates([time, time]);
5959
} else {
6060
setDates([time, dates[1]]);
@@ -108,7 +108,7 @@ export default function Example() {
108108
value={dates[1]}
109109
onChange={(time) => {
110110
if (time) {
111-
if (isBefore(time, dates[0])) {
111+
if (dates[0] && isBefore(time, dates[0])) {
112112
setDates([time, time]);
113113
} else {
114114
setDates([dates[0], time]);

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "baseui",
3-
"version": "16.2.1",
3+
"version": "17.0.0",
44
"description": "A React Component library implementing the Base design language",
55
"keywords": [
66
"react",

src/datepicker/__tests__/calendar.test.tsx

Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,4 +63,68 @@ describe('Component', () => {
6363
fireEvent.click(await getByText(container.parentElement as any as HTMLElement, 'Past Week'));
6464
expect(onQuickSelectChange).toHaveBeenCalledWith(expect.objectContaining({ id: 'Past Week' }));
6565
});
66+
67+
it('constrains time options when selected date matches minDate', () => {
68+
const minDate = new Date('2021-11-10T14:00:00');
69+
const value = new Date('2021-11-10T15:00:00');
70+
const { container } = render(
71+
<TestBaseProvider>
72+
<Calendar
73+
value={value}
74+
minDate={minDate}
75+
timeSelectStart
76+
overrides={{
77+
TimeSelectContainer: { props: { 'data-testid': 'time-select' } },
78+
}}
79+
/>
80+
</TestBaseProvider>
81+
);
82+
83+
const timeSelect = queryByTestId(container, 'time-select');
84+
expect(timeSelect).not.toBeNull();
85+
86+
const selectInput = timeSelect!.querySelector('[data-baseweb="select"]');
87+
if (selectInput?.firstChild) {
88+
fireEvent.click(selectInput.firstChild as HTMLElement);
89+
}
90+
91+
const listbox = container.parentElement!.querySelector('[role="listbox"]');
92+
expect(listbox).not.toBeNull();
93+
const options = Array.from(listbox!.querySelectorAll('[role="option"]'));
94+
const optionTexts = options.map((o) => o.textContent);
95+
expect(optionTexts).not.toContain('12:00 PM');
96+
expect(optionTexts).toContain('3:00 PM');
97+
});
98+
99+
it('does not constrain time when selected date differs from minDate', () => {
100+
const minDate = new Date('2021-11-10T14:00:00');
101+
const value = new Date('2021-11-11T10:00:00');
102+
const { container } = render(
103+
<TestBaseProvider>
104+
<Calendar
105+
value={value}
106+
minDate={minDate}
107+
timeSelectStart
108+
overrides={{
109+
TimeSelectContainer: { props: { 'data-testid': 'time-select' } },
110+
}}
111+
/>
112+
</TestBaseProvider>
113+
);
114+
115+
const timeSelect = queryByTestId(container, 'time-select');
116+
expect(timeSelect).not.toBeNull();
117+
118+
const selectInput = timeSelect!.querySelector('[data-baseweb="select"]');
119+
if (selectInput?.firstChild) {
120+
fireEvent.click(selectInput.firstChild as HTMLElement);
121+
}
122+
123+
const listbox = container.parentElement!.querySelector('[role="listbox"]');
124+
expect(listbox).not.toBeNull();
125+
const options = Array.from(listbox!.querySelectorAll('[role="option"]'));
126+
const optionTexts = options.map((o) => o.textContent);
127+
expect(optionTexts).toContain('12:00 AM');
128+
expect(optionTexts).toContain('12:00 PM');
129+
});
66130
});

0 commit comments

Comments
 (0)