react-semantic-ui-datepickers
Version:
Datepickers built with Semantic UI for React and Dayzed
1,105 lines (945 loc) • 31.8 kB
JavaScript
;
Object.defineProperty(exports, '__esModule', { value: true });
function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; }
var isValid = _interopDefault(require('date-fns/is_valid'));
var formatStringByPattern = _interopDefault(require('format-string-by-pattern'));
var React = require('react');
var React__default = _interopDefault(React);
var isEqual = _interopDefault(require('react-fast-compare'));
var format = _interopDefault(require('date-fns/format'));
var isBefore = _interopDefault(require('date-fns/is_before'));
var startOfDay = _interopDefault(require('date-fns/start_of_day'));
var parse = _interopDefault(require('date-fns/parse'));
var Dayzed = _interopDefault(require('dayzed'));
var compareAsc = _interopDefault(require('date-fns/compare_asc'));
var isSameDay = _interopDefault(require('date-fns/is_same_day'));
var cn = _interopDefault(require('classnames'));
var semanticUiReact = require('semantic-ui-react');
function _defineProperties(target, props) {
for (var i = 0; i < props.length; i++) {
var descriptor = props[i];
descriptor.enumerable = descriptor.enumerable || false;
descriptor.configurable = true;
if ("value" in descriptor) descriptor.writable = true;
Object.defineProperty(target, descriptor.key, descriptor);
}
}
function _createClass(Constructor, protoProps, staticProps) {
if (protoProps) _defineProperties(Constructor.prototype, protoProps);
if (staticProps) _defineProperties(Constructor, staticProps);
return Constructor;
}
function _extends() {
_extends = Object.assign || function (target) {
for (var i = 1; i < arguments.length; i++) {
var source = arguments[i];
for (var key in source) {
if (Object.prototype.hasOwnProperty.call(source, key)) {
target[key] = source[key];
}
}
}
return target;
};
return _extends.apply(this, arguments);
}
function _inheritsLoose(subClass, superClass) {
subClass.prototype = Object.create(superClass.prototype);
subClass.prototype.constructor = subClass;
subClass.__proto__ = superClass;
}
function _objectWithoutPropertiesLoose(source, excluded) {
if (source == null) return {};
var target = {};
var sourceKeys = Object.keys(source);
var key, i;
for (i = 0; i < sourceKeys.length; i++) {
key = sourceKeys[i];
if (excluded.indexOf(key) >= 0) continue;
target[key] = source[key];
}
return target;
}
var dateFnsV2 = {
parse: parse
};
var isSelectable = function isSelectable(date, minDate, maxDate) {
if (minDate && isBefore(date, minDate) || maxDate && isBefore(maxDate, date)) {
return false;
}
return true;
};
var getToday = function getToday(minDate, maxDate) {
var today = new Date();
return {
date: startOfDay(today),
selectable: isSelectable(today, minDate, maxDate),
selected: false,
today: true
};
};
var formatDate = function formatDate(date, dateFormat) {
return date ? format(startOfDay(date), dateFormat) : undefined;
};
var omit = function omit(keysToOmit, obj) {
var newObj = _extends({}, obj);
keysToOmit.forEach(function (key) {
return delete newObj[key];
});
return newObj;
};
var pick = function pick(keysToPick, obj) {
var newObj = {};
keysToPick.forEach(function (key) {
newObj[key] = obj[key];
});
return newObj;
};
var moveElementsByN = function moveElementsByN(n, arr) {
return arr.slice(n).concat(arr.slice(0, n));
};
var formatSelectedDate = function formatSelectedDate(selectedDate, dateFormat) {
if (!selectedDate) {
return '';
}
return Array.isArray(selectedDate) ? selectedDate.map(function (date) {
return formatDate(date, dateFormat);
}).join(' - ') : formatDate(selectedDate, dateFormat);
};
var parseFormatString = function parseFormatString(formatString) {
return formatString.replace(/[D, Y]/gi, function (a) {
return a.toLowerCase();
});
};
var parseOnBlur = function parseOnBlur(typedValue, formatString, isRangeInput) {
var parsedFormatString = parseFormatString(formatString);
if (isRangeInput) {
var rangeValues = typedValue.split(' - ');
return rangeValues // @ts-ignore
.map(function (value) {
return dateFnsV2.parse(value, parsedFormatString, new Date());
}).sort(function (a, b) {
return a > b ? 1 : -1;
});
} // @ts-ignore
return dateFnsV2.parse(typedValue, parsedFormatString, new Date());
};
var onlyNumbers = function onlyNumbers(value) {
if (value === void 0) {
value = '';
}
return value.replace(/[^\d]/g, '');
};
function getShortDate(date) {
if (!date) {
return undefined;
}
return date.toISOString().slice(0, 10);
}
/**
* This is intended to be used to compose event handlers
* They are executed in order until one of them calls
* `event.preventDefault()`. Not sure this is the best
* way to do this, but it seems legit...
* @param {Function} fns the event hanlder functions
* @return {Function} the event handler to add to an element
*/
function composeEventHandlers() {
for (var _len = arguments.length, fns = new Array(_len), _key = 0; _key < _len; _key++) {
fns[_key] = arguments[_key];
}
return function (event) {
for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {
args[_key2 - 1] = arguments[_key2];
}
return fns.some(function (fn) {
if (fn) {
fn.apply(void 0, [event].concat(args));
}
return event.defaultPrevented;
});
};
}
/**
* Create an event handler for keyboard key given a config map
* of event handlers
* @param {Object} config consists of left, right, up, and down
* @return {Function} the event handler to handle keyboard key
*/
function getArrowKeyHandlers(config) {
return function (event) {
var keyCode = event.keyCode;
var fn = {
37: config.left,
39: config.right,
38: config.up,
40: config.down
}[keyCode];
if (fn) {
fn(event);
}
};
}
/**
* Checks if a given date is with date range
* @param {Array} range the range array with upper and lower bound
* @param {Date} date a given date
* @return {Boolean} true if date is in the range, false otherwise
*/
function isInRange(range, date) {
return range.length === 2 && range[0] <= date && range[1] >= date;
}
var BaseDatePicker =
/*#__PURE__*/
function (_React$Component) {
_inheritsLoose(BaseDatePicker, _React$Component);
function BaseDatePicker() {
var _this;
_this = _React$Component.apply(this, arguments) || this;
_this.state = {
offset: 0
};
_this.rootNode = React__default.createRef();
_this.handleArrowKeys = getArrowKeyHandlers({
left: function left() {
_this.getKeyOffset(-1);
},
right: function right() {
_this.getKeyOffset(1);
},
up: function up() {
_this.getKeyOffset(-7);
},
down: function down() {
_this.getKeyOffset(7);
}
});
_this.setRootNode = function (ref) {
_this.rootNode = ref;
};
_this.getRootProps = function (_temp) {
var _extends2;
var _ref = _temp === void 0 ? {} : _temp,
_ref$refKey = _ref.refKey,
refKey = _ref$refKey === void 0 ? 'ref' : _ref$refKey,
rest = _objectWithoutPropertiesLoose(_ref, ["refKey"]);
return _extends((_extends2 = {}, _extends2[refKey] = _this.setRootNode, _extends2.onKeyDown = _this.handleArrowKeys, _extends2), rest);
};
_this._handleOffsetChanged = function (offset) {
_this.setState({
offset: offset
});
};
return _this;
}
var _proto = BaseDatePicker.prototype;
_proto.getKeyOffset = function getKeyOffset(number) {
if (!this.rootNode.current) {
return;
}
var e = document.activeElement;
var buttons = this.rootNode.current.querySelectorAll('button');
buttons.forEach(function (el, i) {
var newNodeKey = i + number;
if (el === e) {
if (newNodeKey <= buttons.length - 1 && newNodeKey >= 0) {
buttons[newNodeKey].focus();
} else {
buttons[0].focus();
}
}
});
};
_proto.componentDidUpdate = function componentDidUpdate(prevProps) {
if (this.props.date !== prevProps.date) {
this._handleOffsetChanged(0);
}
};
_proto.render = function render() {
var _this2 = this;
var _this$props = this.props,
children = _this$props.children,
rest = _objectWithoutPropertiesLoose(_this$props, ["children"]);
return React__default.createElement(Dayzed, Object.assign({}, rest, {
offset: this.state.offset,
onOffsetChanged: this._handleOffsetChanged,
render: function render(renderProps) {
return children(_extends({}, renderProps, {
getRootProps: _this2.getRootProps
}));
}
}));
};
return BaseDatePicker;
}(React__default.Component);
var DatePicker =
/*#__PURE__*/
function (_React$Component) {
_inheritsLoose(DatePicker, _React$Component);
function DatePicker() {
var _this;
_this = _React$Component.apply(this, arguments) || this;
_this._handleOnDateSelected = function (_ref, event) {
var selectable = _ref.selectable,
date = _ref.date;
var _this$props = _this.props,
selectedDate = _this$props.selected,
onChange = _this$props.onChange;
if (!selectable) {
return;
}
var newDate = date;
if (selectedDate && selectedDate.getTime() === date.getTime()) {
newDate = null;
}
if (onChange) {
onChange(event, newDate);
}
};
return _this;
}
var _proto = DatePicker.prototype;
_proto.render = function render() {
return React__default.createElement(BaseDatePicker, Object.assign({}, this.props, {
onDateSelected: this._handleOnDateSelected
}));
};
return DatePicker;
}(React__default.Component);
var RangeDatePicker =
/*#__PURE__*/
function (_React$Component) {
_inheritsLoose(RangeDatePicker, _React$Component);
function RangeDatePicker() {
var _this;
_this = _React$Component.apply(this, arguments) || this;
_this.state = {
hoveredDate: null
};
_this.setHoveredDate = function (date) {
_this.setState(function (state) {
return state.hoveredDate === date ? null : {
hoveredDate: date
};
});
}; // Calendar level
_this.onMouseLeave = function () {
_this.setHoveredDate(null);
};
_this._handleOnDateSelected = function (_ref, event) {
var selectable = _ref.selectable,
date = _ref.date;
var _this$props = _this.props,
selectedDates = _this$props.selected,
onChange = _this$props.onChange;
if (!selectable) {
return;
}
var dateTime = date.getTime();
var newDates = [].concat(selectedDates);
if (selectedDates.length) {
if (selectedDates.length === 1) {
var firstTime = selectedDates[0].getTime();
if (firstTime < dateTime) {
newDates.push(date);
} else {
newDates.unshift(date);
}
} else if (newDates.length === 2) {
newDates = [date];
}
} else {
newDates.push(date);
}
if (onChange) {
onChange(event, newDates);
}
if (newDates.length === 2) {
_this.setHoveredDate(null);
}
};
_this.getEnhancedDateProps = function (getDateProps, dateBounds, _ref2) {
var onMouseEnter = _ref2.onMouseEnter,
onFocus = _ref2.onFocus,
restProps = _objectWithoutPropertiesLoose(_ref2, ["onMouseEnter", "onFocus"]);
var hoveredDate = _this.state.hoveredDate;
var date = restProps.dateObj.date;
return getDateProps(_extends({}, restProps, {
inRange: isInRange(dateBounds, date),
start: dateBounds[0] && isSameDay(dateBounds[0], date),
end: dateBounds[1] && isSameDay(dateBounds[1], date),
// @ts-ignore
hovered: hoveredDate && isSameDay(hoveredDate, date),
onMouseEnter: composeEventHandlers(onMouseEnter, function () {
_this.onHoverFocusDate(date);
}),
onFocus: composeEventHandlers(onFocus, function () {
_this.onHoverFocusDate(date);
})
}));
};
_this.getEnhancedRootProps = function (getRootProps, props) {
return getRootProps(_extends({}, props, {
onMouseLeave: _this.onMouseLeave
}));
};
return _this;
} // Date level
var _proto = RangeDatePicker.prototype;
_proto.onHoverFocusDate = function onHoverFocusDate(date) {
if (this.props.selected.length !== 1) {
return;
}
this.setHoveredDate(date);
};
_proto.render = function render() {
var _this2 = this;
var _this$props2 = this.props,
children = _this$props2.children,
rest = _objectWithoutPropertiesLoose(_this$props2, ["children"]);
var hoveredDate = this.state.hoveredDate;
var selected = this.props.selected;
var dateBounds = selected.length === 2 || !selected.length || !hoveredDate ? selected : // prettier-ignore
// @ts-ignore
[selected[0], hoveredDate].sort(compareAsc);
return React__default.createElement(BaseDatePicker, Object.assign({}, rest, {
onDateSelected: this._handleOnDateSelected
}), function (_ref3) {
var getRootProps = _ref3.getRootProps,
getDateProps = _ref3.getDateProps,
renderProps = _objectWithoutPropertiesLoose(_ref3, ["getRootProps", "getDateProps"]);
return children(_extends({}, renderProps, {
getRootProps: _this2.getEnhancedRootProps.bind(_this2, getRootProps),
getDateProps: _this2.getEnhancedDateProps.bind(_this2, getDateProps, dateBounds)
}));
});
};
return RangeDatePicker;
}(React__default.Component);
RangeDatePicker.defaultProps = {
selected: []
};
var CustomButton = function CustomButton(_ref) {
var icon = _ref.icon,
otherProps = _objectWithoutPropertiesLoose(_ref, ["icon"]);
return React__default.createElement(semanticUiReact.Button, Object.assign({
basic: true,
compact: true,
icon: icon
}, otherProps));
};
var CalendarCell = function CalendarCell(_ref) {
var inRange = _ref.inRange,
nextMonth = _ref.nextMonth,
prevMonth = _ref.prevMonth,
selectable = _ref.selectable,
selected = _ref.selected,
today = _ref.today,
otherProps = _objectWithoutPropertiesLoose(_ref, ["end", "hovered", "inRange", "nextMonth", "prevMonth", "selectable", "selected", "start", "today"]);
return React__default.createElement("span", Object.assign({
className: cn('clndr-cell', {
'clndr-cell-today': today,
'clndr-cell-disabled': !selectable,
'clndr-cell-other-month': nextMonth || prevMonth,
'clndr-cell-inrange': inRange,
'clndr-cell-selected': selected
})
}, otherProps));
};
CalendarCell.defaultProps = {
end: false,
hovered: false,
inRange: false,
nextMonth: false,
prevMonth: false,
start: false
};
var style = {
marginTop: 10
};
var TodayButton = function TodayButton(_ref) {
var otherProps = _objectWithoutPropertiesLoose(_ref, ["end", "hovered", "inRange", "selectable", "selected", "start", "today"]);
return React__default.createElement(semanticUiReact.Button, Object.assign({
className: "clndr-button-today",
compact: true,
"data-testid": "datepicker-today-button",
fluid: true,
style: style
}, otherProps));
};
var styles = {
leftBtn: {
textAlign: 'start'
},
rightBtn: {
textAlign: 'end'
}
};
var pointings = {
'top left': 'clndr-top clndr-left',
'top right': 'clndr-top clndr-right',
left: 'clndr-left',
right: 'clndr-right'
};
var Calendar = function Calendar(_ref) {
var calendars = _ref.calendars,
filterDate = _ref.filterDate,
getBackProps = _ref.getBackProps,
getDateProps = _ref.getDateProps,
getForwardProps = _ref.getForwardProps,
maxDate = _ref.maxDate,
minDate = _ref.minDate,
months = _ref.months,
nextMonth = _ref.nextMonth,
nextYear = _ref.nextYear,
previousMonth = _ref.previousMonth,
previousYear = _ref.previousYear,
showToday = _ref.showToday,
todayButton = _ref.todayButton,
weekdays = _ref.weekdays,
pointing = _ref.pointing;
return React__default.createElement(semanticUiReact.Segment, {
className: cn('clndr-calendars-segment', pointings[pointing])
}, React__default.createElement("div", {
className: "clndr-calendars-wrapper",
style: {
'--n': calendars.length
}
}, calendars.map(function (calendar, calendarIdx) {
return React__default.createElement("div", {
key: calendar.year + "-" + calendar.month
}, React__default.createElement("div", {
className: "clndr-control"
}, React__default.createElement("div", {
style: styles.leftBtn
}, calendarIdx === 0 && React__default.createElement(React.Fragment, null, React__default.createElement(CustomButton, Object.assign({
icon: "angle double left",
title: previousYear
}, getBackProps({
calendars: calendars,
offset: 12
}))), React__default.createElement(CustomButton, Object.assign({
icon: "angle left",
style: {
marginRight: 0
},
title: previousMonth
}, getBackProps({
calendars: calendars
}))))), React__default.createElement("span", {
title: months[calendar.month] + " " + calendar.year
}, months[calendar.month].slice(0, 3), " ", calendar.year), React__default.createElement("div", {
style: styles.rightBtn
}, calendarIdx === calendars.length - 1 && React__default.createElement(React.Fragment, null, React__default.createElement(CustomButton, Object.assign({
icon: "angle right",
title: nextMonth
}, getForwardProps({
calendars: calendars
}))), React__default.createElement(CustomButton, Object.assign({
icon: "angle double right",
style: {
marginRight: 0
},
title: nextYear
}, getForwardProps({
calendars: calendars,
offset: 12
})))))), React__default.createElement("div", {
className: "clndr-days"
}, weekdays.map(function (weekday) {
return React__default.createElement(CalendarCell, {
key: calendar.year + "-" + calendar.month + "-" + weekday,
title: weekday
}, weekday.slice(0, 2));
}), calendar.weeks.map(function (week) {
return week.map(function (dateObj, weekIdx) {
var key = calendar.year + "-" + calendar.month + "-" + weekIdx;
if (!dateObj) {
return React__default.createElement(CalendarCell, {
key: key
});
}
var selectable = dateObj.selectable && filterDate(dateObj.date);
var shortDate = getShortDate(dateObj.date);
return React__default.createElement(CalendarCell, Object.assign({
key: key
}, dateObj, getDateProps({
dateObj: _extends({}, dateObj, {
selectable: selectable
})
}), {
"data-testid": "datepicker-cell-" + shortDate,
selectable: selectable
}), dateObj.date.getDate());
});
})));
})), showToday && React__default.createElement(TodayButton, Object.assign({}, getToday(minDate, maxDate), getDateProps({
dateObj: getToday(minDate, maxDate)
})), todayButton));
};
Calendar.defaultProps = {
pointing: 'left',
showToday: true
};
var CustomInput = function CustomInput(_ref) {
var icon = _ref.icon,
isClearIconVisible = _ref.isClearIconVisible,
onClear = _ref.onClear,
onClick = _ref.onClick,
value = _ref.value,
rest = _objectWithoutPropertiesLoose(_ref, ["icon", "isClearIconVisible", "onClear", "onClick", "value"]);
return React__default.createElement(semanticUiReact.Form.Input, Object.assign({
"data-testid": "datepicker-input"
}, rest, {
icon: React__default.createElement(semanticUiReact.Icon, {
"data-testid": "datepicker-icon",
link: true,
name: isClearIconVisible ? 'close' : icon,
onClick: isClearIconVisible ? onClear : onClick
}),
onClick: onClick,
value: value
}));
};
CustomInput.defaultProps = {
icon: 'calendar'
};
var style$1 = {
display: 'inline-block',
position: 'relative'
};
var semanticInputProps = ['disabled', 'error', 'icon', 'iconPosition', 'id', 'label', 'loading', 'name', 'onBlur', 'onChange', 'onClick', 'onContextMenu', 'onDoubleClick', 'onFocus', 'onInput', 'onKeyDown', 'onKeyPress', 'onKeyUp', 'onMouseDown', 'onMouseEnter', 'onMouseLeave', 'onMouseMove', 'onMouseOut', 'onMouseOver', 'onMouseUp', 'placeholder', 'required', 'size', 'transparent', 'readOnly'];
var SemanticDatepicker =
/*#__PURE__*/
function (_React$Component) {
_inheritsLoose(SemanticDatepicker, _React$Component);
function SemanticDatepicker() {
var _this;
_this = _React$Component.apply(this, arguments) || this;
_this.el = React__default.createRef();
_this.state = _this.initialState;
_this.Component = _this.isRangeInput ? RangeDatePicker : DatePicker;
_this.resetState = function (event) {
var _this$props = _this.props,
keepOpenOnClear = _this$props.keepOpenOnClear,
onChange = _this$props.onChange;
var newState = {
isVisible: keepOpenOnClear,
selectedDate: _this.isRangeInput ? [] : null,
selectedDateFormatted: ''
};
_this.setState(newState, function () {
onChange(event, _extends({}, _this.props, {
value: null
}));
});
};
_this.mousedownCb = function (mousedownEvent) {
var isVisible = _this.state.isVisible;
if (isVisible && _this.el) {
if (_this.el.current && !_this.el.current.contains(mousedownEvent.target)) {
_this.close();
}
}
};
_this.keydownCb = function (keydownEvent) {
var isVisible = _this.state.isVisible;
if (keydownEvent.keyCode === 27 && isVisible) {
// Escape
_this.close();
}
};
_this.close = function () {
window.removeEventListener('keydown', _this.keydownCb);
window.removeEventListener('mousedown', _this.mousedownCb);
_this.setState({
isVisible: false
});
};
_this.showCalendar = function (event) {
event.preventDefault();
window.addEventListener('mousedown', _this.mousedownCb);
window.addEventListener('keydown', _this.keydownCb);
_this.setState({
isVisible: true
});
};
_this.handleRangeInput = function (newDates, event) {
var _this$props2 = _this.props,
format = _this$props2.format,
keepOpenOnSelect = _this$props2.keepOpenOnSelect,
onChange = _this$props2.onChange;
if (!newDates || !newDates.length) {
_this.resetState(event);
return;
}
var newState = {
selectedDate: newDates,
selectedDateFormatted: formatSelectedDate(newDates, format),
typedValue: null
};
_this.setState(newState, function () {
onChange(event, _extends({}, _this.props, {
value: newDates
}));
if (newDates.length === 2) {
_this.setState({
isVisible: keepOpenOnSelect
});
}
});
};
_this.handleBasicInput = function (newDate, event) {
var _this$props3 = _this.props,
format = _this$props3.format,
keepOpenOnSelect = _this$props3.keepOpenOnSelect,
onChange = _this$props3.onChange,
clearOnSameDateClick = _this$props3.clearOnSameDateClick;
if (!newDate) {
// if clearOnSameDateClick is true (this is the default case)
// then reset the state. This is what was previously the default
// behavior, without a specific prop.
if (clearOnSameDateClick) {
_this.resetState(event);
} else {
// Don't reset the state. Instead, close or keep open the
// datepicker according to the value of keepOpenOnSelect.
// Essentially, follow the default behavior of clicking a date
// but without changing the value in state.
_this.setState({
isVisible: keepOpenOnSelect
});
}
return;
}
var newState = {
isVisible: keepOpenOnSelect,
selectedDate: newDate,
selectedDateFormatted: formatSelectedDate(newDate, format),
typedValue: null
};
_this.setState(newState, function () {
onChange(event, _extends({}, _this.props, {
value: newDate
}));
});
};
_this.handleBlur = function (event) {
var _this$props4 = _this.props,
format = _this$props4.format,
onBlur = _this$props4.onBlur;
var typedValue = _this.state.typedValue;
onBlur(event);
if (!typedValue) {
return;
}
var parsedValue = parseOnBlur(String(typedValue), format, _this.isRangeInput);
if (_this.isRangeInput) {
var areDatesValid = parsedValue.every(isValid);
if (areDatesValid) {
_this.handleRangeInput(parsedValue, event);
return;
}
} else {
var isDateValid = isValid(parsedValue);
if (isDateValid) {
_this.handleBasicInput(parsedValue, event);
return;
}
}
_this.setState({
typedValue: null
});
};
_this.handleChange = function (event, _ref) {
var value = _ref.value;
var _this$props5 = _this.props,
allowOnlyNumbers = _this$props5.allowOnlyNumbers,
format = _this$props5.format,
onChange = _this$props5.onChange;
var formatString = _this.isRangeInput ? format + " - " + format : format;
var typedValue = allowOnlyNumbers ? onlyNumbers(value) : value;
if (!typedValue) {
var newState = {
selectedDate: _this.isRangeInput ? [] : null,
selectedDateFormatted: '',
typedValue: null
};
_this.setState(newState, function () {
onChange(event, _extends({}, _this.props, {
value: null
}));
});
return;
}
_this.setState({
selectedDate: _this.isRangeInput ? [] : null,
selectedDateFormatted: '',
typedValue: formatStringByPattern(formatString, typedValue)
});
};
_this.handleKeyDown = function (evt) {
// If the Enter key was pressed...
if (evt.keyCode === 13) {
_this.handleBlur();
}
};
_this.onDateSelected = function (event, dateOrDates) {
if (_this.isRangeInput) {
_this.handleRangeInput(dateOrDates, event);
} else {
_this.handleBasicInput(dateOrDates, event);
}
};
return _this;
}
var _proto = SemanticDatepicker.prototype;
_proto.componentDidUpdate = function componentDidUpdate(prevProps) {
var _this$props6 = this.props,
locale = _this$props6.locale,
value = _this$props6.value;
if (!isEqual(value, prevProps.value)) {
this.onDateSelected(undefined, value);
}
if (locale !== prevProps.locale) {
this.setState({
locale: this.locale
});
}
};
_proto.render = function render() {
var _this2 = this;
var _this$state = this.state,
isVisible = _this$state.isVisible,
locale = _this$state.locale,
selectedDate = _this$state.selectedDate,
selectedDateFormatted = _this$state.selectedDateFormatted,
typedValue = _this$state.typedValue;
var _this$props7 = this.props,
clearable = _this$props7.clearable,
pointing = _this$props7.pointing,
filterDate = _this$props7.filterDate,
readOnly = _this$props7.readOnly,
datePickerOnly = _this$props7.datePickerOnly;
return React__default.createElement("div", {
className: "field",
style: style$1,
ref: this.el
}, React__default.createElement(CustomInput, Object.assign({}, this.inputProps, {
isClearIconVisible: Boolean(clearable && selectedDateFormatted),
onBlur: this.handleBlur,
onChange: this.handleChange,
onClear: this.resetState,
onClick: readOnly ? null : this.showCalendar,
onKeyDown: this.handleKeyDown,
value: typedValue || selectedDateFormatted,
readOnly: readOnly || datePickerOnly
})), isVisible && React__default.createElement(this.Component, Object.assign({}, this.dayzedProps, {
monthsToDisplay: this.isRangeInput ? 2 : 1,
onChange: this.onDateSelected,
selected: selectedDate,
date: this.date
}), function (props) {
return React__default.createElement(Calendar, Object.assign({}, _this2.dayzedProps, props, locale, {
filterDate: filterDate,
pointing: pointing,
weekdays: _this2.weekdays
}));
}));
};
_createClass(SemanticDatepicker, [{
key: "isRangeInput",
get: function get() {
return this.props.type === 'range';
}
}, {
key: "initialState",
get: function get() {
var _this$props8 = this.props,
format = _this$props8.format,
value = _this$props8.value;
var initialSelectedDate = this.isRangeInput ? [] : null;
return {
isVisible: false,
locale: this.locale,
selectedDate: value || initialSelectedDate,
selectedDateFormatted: formatSelectedDate(value, format),
typedValue: null
};
}
}, {
key: "dayzedProps",
get: function get() {
return omit(semanticInputProps, this.props);
}
}, {
key: "inputProps",
get: function get() {
var props = pick(semanticInputProps, this.props);
var placeholder = props.placeholder || this.props.format;
return _extends({}, props, {
placeholder: placeholder
});
}
}, {
key: "date",
get: function get() {
var selectedDate = this.state.selectedDate;
var date = this.props.date;
if (!selectedDate) {
return date;
}
return this.isRangeInput ? selectedDate[0] : selectedDate || date;
}
}, {
key: "locale",
get: function get() {
var locale = this.props.locale;
var localeJson;
try {
localeJson = require("./locales/" + locale + ".json");
} catch (e) {
console.warn("\"" + locale + "\" is not a valid locale");
localeJson = require('./locales/en-US.json');
}
return localeJson;
}
}, {
key: "weekdays",
get: function get() {
var firstDayOfWeek = this.dayzedProps.firstDayOfWeek;
var weekdays = this.state.locale.weekdays;
return moveElementsByN(firstDayOfWeek, weekdays);
}
}]);
return SemanticDatepicker;
}(React__default.Component);
SemanticDatepicker.defaultProps = {
allowOnlyNumbers: false,
clearOnSameDateClick: true,
clearable: true,
date: undefined,
filterDate: function filterDate() {
return true;
},
firstDayOfWeek: 0,
format: 'YYYY-MM-DD',
id: undefined,
keepOpenOnClear: false,
keepOpenOnSelect: false,
label: undefined,
locale: 'en-US',
name: undefined,
onBlur: function onBlur() {},
onChange: function onChange() {},
placeholder: null,
pointing: 'left',
readOnly: false,
datePickerOnly: false,
required: false,
showOutsideDays: false,
type: 'basic',
value: null
};
exports.default = SemanticDatepicker;
//# sourceMappingURL=react-semantic-ui-datepickers.cjs.development.js.map