UNPKG

10.2 kBJavaScriptView Raw
1"use strict";
2
3var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
5var _typeof = require("@babel/runtime/helpers/typeof");
6
7Object.defineProperty(exports, "__esModule", {
8 value: true
9});
10exports["default"] = void 0;
11
12var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
13
14var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
15
16var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
17
18var React = _interopRequireWildcard(require("react"));
19
20var _useMergedState5 = _interopRequireDefault(require("rc-util/lib/hooks/useMergedState"));
21
22var _classnames = _interopRequireDefault(require("classnames"));
23
24var _padStart = _interopRequireDefault(require("lodash/padStart"));
25
26var _rcPicker = require("rc-picker");
27
28var _LocaleReceiver = _interopRequireDefault(require("../locale-provider/LocaleReceiver"));
29
30var _en_US = _interopRequireDefault(require("./locale/en_US"));
31
32var _configProvider = require("../config-provider");
33
34var _Header = _interopRequireDefault(require("./Header"));
35
36function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
37
38function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
39
40function generateCalendar(generateConfig) {
41 function isSameYear(date1, date2) {
42 return date1 && date2 && generateConfig.getYear(date1) === generateConfig.getYear(date2);
43 }
44
45 function isSameMonth(date1, date2) {
46 return isSameYear(date1, date2) && generateConfig.getMonth(date1) === generateConfig.getMonth(date2);
47 }
48
49 function isSameDate(date1, date2) {
50 return isSameMonth(date1, date2) && generateConfig.getDate(date1) === generateConfig.getDate(date2);
51 }
52
53 var Calendar = function Calendar(props) {
54 var customizePrefixCls = props.prefixCls,
55 className = props.className,
56 style = props.style,
57 dateFullCellRender = props.dateFullCellRender,
58 dateCellRender = props.dateCellRender,
59 monthFullCellRender = props.monthFullCellRender,
60 monthCellRender = props.monthCellRender,
61 headerRender = props.headerRender,
62 value = props.value,
63 defaultValue = props.defaultValue,
64 disabledDate = props.disabledDate,
65 mode = props.mode,
66 validRange = props.validRange,
67 _props$fullscreen = props.fullscreen,
68 fullscreen = _props$fullscreen === void 0 ? true : _props$fullscreen,
69 onChange = props.onChange,
70 onPanelChange = props.onPanelChange,
71 onSelect = props.onSelect;
72
73 var _React$useContext = React.useContext(_configProvider.ConfigContext),
74 getPrefixCls = _React$useContext.getPrefixCls,
75 direction = _React$useContext.direction;
76
77 var prefixCls = getPrefixCls('picker', customizePrefixCls);
78 var calendarPrefixCls = "".concat(prefixCls, "-calendar");
79 var today = generateConfig.getNow(); // ====================== State =======================
80 // Value
81
82 var _useMergedState = (0, _useMergedState5["default"])(function () {
83 return value || generateConfig.getNow();
84 }, {
85 defaultValue: defaultValue,
86 value: value
87 }),
88 _useMergedState2 = (0, _slicedToArray2["default"])(_useMergedState, 2),
89 mergedValue = _useMergedState2[0],
90 setMergedValue = _useMergedState2[1]; // Mode
91
92
93 var _useMergedState3 = (0, _useMergedState5["default"])('month', {
94 value: mode
95 }),
96 _useMergedState4 = (0, _slicedToArray2["default"])(_useMergedState3, 2),
97 mergedMode = _useMergedState4[0],
98 setMergedMode = _useMergedState4[1];
99
100 var panelMode = React.useMemo(function () {
101 return mergedMode === 'year' ? 'month' : 'date';
102 }, [mergedMode]); // Disabled Date
103
104 var mergedDisabledDate = React.useCallback(function (date) {
105 var notInRange = validRange ? generateConfig.isAfter(validRange[0], date) || generateConfig.isAfter(date, validRange[1]) : false;
106 return notInRange || !!(disabledDate === null || disabledDate === void 0 ? void 0 : disabledDate(date));
107 }, [disabledDate, validRange]); // ====================== Events ======================
108
109 var triggerPanelChange = function triggerPanelChange(date, newMode) {
110 onPanelChange === null || onPanelChange === void 0 ? void 0 : onPanelChange(date, newMode);
111 };
112
113 var triggerChange = function triggerChange(date) {
114 setMergedValue(date);
115
116 if (!isSameDate(date, mergedValue)) {
117 // Trigger when month panel switch month
118 if (panelMode === 'date' && !isSameMonth(date, mergedValue) || panelMode === 'month' && !isSameYear(date, mergedValue)) {
119 triggerPanelChange(date, mergedMode);
120 }
121
122 onChange === null || onChange === void 0 ? void 0 : onChange(date);
123 }
124 };
125
126 var triggerModeChange = function triggerModeChange(newMode) {
127 setMergedMode(newMode);
128 triggerPanelChange(mergedValue, newMode);
129 };
130
131 var onInternalSelect = function onInternalSelect(date) {
132 triggerChange(date);
133 onSelect === null || onSelect === void 0 ? void 0 : onSelect(date);
134 }; // ====================== Locale ======================
135
136
137 var getDefaultLocale = function getDefaultLocale() {
138 var locale = props.locale;
139 var result = (0, _extends2["default"])((0, _extends2["default"])({}, _en_US["default"]), locale);
140 result.lang = (0, _extends2["default"])((0, _extends2["default"])({}, result.lang), (locale || {}).lang);
141 return result;
142 }; // ====================== Render ======================
143
144
145 var dateRender = React.useCallback(function (date) {
146 if (dateFullCellRender) {
147 return dateFullCellRender(date);
148 }
149
150 return /*#__PURE__*/React.createElement("div", {
151 className: (0, _classnames["default"])("".concat(prefixCls, "-cell-inner"), "".concat(calendarPrefixCls, "-date"), (0, _defineProperty2["default"])({}, "".concat(calendarPrefixCls, "-date-today"), isSameDate(today, date)))
152 }, /*#__PURE__*/React.createElement("div", {
153 className: "".concat(calendarPrefixCls, "-date-value")
154 }, (0, _padStart["default"])(String(generateConfig.getDate(date)), 2, '0')), /*#__PURE__*/React.createElement("div", {
155 className: "".concat(calendarPrefixCls, "-date-content")
156 }, dateCellRender && dateCellRender(date)));
157 }, [dateFullCellRender, dateCellRender]);
158 var monthRender = React.useCallback(function (date, locale) {
159 if (monthFullCellRender) {
160 return monthFullCellRender(date);
161 }
162
163 var months = locale.shortMonths || generateConfig.locale.getShortMonths(locale.locale);
164 return /*#__PURE__*/React.createElement("div", {
165 className: (0, _classnames["default"])("".concat(prefixCls, "-cell-inner"), "".concat(calendarPrefixCls, "-date"), (0, _defineProperty2["default"])({}, "".concat(calendarPrefixCls, "-date-today"), isSameMonth(today, date)))
166 }, /*#__PURE__*/React.createElement("div", {
167 className: "".concat(calendarPrefixCls, "-date-value")
168 }, months[generateConfig.getMonth(date)]), /*#__PURE__*/React.createElement("div", {
169 className: "".concat(calendarPrefixCls, "-date-content")
170 }, monthCellRender && monthCellRender(date)));
171 }, [monthFullCellRender, monthCellRender]);
172 return /*#__PURE__*/React.createElement(_LocaleReceiver["default"], {
173 componentName: "Calendar",
174 defaultLocale: getDefaultLocale
175 }, function (mergedLocale) {
176 var _classNames3;
177
178 return /*#__PURE__*/React.createElement("div", {
179 className: (0, _classnames["default"])(calendarPrefixCls, (_classNames3 = {}, (0, _defineProperty2["default"])(_classNames3, "".concat(calendarPrefixCls, "-full"), fullscreen), (0, _defineProperty2["default"])(_classNames3, "".concat(calendarPrefixCls, "-mini"), !fullscreen), (0, _defineProperty2["default"])(_classNames3, "".concat(calendarPrefixCls, "-rtl"), direction === 'rtl'), _classNames3), className),
180 style: style
181 }, headerRender ? headerRender({
182 value: mergedValue,
183 type: mergedMode,
184 onChange: onInternalSelect,
185 onTypeChange: triggerModeChange
186 }) : /*#__PURE__*/React.createElement(_Header["default"], {
187 prefixCls: calendarPrefixCls,
188 value: mergedValue,
189 generateConfig: generateConfig,
190 mode: mergedMode,
191 fullscreen: fullscreen,
192 locale: mergedLocale.lang,
193 validRange: validRange,
194 onChange: onInternalSelect,
195 onModeChange: triggerModeChange
196 }), /*#__PURE__*/React.createElement(_rcPicker.PickerPanel, {
197 value: mergedValue,
198 prefixCls: prefixCls,
199 locale: mergedLocale.lang,
200 generateConfig: generateConfig,
201 dateRender: dateRender,
202 monthCellRender: function monthCellRender(date) {
203 return monthRender(date, mergedLocale.lang);
204 },
205 onSelect: onInternalSelect,
206 mode: panelMode,
207 picker: panelMode,
208 disabledDate: mergedDisabledDate,
209 hideHeader: true
210 }));
211 });
212 };
213
214 return Calendar;
215}
216
217var _default = generateCalendar;
218exports["default"] = _default;
\No newline at end of file