bhd-components 0.9.0 → 0.9.1

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.
@@ -9,7 +9,6 @@ interface BhdDatePickerProps {
9
9
  [key: string]: any;
10
10
  kind: "single" | "range" | "extra";
11
11
  useType?: string;
12
- label?: React.ReactNode;
13
12
  extraItems?: BhdDateExtraPicker[];
14
13
  extraReadonly?: boolean;
15
14
  }
@@ -2,22 +2,68 @@ 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, useRef } from "react";
5
+ import { useState, useEffect, useRef } from "react";
6
6
  import styles from "./index.module.less";
7
7
  import { Button, DatePicker } from "antd";
8
- import { CustomArrow, CalendarOutlined } from "../icons/index";
8
+ import { CustomArrow } from "../icons/index";
9
9
  import dayjs from "dayjs";
10
10
  const { RangePicker } = DatePicker;
11
+ let months = [
12
+ "一",
13
+ "二",
14
+ "三",
15
+ "四",
16
+ "五",
17
+ "六",
18
+ "七",
19
+ "八",
20
+ "九",
21
+ "十",
22
+ "十一",
23
+ "十二"
24
+ ];
11
25
  const BhdDatePicker = (props)=>{
12
- let { kind ="single" , value =props.kind === "range" ? [] : "" , extraItems , extraReadonly =false , picker , useType ="" , label ="" , className , popupClassName , showTime , showNow =true , onClick , onBlur , onChange , onOk , presets =[] } = props;
26
+ let { kind ="single" , value =props.kind === "range" ? [] : "" , extraItems , extraReadonly =false , picker , useType ="" , className , popupClassName , showTime , showNow =true , onClick , onBlur , onChange , onOk , presets =[] } = props;
13
27
  const bhdDatePickerRef = useRef(null);
14
28
  const [open, setOpen] = useState(false);
29
+ const [panelMode, setPanelMode] = useState("date");
30
+ const [rangePanelMode, setRangePanelMode] = useState([
31
+ "date",
32
+ "date"
33
+ ]);
15
34
  const [selectedDate, setSelectedDate] = useState(value);
16
35
  const [selectedDateString, setSelectedDateString] = useState(null);
17
36
  const selectedDateRef = useRef(value);
18
37
  const selectedDateStringRef = useRef(null);
19
38
  const [selectedRangeDate, setSelectedRangeDate] = useState(value);
20
39
  const [selectedRangeDateString, setSelectedRangeDateString] = useState([]);
40
+ const [rangeOpenChange, setRangeOpenChange] = useState(false); // 用于范围选择失去焦点后,判断是否关闭
41
+ const timer = useRef(null);
42
+ useEffect(()=>{
43
+ setDefaultMode();
44
+ }, []);
45
+ useEffect(()=>{
46
+ if (panelMode === "year") {
47
+ timer.current = setTimeout(()=>{
48
+ const doms = document.getElementsByClassName("bhd-picker-decade-btn");
49
+ for(let index = 0; index < doms.length; index++){
50
+ var _doms_index, _doms_index_childNodes;
51
+ const dom = (_doms_index = doms[index]) === null || _doms_index === void 0 ? void 0 : (_doms_index_childNodes = _doms_index.childNodes) === null || _doms_index_childNodes === void 0 ? void 0 : _doms_index_childNodes[1];
52
+ if (dom) {
53
+ if (dom.textContent !== " ㅡ ") {
54
+ dom.textContent = " ㅡ ";
55
+ }
56
+ }
57
+ }
58
+ }, 0);
59
+ }
60
+ return ()=>{
61
+ clearTimeout(timer.current);
62
+ };
63
+ }, [
64
+ open,
65
+ panelMode
66
+ ]);
21
67
  const getConfig = ()=>{
22
68
  let config = _object_spread({}, props);
23
69
  delete config.cellRender;
@@ -36,6 +82,7 @@ const BhdDatePicker = (props)=>{
36
82
  delete config.onOk;
37
83
  delete config.onChange;
38
84
  delete config.presets;
85
+ delete config.mode;
39
86
  if (kind === "single" || kind === "extra") {
40
87
  delete config.value;
41
88
  }
@@ -47,43 +94,57 @@ const BhdDatePicker = (props)=>{
47
94
  }
48
95
  return config;
49
96
  };
97
+ // 设置默认mode
98
+ const setDefaultMode = ()=>{
99
+ if (kind === "range") {
100
+ setRangePanelMode([
101
+ picker || "date",
102
+ picker || "date"
103
+ ]);
104
+ } else {
105
+ setPanelMode(picker || "date");
106
+ }
107
+ };
50
108
  //单元格渲染
51
109
  const cellRender = (current, info)=>{
52
- if (info.type !== "date") {
53
- return info.originNode;
110
+ if (info.type === "date") {
111
+ let extraItem = null;
112
+ if (kind === "extra") {
113
+ extraItem = extraItems === null || extraItems === void 0 ? void 0 : extraItems.find((item)=>item.date.format("YYYYMMDD") === current.format("YYYYMMDD"));
114
+ }
115
+ return /*#__PURE__*/ _jsx(_Fragment, {
116
+ children: /*#__PURE__*/ _jsxs("div", {
117
+ className: `${"bhd-picker-cell-inner"}`,
118
+ children: [
119
+ current.format("DD"),
120
+ kind === "extra" && extraItem && /*#__PURE__*/ _jsx("div", {
121
+ className: `extraText ${extraItem.status}`,
122
+ children: extraItem.text
123
+ })
124
+ ]
125
+ })
126
+ });
54
127
  }
55
- if (typeof current === "number" || typeof current === "string") {
128
+ if (info.type === "month") {
56
129
  return /*#__PURE__*/ _jsx("div", {
57
- className: "bhd-picker-cell-inner",
58
- children: current
130
+ className: `${"bhd-picker-cell-inner"}`,
131
+ children: months[Number(current.format("M")) - 1] + "月"
59
132
  });
60
133
  }
61
- let extraItem = null;
62
- if (kind === "extra") {
63
- extraItem = extraItems === null || extraItems === void 0 ? void 0 : extraItems.find((item)=>item.date.format("YYYYMMDD") === current.format("YYYYMMDD"));
64
- }
65
- return /*#__PURE__*/ _jsx(_Fragment, {
66
- children: /*#__PURE__*/ _jsxs("div", {
67
- className: "bhd-picker-cell-inner",
68
- children: [
69
- current.format("DD"),
70
- kind === "extra" && extraItem && /*#__PURE__*/ _jsx("div", {
71
- className: `extraText ${extraItem.status}`,
72
- children: extraItem.text
73
- })
74
- ]
75
- })
76
- });
134
+ return info.originNode;
77
135
  };
78
136
  //日期禁用
79
137
  const disabledDate = (current)=>{
80
- if (extraReadonly) {
81
- return true;
82
- }
138
+ // if (extraReadonly) {
139
+ // return true;
140
+ // }
83
141
  // 不能选择的是没有日程安排的
84
142
  let extraItem = null;
85
143
  if (kind === "extra") {
86
144
  extraItem = extraItems === null || extraItems === void 0 ? void 0 : extraItems.find((item)=>item.date.format("YYYYMMDD") === current.format("YYYYMMDD"));
145
+ if (extraReadonly && extraItem) {
146
+ return false;
147
+ }
87
148
  }
88
149
  return !extraItem || current && extraItem.status === "noselectable";
89
150
  };
@@ -93,7 +154,7 @@ const BhdDatePicker = (props)=>{
93
154
  className: "bhd-picker-ranges",
94
155
  children: [
95
156
  renderPresets(),
96
- showNow && (kind === "single" || kind === "extra" && extraItems.filter((item)=>item.status !== 'noselectable' && item.date.format("YYYY-MM-DD") === dayjs().format("YYYY-MM-DD")).length > 0) && mode === "date" && /*#__PURE__*/ _jsx("li", {
157
+ showNow && (kind === "single" || kind === "extra" && extraItems.filter((item)=>item.status !== "noselectable" && item.date.format("YYYY-MM-DD") === dayjs().format("YYYY-MM-DD")).length > 0) && mode === "date" && /*#__PURE__*/ _jsx("li", {
97
158
  className: "bhd-picker-now",
98
159
  children: /*#__PURE__*/ _jsx("a", {
99
160
  className: "bhd-picker-now-btn",
@@ -120,23 +181,25 @@ const BhdDatePicker = (props)=>{
120
181
  const renderPresets = ()=>{
121
182
  return /*#__PURE__*/ _jsx("li", {
122
183
  className: "bhd-picker-presets",
123
- children: presets.map((item)=>{
184
+ children: presets.map((item, index)=>{
124
185
  return /*#__PURE__*/ _jsx("a", {
125
186
  className: "bhd-picker-preset-btn",
126
187
  onClick: ()=>{
127
188
  presetClick(item.value);
128
189
  },
129
190
  children: item.label
130
- });
191
+ }, index);
131
192
  })
132
193
  });
133
194
  };
134
195
  // 日期选择确认
135
196
  const okClick = ()=>{
136
197
  if (kind === "range") {
137
- if (selectedRangeDate && selectedRangeDateString) {
198
+ if (selectedRangeDate[0] && selectedRangeDate[1] && selectedRangeDateString[0] && selectedRangeDateString[1]) {
138
199
  onChange && onChange(selectedRangeDate, selectedRangeDateString);
139
200
  setOpen(false);
201
+ } else {
202
+ setOpen(true);
140
203
  }
141
204
  } else {
142
205
  if (selectedDate && selectedDateString) {
@@ -161,148 +224,146 @@ const BhdDatePicker = (props)=>{
161
224
  onChange && onChange(value, todayString);
162
225
  setOpen(false);
163
226
  };
164
- return /*#__PURE__*/ _jsxs("div", {
227
+ return /*#__PURE__*/ _jsxs("span", {
165
228
  className: `${styles.bhdDatePicker}`,
166
229
  ref: bhdDatePickerRef,
167
230
  children: [
168
- kind === "single" && /*#__PURE__*/ _jsxs(_Fragment, {
169
- children: [
170
- useType === "table" && /*#__PURE__*/ _jsxs("span", {
171
- className: styles.pickerLabel,
172
- onClick: ()=>{
173
- setOpen(true);
174
- },
175
- children: [
176
- label,
177
- /*#__PURE__*/ _jsx(CalendarOutlined, {})
178
- ]
231
+ kind === "single" && /*#__PURE__*/ _jsx(_Fragment, {
232
+ children: /*#__PURE__*/ _jsx(DatePicker, _object_spread_props(_object_spread({}, getConfig()), {
233
+ id: "pickerRef",
234
+ className: `${className} ${useType === "table" ? "table-date-picker" : ""}`,
235
+ popupClassName: `${styles.bhdDatePickerPopup} ${styles.singlePicker} ${popupClassName || ""}`,
236
+ cellRender: cellRender,
237
+ prevIcon: /*#__PURE__*/ _jsx(CustomArrow, {
238
+ style: {
239
+ transform: "rotate(90deg)"
240
+ }
179
241
  }),
180
- /*#__PURE__*/ _jsx(DatePicker, _object_spread_props(_object_spread({}, getConfig()), {
181
- className: `${className} ${useType === "table" ? "hide" : ""}`,
182
- popupClassName: `${styles.bhdDatePickerPopup} ${styles.singlePicker} ${popupClassName || ""}`,
183
- cellRender: cellRender,
184
- prevIcon: /*#__PURE__*/ _jsx(CustomArrow, {
185
- style: {
186
- transform: "rotate(90deg)"
187
- }
188
- }),
189
- nextIcon: /*#__PURE__*/ _jsx(CustomArrow, {
190
- style: {
191
- transform: "rotate(-90deg)"
192
- }
193
- }),
194
- superPrevIcon: /*#__PURE__*/ _jsx(CustomArrow, {
195
- style: {
196
- transform: "rotate(90deg)"
197
- }
198
- }),
199
- superNextIcon: /*#__PURE__*/ _jsx(CustomArrow, {
200
- style: {
201
- transform: "rotate(-90deg)"
202
- }
203
- }),
204
- open: open,
205
- showNow: showTime ? showNow : false,
206
- value: selectedDate,
207
- onChange: (date, dateString)=>{
208
- setSelectedDate((prevState)=>{
209
- selectedDateRef.current = date;
210
- return selectedDateRef.current;
211
- });
212
- setSelectedDateString((prevState)=>{
213
- selectedDateStringRef.current = dateString;
214
- return selectedDateStringRef.current;
215
- });
216
- console.log({
217
- selectedDate: selectedDateRef.current,
218
- selectedDateString: selectedDateStringRef.current
219
- });
220
- },
221
- onOk: ()=>{
222
- if (showTime) {
223
- setTimeout(()=>{
224
- console.log({
225
- selectedDate: selectedDateRef.current,
226
- selectedDateString: selectedDateStringRef.current
227
- });
228
- onChange && onChange(selectedDateRef.current, selectedDateStringRef.current);
229
- setOpen(false);
230
- }, 0);
231
- }
232
- onOk && onOk();
233
- },
234
- onClick: ()=>{
235
- setOpen(true);
236
- onClick && onClick();
237
- },
238
- onBlur: ()=>{
239
- okClick();
240
- setOpen(false);
241
- onBlur && onBlur();
242
- },
243
- renderExtraFooter: renderExtraFooter
244
- }))
245
- ]
246
- }),
247
- kind === "range" && /*#__PURE__*/ _jsxs(_Fragment, {
248
- children: [
249
- useType === "table" && /*#__PURE__*/ _jsxs("span", {
250
- className: styles.pickerLabel,
251
- onClick: ()=>{
252
- setOpen(true);
253
- },
254
- children: [
255
- label,
256
- /*#__PURE__*/ _jsx(CalendarOutlined, {})
257
- ]
242
+ nextIcon: /*#__PURE__*/ _jsx(CustomArrow, {
243
+ style: {
244
+ transform: "rotate(-90deg)"
245
+ }
258
246
  }),
259
- /*#__PURE__*/ _jsx(RangePicker, _object_spread_props(_object_spread({}, getConfig()), {
260
- className: `${className} ${useType === "table" ? "hide" : ""}`,
261
- popupClassName: `${styles.bhdDatePickerPopup} ${styles.rangePicker} ${popupClassName || ""}`,
262
- cellRender: cellRender,
263
- prevIcon: /*#__PURE__*/ _jsx(CustomArrow, {
264
- style: {
265
- transform: "rotate(90deg)"
266
- }
267
- }),
268
- nextIcon: /*#__PURE__*/ _jsx(CustomArrow, {
269
- style: {
270
- transform: "rotate(-90deg)"
271
- }
272
- }),
273
- superPrevIcon: /*#__PURE__*/ _jsx(CustomArrow, {
274
- style: {
275
- transform: "rotate(90deg)"
276
- }
277
- }),
278
- superNextIcon: /*#__PURE__*/ _jsx(CustomArrow, {
279
- style: {
280
- transform: "rotate(-90deg)"
281
- }
282
- }),
283
- open: open,
284
- showNow: false,
285
- value: selectedRangeDate,
286
- onClick: ()=>{
287
- setOpen(true);
288
- onClick && onClick();
289
- },
290
- onCalendarChange: (dates, dateStrings, info)=>{
291
- setSelectedRangeDate(dates);
292
- setSelectedRangeDateString(dateStrings);
293
- },
294
- onBlur: ()=>{
295
- if ((selectedRangeDate === null || selectedRangeDate === void 0 ? void 0 : selectedRangeDate[0]) && (selectedRangeDate === null || selectedRangeDate === void 0 ? void 0 : selectedRangeDate[1])) {
296
- okClick();
297
- setOpen(false);
298
- } else if (!(selectedRangeDate === null || selectedRangeDate === void 0 ? void 0 : selectedRangeDate[0]) && !(selectedRangeDate === null || selectedRangeDate === void 0 ? void 0 : selectedRangeDate[1])) {
247
+ superPrevIcon: /*#__PURE__*/ _jsx(CustomArrow, {
248
+ style: {
249
+ transform: "rotate(90deg)"
250
+ }
251
+ }),
252
+ superNextIcon: /*#__PURE__*/ _jsx(CustomArrow, {
253
+ style: {
254
+ transform: "rotate(-90deg)"
255
+ }
256
+ }),
257
+ onPanelChange: (value, mode)=>{
258
+ setPanelMode(mode);
259
+ },
260
+ mode: panelMode,
261
+ open: open,
262
+ onOpenChange: (value)=>{
263
+ // 打开设置默认mode
264
+ if (value) {
265
+ setDefaultMode();
266
+ }
267
+ },
268
+ showNow: showTime ? showNow : false,
269
+ defaultPickerValue: selectedDate,
270
+ value: selectedDate,
271
+ onChange: (date, dateString)=>{
272
+ setSelectedDate((prevState)=>{
273
+ selectedDateRef.current = date;
274
+ return selectedDateRef.current;
275
+ });
276
+ setSelectedDateString((prevState)=>{
277
+ selectedDateStringRef.current = dateString;
278
+ return selectedDateStringRef.current;
279
+ });
280
+ },
281
+ onOk: ()=>{
282
+ if (showTime) {
283
+ setTimeout(()=>{
284
+ console.log({
285
+ selectedDate: selectedDateRef.current,
286
+ selectedDateString: selectedDateStringRef.current
287
+ });
288
+ onChange && onChange(selectedDateRef.current, selectedDateStringRef.current);
299
289
  setOpen(false);
300
- }
301
- onBlur && onBlur();
302
- },
303
- renderExtraFooter: renderExtraFooter
304
- }))
305
- ]
290
+ }, 0);
291
+ }
292
+ onOk && onOk();
293
+ },
294
+ onClick: ()=>{
295
+ setOpen(true);
296
+ onClick && onClick();
297
+ },
298
+ onBlur: ()=>{
299
+ okClick();
300
+ setOpen(false);
301
+ onBlur && onBlur();
302
+ },
303
+ renderExtraFooter: renderExtraFooter
304
+ }))
305
+ }),
306
+ kind === "range" && /*#__PURE__*/ _jsx(_Fragment, {
307
+ children: /*#__PURE__*/ _jsx(RangePicker, _object_spread_props(_object_spread({}, getConfig()), {
308
+ className: `${className} ${useType === "table" ? "table-date-picker" : ""}`,
309
+ popupClassName: `${styles.bhdDatePickerPopup} ${styles.rangePicker} ${popupClassName || ""}`,
310
+ cellRender: cellRender,
311
+ prevIcon: /*#__PURE__*/ _jsx(CustomArrow, {
312
+ style: {
313
+ transform: "rotate(90deg)"
314
+ }
315
+ }),
316
+ nextIcon: /*#__PURE__*/ _jsx(CustomArrow, {
317
+ style: {
318
+ transform: "rotate(-90deg)"
319
+ }
320
+ }),
321
+ superPrevIcon: /*#__PURE__*/ _jsx(CustomArrow, {
322
+ style: {
323
+ transform: "rotate(90deg)"
324
+ }
325
+ }),
326
+ superNextIcon: /*#__PURE__*/ _jsx(CustomArrow, {
327
+ style: {
328
+ transform: "rotate(-90deg)"
329
+ }
330
+ }),
331
+ onPanelChange: (value, mode)=>{
332
+ setRangePanelMode(mode);
333
+ },
334
+ mode: rangePanelMode,
335
+ open: open,
336
+ onOpenChange: (value)=>{
337
+ if (value) {
338
+ setDefaultMode();
339
+ }
340
+ setRangeOpenChange(value);
341
+ },
342
+ showNow: false,
343
+ defaultPickerValue: selectedRangeDate,
344
+ value: selectedRangeDate,
345
+ onClick: ()=>{
346
+ setOpen(true);
347
+ onClick && onClick();
348
+ },
349
+ onCalendarChange: (dates, dateStrings, info)=>{
350
+ setSelectedRangeDate(dates);
351
+ setSelectedRangeDateString(dateStrings);
352
+ },
353
+ onBlur: ()=>{
354
+ if ((selectedRangeDate === null || selectedRangeDate === void 0 ? void 0 : selectedRangeDate[0]) && (selectedRangeDate === null || selectedRangeDate === void 0 ? void 0 : selectedRangeDate[1])) {
355
+ okClick();
356
+ setOpen(false);
357
+ } else if (!(selectedRangeDate === null || selectedRangeDate === void 0 ? void 0 : selectedRangeDate[0]) || !(selectedRangeDate === null || selectedRangeDate === void 0 ? void 0 : selectedRangeDate[1])) {
358
+ setOpen(rangeOpenChange);
359
+ }
360
+ onBlur && onBlur();
361
+ },
362
+ panelRender: (panelNode)=>{
363
+ return panelNode;
364
+ },
365
+ renderExtraFooter: renderExtraFooter
366
+ }))
306
367
  }),
307
368
  kind === "extra" && /*#__PURE__*/ _jsx(DatePicker, _object_spread_props(_object_spread({}, getConfig()), {
308
369
  className: `${className} ${useType === "table" ? "hide" : ""}`,
@@ -330,8 +391,18 @@ const BhdDatePicker = (props)=>{
330
391
  }),
331
392
  disabledDate: disabledDate,
332
393
  allowClear: !extraReadonly,
394
+ onPanelChange: (value, mode)=>{
395
+ setPanelMode(mode);
396
+ },
397
+ mode: panelMode,
398
+ onOpenChange: (value)=>{
399
+ if (value) {
400
+ setDefaultMode();
401
+ }
402
+ },
333
403
  open: open,
334
404
  showNow: false,
405
+ defaultPickerValue: selectedDate,
335
406
  value: selectedDate,
336
407
  onChange: (date, dateString)=>{
337
408
  setSelectedDate(date);
@@ -348,10 +419,6 @@ const BhdDatePicker = (props)=>{
348
419
  setOpen(false);
349
420
  onBlur && onBlur();
350
421
  },
351
- panelRender: (panelNode)=>{
352
- console.log(panelNode);
353
- return panelNode;
354
- },
355
422
  renderExtraFooter: extraReadonly ? null : renderExtraFooter
356
423
  }))
357
424
  ]