bhd-components 0.9.4 → 0.9.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -10,6 +10,8 @@ interface BhdDatePickerProps {
10
10
  useType?: string;
11
11
  extraItems?: BhdDateExtraPicker[];
12
12
  extraReadonly?: boolean;
13
+ dropdownClassName?: string;
14
+ needConfirm?: boolean;
13
15
  }
14
- declare const BhdDatePicker: (props: BhdDatePickerProps) => React.JSX.Element;
16
+ declare const BhdDatePicker: React.ForwardRefExoticComponent<Omit<BhdDatePickerProps, "ref"> & React.RefAttributes<unknown>>;
15
17
  export default BhdDatePicker;
@@ -2,7 +2,7 @@ import { _ as _object_spread } from "@swc/helpers/_/_object_spread";
2
2
  import { _ as _object_spread_props } from "@swc/helpers/_/_object_spread_props";
3
3
  import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "@ice/jsx-runtime/jsx-runtime";
4
4
  import * as React from "react";
5
- import { useState, useEffect, useRef, useCallback } from "react";
5
+ import { useState, useEffect, useRef, useCallback, forwardRef, useImperativeHandle } from "react";
6
6
  import styles from "./index.module.less";
7
7
  import { ConfigProvider, Button, DatePicker } from "antd";
8
8
  import { CustomArrow } from "../icons";
@@ -25,7 +25,7 @@ let months = [
25
25
  "十二月"
26
26
  ];
27
27
  //January_February_March_April_May_June_July_August_September_October_November_December
28
- const BhdDatePicker = (props)=>{
28
+ const BhdDatePicker = /*#__PURE__*/ forwardRef((props, ref)=>{
29
29
  const lang = ConfigProvider.lang === "en" ? "en_US" : "zh_CN";
30
30
  // if (lang === "en_US") {
31
31
  // const enUS = require("dayjs/locale/en");
@@ -64,50 +64,87 @@ const BhdDatePicker = (props)=>{
64
64
  }
65
65
  };
66
66
  // 自己组件内使用的,或者自己处理的
67
- let { kind = "single", extraItems, extraReadonly = false, useType = "", open = false, mode, picker, value = props.kind === "range" ? [] : "", format = getDefaultFormat(), presets = [], className, popupClassName, showTime, showNow = true, showToday = true, allowClear = true, onClick, onBlur, onChange, onOk, onCalendarChange, onOpenChange, onPanelChange, disabledDate, cellRender, renderExtraFooter } = props;
67
+ let { kind = "single", extraItems, extraReadonly = false, useType = "", needConfirm = true, open = false, mode, picker, value, format = getDefaultFormat(), presets = [], className, popupClassName, dropdownClassName, showTime, showNow = true, showToday = true, allowClear = true, onClick, onBlur, onChange, onOk, // onCalendarChange,
68
+ onOpenChange, onPanelChange, disabledDate, cellRender, renderExtraFooter } = props;
68
69
  const bhdDatePickerRef = useRef(null);
70
+ const pickerRef = useRef(null);
69
71
  const [panelOpen, setPanelOpen] = useState(open);
70
72
  const [panelMode, setPanelMode] = useState("date");
71
73
  const [rangePanelMode, setRangePanelMode] = useState([
72
74
  "date",
73
75
  "date"
74
76
  ]);
75
- const [selectedDate, setSelectedDate] = useState(value);
76
- const [selectedDateString, setSelectedDateString] = useState(null);
77
- const selectedDateRef = useRef(value);
78
- const selectedDateStringRef = useRef(null);
79
- const [selectedRangeDate, setSelectedRangeDate] = useState(value);
80
- const [selectedRangeDateString, setSelectedRangeDateString] = useState([]);
81
- const [rangeOpenChange, setRangeOpenChange] = useState(false); // 用于范围选择失去焦点后,判断是否关闭
77
+ const [selectedDate, setSelectedDate] = useState(null);
78
+ const [selectedDateString, setSelectedDateString] = useState("");
79
+ const selectedDateRef = useRef(null);
80
+ const selectedDateStringRef = useRef("");
81
+ const [selectedRangeDate, setSelectedRangeDate] = useState([
82
+ null,
83
+ null
84
+ ]);
85
+ const [selectedRangeDateString, setSelectedRangeDateString] = useState([
86
+ "",
87
+ ""
88
+ ]);
89
+ const selectedRangeDateRef = useRef([
90
+ null,
91
+ null
92
+ ]);
93
+ const selectedRangeDateStringRef = useRef([
94
+ "",
95
+ ""
96
+ ]);
97
+ const [panelOpenChange, setPanelOpenChange] = useState(false); // 用于失去焦点后,判断是否关闭
82
98
  const isChange = useRef(false);
99
+ const selectRange = useRef([]);
100
+ useImperativeHandle(ref, ()=>{
101
+ return {};
102
+ });
83
103
  useEffect(()=>{
84
104
  setDefaultMode();
85
- if (kind === "range") {
86
- if (selectedRangeDate[0] && selectedRangeDate[1]) {
87
- setSelectedRangeDateString([
88
- selectedRangeDate[0].format(format),
89
- selectedRangeDate[1].format(format)
90
- ]);
91
- }
92
- } else {
93
- if (selectedDate) {
94
- setSelectedDateString((prevState)=>{
95
- selectedDateStringRef.current = selectedDate.format(format);
96
- return selectedDateStringRef.current;
97
- });
98
- }
99
- }
100
105
  return ()=>{
101
- var _document_getElementsByClassName__getElementsByClassName, _document_getElementsByClassName_, _document_getElementsByClassName, _btn;
102
- const btn = (_document_getElementsByClassName = document.getElementsByClassName(id)) === null || _document_getElementsByClassName === void 0 ? void 0 : (_document_getElementsByClassName_ = _document_getElementsByClassName[0]) === null || _document_getElementsByClassName_ === void 0 ? void 0 : (_document_getElementsByClassName__getElementsByClassName = _document_getElementsByClassName_.getElementsByClassName("bhd-picker-today-btn")) === null || _document_getElementsByClassName__getElementsByClassName === void 0 ? void 0 : _document_getElementsByClassName__getElementsByClassName[0];
103
- (_btn = btn) === null || _btn === void 0 ? void 0 : _btn.removeEventListener("click", todayClick);
106
+ var _document_getElementsByClassName__getElementsByClassName, _document_getElementsByClassName_, _document_getElementsByClassName, _todayBtn, _document_getElementsByClassName__getElementsByClassName1, _document_getElementsByClassName_1, _document_getElementsByClassName1, _nowBtn;
107
+ const todayBtn = (_document_getElementsByClassName = document.getElementsByClassName(id)) === null || _document_getElementsByClassName === void 0 ? void 0 : (_document_getElementsByClassName_ = _document_getElementsByClassName[0]) === null || _document_getElementsByClassName_ === void 0 ? void 0 : (_document_getElementsByClassName__getElementsByClassName = _document_getElementsByClassName_.getElementsByClassName("bhd-picker-today-btn")) === null || _document_getElementsByClassName__getElementsByClassName === void 0 ? void 0 : _document_getElementsByClassName__getElementsByClassName[0];
108
+ (_todayBtn = todayBtn) === null || _todayBtn === void 0 ? void 0 : _todayBtn.removeEventListener("click", todayClick);
109
+ const nowBtn = (_document_getElementsByClassName1 = document.getElementsByClassName(id)) === null || _document_getElementsByClassName1 === void 0 ? void 0 : (_document_getElementsByClassName_1 = _document_getElementsByClassName1[0]) === null || _document_getElementsByClassName_1 === void 0 ? void 0 : (_document_getElementsByClassName__getElementsByClassName1 = _document_getElementsByClassName_1.getElementsByClassName("bhd-picker-now-btn")) === null || _document_getElementsByClassName__getElementsByClassName1 === void 0 ? void 0 : _document_getElementsByClassName__getElementsByClassName1[0];
110
+ (_nowBtn = nowBtn) === null || _nowBtn === void 0 ? void 0 : _nowBtn.removeEventListener("click", todayClick);
104
111
  };
105
112
  }, []);
106
113
  useEffect(()=>{
107
- isChange.current = true;
114
+ if (kind === "range") {
115
+ setSelectedRangeDate((prevState)=>{
116
+ selectedRangeDateRef.current = value || [
117
+ null,
118
+ null
119
+ ];
120
+ return selectedRangeDateRef.current;
121
+ });
122
+ setSelectedRangeDateString((prevState)=>{
123
+ var _selectedRangeDateRef_current_, _selectedRangeDateRef_current_1;
124
+ selectedRangeDateStringRef.current = [
125
+ ((_selectedRangeDateRef_current_ = selectedRangeDateRef.current[0]) === null || _selectedRangeDateRef_current_ === void 0 ? void 0 : _selectedRangeDateRef_current_.format(format)) || "",
126
+ ((_selectedRangeDateRef_current_1 = selectedRangeDateRef.current[1]) === null || _selectedRangeDateRef_current_1 === void 0 ? void 0 : _selectedRangeDateRef_current_1.format(format)) || ""
127
+ ];
128
+ return selectedRangeDateStringRef.current;
129
+ });
130
+ } else {
131
+ setSelectedDate((prevState)=>{
132
+ selectedDateRef.current = value || null;
133
+ return selectedDateRef.current;
134
+ });
135
+ setSelectedDateString((prevState)=>{
136
+ var _selectedDateRef_current;
137
+ selectedDateStringRef.current = ((_selectedDateRef_current = selectedDateRef.current) === null || _selectedDateRef_current === void 0 ? void 0 : _selectedDateRef_current.format(format)) || "";
138
+ return selectedDateStringRef.current;
139
+ });
140
+ }
141
+ }, [
142
+ value
143
+ ]);
144
+ useEffect(()=>{
145
+ setPanelOpen(open);
108
146
  }, [
109
- selectedDate,
110
- selectedRangeDate
147
+ open
111
148
  ]);
112
149
  // 传给 DatePicker 的props参数
113
150
  const getConfig = ()=>{
@@ -138,6 +175,7 @@ const BhdDatePicker = (props)=>{
138
175
  popupClassName,
139
176
  allowClear,
140
177
  showTime,
178
+ showToday,
141
179
  cellRender,
142
180
  renderExtraFooter: selfRenderExtraFooter
143
181
  });
@@ -151,10 +189,19 @@ const BhdDatePicker = (props)=>{
151
189
  delete config.onChange;
152
190
  delete config.useType; // 组件自己定义的
153
191
  delete config.presets; // 必须删掉,因为预设由官网的左侧换到底部
154
- delete config.showNow; // 必须删掉,因为官网的今天按钮有bug,不受showNow的值控制
192
+ delete config.dropdownClassName;
155
193
  if (!config.cellRender) {
156
194
  config.cellRender = selfCellRender;
157
195
  }
196
+ // 判断是否显示今天按钮
197
+ if (!isRenderToday()) {
198
+ config.showToday = false;
199
+ showToday = false;
200
+ }
201
+ // 不显示今天、预设、确定按钮
202
+ if (!isSelfRenderExtraFooter()) {
203
+ delete config.renderExtraFooter;
204
+ }
158
205
  // 单选
159
206
  if (kind === "single") {
160
207
  config.popupClassName = `
@@ -173,7 +220,7 @@ const BhdDatePicker = (props)=>{
173
220
  config.allowClear = false; // 日程安排查看时,不显示清除按钮
174
221
  }
175
222
  }
176
- config.popupClassName = `${config.popupClassName} ${id}`;
223
+ config.popupClassName = `${config.popupClassName} ${dropdownClassName} ${needConfirm ? "" : styles.noNeedConfirm} ${id}`;
177
224
  return config;
178
225
  };
179
226
  // 设置默认mode
@@ -244,25 +291,24 @@ const BhdDatePicker = (props)=>{
244
291
  };
245
292
  // 渲染底部扩展内容(包括确定按钮、今天按钮、预设、传入的底部扩展)
246
293
  const selfRenderExtraFooter = (mode)=>{
247
- var _selectedRangeDate, _selectedRangeDate1;
294
+ var _selectedRangeDate, _selectedRangeDate1, _selectedRangeDate2, _selectedRangeDate3;
248
295
  return /*#__PURE__*/ _jsxs(_Fragment, {
249
296
  children: [
250
- renderExtraFooter && /*#__PURE__*/ _jsx("div", {
251
- className: "bhddatepicker-picker-footer-extra-extend",
252
- children: renderExtraFooter(mode)
253
- }),
254
297
  !showTime ? /*#__PURE__*/ _jsx(_Fragment, {
255
- children: /*#__PURE__*/ _jsxs("ul", {
298
+ children: ((picker || "date") === "date" && showToday || presets && presets.length > 0 || needConfirm) && /*#__PURE__*/ _jsxs("ul", {
256
299
  className: "bhd-picker-ranges",
257
300
  children: [
258
301
  selfRenderPresets(),
259
- renderToday(),
260
- /*#__PURE__*/ _jsx("li", {
302
+ renderToday(mode),
303
+ needConfirm && /*#__PURE__*/ _jsx("li", {
261
304
  className: "bhd-picker-ok",
262
305
  children: /*#__PURE__*/ _jsx(Button, {
263
306
  type: "primary",
264
307
  disabled: kind === "range" ? !(((_selectedRangeDate = selectedRangeDate) === null || _selectedRangeDate === void 0 ? void 0 : _selectedRangeDate[0]) && ((_selectedRangeDate1 = selectedRangeDate) === null || _selectedRangeDate1 === void 0 ? void 0 : _selectedRangeDate1[1])) : !(selectedDate && selectedDateString),
265
- onClick: okClick,
308
+ className: `${(kind === "range" ? !(((_selectedRangeDate2 = selectedRangeDate) === null || _selectedRangeDate2 === void 0 ? void 0 : _selectedRangeDate2[0]) && ((_selectedRangeDate3 = selectedRangeDate) === null || _selectedRangeDate3 === void 0 ? void 0 : _selectedRangeDate3[1])) : !(selectedDate && selectedDateString)) ? "disabled" : ""}`,
309
+ onClick: ()=>{
310
+ okClick();
311
+ },
266
312
  children: i18Conversion("确定")
267
313
  })
268
314
  })
@@ -271,44 +317,90 @@ const BhdDatePicker = (props)=>{
271
317
  }) : /*#__PURE__*/ _jsx("ul", {
272
318
  className: `bhd-picker-ranges showPresets ${showNow ? "showNow" : ""}`,
273
319
  children: selfRenderPresets()
320
+ }),
321
+ renderExtraFooter && /*#__PURE__*/ _jsx("div", {
322
+ className: "bhddatepicker-picker-footer-extra-extend",
323
+ children: renderExtraFooter(mode)
274
324
  })
275
325
  ]
276
326
  });
277
327
  };
278
- // 渲染今天
279
- const renderToday = ()=>{
280
- // 显示now
328
+ // 判断是否显示今天按钮、预设、确定按钮、传入的底部扩展
329
+ const isSelfRenderExtraFooter = ()=>{
330
+ let result = false;
331
+ if (kind === "range") {
332
+ result = presets && presets.length > 0 || renderExtraFooter || needConfirm;
333
+ } else {
334
+ result = isRenderToday() || presets && presets.length > 0 || renderExtraFooter || needConfirm;
335
+ }
336
+ return result;
337
+ };
338
+ //判断是否显示今天按钮
339
+ const isRenderToday = ()=>{
281
340
  if (showToday) {
282
- var _extraItems;
341
+ if (kind === "single" && panelMode === "date") {
342
+ return true;
343
+ }
283
344
  // 日程安排时: extraItems中今天是否是可选或者已选择状态
284
- let hasNow = ((_extraItems = extraItems) === null || _extraItems === void 0 ? void 0 : _extraItems.filter((item)=>item.status !== "noselectable" && // item.date.format(format) === dayjs().format(format)
285
- item.date.format("YYYYMMDD") === getToday()).length) > 0;
286
- if (kind === "single" || kind === "extra" && hasNow) {
287
- if (mode === "date" || mode === undefined) {
288
- return /*#__PURE__*/ _jsx("li", {
289
- className: "bhd-picker-now",
290
- children: /*#__PURE__*/ _jsx("a", {
291
- className: "bhd-picker-now-btn",
292
- style: {
293
- visibility: "hidden"
294
- },
295
- onClick: todayClick,
296
- children: i18Conversion("今天")
297
- })
298
- });
345
+ if (kind === "extra") {
346
+ var _extraItems;
347
+ let hasToday = ((_extraItems = extraItems) === null || _extraItems === void 0 ? void 0 : _extraItems.filter((item)=>item.status !== "noselectable" && item.date.format("YYYYMMDD") === getToday()).length) > 0;
348
+ if (hasToday && panelMode === "date") {
349
+ return true;
299
350
  }
300
351
  }
301
352
  }
302
- return null;
353
+ return false;
354
+ };
355
+ // 渲染今天
356
+ const renderToday = (mode)=>{
357
+ // // 显示Today
358
+ // if (showToday) {
359
+ // // 日程安排时: extraItems中今天是否是可选或者已选择状态
360
+ // let hasNow =
361
+ // extraItems?.filter(
362
+ // (item) =>
363
+ // item.status !== "noselectable" &&
364
+ // // item.date.format(format) === dayjs().format(format)
365
+ // item.date.format("YYYYMMDD") === getToday()
366
+ // ).length > 0;
367
+ // if (kind === "single" || (kind === "extra" && hasNow)) {
368
+ // if (mode === "date") {
369
+ // return (
370
+ // <li className="bhd-picker-now">
371
+ // <a
372
+ // className="bhd-picker-now-btn"
373
+ // style={{ visibility: "hidden" }}
374
+ // onClick={todayClick}
375
+ // >
376
+ // {i18Conversion("今天")}
377
+ // </a>
378
+ // </li>
379
+ // );
380
+ // }
381
+ // }
382
+ // }
383
+ // return null;
384
+ return isRenderToday() ? /*#__PURE__*/ _jsx("li", {
385
+ className: "bhd-picker-now",
386
+ children: /*#__PURE__*/ _jsx("a", {
387
+ className: "bhd-picker-now-btn",
388
+ style: {
389
+ visibility: "hidden"
390
+ },
391
+ onClick: todayClick,
392
+ children: i18Conversion("今天")
393
+ })
394
+ }) : null;
303
395
  };
304
396
  // 获取到年月日
305
397
  const getToday = ()=>{
306
398
  const date = new Date();
307
- return date.getFullYear().toString() + date.getMonth().toString().padStart(2, "0") + date.getDay().toString().padStart(2, "0");
399
+ return date.getFullYear().toString() + (date.getMonth() + 1).toString().padStart(2, "0") + date.getDate().toString().padStart(2, "0");
308
400
  };
309
401
  // 渲染预设
310
402
  const selfRenderPresets = ()=>{
311
- return /*#__PURE__*/ _jsx("li", {
403
+ return presets && presets.length > 0 ? /*#__PURE__*/ _jsx("li", {
312
404
  className: "bhd-picker-presets",
313
405
  children: presets.map((item, index)=>{
314
406
  return /*#__PURE__*/ _jsx("a", {
@@ -319,20 +411,31 @@ const BhdDatePicker = (props)=>{
319
411
  children: item.label
320
412
  }, index);
321
413
  })
322
- });
414
+ }) : null;
323
415
  };
324
416
  // 日期选择确认
325
417
  const okClick = ()=>{
326
418
  if (kind === "range") {
327
- if (selectedRangeDate[0] && selectedRangeDate[1] && selectedRangeDateString[0] && selectedRangeDateString[1]) {
328
- onChange && onChange(selectedRangeDate, selectedRangeDateString);
419
+ var _selectedRangeDateRef_current, _selectedRangeDateRef_current1, _selectedRangeDateStringRef_current, _selectedRangeDateStringRef_current1;
420
+ if (((_selectedRangeDateRef_current = selectedRangeDateRef.current) === null || _selectedRangeDateRef_current === void 0 ? void 0 : _selectedRangeDateRef_current[0]) && ((_selectedRangeDateRef_current1 = selectedRangeDateRef.current) === null || _selectedRangeDateRef_current1 === void 0 ? void 0 : _selectedRangeDateRef_current1[1]) && ((_selectedRangeDateStringRef_current = selectedRangeDateStringRef.current) === null || _selectedRangeDateStringRef_current === void 0 ? void 0 : _selectedRangeDateStringRef_current[0]) && ((_selectedRangeDateStringRef_current1 = selectedRangeDateStringRef.current) === null || _selectedRangeDateStringRef_current1 === void 0 ? void 0 : _selectedRangeDateStringRef_current1[1])) {
421
+ if (isChange.current) {
422
+ onChange && onChange(selectedRangeDateRef.current, selectedRangeDateStringRef.current);
423
+ isChange.current = false;
424
+ // if (pickerRef.current) {
425
+ // pickerRef.current.blur();
426
+ // }
427
+ }
329
428
  setPanelOpen(false);
330
- } else {
331
- setPanelOpen(true);
332
429
  }
333
430
  } else {
334
431
  if (selectedDateRef.current && selectedDateStringRef.current) {
335
- onChange && onChange(selectedDateRef.current, selectedDateStringRef.current);
432
+ if (isChange.current) {
433
+ onChange && onChange(selectedDateRef.current, selectedDateStringRef.current);
434
+ isChange.current = false;
435
+ // if (pickerRef.current) {
436
+ // pickerRef.current.blur();
437
+ // }
438
+ }
336
439
  setPanelOpen(false);
337
440
  }
338
441
  }
@@ -357,17 +460,36 @@ const BhdDatePicker = (props)=>{
357
460
  }
358
461
  }
359
462
  };
463
+ const nowClickEventListener = (value)=>{
464
+ if (!value) return;
465
+ if (showTime) {
466
+ var _document_getElementsByClassName__getElementsByClassName, _document_getElementsByClassName_, _document_getElementsByClassName;
467
+ const btn = (_document_getElementsByClassName = document.getElementsByClassName(id)) === null || _document_getElementsByClassName === void 0 ? void 0 : (_document_getElementsByClassName_ = _document_getElementsByClassName[0]) === null || _document_getElementsByClassName_ === void 0 ? void 0 : (_document_getElementsByClassName__getElementsByClassName = _document_getElementsByClassName_.getElementsByClassName("bhd-picker-now-btn")) === null || _document_getElementsByClassName__getElementsByClassName === void 0 ? void 0 : _document_getElementsByClassName__getElementsByClassName[0];
468
+ if (value) {
469
+ var _btn, _btn1;
470
+ (_btn = btn) === null || _btn === void 0 ? void 0 : _btn.removeEventListener("click", todayClick);
471
+ (_btn1 = btn) === null || _btn1 === void 0 ? void 0 : _btn1.addEventListener("click", todayClick, {
472
+ once: true
473
+ });
474
+ }
475
+ }
476
+ };
360
477
  //预设点击
361
478
  const presetClick = (info)=>{
362
- console.log(typeof info.value);
363
479
  const value = typeof info.value === "function" ? info.value() : info.value;
364
480
  if (kind === "range") {
365
481
  const valueString = [
366
482
  value[0].format(format),
367
483
  value[1].format(format)
368
484
  ];
369
- setSelectedRangeDate(value);
370
- setSelectedRangeDateString(valueString);
485
+ setSelectedRangeDate((prevState)=>{
486
+ selectedRangeDateRef.current = value;
487
+ return selectedRangeDateRef.current;
488
+ });
489
+ setSelectedRangeDateString((prevState)=>{
490
+ selectedRangeDateStringRef.current = valueString;
491
+ return selectedRangeDateStringRef.current;
492
+ });
371
493
  onChange && onChange(value, valueString);
372
494
  setPanelOpen(false);
373
495
  } else {
@@ -390,6 +512,7 @@ const BhdDatePicker = (props)=>{
390
512
  children: [
391
513
  (kind === "single" || kind === "extra") && /*#__PURE__*/ _jsx(_Fragment, {
392
514
  children: /*#__PURE__*/ _jsx(DatePicker, _object_spread_props(_object_spread({}, getConfig()), {
515
+ ref: pickerRef,
393
516
  id: id,
394
517
  value: selectedDate,
395
518
  mode: panelMode,
@@ -400,10 +523,12 @@ const BhdDatePicker = (props)=>{
400
523
  onPanelChange && onPanelChange(value, mode);
401
524
  },
402
525
  onOpenChange: (value)=>{
526
+ setPanelOpenChange(value);
403
527
  // 打开设置默认mode
404
528
  if (value) {
405
529
  setDefaultMode();
406
530
  todayClickEventListener(value);
531
+ nowClickEventListener(value);
407
532
  }
408
533
  onOpenChange && onOpenChange(value);
409
534
  },
@@ -416,6 +541,12 @@ const BhdDatePicker = (props)=>{
416
541
  selectedDateStringRef.current = dateString;
417
542
  return selectedDateStringRef.current;
418
543
  });
544
+ isChange.current = true;
545
+ if (!needConfirm) {
546
+ setTimeout(()=>{
547
+ okClick();
548
+ }, 0);
549
+ }
419
550
  },
420
551
  onOk: (date)=>{
421
552
  if (showTime) {
@@ -431,14 +562,27 @@ const BhdDatePicker = (props)=>{
431
562
  onClick && onClick(e);
432
563
  },
433
564
  onBlur: (e)=>{
434
- okClick();
435
- setPanelOpen(false);
565
+ if (needConfirm) {
566
+ var _e_relatedTarget_classList, _e_relatedTarget;
567
+ okClick(); // 面板区域内失去焦点时
568
+ if ((_e_relatedTarget = e.relatedTarget) === null || _e_relatedTarget === void 0 ? void 0 : (_e_relatedTarget_classList = _e_relatedTarget.classList) === null || _e_relatedTarget_classList === void 0 ? void 0 : _e_relatedTarget_classList.value.includes("bhd-picker-panel")) {
569
+ if (pickerRef.current) {
570
+ pickerRef.current.focus();
571
+ }
572
+ setPanelOpen(true);
573
+ } else {
574
+ setPanelOpen(false);
575
+ }
576
+ } else {
577
+ setPanelOpen(false);
578
+ }
436
579
  onBlur && onBlur(e);
437
580
  }
438
581
  }))
439
582
  }),
440
583
  kind === "range" && /*#__PURE__*/ _jsx(_Fragment, {
441
584
  children: /*#__PURE__*/ _jsx(RangePicker, _object_spread_props(_object_spread({}, getConfig()), {
585
+ ref: pickerRef,
442
586
  value: selectedRangeDate,
443
587
  mode: rangePanelMode,
444
588
  open: panelOpen,
@@ -448,31 +592,92 @@ const BhdDatePicker = (props)=>{
448
592
  onPanelChange && onPanelChange(value, mode);
449
593
  },
450
594
  onOpenChange: (value)=>{
595
+ setPanelOpenChange(value);
451
596
  if (value) {
452
597
  setDefaultMode();
453
598
  }
454
599
  if (showTime) {
455
600
  setPanelOpen(value);
456
601
  }
457
- setRangeOpenChange(value);
458
602
  onOpenChange && onOpenChange(value);
459
603
  },
460
604
  onClick: (e)=>{
461
605
  setPanelOpen(true);
606
+ selectRange.current = [];
462
607
  onClick && onClick(e);
463
608
  },
609
+ onChange: (dates, dateStrings)=>{
610
+ // 清空的时候
611
+ if (dates === null) {
612
+ setSelectedRangeDate((prevState)=>{
613
+ selectedRangeDateRef.current = [
614
+ null,
615
+ null
616
+ ];
617
+ return selectedRangeDateRef.current;
618
+ });
619
+ setSelectedRangeDateString((prevState)=>{
620
+ selectedRangeDateStringRef.current = [
621
+ "",
622
+ ""
623
+ ];
624
+ return selectedRangeDateStringRef.current;
625
+ });
626
+ setPanelOpen(false);
627
+ onChange && onChange([
628
+ null,
629
+ null
630
+ ], [
631
+ "",
632
+ ""
633
+ ]);
634
+ }
635
+ },
464
636
  onCalendarChange: (dates, dateStrings, info)=>{
465
- setSelectedRangeDate(dates);
466
- setSelectedRangeDateString(dateStrings);
467
- onCalendarChange && onCalendarChange(dates, dateStrings, info);
637
+ var _dates, _dates1;
638
+ setSelectedRangeDate((prevState)=>{
639
+ selectedRangeDateRef.current = dates;
640
+ return selectedRangeDateRef.current;
641
+ });
642
+ setSelectedRangeDateString((prevState)=>{
643
+ selectedRangeDateStringRef.current = dateStrings;
644
+ return selectedRangeDateStringRef.current;
645
+ });
646
+ if (!selectRange.current.includes(info.range)) {
647
+ selectRange.current.push(info.range);
648
+ }
649
+ if (((_dates = dates) === null || _dates === void 0 ? void 0 : _dates[0]) && ((_dates1 = dates) === null || _dates1 === void 0 ? void 0 : _dates1[1])) {
650
+ //不用确认自动提交
651
+ if (!needConfirm) {
652
+ if (selectRange.current.includes("start") && selectRange.current.includes("end")) {
653
+ isChange.current = true;
654
+ setTimeout(()=>{
655
+ okClick();
656
+ }, 0);
657
+ }
658
+ } else {
659
+ isChange.current = true;
660
+ }
661
+ }
468
662
  },
469
663
  onBlur: (e)=>{
470
- var _selectedRangeDate, _selectedRangeDate1, _selectedRangeDate2, _selectedRangeDate3;
471
- if (((_selectedRangeDate = selectedRangeDate) === null || _selectedRangeDate === void 0 ? void 0 : _selectedRangeDate[0]) && ((_selectedRangeDate1 = selectedRangeDate) === null || _selectedRangeDate1 === void 0 ? void 0 : _selectedRangeDate1[1])) {
472
- okClick();
473
- setPanelOpen(false);
474
- } else if (!((_selectedRangeDate2 = selectedRangeDate) === null || _selectedRangeDate2 === void 0 ? void 0 : _selectedRangeDate2[0]) || !((_selectedRangeDate3 = selectedRangeDate) === null || _selectedRangeDate3 === void 0 ? void 0 : _selectedRangeDate3[1])) {
475
- setPanelOpen(rangeOpenChange);
664
+ console.log(panelOpenChange);
665
+ if (needConfirm) {
666
+ var _selectedRangeDateRef_current, _selectedRangeDateRef_current1, _selectedRangeDateRef_current2, _selectedRangeDateRef_current3;
667
+ if (((_selectedRangeDateRef_current = selectedRangeDateRef.current) === null || _selectedRangeDateRef_current === void 0 ? void 0 : _selectedRangeDateRef_current[0]) && ((_selectedRangeDateRef_current1 = selectedRangeDateRef.current) === null || _selectedRangeDateRef_current1 === void 0 ? void 0 : _selectedRangeDateRef_current1[1])) {
668
+ if (needConfirm && !panelOpenChange && isChange.current) {
669
+ okClick();
670
+ } else {
671
+ setPanelOpen(panelOpenChange);
672
+ }
673
+ if (!isChange.current) {
674
+ setPanelOpen(false);
675
+ }
676
+ } else if (!((_selectedRangeDateRef_current2 = selectedRangeDateRef.current) === null || _selectedRangeDateRef_current2 === void 0 ? void 0 : _selectedRangeDateRef_current2[0]) || !((_selectedRangeDateRef_current3 = selectedRangeDateRef.current) === null || _selectedRangeDateRef_current3 === void 0 ? void 0 : _selectedRangeDateRef_current3[1])) {
677
+ setPanelOpen(panelOpenChange);
678
+ }
679
+ } else {
680
+ setPanelOpen(panelOpenChange);
476
681
  }
477
682
  onBlur && onBlur(e);
478
683
  }
@@ -480,5 +685,5 @@ const BhdDatePicker = (props)=>{
480
685
  })
481
686
  ]
482
687
  });
483
- };
688
+ });
484
689
  export default BhdDatePicker;