Skip to content

Commit c4ffe36

Browse files
authored
fix: min/maxDate should also blocked by typing (#802)
* test: test driven * fix: not exceed boundary
1 parent 90f8619 commit c4ffe36

File tree

4 files changed

+51
-35
lines changed

4 files changed

+51
-35
lines changed

docs/examples/debug.tsx

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -45,10 +45,20 @@ const dateFnsSharedLocale = {
4545
export default () => {
4646
return (
4747
<div>
48-
{/* <RangePicker {...sharedLocale} style={{ width: 400 }} showTime />
49-
<RangePicker {...sharedLocale} style={{ width: 400 }} showTime showMinute={false} /> */}
50-
<SinglePicker {...dateFnsSharedLocale} style={{ width: 400 }} multiple placeholder="good" />
51-
<SinglePicker {...dateFnsSharedLocale} style={{ width: 400 }} placeholder="good" />
48+
<input defaultValue="2000-01-01" />
49+
<RangePicker
50+
{...sharedLocale}
51+
style={{ width: 400 }}
52+
onChange={(val) => console.error('>>>>>>>', val)}
53+
/>
54+
{/* <RangePicker {...sharedLocale} style={{ width: 400 }} showTime showMinute={false} /> */}
55+
{/* <SinglePicker {...dateFnsSharedLocale} style={{ width: 400 }} multiple placeholder="good" /> */}
56+
<SinglePicker
57+
{...sharedLocale}
58+
style={{ width: 400 }}
59+
minDate={dayjs()}
60+
onChange={(val) => console.error('>>>>>>>', val)}
61+
/>
5262
</div>
5363
);
5464
};

src/PickerInput/hooks/useDisabledBoundary.ts

Lines changed: 0 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -43,35 +43,5 @@ export default function useDisabledBoundary<DateType extends object = any>(
4343
return false;
4444
});
4545

46-
// const isInValidBoundary: IsInvalidBoundary<DateType> = (date, type, from) => {
47-
// const toBoundaryDate = (boundary?: LimitDate<DateType>) =>
48-
// typeof boundary === 'function'
49-
// ? boundary({
50-
// from,
51-
// })
52-
// : boundary;
53-
54-
// const mergedMinDate = toBoundaryDate(minDate);
55-
// const mergedMaxDate = toBoundaryDate(maxDate);
56-
57-
// if (
58-
// mergedMinDate &&
59-
// generateConfig.isAfter(mergedMinDate, date) &&
60-
// !isSame(generateConfig, locale, mergedMinDate, date, type)
61-
// ) {
62-
// return true;
63-
// }
64-
65-
// if (
66-
// mergedMaxDate &&
67-
// generateConfig.isAfter(date, mergedMaxDate) &&
68-
// !isSame(generateConfig, locale, mergedMaxDate, date, type)
69-
// ) {
70-
// return true;
71-
// }
72-
73-
// return false;
74-
// };
75-
7646
return mergedDisabledDate;
7747
}

src/PickerInput/hooks/useFilledProps.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -198,7 +198,12 @@ export default function useFilledProps<
198198
);
199199

200200
// ====================== Invalidate ======================
201-
const isInvalidateDate = useInvalidate(generateConfig, picker, disabledDate, mergedShowTime);
201+
const isInvalidateDate = useInvalidate(
202+
generateConfig,
203+
picker,
204+
disabledBoundaryDate,
205+
mergedShowTime,
206+
);
202207

203208
// ======================== Merged ========================
204209
const mergedProps = React.useMemo(

tests/new-range.spec.tsx

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import type { RangePickerProps } from '../src';
99
import zh_CN from '../src/locale/zh_CN';
1010
import {
1111
closePicker,
12+
DayPicker,
1213
DayRangePicker,
1314
findCell,
1415
getDay,
@@ -1212,6 +1213,36 @@ describe('NewPicker.Range', () => {
12121213
openPicker(container);
12131214
expect(document.querySelector('.rc-picker-header-view').textContent).toBe('1990年8月');
12141215
});
1216+
1217+
it('typing should not exceed boundary', () => {
1218+
const onChange = jest.fn();
1219+
const { container } = render(
1220+
<DayPicker minDate={getDay('2024-01-01')} onChange={onChange} />,
1221+
);
1222+
const inputEle = container.querySelector('input');
1223+
1224+
// Out of range
1225+
fireEvent.change(inputEle, {
1226+
target: {
1227+
value: '2000-01-01',
1228+
},
1229+
});
1230+
fireEvent.keyDown(inputEle, {
1231+
key: 'Enter',
1232+
});
1233+
expect(onChange).not.toHaveBeenCalled();
1234+
1235+
// In range
1236+
fireEvent.change(inputEle, {
1237+
target: {
1238+
value: '2024-03-03',
1239+
},
1240+
});
1241+
fireEvent.keyDown(inputEle, {
1242+
key: 'Enter',
1243+
});
1244+
expect(onChange).toHaveBeenCalled();
1245+
});
12151246
});
12161247

12171248
it('double click now button', () => {

0 commit comments

Comments
 (0)