bhd-components 0.9.3 → 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.
@@ -2,14 +2,30 @@ 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 } 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";
9
9
  // import dayjs from "dayjs";
10
+ // import type { Dayjs } from "dayjs";
10
11
  import i18Conversion from "../i18n";
11
12
  const { RangePicker } = DatePicker;
12
- const BhdDatePicker = (props)=>{
13
+ let months = [
14
+ "一月",
15
+ "二月",
16
+ "三月",
17
+ "四月",
18
+ "五月",
19
+ "六月",
20
+ "七月",
21
+ "八月",
22
+ "九月",
23
+ "十月",
24
+ "十一月",
25
+ "十二月"
26
+ ];
27
+ //January_February_March_April_May_June_July_August_September_October_November_December
28
+ const BhdDatePicker = /*#__PURE__*/ forwardRef((props, ref)=>{
13
29
  const lang = ConfigProvider.lang === "en" ? "en_US" : "zh_CN";
14
30
  // if (lang === "en_US") {
15
31
  // const enUS = require("dayjs/locale/en");
@@ -18,6 +34,7 @@ const BhdDatePicker = (props)=>{
18
34
  // const zhCN = require("dayjs/locale/zh-cn");
19
35
  // dayjs.locale(zhCN);
20
36
  // }
37
+ const id = "BhdDatePicker_" + new Date().getTime();
21
38
  // 默认格式
22
39
  const getDefaultFormat = ()=>{
23
40
  if (props.format) {
@@ -47,39 +64,88 @@ const BhdDatePicker = (props)=>{
47
64
  }
48
65
  };
49
66
  // 自己组件内使用的,或者自己处理的
50
- let { kind = "single", extraItems, extraReadonly = false, useType = "", open = false, mode, picker, value = props.kind === "range" ? [] : "", format = getDefaultFormat(), presets = [], className, popupClassName, showTime, showNow = 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;
51
69
  const bhdDatePickerRef = useRef(null);
70
+ const pickerRef = useRef(null);
52
71
  const [panelOpen, setPanelOpen] = useState(open);
53
72
  const [panelMode, setPanelMode] = useState("date");
54
73
  const [rangePanelMode, setRangePanelMode] = useState([
55
74
  "date",
56
75
  "date"
57
76
  ]);
58
- const [selectedDate, setSelectedDate] = useState(value);
59
- const [selectedDateString, setSelectedDateString] = useState(null);
60
- const selectedDateRef = useRef(value);
61
- const selectedDateStringRef = useRef(null);
62
- const [selectedRangeDate, setSelectedRangeDate] = useState(value);
63
- const [selectedRangeDateString, setSelectedRangeDateString] = useState([]);
64
- 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); // 用于失去焦点后,判断是否关闭
98
+ const isChange = useRef(false);
99
+ const selectRange = useRef([]);
100
+ useImperativeHandle(ref, ()=>{
101
+ return {};
102
+ });
65
103
  useEffect(()=>{
66
104
  setDefaultMode();
105
+ return ()=>{
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);
111
+ };
112
+ }, []);
113
+ useEffect(()=>{
67
114
  if (kind === "range") {
68
- if (selectedRangeDate[0] && selectedRangeDate[1]) {
69
- setSelectedRangeDateString([
70
- selectedRangeDate[0].format(format),
71
- selectedRangeDate[1].format(format)
72
- ]);
73
- }
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
+ });
74
130
  } else {
75
- if (selectedDate) {
76
- setSelectedDateString((prevState)=>{
77
- selectedDateStringRef.current = selectedDate.format(format);
78
- return selectedDateStringRef.current;
79
- });
80
- }
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
+ });
81
140
  }
82
- }, []);
141
+ }, [
142
+ value
143
+ ]);
144
+ useEffect(()=>{
145
+ setPanelOpen(open);
146
+ }, [
147
+ open
148
+ ]);
83
149
  // 传给 DatePicker 的props参数
84
150
  const getConfig = ()=>{
85
151
  let config = _object_spread_props(_object_spread({
@@ -109,6 +175,7 @@ const BhdDatePicker = (props)=>{
109
175
  popupClassName,
110
176
  allowClear,
111
177
  showTime,
178
+ showToday,
112
179
  cellRender,
113
180
  renderExtraFooter: selfRenderExtraFooter
114
181
  });
@@ -122,10 +189,19 @@ const BhdDatePicker = (props)=>{
122
189
  delete config.onChange;
123
190
  delete config.useType; // 组件自己定义的
124
191
  delete config.presets; // 必须删掉,因为预设由官网的左侧换到底部
125
- delete config.showNow; // 必须删掉,因为官网的今天按钮有bug,不受showNow的值控制
192
+ delete config.dropdownClassName;
126
193
  if (!config.cellRender) {
127
194
  config.cellRender = selfCellRender;
128
195
  }
196
+ // 判断是否显示今天按钮
197
+ if (!isRenderToday()) {
198
+ config.showToday = false;
199
+ showToday = false;
200
+ }
201
+ // 不显示今天、预设、确定按钮
202
+ if (!isSelfRenderExtraFooter()) {
203
+ delete config.renderExtraFooter;
204
+ }
129
205
  // 单选
130
206
  if (kind === "single") {
131
207
  config.popupClassName = `
@@ -144,6 +220,7 @@ const BhdDatePicker = (props)=>{
144
220
  config.allowClear = false; // 日程安排查看时,不显示清除按钮
145
221
  }
146
222
  }
223
+ config.popupClassName = `${config.popupClassName} ${dropdownClassName} ${needConfirm ? "" : styles.noNeedConfirm} ${id}`;
147
224
  return config;
148
225
  };
149
226
  // 设置默认mode
@@ -182,9 +259,14 @@ const BhdDatePicker = (props)=>{
182
259
  }
183
260
  // 月份 中文模式下显示全名称(例:一月),英文模式下显示短名称(例:Jan)
184
261
  if (info.type === "month") {
262
+ // return (
263
+ // <div className={`${"bhd-picker-cell-inner"}`}>
264
+ // {current.format(dayjs.locale() === "zh-cn" ? "MMMM" : "MMM")}
265
+ // </div>
266
+ // );
185
267
  return /*#__PURE__*/ _jsx("div", {
186
268
  className: `${"bhd-picker-cell-inner"}`,
187
- children: current.format(lang === "zh_CN" ? "MMMM" : "MMM")
269
+ children: i18Conversion(months[Number(current.format("M")) - 1])
188
270
  });
189
271
  }
190
272
  return info.originNode;
@@ -209,25 +291,24 @@ const BhdDatePicker = (props)=>{
209
291
  };
210
292
  // 渲染底部扩展内容(包括确定按钮、今天按钮、预设、传入的底部扩展)
211
293
  const selfRenderExtraFooter = (mode)=>{
212
- var _selectedRangeDate, _selectedRangeDate1;
294
+ var _selectedRangeDate, _selectedRangeDate1, _selectedRangeDate2, _selectedRangeDate3;
213
295
  return /*#__PURE__*/ _jsxs(_Fragment, {
214
296
  children: [
215
- renderExtraFooter && /*#__PURE__*/ _jsx("div", {
216
- className: "bhddatepicker-picker-footer-extra-extend",
217
- children: renderExtraFooter()
218
- }),
219
297
  !showTime ? /*#__PURE__*/ _jsx(_Fragment, {
220
- children: /*#__PURE__*/ _jsxs("ul", {
298
+ children: ((picker || "date") === "date" && showToday || presets && presets.length > 0 || needConfirm) && /*#__PURE__*/ _jsxs("ul", {
221
299
  className: "bhd-picker-ranges",
222
300
  children: [
223
301
  selfRenderPresets(),
224
- renderNow(),
225
- /*#__PURE__*/ _jsx("li", {
302
+ renderToday(mode),
303
+ needConfirm && /*#__PURE__*/ _jsx("li", {
226
304
  className: "bhd-picker-ok",
227
305
  children: /*#__PURE__*/ _jsx(Button, {
228
306
  type: "primary",
229
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),
230
- 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
+ },
231
312
  children: i18Conversion("确定")
232
313
  })
233
314
  })
@@ -236,35 +317,90 @@ const BhdDatePicker = (props)=>{
236
317
  }) : /*#__PURE__*/ _jsx("ul", {
237
318
  className: `bhd-picker-ranges showPresets ${showNow ? "showNow" : ""}`,
238
319
  children: selfRenderPresets()
320
+ }),
321
+ renderExtraFooter && /*#__PURE__*/ _jsx("div", {
322
+ className: "bhddatepicker-picker-footer-extra-extend",
323
+ children: renderExtraFooter(mode)
239
324
  })
240
325
  ]
241
326
  });
242
327
  };
243
- // 渲染今天
244
- const renderNow = ()=>{
245
- // 显示now
246
- if (showNow) {
247
- var _extraItems;
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 = ()=>{
340
+ if (showToday) {
341
+ if (kind === "single" && panelMode === "date") {
342
+ return true;
343
+ }
248
344
  // 日程安排时: extraItems中今天是否是可选或者已选择状态
249
- let hasNow = ((_extraItems = extraItems) === null || _extraItems === void 0 ? void 0 : _extraItems.filter((item)=>item.status !== "noselectable").length) > 0;
250
- if (kind === "single" || kind === "extra" && hasNow) {
251
- if (mode === "date" || mode === undefined) {
252
- return /*#__PURE__*/ _jsx("li", {
253
- className: "bhd-picker-now",
254
- children: /*#__PURE__*/ _jsx("a", {
255
- className: "bhd-picker-now-btn",
256
- onClick: todayClick,
257
- children: showTime ? i18Conversion("此刻") : i18Conversion("今天")
258
- })
259
- });
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;
260
350
  }
261
351
  }
262
352
  }
263
- 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;
395
+ };
396
+ // 获取到年月日
397
+ const getToday = ()=>{
398
+ const date = new Date();
399
+ return date.getFullYear().toString() + (date.getMonth() + 1).toString().padStart(2, "0") + date.getDate().toString().padStart(2, "0");
264
400
  };
265
401
  // 渲染预设
266
402
  const selfRenderPresets = ()=>{
267
- return /*#__PURE__*/ _jsx("li", {
403
+ return presets && presets.length > 0 ? /*#__PURE__*/ _jsx("li", {
268
404
  className: "bhd-picker-presets",
269
405
  children: presets.map((item, index)=>{
270
406
  return /*#__PURE__*/ _jsx("a", {
@@ -275,54 +411,100 @@ const BhdDatePicker = (props)=>{
275
411
  children: item.label
276
412
  }, index);
277
413
  })
278
- });
414
+ }) : null;
279
415
  };
280
416
  // 日期选择确认
281
417
  const okClick = ()=>{
282
418
  if (kind === "range") {
283
- if (selectedRangeDate[0] && selectedRangeDate[1] && selectedRangeDateString[0] && selectedRangeDateString[1]) {
284
- 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
+ }
285
428
  setPanelOpen(false);
286
- } else {
287
- setPanelOpen(true);
288
429
  }
289
430
  } else {
290
- if (selectedDate && selectedDateString) {
291
- onChange && onChange(selectedDate, selectedDateString);
431
+ if (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
+ }
292
439
  setPanelOpen(false);
293
440
  }
294
441
  }
295
442
  };
296
443
  // 今天点击
297
- const todayClick = ()=>{
298
- // var today = dayjs();
299
- // var todayString = today.format(format);
300
- // setSelectedDate((prevState) => {
301
- // selectedDateRef.current = today;
302
- // return selectedDateRef.current;
303
- // });
304
- // setSelectedDateString((prevState) => {
305
- // selectedDateStringRef.current = todayString;
306
- // return selectedDateStringRef.current;
307
- // });
308
- // onChange && onChange(today, todayString);
309
- // setPanelOpen(false);
444
+ const todayClick = useCallback(()=>{
445
+ setTimeout(()=>{
446
+ okClick();
447
+ }, 0);
448
+ }, []);
449
+ const todayClickEventListener = (value)=>{
450
+ if (!value) return;
451
+ if (showToday) {
452
+ var _document_getElementsByClassName__getElementsByClassName, _document_getElementsByClassName_, _document_getElementsByClassName;
453
+ 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];
454
+ if (value) {
455
+ var _btn, _btn1;
456
+ (_btn = btn) === null || _btn === void 0 ? void 0 : _btn.removeEventListener("click", todayClick);
457
+ (_btn1 = btn) === null || _btn1 === void 0 ? void 0 : _btn1.addEventListener("click", todayClick, {
458
+ once: true
459
+ });
460
+ }
461
+ }
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
+ }
310
476
  };
311
477
  //预设点击
312
478
  const presetClick = (info)=>{
313
- console.log(typeof info.value);
314
479
  const value = typeof info.value === "function" ? info.value() : info.value;
315
- const valueString = value.format(format);
316
- setSelectedDate((prevState)=>{
317
- selectedDateRef.current = value;
318
- return selectedDateRef.current;
319
- });
320
- setSelectedDateString((prevState)=>{
321
- selectedDateStringRef.current = valueString;
322
- return selectedDateStringRef.current;
323
- });
324
- onChange && onChange(value, valueString);
325
- setPanelOpen(false);
480
+ if (kind === "range") {
481
+ const valueString = [
482
+ value[0].format(format),
483
+ value[1].format(format)
484
+ ];
485
+ setSelectedRangeDate((prevState)=>{
486
+ selectedRangeDateRef.current = value;
487
+ return selectedRangeDateRef.current;
488
+ });
489
+ setSelectedRangeDateString((prevState)=>{
490
+ selectedRangeDateStringRef.current = valueString;
491
+ return selectedRangeDateStringRef.current;
492
+ });
493
+ onChange && onChange(value, valueString);
494
+ setPanelOpen(false);
495
+ } else {
496
+ const valueString = value.format(format);
497
+ setSelectedDate((prevState)=>{
498
+ selectedDateRef.current = value;
499
+ return selectedDateRef.current;
500
+ });
501
+ setSelectedDateString((prevState)=>{
502
+ selectedDateStringRef.current = valueString;
503
+ return selectedDateStringRef.current;
504
+ });
505
+ onChange && onChange(value, valueString);
506
+ setPanelOpen(false);
507
+ }
326
508
  };
327
509
  return /*#__PURE__*/ _jsxs("span", {
328
510
  className: `${styles.bhdDatePicker}`,
@@ -330,8 +512,9 @@ const BhdDatePicker = (props)=>{
330
512
  children: [
331
513
  (kind === "single" || kind === "extra") && /*#__PURE__*/ _jsx(_Fragment, {
332
514
  children: /*#__PURE__*/ _jsx(DatePicker, _object_spread_props(_object_spread({}, getConfig()), {
515
+ ref: pickerRef,
516
+ id: id,
333
517
  value: selectedDate,
334
- showNow: showTime ? showNow : false,
335
518
  mode: panelMode,
336
519
  open: panelOpen,
337
520
  disabledDate: selfDisabledDate,
@@ -340,9 +523,12 @@ const BhdDatePicker = (props)=>{
340
523
  onPanelChange && onPanelChange(value, mode);
341
524
  },
342
525
  onOpenChange: (value)=>{
526
+ setPanelOpenChange(value);
343
527
  // 打开设置默认mode
344
528
  if (value) {
345
529
  setDefaultMode();
530
+ todayClickEventListener(value);
531
+ nowClickEventListener(value);
346
532
  }
347
533
  onOpenChange && onOpenChange(value);
348
534
  },
@@ -355,6 +541,12 @@ const BhdDatePicker = (props)=>{
355
541
  selectedDateStringRef.current = dateString;
356
542
  return selectedDateStringRef.current;
357
543
  });
544
+ isChange.current = true;
545
+ if (!needConfirm) {
546
+ setTimeout(()=>{
547
+ okClick();
548
+ }, 0);
549
+ }
358
550
  },
359
551
  onOk: (date)=>{
360
552
  if (showTime) {
@@ -370,16 +562,28 @@ const BhdDatePicker = (props)=>{
370
562
  onClick && onClick(e);
371
563
  },
372
564
  onBlur: (e)=>{
373
- okClick();
374
- 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
+ }
375
579
  onBlur && onBlur(e);
376
580
  }
377
581
  }))
378
582
  }),
379
583
  kind === "range" && /*#__PURE__*/ _jsx(_Fragment, {
380
584
  children: /*#__PURE__*/ _jsx(RangePicker, _object_spread_props(_object_spread({}, getConfig()), {
585
+ ref: pickerRef,
381
586
  value: selectedRangeDate,
382
- showNow: false,
383
587
  mode: rangePanelMode,
384
588
  open: panelOpen,
385
589
  disabledDate: selfDisabledDate,
@@ -388,31 +592,92 @@ const BhdDatePicker = (props)=>{
388
592
  onPanelChange && onPanelChange(value, mode);
389
593
  },
390
594
  onOpenChange: (value)=>{
595
+ setPanelOpenChange(value);
391
596
  if (value) {
392
597
  setDefaultMode();
393
598
  }
394
599
  if (showTime) {
395
600
  setPanelOpen(value);
396
601
  }
397
- setRangeOpenChange(value);
398
602
  onOpenChange && onOpenChange(value);
399
603
  },
400
604
  onClick: (e)=>{
401
605
  setPanelOpen(true);
606
+ selectRange.current = [];
402
607
  onClick && onClick(e);
403
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
+ },
404
636
  onCalendarChange: (dates, dateStrings, info)=>{
405
- setSelectedRangeDate(dates);
406
- setSelectedRangeDateString(dateStrings);
407
- 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
+ }
408
662
  },
409
663
  onBlur: (e)=>{
410
- var _selectedRangeDate, _selectedRangeDate1, _selectedRangeDate2, _selectedRangeDate3;
411
- if (((_selectedRangeDate = selectedRangeDate) === null || _selectedRangeDate === void 0 ? void 0 : _selectedRangeDate[0]) && ((_selectedRangeDate1 = selectedRangeDate) === null || _selectedRangeDate1 === void 0 ? void 0 : _selectedRangeDate1[1])) {
412
- okClick();
413
- setPanelOpen(false);
414
- } else if (!((_selectedRangeDate2 = selectedRangeDate) === null || _selectedRangeDate2 === void 0 ? void 0 : _selectedRangeDate2[0]) || !((_selectedRangeDate3 = selectedRangeDate) === null || _selectedRangeDate3 === void 0 ? void 0 : _selectedRangeDate3[1])) {
415
- 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);
416
681
  }
417
682
  onBlur && onBlur(e);
418
683
  }
@@ -420,5 +685,5 @@ const BhdDatePicker = (props)=>{
420
685
  })
421
686
  ]
422
687
  });
423
- };
688
+ });
424
689
  export default BhdDatePicker;