bhd-components 0.8.0 → 0.9.0

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.
@@ -0,0 +1,17 @@
1
+ import * as React from "react";
2
+ import type { Dayjs } from "dayjs";
3
+ export interface BhdDateExtraPicker {
4
+ date: Dayjs;
5
+ text: string;
6
+ status: "selectable" | "noselectable" | "selected";
7
+ }
8
+ interface BhdDatePickerProps {
9
+ [key: string]: any;
10
+ kind: "single" | "range" | "extra";
11
+ useType?: string;
12
+ label?: React.ReactNode;
13
+ extraItems?: BhdDateExtraPicker[];
14
+ extraReadonly?: boolean;
15
+ }
16
+ declare const BhdDatePicker: (props: BhdDatePickerProps) => React.JSX.Element;
17
+ export default BhdDatePicker;
@@ -0,0 +1,360 @@
1
+ import { _ as _object_spread } from "@swc/helpers/_/_object_spread";
2
+ import { _ as _object_spread_props } from "@swc/helpers/_/_object_spread_props";
3
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "@ice/jsx-runtime/jsx-runtime";
4
+ import * as React from "react";
5
+ import { useState, useRef } from "react";
6
+ import styles from "./index.module.less";
7
+ import { Button, DatePicker } from "antd";
8
+ import { CustomArrow, CalendarOutlined } from "../icons/index";
9
+ import dayjs from "dayjs";
10
+ const { RangePicker } = DatePicker;
11
+ 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;
13
+ const bhdDatePickerRef = useRef(null);
14
+ const [open, setOpen] = useState(false);
15
+ const [selectedDate, setSelectedDate] = useState(value);
16
+ const [selectedDateString, setSelectedDateString] = useState(null);
17
+ const selectedDateRef = useRef(value);
18
+ const selectedDateStringRef = useRef(null);
19
+ const [selectedRangeDate, setSelectedRangeDate] = useState(value);
20
+ const [selectedRangeDateString, setSelectedRangeDateString] = useState([]);
21
+ const getConfig = ()=>{
22
+ let config = _object_spread({}, props);
23
+ delete config.cellRender;
24
+ delete config.className;
25
+ delete config.prevIcon;
26
+ delete config.nextIcon;
27
+ delete config.superPrevIcon;
28
+ delete config.superNextIcon;
29
+ delete config.open;
30
+ delete config.onOpenChange;
31
+ delete config.renderExtraFooter;
32
+ delete config.useType;
33
+ delete config.showNow;
34
+ delete config.onClick;
35
+ delete config.onBlur;
36
+ delete config.onOk;
37
+ delete config.onChange;
38
+ delete config.presets;
39
+ if (kind === "single" || kind === "extra") {
40
+ delete config.value;
41
+ }
42
+ if (kind === "extra" && picker !== "date") {
43
+ delete config.extraItems;
44
+ }
45
+ if (kind === "extra") {
46
+ delete config.disabledDate;
47
+ }
48
+ return config;
49
+ };
50
+ //单元格渲染
51
+ const cellRender = (current, info)=>{
52
+ if (info.type !== "date") {
53
+ return info.originNode;
54
+ }
55
+ if (typeof current === "number" || typeof current === "string") {
56
+ return /*#__PURE__*/ _jsx("div", {
57
+ className: "bhd-picker-cell-inner",
58
+ children: current
59
+ });
60
+ }
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
+ });
77
+ };
78
+ //日期禁用
79
+ const disabledDate = (current)=>{
80
+ if (extraReadonly) {
81
+ return true;
82
+ }
83
+ // 不能选择的是没有日程安排的
84
+ let extraItem = null;
85
+ if (kind === "extra") {
86
+ extraItem = extraItems === null || extraItems === void 0 ? void 0 : extraItems.find((item)=>item.date.format("YYYYMMDD") === current.format("YYYYMMDD"));
87
+ }
88
+ return !extraItem || current && extraItem.status === "noselectable";
89
+ };
90
+ // 渲染底部扩展内容
91
+ const renderExtraFooter = (mode)=>{
92
+ return !showTime ? /*#__PURE__*/ _jsxs("ul", {
93
+ className: "bhd-picker-ranges",
94
+ children: [
95
+ 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", {
97
+ className: "bhd-picker-now",
98
+ children: /*#__PURE__*/ _jsx("a", {
99
+ className: "bhd-picker-now-btn",
100
+ onClick: todayClick,
101
+ children: showTime ? "此刻" : "今天"
102
+ })
103
+ }),
104
+ /*#__PURE__*/ _jsx("li", {
105
+ className: "bhd-picker-ok",
106
+ children: /*#__PURE__*/ _jsx(Button, {
107
+ type: "primary",
108
+ disabled: kind === "range" ? !((selectedRangeDate === null || selectedRangeDate === void 0 ? void 0 : selectedRangeDate[0]) && (selectedRangeDate === null || selectedRangeDate === void 0 ? void 0 : selectedRangeDate[1])) : !(selectedDate && selectedDateString),
109
+ onClick: okClick,
110
+ children: "确定"
111
+ })
112
+ })
113
+ ]
114
+ }) : /*#__PURE__*/ _jsx("ul", {
115
+ className: "bhd-picker-ranges",
116
+ children: renderPresets()
117
+ });
118
+ };
119
+ // 渲染预设
120
+ const renderPresets = ()=>{
121
+ return /*#__PURE__*/ _jsx("li", {
122
+ className: "bhd-picker-presets",
123
+ children: presets.map((item)=>{
124
+ return /*#__PURE__*/ _jsx("a", {
125
+ className: "bhd-picker-preset-btn",
126
+ onClick: ()=>{
127
+ presetClick(item.value);
128
+ },
129
+ children: item.label
130
+ });
131
+ })
132
+ });
133
+ };
134
+ // 日期选择确认
135
+ const okClick = ()=>{
136
+ if (kind === "range") {
137
+ if (selectedRangeDate && selectedRangeDateString) {
138
+ onChange && onChange(selectedRangeDate, selectedRangeDateString);
139
+ setOpen(false);
140
+ }
141
+ } else {
142
+ if (selectedDate && selectedDateString) {
143
+ onChange && onChange(selectedDate, selectedDateString);
144
+ setOpen(false);
145
+ }
146
+ }
147
+ };
148
+ const todayClick = ()=>{
149
+ var today = dayjs();
150
+ var todayString = today.format(showTime ? "YYYY-MM-DD hh:mm:ss" : "YYYY-MM-DD");
151
+ setSelectedDate(today);
152
+ setSelectedDateString(todayString);
153
+ onChange && onChange(today, todayString);
154
+ setOpen(false);
155
+ };
156
+ //预设点击
157
+ const presetClick = (value)=>{
158
+ var todayString = value.format(showTime ? "YYYY-MM-DD hh:mm:ss" : "YYYY-MM-DD");
159
+ setSelectedDate(value);
160
+ setSelectedDateString(todayString);
161
+ onChange && onChange(value, todayString);
162
+ setOpen(false);
163
+ };
164
+ return /*#__PURE__*/ _jsxs("div", {
165
+ className: `${styles.bhdDatePicker}`,
166
+ ref: bhdDatePickerRef,
167
+ 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
+ ]
179
+ }),
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
+ ]
258
+ }),
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])) {
299
+ setOpen(false);
300
+ }
301
+ onBlur && onBlur();
302
+ },
303
+ renderExtraFooter: renderExtraFooter
304
+ }))
305
+ ]
306
+ }),
307
+ kind === "extra" && /*#__PURE__*/ _jsx(DatePicker, _object_spread_props(_object_spread({}, getConfig()), {
308
+ className: `${className} ${useType === "table" ? "hide" : ""}`,
309
+ popupClassName: `${styles.bhdDatePickerPopup} ${styles.extraPicker} ${extraReadonly ? styles.readonly : ""} ${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
+ disabledDate: disabledDate,
332
+ allowClear: !extraReadonly,
333
+ open: open,
334
+ showNow: false,
335
+ value: selectedDate,
336
+ onChange: (date, dateString)=>{
337
+ setSelectedDate(date);
338
+ setSelectedDateString(dateString);
339
+ },
340
+ onClick: ()=>{
341
+ setOpen(true);
342
+ onClick && onClick();
343
+ },
344
+ onBlur: ()=>{
345
+ if (!extraReadonly) {
346
+ okClick();
347
+ }
348
+ setOpen(false);
349
+ onBlur && onBlur();
350
+ },
351
+ panelRender: (panelNode)=>{
352
+ console.log(panelNode);
353
+ return panelNode;
354
+ },
355
+ renderExtraFooter: extraReadonly ? null : renderExtraFooter
356
+ }))
357
+ ]
358
+ });
359
+ };
360
+ export default BhdDatePicker;