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.
@@ -1,17 +1,32 @@
1
1
  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 { _ as _sliced_to_array } from "@swc/helpers/_/_sliced_to_array";
4
- import { _ as _type_of } from "@swc/helpers/_/_type_of";
5
4
  import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "@ice/jsx-runtime/jsx-runtime";
6
5
  import * as React from "react";
7
- import { useState, useEffect, useRef } from "react";
6
+ import { useState, useEffect, useRef, useCallback, forwardRef, useImperativeHandle } from "react";
8
7
  import styles from "./index.module.less";
9
8
  import { ConfigProvider, Button, DatePicker } from "antd";
10
9
  import { CustomArrow } from "../icons";
11
10
  // import dayjs from "dayjs";
11
+ // import type { Dayjs } from "dayjs";
12
12
  import i18Conversion from "../i18n";
13
13
  var RangePicker = DatePicker.RangePicker;
14
- var BhdDatePicker = function(props) {
14
+ var months = [
15
+ "一月",
16
+ "二月",
17
+ "三月",
18
+ "四月",
19
+ "五月",
20
+ "六月",
21
+ "七月",
22
+ "八月",
23
+ "九月",
24
+ "十月",
25
+ "十一月",
26
+ "十二月"
27
+ ];
28
+ //January_February_March_April_May_June_July_August_September_October_November_December
29
+ var BhdDatePicker = /*#__PURE__*/ forwardRef(function(props, ref) {
15
30
  var lang = ConfigProvider.lang === "en" ? "en_US" : "zh_CN";
16
31
  // if (lang === "en_US") {
17
32
  // const enUS = require("dayjs/locale/en");
@@ -20,6 +35,7 @@ var BhdDatePicker = function(props) {
20
35
  // const zhCN = require("dayjs/locale/zh-cn");
21
36
  // dayjs.locale(zhCN);
22
37
  // }
38
+ var id = "BhdDatePicker_" + new Date().getTime();
23
39
  // 默认格式
24
40
  var getDefaultFormat = function() {
25
41
  if (props.format) {
@@ -49,39 +65,88 @@ var BhdDatePicker = function(props) {
49
65
  }
50
66
  };
51
67
  // 自己组件内使用的,或者自己处理的
52
- var _props_kind = props.kind, kind = _props_kind === void 0 ? "single" : _props_kind, extraItems = props.extraItems, _props_extraReadonly = props.extraReadonly, extraReadonly = _props_extraReadonly === void 0 ? false : _props_extraReadonly, _props_useType = props.useType, useType = _props_useType === void 0 ? "" : _props_useType, _props_open = props.open, open = _props_open === void 0 ? false : _props_open, mode = props.mode, picker = props.picker, _props_value = props.value, value = _props_value === void 0 ? props.kind === "range" ? [] : "" : _props_value, _props_format = props.format, format = _props_format === void 0 ? getDefaultFormat() : _props_format, _props_presets = props.presets, presets = _props_presets === void 0 ? [] : _props_presets, className = props.className, popupClassName = props.popupClassName, showTime = props.showTime, _props_showNow = props.showNow, showNow = _props_showNow === void 0 ? true : _props_showNow, _props_allowClear = props.allowClear, allowClear = _props_allowClear === void 0 ? true : _props_allowClear, onClick = props.onClick, onBlur = props.onBlur, onChange = props.onChange, onOk = props.onOk, onCalendarChange = props.onCalendarChange, onOpenChange = props.onOpenChange, onPanelChange = props.onPanelChange, disabledDate = props.disabledDate, cellRender = props.cellRender, renderExtraFooter = props.renderExtraFooter;
68
+ var _props_kind = props.kind, kind = _props_kind === void 0 ? "single" : _props_kind, extraItems = props.extraItems, _props_extraReadonly = props.extraReadonly, extraReadonly = _props_extraReadonly === void 0 ? false : _props_extraReadonly, _props_useType = props.useType, useType = _props_useType === void 0 ? "" : _props_useType, _props_needConfirm = props.needConfirm, needConfirm = _props_needConfirm === void 0 ? true : _props_needConfirm, _props_open = props.open, open = _props_open === void 0 ? false : _props_open, mode = props.mode, picker = props.picker, value = props.value, _props_format = props.format, format = _props_format === void 0 ? getDefaultFormat() : _props_format, _props_presets = props.presets, presets = _props_presets === void 0 ? [] : _props_presets, className = props.className, popupClassName = props.popupClassName, dropdownClassName = props.dropdownClassName, showTime = props.showTime, _props_showNow = props.showNow, showNow = _props_showNow === void 0 ? true : _props_showNow, _props_showToday = props.showToday, showToday = _props_showToday === void 0 ? true : _props_showToday, _props_allowClear = props.allowClear, allowClear = _props_allowClear === void 0 ? true : _props_allowClear, onClick = props.onClick, onBlur = props.onBlur, onChange = props.onChange, onOk = props.onOk, // onCalendarChange,
69
+ onOpenChange = props.onOpenChange, onPanelChange = props.onPanelChange, disabledDate = props.disabledDate, cellRender = props.cellRender, renderExtraFooter = props.renderExtraFooter;
53
70
  var bhdDatePickerRef = useRef(null);
71
+ var pickerRef = useRef(null);
54
72
  var _useState = _sliced_to_array(useState(open), 2), panelOpen = _useState[0], setPanelOpen = _useState[1];
55
73
  var _useState1 = _sliced_to_array(useState("date"), 2), panelMode = _useState1[0], setPanelMode = _useState1[1];
56
74
  var _useState2 = _sliced_to_array(useState([
57
75
  "date",
58
76
  "date"
59
77
  ]), 2), rangePanelMode = _useState2[0], setRangePanelMode = _useState2[1];
60
- var _useState3 = _sliced_to_array(useState(value), 2), selectedDate = _useState3[0], setSelectedDate = _useState3[1];
61
- var _useState4 = _sliced_to_array(useState(null), 2), selectedDateString = _useState4[0], setSelectedDateString = _useState4[1];
62
- var selectedDateRef = useRef(value);
63
- var selectedDateStringRef = useRef(null);
64
- var _useState5 = _sliced_to_array(useState(value), 2), selectedRangeDate = _useState5[0], setSelectedRangeDate = _useState5[1];
65
- var _useState6 = _sliced_to_array(useState([]), 2), selectedRangeDateString = _useState6[0], setSelectedRangeDateString = _useState6[1];
66
- var _useState7 = _sliced_to_array(useState(false), 2), rangeOpenChange = _useState7[0], setRangeOpenChange = _useState7[1]; // 用于范围选择失去焦点后,判断是否关闭
78
+ var _useState3 = _sliced_to_array(useState(null), 2), selectedDate = _useState3[0], setSelectedDate = _useState3[1];
79
+ var _useState4 = _sliced_to_array(useState(""), 2), selectedDateString = _useState4[0], setSelectedDateString = _useState4[1];
80
+ var selectedDateRef = useRef(null);
81
+ var selectedDateStringRef = useRef("");
82
+ var _useState5 = _sliced_to_array(useState([
83
+ null,
84
+ null
85
+ ]), 2), selectedRangeDate = _useState5[0], setSelectedRangeDate = _useState5[1];
86
+ var _useState6 = _sliced_to_array(useState([
87
+ "",
88
+ ""
89
+ ]), 2), selectedRangeDateString = _useState6[0], setSelectedRangeDateString = _useState6[1];
90
+ var selectedRangeDateRef = useRef([
91
+ null,
92
+ null
93
+ ]);
94
+ var selectedRangeDateStringRef = useRef([
95
+ "",
96
+ ""
97
+ ]);
98
+ var _useState7 = _sliced_to_array(useState(false), 2), panelOpenChange = _useState7[0], setPanelOpenChange = _useState7[1]; // 用于失去焦点后,判断是否关闭
99
+ var isChange = useRef(false);
100
+ var selectRange = useRef([]);
101
+ useImperativeHandle(ref, function() {
102
+ return {};
103
+ });
67
104
  useEffect(function() {
68
105
  setDefaultMode();
106
+ return function() {
107
+ var _document_getElementsByClassName__getElementsByClassName, _document_getElementsByClassName_, _document_getElementsByClassName, _todayBtn, _document_getElementsByClassName__getElementsByClassName1, _document_getElementsByClassName_1, _document_getElementsByClassName1, _nowBtn;
108
+ var 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];
109
+ (_todayBtn = todayBtn) === null || _todayBtn === void 0 ? void 0 : _todayBtn.removeEventListener("click", todayClick);
110
+ var 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];
111
+ (_nowBtn = nowBtn) === null || _nowBtn === void 0 ? void 0 : _nowBtn.removeEventListener("click", todayClick);
112
+ };
113
+ }, []);
114
+ useEffect(function() {
69
115
  if (kind === "range") {
70
- if (selectedRangeDate[0] && selectedRangeDate[1]) {
71
- setSelectedRangeDateString([
72
- selectedRangeDate[0].format(format),
73
- selectedRangeDate[1].format(format)
74
- ]);
75
- }
116
+ setSelectedRangeDate(function(prevState) {
117
+ selectedRangeDateRef.current = value || [
118
+ null,
119
+ null
120
+ ];
121
+ return selectedRangeDateRef.current;
122
+ });
123
+ setSelectedRangeDateString(function(prevState) {
124
+ var _selectedRangeDateRef_current_, _selectedRangeDateRef_current_1;
125
+ selectedRangeDateStringRef.current = [
126
+ ((_selectedRangeDateRef_current_ = selectedRangeDateRef.current[0]) === null || _selectedRangeDateRef_current_ === void 0 ? void 0 : _selectedRangeDateRef_current_.format(format)) || "",
127
+ ((_selectedRangeDateRef_current_1 = selectedRangeDateRef.current[1]) === null || _selectedRangeDateRef_current_1 === void 0 ? void 0 : _selectedRangeDateRef_current_1.format(format)) || ""
128
+ ];
129
+ return selectedRangeDateStringRef.current;
130
+ });
76
131
  } else {
77
- if (selectedDate) {
78
- setSelectedDateString(function(prevState) {
79
- selectedDateStringRef.current = selectedDate.format(format);
80
- return selectedDateStringRef.current;
81
- });
82
- }
132
+ setSelectedDate(function(prevState) {
133
+ selectedDateRef.current = value || null;
134
+ return selectedDateRef.current;
135
+ });
136
+ setSelectedDateString(function(prevState) {
137
+ var _selectedDateRef_current;
138
+ selectedDateStringRef.current = ((_selectedDateRef_current = selectedDateRef.current) === null || _selectedDateRef_current === void 0 ? void 0 : _selectedDateRef_current.format(format)) || "";
139
+ return selectedDateStringRef.current;
140
+ });
83
141
  }
84
- }, []);
142
+ }, [
143
+ value
144
+ ]);
145
+ useEffect(function() {
146
+ setPanelOpen(open);
147
+ }, [
148
+ open
149
+ ]);
85
150
  // 传给 DatePicker 的props参数
86
151
  var getConfig = function() {
87
152
  var config = _object_spread_props(_object_spread({
@@ -111,6 +176,7 @@ var BhdDatePicker = function(props) {
111
176
  popupClassName: popupClassName,
112
177
  allowClear: allowClear,
113
178
  showTime: showTime,
179
+ showToday: showToday,
114
180
  cellRender: cellRender,
115
181
  renderExtraFooter: selfRenderExtraFooter
116
182
  });
@@ -124,10 +190,19 @@ var BhdDatePicker = function(props) {
124
190
  delete config.onChange;
125
191
  delete config.useType; // 组件自己定义的
126
192
  delete config.presets; // 必须删掉,因为预设由官网的左侧换到底部
127
- delete config.showNow; // 必须删掉,因为官网的今天按钮有bug,不受showNow的值控制
193
+ delete config.dropdownClassName;
128
194
  if (!config.cellRender) {
129
195
  config.cellRender = selfCellRender;
130
196
  }
197
+ // 判断是否显示今天按钮
198
+ if (!isRenderToday()) {
199
+ config.showToday = false;
200
+ showToday = false;
201
+ }
202
+ // 不显示今天、预设、确定按钮
203
+ if (!isSelfRenderExtraFooter()) {
204
+ delete config.renderExtraFooter;
205
+ }
131
206
  // 单选
132
207
  if (kind === "single") {
133
208
  config.popupClassName = "\n ".concat(styles.bhdDatePickerPopup, " ").concat(styles.singlePicker, " ").concat(popupClassName || "", " ").concat(showTime ? styles.showTime : "", " ").concat(renderExtraFooter ? styles.showExtraFooter : "");
@@ -145,6 +220,7 @@ var BhdDatePicker = function(props) {
145
220
  config.allowClear = false; // 日程安排查看时,不显示清除按钮
146
221
  }
147
222
  }
223
+ config.popupClassName = "".concat(config.popupClassName, " ").concat(dropdownClassName, " ").concat(needConfirm ? "" : styles.noNeedConfirm, " ").concat(id);
148
224
  return config;
149
225
  };
150
226
  // 设置默认mode
@@ -185,9 +261,14 @@ var BhdDatePicker = function(props) {
185
261
  }
186
262
  // 月份 中文模式下显示全名称(例:一月),英文模式下显示短名称(例:Jan)
187
263
  if (info.type === "month") {
264
+ // return (
265
+ // <div className={`${"bhd-picker-cell-inner"}`}>
266
+ // {current.format(dayjs.locale() === "zh-cn" ? "MMMM" : "MMM")}
267
+ // </div>
268
+ // );
188
269
  return /*#__PURE__*/ _jsx("div", {
189
270
  className: "bhd-picker-cell-inner",
190
- children: current.format(lang === "zh_CN" ? "MMMM" : "MMM")
271
+ children: i18Conversion(months[Number(current.format("M")) - 1])
191
272
  });
192
273
  }
193
274
  return info.originNode;
@@ -214,25 +295,24 @@ var BhdDatePicker = function(props) {
214
295
  };
215
296
  // 渲染底部扩展内容(包括确定按钮、今天按钮、预设、传入的底部扩展)
216
297
  var selfRenderExtraFooter = function(mode) {
217
- var _selectedRangeDate, _selectedRangeDate1;
298
+ var _selectedRangeDate, _selectedRangeDate1, _selectedRangeDate2, _selectedRangeDate3;
218
299
  return /*#__PURE__*/ _jsxs(_Fragment, {
219
300
  children: [
220
- renderExtraFooter && /*#__PURE__*/ _jsx("div", {
221
- className: "bhddatepicker-picker-footer-extra-extend",
222
- children: renderExtraFooter()
223
- }),
224
301
  !showTime ? /*#__PURE__*/ _jsx(_Fragment, {
225
- children: /*#__PURE__*/ _jsxs("ul", {
302
+ children: ((picker || "date") === "date" && showToday || presets && presets.length > 0 || needConfirm) && /*#__PURE__*/ _jsxs("ul", {
226
303
  className: "bhd-picker-ranges",
227
304
  children: [
228
305
  selfRenderPresets(),
229
- renderNow(),
230
- /*#__PURE__*/ _jsx("li", {
306
+ renderToday(mode),
307
+ needConfirm && /*#__PURE__*/ _jsx("li", {
231
308
  className: "bhd-picker-ok",
232
309
  children: /*#__PURE__*/ _jsx(Button, {
233
310
  type: "primary",
234
311
  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),
235
- onClick: okClick,
312
+ className: "".concat((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" : ""),
313
+ onClick: function() {
314
+ okClick();
315
+ },
236
316
  children: i18Conversion("确定")
237
317
  })
238
318
  })
@@ -241,37 +321,92 @@ var BhdDatePicker = function(props) {
241
321
  }) : /*#__PURE__*/ _jsx("ul", {
242
322
  className: "bhd-picker-ranges showPresets ".concat(showNow ? "showNow" : ""),
243
323
  children: selfRenderPresets()
324
+ }),
325
+ renderExtraFooter && /*#__PURE__*/ _jsx("div", {
326
+ className: "bhddatepicker-picker-footer-extra-extend",
327
+ children: renderExtraFooter(mode)
244
328
  })
245
329
  ]
246
330
  });
247
331
  };
248
- // 渲染今天
249
- var renderNow = function() {
250
- // 显示now
251
- if (showNow) {
252
- var _extraItems;
332
+ // 判断是否显示今天按钮、预设、确定按钮、传入的底部扩展
333
+ var isSelfRenderExtraFooter = function() {
334
+ var result = false;
335
+ if (kind === "range") {
336
+ result = presets && presets.length > 0 || renderExtraFooter || needConfirm;
337
+ } else {
338
+ result = isRenderToday() || presets && presets.length > 0 || renderExtraFooter || needConfirm;
339
+ }
340
+ return result;
341
+ };
342
+ //判断是否显示今天按钮
343
+ var isRenderToday = function() {
344
+ if (showToday) {
345
+ if (kind === "single" && panelMode === "date") {
346
+ return true;
347
+ }
253
348
  // 日程安排时: extraItems中今天是否是可选或者已选择状态
254
- var hasNow = ((_extraItems = extraItems) === null || _extraItems === void 0 ? void 0 : _extraItems.filter(function(item) {
255
- return item.status !== "noselectable";
256
- }).length) > 0;
257
- if (kind === "single" || kind === "extra" && hasNow) {
258
- if (mode === "date" || mode === undefined) {
259
- return /*#__PURE__*/ _jsx("li", {
260
- className: "bhd-picker-now",
261
- children: /*#__PURE__*/ _jsx("a", {
262
- className: "bhd-picker-now-btn",
263
- onClick: todayClick,
264
- children: showTime ? i18Conversion("此刻") : i18Conversion("今天")
265
- })
266
- });
349
+ if (kind === "extra") {
350
+ var _extraItems;
351
+ var hasToday = ((_extraItems = extraItems) === null || _extraItems === void 0 ? void 0 : _extraItems.filter(function(item) {
352
+ return item.status !== "noselectable" && item.date.format("YYYYMMDD") === getToday();
353
+ }).length) > 0;
354
+ if (hasToday && panelMode === "date") {
355
+ return true;
267
356
  }
268
357
  }
269
358
  }
270
- return null;
359
+ return false;
360
+ };
361
+ // 渲染今天
362
+ var renderToday = function(mode) {
363
+ // // 显示Today
364
+ // if (showToday) {
365
+ // // 日程安排时: extraItems中今天是否是可选或者已选择状态
366
+ // let hasNow =
367
+ // extraItems?.filter(
368
+ // (item) =>
369
+ // item.status !== "noselectable" &&
370
+ // // item.date.format(format) === dayjs().format(format)
371
+ // item.date.format("YYYYMMDD") === getToday()
372
+ // ).length > 0;
373
+ // if (kind === "single" || (kind === "extra" && hasNow)) {
374
+ // if (mode === "date") {
375
+ // return (
376
+ // <li className="bhd-picker-now">
377
+ // <a
378
+ // className="bhd-picker-now-btn"
379
+ // style={{ visibility: "hidden" }}
380
+ // onClick={todayClick}
381
+ // >
382
+ // {i18Conversion("今天")}
383
+ // </a>
384
+ // </li>
385
+ // );
386
+ // }
387
+ // }
388
+ // }
389
+ // return null;
390
+ return isRenderToday() ? /*#__PURE__*/ _jsx("li", {
391
+ className: "bhd-picker-now",
392
+ children: /*#__PURE__*/ _jsx("a", {
393
+ className: "bhd-picker-now-btn",
394
+ style: {
395
+ visibility: "hidden"
396
+ },
397
+ onClick: todayClick,
398
+ children: i18Conversion("今天")
399
+ })
400
+ }) : null;
401
+ };
402
+ // 获取到年月日
403
+ var getToday = function() {
404
+ var date = new Date();
405
+ return date.getFullYear().toString() + (date.getMonth() + 1).toString().padStart(2, "0") + date.getDate().toString().padStart(2, "0");
271
406
  };
272
407
  // 渲染预设
273
408
  var selfRenderPresets = function() {
274
- return /*#__PURE__*/ _jsx("li", {
409
+ return presets && presets.length > 0 ? /*#__PURE__*/ _jsx("li", {
275
410
  className: "bhd-picker-presets",
276
411
  children: presets.map(function(item, index) {
277
412
  return /*#__PURE__*/ _jsx("a", {
@@ -282,54 +417,100 @@ var BhdDatePicker = function(props) {
282
417
  children: item.label
283
418
  }, index);
284
419
  })
285
- });
420
+ }) : null;
286
421
  };
287
422
  // 日期选择确认
288
423
  var okClick = function() {
289
424
  if (kind === "range") {
290
- if (selectedRangeDate[0] && selectedRangeDate[1] && selectedRangeDateString[0] && selectedRangeDateString[1]) {
291
- onChange && onChange(selectedRangeDate, selectedRangeDateString);
425
+ var _selectedRangeDateRef_current, _selectedRangeDateRef_current1, _selectedRangeDateStringRef_current, _selectedRangeDateStringRef_current1;
426
+ 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])) {
427
+ if (isChange.current) {
428
+ onChange && onChange(selectedRangeDateRef.current, selectedRangeDateStringRef.current);
429
+ isChange.current = false;
430
+ // if (pickerRef.current) {
431
+ // pickerRef.current.blur();
432
+ // }
433
+ }
292
434
  setPanelOpen(false);
293
- } else {
294
- setPanelOpen(true);
295
435
  }
296
436
  } else {
297
- if (selectedDate && selectedDateString) {
298
- onChange && onChange(selectedDate, selectedDateString);
437
+ if (selectedDateRef.current && selectedDateStringRef.current) {
438
+ if (isChange.current) {
439
+ onChange && onChange(selectedDateRef.current, selectedDateStringRef.current);
440
+ isChange.current = false;
441
+ // if (pickerRef.current) {
442
+ // pickerRef.current.blur();
443
+ // }
444
+ }
299
445
  setPanelOpen(false);
300
446
  }
301
447
  }
302
448
  };
303
449
  // 今天点击
304
- var todayClick = function() {
305
- // var today = dayjs();
306
- // var todayString = today.format(format);
307
- // setSelectedDate((prevState) => {
308
- // selectedDateRef.current = today;
309
- // return selectedDateRef.current;
310
- // });
311
- // setSelectedDateString((prevState) => {
312
- // selectedDateStringRef.current = todayString;
313
- // return selectedDateStringRef.current;
314
- // });
315
- // onChange && onChange(today, todayString);
316
- // setPanelOpen(false);
450
+ var todayClick = useCallback(function() {
451
+ setTimeout(function() {
452
+ okClick();
453
+ }, 0);
454
+ }, []);
455
+ var todayClickEventListener = function(value) {
456
+ if (!value) return;
457
+ if (showToday) {
458
+ var _document_getElementsByClassName__getElementsByClassName, _document_getElementsByClassName_, _document_getElementsByClassName;
459
+ var 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];
460
+ if (value) {
461
+ var _btn, _btn1;
462
+ (_btn = btn) === null || _btn === void 0 ? void 0 : _btn.removeEventListener("click", todayClick);
463
+ (_btn1 = btn) === null || _btn1 === void 0 ? void 0 : _btn1.addEventListener("click", todayClick, {
464
+ once: true
465
+ });
466
+ }
467
+ }
468
+ };
469
+ var nowClickEventListener = function(value) {
470
+ if (!value) return;
471
+ if (showTime) {
472
+ var _document_getElementsByClassName__getElementsByClassName, _document_getElementsByClassName_, _document_getElementsByClassName;
473
+ var 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];
474
+ if (value) {
475
+ var _btn, _btn1;
476
+ (_btn = btn) === null || _btn === void 0 ? void 0 : _btn.removeEventListener("click", todayClick);
477
+ (_btn1 = btn) === null || _btn1 === void 0 ? void 0 : _btn1.addEventListener("click", todayClick, {
478
+ once: true
479
+ });
480
+ }
481
+ }
317
482
  };
318
483
  //预设点击
319
484
  var presetClick = function(info) {
320
- console.log(_type_of(info.value));
321
485
  var value = typeof info.value === "function" ? info.value() : info.value;
322
- var valueString = value.format(format);
323
- setSelectedDate(function(prevState) {
324
- selectedDateRef.current = value;
325
- return selectedDateRef.current;
326
- });
327
- setSelectedDateString(function(prevState) {
328
- selectedDateStringRef.current = valueString;
329
- return selectedDateStringRef.current;
330
- });
331
- onChange && onChange(value, valueString);
332
- setPanelOpen(false);
486
+ if (kind === "range") {
487
+ var valueString = [
488
+ value[0].format(format),
489
+ value[1].format(format)
490
+ ];
491
+ setSelectedRangeDate(function(prevState) {
492
+ selectedRangeDateRef.current = value;
493
+ return selectedRangeDateRef.current;
494
+ });
495
+ setSelectedRangeDateString(function(prevState) {
496
+ selectedRangeDateStringRef.current = valueString;
497
+ return selectedRangeDateStringRef.current;
498
+ });
499
+ onChange && onChange(value, valueString);
500
+ setPanelOpen(false);
501
+ } else {
502
+ var valueString1 = value.format(format);
503
+ setSelectedDate(function(prevState) {
504
+ selectedDateRef.current = value;
505
+ return selectedDateRef.current;
506
+ });
507
+ setSelectedDateString(function(prevState) {
508
+ selectedDateStringRef.current = valueString1;
509
+ return selectedDateStringRef.current;
510
+ });
511
+ onChange && onChange(value, valueString1);
512
+ setPanelOpen(false);
513
+ }
333
514
  };
334
515
  return /*#__PURE__*/ _jsxs("span", {
335
516
  className: "".concat(styles.bhdDatePicker),
@@ -337,8 +518,9 @@ var BhdDatePicker = function(props) {
337
518
  children: [
338
519
  (kind === "single" || kind === "extra") && /*#__PURE__*/ _jsx(_Fragment, {
339
520
  children: /*#__PURE__*/ _jsx(DatePicker, _object_spread_props(_object_spread({}, getConfig()), {
521
+ ref: pickerRef,
522
+ id: id,
340
523
  value: selectedDate,
341
- showNow: showTime ? showNow : false,
342
524
  mode: panelMode,
343
525
  open: panelOpen,
344
526
  disabledDate: selfDisabledDate,
@@ -347,9 +529,12 @@ var BhdDatePicker = function(props) {
347
529
  onPanelChange && onPanelChange(value, mode);
348
530
  },
349
531
  onOpenChange: function(value) {
532
+ setPanelOpenChange(value);
350
533
  // 打开设置默认mode
351
534
  if (value) {
352
535
  setDefaultMode();
536
+ todayClickEventListener(value);
537
+ nowClickEventListener(value);
353
538
  }
354
539
  onOpenChange && onOpenChange(value);
355
540
  },
@@ -362,6 +547,12 @@ var BhdDatePicker = function(props) {
362
547
  selectedDateStringRef.current = dateString;
363
548
  return selectedDateStringRef.current;
364
549
  });
550
+ isChange.current = true;
551
+ if (!needConfirm) {
552
+ setTimeout(function() {
553
+ okClick();
554
+ }, 0);
555
+ }
365
556
  },
366
557
  onOk: function(date) {
367
558
  if (showTime) {
@@ -377,16 +568,28 @@ var BhdDatePicker = function(props) {
377
568
  onClick && onClick(e);
378
569
  },
379
570
  onBlur: function(e) {
380
- okClick();
381
- setPanelOpen(false);
571
+ if (needConfirm) {
572
+ var _e_relatedTarget_classList, _e_relatedTarget;
573
+ okClick(); // 面板区域内失去焦点时
574
+ 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")) {
575
+ if (pickerRef.current) {
576
+ pickerRef.current.focus();
577
+ }
578
+ setPanelOpen(true);
579
+ } else {
580
+ setPanelOpen(false);
581
+ }
582
+ } else {
583
+ setPanelOpen(false);
584
+ }
382
585
  onBlur && onBlur(e);
383
586
  }
384
587
  }))
385
588
  }),
386
589
  kind === "range" && /*#__PURE__*/ _jsx(_Fragment, {
387
590
  children: /*#__PURE__*/ _jsx(RangePicker, _object_spread_props(_object_spread({}, getConfig()), {
591
+ ref: pickerRef,
388
592
  value: selectedRangeDate,
389
- showNow: false,
390
593
  mode: rangePanelMode,
391
594
  open: panelOpen,
392
595
  disabledDate: selfDisabledDate,
@@ -395,31 +598,92 @@ var BhdDatePicker = function(props) {
395
598
  onPanelChange && onPanelChange(value, mode);
396
599
  },
397
600
  onOpenChange: function(value) {
601
+ setPanelOpenChange(value);
398
602
  if (value) {
399
603
  setDefaultMode();
400
604
  }
401
605
  if (showTime) {
402
606
  setPanelOpen(value);
403
607
  }
404
- setRangeOpenChange(value);
405
608
  onOpenChange && onOpenChange(value);
406
609
  },
407
610
  onClick: function(e) {
408
611
  setPanelOpen(true);
612
+ selectRange.current = [];
409
613
  onClick && onClick(e);
410
614
  },
615
+ onChange: function(dates, dateStrings) {
616
+ // 清空的时候
617
+ if (dates === null) {
618
+ setSelectedRangeDate(function(prevState) {
619
+ selectedRangeDateRef.current = [
620
+ null,
621
+ null
622
+ ];
623
+ return selectedRangeDateRef.current;
624
+ });
625
+ setSelectedRangeDateString(function(prevState) {
626
+ selectedRangeDateStringRef.current = [
627
+ "",
628
+ ""
629
+ ];
630
+ return selectedRangeDateStringRef.current;
631
+ });
632
+ setPanelOpen(false);
633
+ onChange && onChange([
634
+ null,
635
+ null
636
+ ], [
637
+ "",
638
+ ""
639
+ ]);
640
+ }
641
+ },
411
642
  onCalendarChange: function(dates, dateStrings, info) {
412
- setSelectedRangeDate(dates);
413
- setSelectedRangeDateString(dateStrings);
414
- onCalendarChange && onCalendarChange(dates, dateStrings, info);
643
+ var _dates, _dates1;
644
+ setSelectedRangeDate(function(prevState) {
645
+ selectedRangeDateRef.current = dates;
646
+ return selectedRangeDateRef.current;
647
+ });
648
+ setSelectedRangeDateString(function(prevState) {
649
+ selectedRangeDateStringRef.current = dateStrings;
650
+ return selectedRangeDateStringRef.current;
651
+ });
652
+ if (!selectRange.current.includes(info.range)) {
653
+ selectRange.current.push(info.range);
654
+ }
655
+ if (((_dates = dates) === null || _dates === void 0 ? void 0 : _dates[0]) && ((_dates1 = dates) === null || _dates1 === void 0 ? void 0 : _dates1[1])) {
656
+ //不用确认自动提交
657
+ if (!needConfirm) {
658
+ if (selectRange.current.includes("start") && selectRange.current.includes("end")) {
659
+ isChange.current = true;
660
+ setTimeout(function() {
661
+ okClick();
662
+ }, 0);
663
+ }
664
+ } else {
665
+ isChange.current = true;
666
+ }
667
+ }
415
668
  },
416
669
  onBlur: function(e) {
417
- var _selectedRangeDate, _selectedRangeDate1, _selectedRangeDate2, _selectedRangeDate3;
418
- if (((_selectedRangeDate = selectedRangeDate) === null || _selectedRangeDate === void 0 ? void 0 : _selectedRangeDate[0]) && ((_selectedRangeDate1 = selectedRangeDate) === null || _selectedRangeDate1 === void 0 ? void 0 : _selectedRangeDate1[1])) {
419
- okClick();
420
- setPanelOpen(false);
421
- } else if (!((_selectedRangeDate2 = selectedRangeDate) === null || _selectedRangeDate2 === void 0 ? void 0 : _selectedRangeDate2[0]) || !((_selectedRangeDate3 = selectedRangeDate) === null || _selectedRangeDate3 === void 0 ? void 0 : _selectedRangeDate3[1])) {
422
- setPanelOpen(rangeOpenChange);
670
+ console.log(panelOpenChange);
671
+ if (needConfirm) {
672
+ var _selectedRangeDateRef_current, _selectedRangeDateRef_current1, _selectedRangeDateRef_current2, _selectedRangeDateRef_current3;
673
+ 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])) {
674
+ if (needConfirm && !panelOpenChange && isChange.current) {
675
+ okClick();
676
+ } else {
677
+ setPanelOpen(panelOpenChange);
678
+ }
679
+ if (!isChange.current) {
680
+ setPanelOpen(false);
681
+ }
682
+ } 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])) {
683
+ setPanelOpen(panelOpenChange);
684
+ }
685
+ } else {
686
+ setPanelOpen(panelOpenChange);
423
687
  }
424
688
  onBlur && onBlur(e);
425
689
  }
@@ -427,5 +691,5 @@ var BhdDatePicker = function(props) {
427
691
  })
428
692
  ]
429
693
  });
430
- };
694
+ });
431
695
  export default BhdDatePicker;