reactstrap-date-picker
Version:
Reactstrap based, zero dependencies, date picker
168 lines (166 loc) • 7.07 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.DatePicker = void 0;
var _react = _interopRequireWildcard(require("react"));
var _useCheckProps = require("./util/useCheckProps");
var _InputGroup = require("./input/InputGroup");
var _InputOverlay = require("./input/InputOverlay");
var _InputHidden = require("./input/InputHidden");
var _InputClearButton = require("./input/InputClearButton");
var _InputControlInput = require("./input/InputControlInput");
var _useInputValues = require("./input/useInputValues");
var _useInputIds = require("./input/useInputIds");
var _useDayLabels = require("./input/useDayLabels");
var _Calendar = require("./calendar/Calendar");
var _useCalendarProps = require("./calendar/useCalendarProps");
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); }
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
var _defaultDateFormat = () => {
var language = typeof window !== 'undefined' && window.navigator ? (window.navigator.userLanguage || window.navigator.language || '').toLowerCase() : '';
var dateFormat = !language || language === 'en-us' ? 'MM/DD/YYYY' : 'DD/MM/YYYY';
return dateFormat;
};
var DEFAULT_DAY_LABELS = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'];
var DEFAULT_MONTH_LABELS = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'];
var DatePickerBase = (props, ref) => {
var {
// Global props
value,
defaultValue,
id,
name,
dateFormat = _defaultDateFormat(),
minDate,
maxDate,
clearButtonElement = '×',
showClearButton = true,
// Event props
onInvalid,
onChange,
onClear,
onBlur,
onFocus,
// Input Group props
size,
valid,
invalid,
customInputGroup,
// Input props
autoComplete = 'on',
autoFocus = false,
disabled = false,
noValidate = false,
placeholder,
required,
className,
style = undefined /* {
width: '100%'
} */,
inputRef,
customControl,
children,
// Calendar props
// target,
calendarContainer,
dayLabels = DEFAULT_DAY_LABELS,
monthLabels = DEFAULT_MONTH_LABELS,
weekStartsOn,
showWeeks = false,
previousButtonElement = '<',
nextButtonElement = '>',
pickMonthElement = undefined,
showTodayButton = false,
todayButtonLabel = 'Today',
roundedCorners = false,
cellPadding = '5px',
calendarPlacement = 'bottom'
} = props;
var propError = (0, _useCheckProps.useCheckProps)(value, defaultValue);
if (propError != undefined) {
throw new Error(propError);
}
var [hiddenInputRef, overlayContainerRef, popoverRef, controlInputRef, open, placement, handleFocus, handleBlur] = (0, _useCalendarProps.useCalendarProps)(calendarPlacement, inputRef, autoFocus, onBlur, onFocus);
var [innerValue, inputValue, displayDate, selectedDate, handleClear, handleInputChange, handleChangeMonth, handleChangeDate, handleBadInputOnBlur] = (0, _useInputValues.useInputValues)(controlInputRef, value, defaultValue, minDate, maxDate, dateFormat, onClear, onChange);
var [groupInputId, hiddenInputId, controlInputId, overlayId] = (0, _useInputIds.useInputIds)(id, name, customControl);
(0, _react.useImperativeHandle)(ref, () => ({
getValue: () => {
return selectedDate ? selectedDate.toISOString() : null;
},
getFormattedValue: () => {
return displayDate ? inputValue : null;
},
getNode: () => controlInputRef === null || controlInputRef === void 0 ? void 0 : controlInputRef.current
})); //, [controlInputRef, displayDate, inputValue, selectedDate]))
var fixedDayLabels = (0, _useDayLabels.useFixedDayLabels)(dayLabels, weekStartsOn);
var handleChangeDateAndBlur = nSelectedDate => {
handleChangeDate(nSelectedDate);
handleBlur(true);
};
return /*#__PURE__*/_react.default.createElement(_InputGroup.InputGroup, {
customInputGroup: customInputGroup,
size: size,
inputId: groupInputId
}, /*#__PURE__*/_react.default.createElement(_InputControlInput.InputControlInput, {
controlId: controlInputId,
customControl: customControl,
value: inputValue || '',
required: required,
placeholder: placeholder || '',
inputRef: controlInputRef,
disabled: disabled,
className: className,
style: style,
autoFocus: autoFocus,
autoComplete: autoComplete,
onInvalid: onInvalid,
noValidate: noValidate,
valid: valid,
invalid: invalid,
onFocus: () => handleFocus(),
onBlur: event => {
handleBadInputOnBlur();
handleBlur(event);
},
onChange: () => handleInputChange()
}), /*#__PURE__*/_react.default.createElement(_InputOverlay.InputOverlay, {
overlayContainerRef: overlayContainerRef,
oid: overlayId
}, overlayContainerRef.current == undefined ? null : /*#__PURE__*/_react.default.createElement(_Calendar.Calendar, {
popoverRef: popoverRef,
placement: placement,
open: open,
container: calendarContainer || overlayContainerRef,
target: controlInputId,
previousButtonElement: previousButtonElement,
nextButtonElement: nextButtonElement,
pickMonthElement: pickMonthElement,
displayDate: displayDate,
minDate: minDate,
maxDate: maxDate,
onChangeMonth: newDisplayDate => handleChangeMonth(newDisplayDate),
monthLabels: monthLabels,
cellPadding: cellPadding,
selectedDate: selectedDate,
onChange: newSelectedDate => handleChangeDateAndBlur(newSelectedDate),
dayLabels: fixedDayLabels,
weekStartsOn: weekStartsOn,
showTodayButton: showTodayButton,
todayButtonLabel: todayButtonLabel,
roundedCorners: roundedCorners,
showWeeks: showWeeks
})), /*#__PURE__*/_react.default.createElement(_InputHidden.InputHidden, {
inputId: hiddenInputId,
name: name,
value: innerValue || '',
formattedValue: innerValue ? inputValue : '',
hiddenInputRef: hiddenInputRef
}), showClearButton && !customControl ? /*#__PURE__*/_react.default.createElement(_InputClearButton.InputClearButton, {
inputValue: inputValue,
disabled: disabled,
clearButtonElement: clearButtonElement,
onClick: () => handleClear()
}) : null, children);
};
var DatePicker = exports.DatePicker = /*#__PURE__*/(0, _react.forwardRef)(DatePickerBase);