Skip to content

Commit 2294f75

Browse files
author
张鹏博
committed
fix: [CPicker] 区间单侧时间禁用时,选择另一侧后直接关闭面板
1 parent 683f63d commit 2294f75

2 files changed

Lines changed: 23 additions & 4 deletions

File tree

src/components/c-picker/demos/range-picker.md

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -99,19 +99,21 @@ class RangePickerDemo extends React.Component {
9999
/>
100100
</Form.Item>
101101

102-
<Form.Item label="日期范围选择器(带时间)">
102+
<Form.Item label="日期范围选择器(带时间,固定开始日期">
103103
<RangePicker
104104
value={values}
105105
onChange={this.onChange}
106106
showTimePicker
107107
showToday
108108
showNow
109-
minDate={new Date()}
110-
disabled={disabled}
109+
minDate="2022/01/01 00:00:00"
110+
defaultTime={['08:00:00', '23:00:00']}
111+
disabled={[true, false]}
112+
allowEmpty={[true, false]}
111113
/>
112114
</Form.Item>
113115

114-
<Form.Item label="日期范围选择器(固定开始时间">
116+
<Form.Item label="日期范围选择器(固定结束日期">
115117
<RangePicker
116118
value={values}
117119
onChange={this.onChange}

src/components/c-picker/pickers/date-range.js

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@ import generatePicker from '../generator';
1111
import { dateFormat, dateTimeFormat, timeFormat, pickerDefaultFormatMap } from '../formats';
1212
import { STR, OBJ, transformString2Moment } from '../utils';
1313

14+
const reversedRangeTypeIndexMap = { start: 1, end: 0 };
15+
1416
const { DateRangePicker: Picker } = generatePicker(momentGenerateConfig);
1517

1618
const DateRangePicker = ({
@@ -57,6 +59,7 @@ const DateRangePicker = ({
5759
presets,
5860
type = 'date',
5961
}) => {
62+
const ref = useRef();
6063
const { current: _this } = useRef({
6164
formatType: STR,
6265
});
@@ -170,6 +173,18 @@ const DateRangePicker = ({
170173
[onPanelChange, format],
171174
);
172175

176+
const handleCalendarChange = useCallback(
177+
(_, __, { range: val }) => {
178+
// 特殊处理:区间单侧时间禁用时,选择另一侧后直接关闭面板
179+
if (disabled instanceof Array && disabled[reversedRangeTypeIndexMap[val]]) {
180+
setTimeout(() => {
181+
ref.current?.blur();
182+
}, 10);
183+
}
184+
},
185+
[disabled],
186+
);
187+
173188
const handleChange = useCallback(
174189
(m, str) => {
175190
const val = m && m.map((x) => (handleGetDisabledDate(x) ? undefined : x));
@@ -223,6 +238,7 @@ const DateRangePicker = ({
223238

224239
return (
225240
<Picker
241+
ref={ref}
226242
size={size}
227243
style={{ width, ...style }}
228244
defaultValue={
@@ -240,6 +256,7 @@ const DateRangePicker = ({
240256
: false
241257
}
242258
onChange={handleChange}
259+
onCalendarChange={handleCalendarChange}
243260
onOk={handleOk}
244261
onPanelChange={handlePanelChange}
245262
inputReadOnly={!canEdit}

0 commit comments

Comments
 (0)