@vtex/styleguide
Version:
> VTEX Styleguide React components ([Docs](https://vtex.github.io/styleguide))
333 lines (254 loc) • 11.3 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
var _react = require("react");
var _react2 = _interopRequireDefault(_react);
var _propTypes = require("prop-types");
var _propTypes2 = _interopRequireDefault(_propTypes);
var _reactDatepicker = require("react-datepicker");
var _reactDatepicker2 = _interopRequireDefault(_reactDatepicker);
var _index = require("date-fns/locale/index.js");
var locales = _interopRequireWildcard(_index);
var _Input = require("../Input");
var _Input2 = _interopRequireDefault(_Input);
var _Calendar = require("../icon/Calendar");
var _Calendar2 = _interopRequireDefault(_Calendar);
require("./react-datepicker.global.css");
var _withForwardedRef = require("../../modules/withForwardedRef");
function _getRequireWildcardCache() { if (typeof WeakMap !== "function") return null; var cache = new WeakMap(); _getRequireWildcardCache = function _getRequireWildcardCache() { return cache; }; return cache; }
function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (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; }
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
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 _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 _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; }
var DatePicker =
/*#__PURE__*/
function (_Component) {
_inheritsLoose(DatePicker, _Component);
function DatePicker(props) {
var _this;
_this = _Component.call(this, props) || this;
_this.handleLocaleChange = function (locale) {
// registerLocale is a function from react-datepicker component that loads
// an imported locale object from date-fns.
//
// For more information visit the link below:
// https://github.com/Hacker0x01/react-datepicker#localization
//
(0, _reactDatepicker.registerLocale)(locale, locales[locale.replace('-', '')]);
};
_this.state = {
active: false
};
_this.handleLocaleChange(props.locale);
return _this;
}
var _proto = DatePicker.prototype;
_proto.componentDidMount = function componentDidMount() {
if (this.props.useTime) {
console.warn('DatePicker: The prop "useTime" of the "DatePicker" component has been deprecated, and will be removed in a future version. Please use the "TimePicker" component instead');
}
};
_proto.componentDidUpdate = function componentDidUpdate(prevProps) {
if (this.props.locale !== prevProps.locale) {
this.handleLocaleChange(this.props.locale);
}
};
_proto.render = function render() {
var _this$props = this.props,
positionFixed = _this$props.positionFixed,
useTime = _this$props.useTime,
useTimeOnly = _this$props.useTimeOnly;
var popperProps = _extends({}, positionFixed && {
positionFixed: true
});
var format = useTimeOnly ? 'p' : useTime ? 'Pp' : 'P';
return _react2.default.createElement(_reactDatepicker2.default, {
ref: this.props.forwardedRef // eslint-disable-next-line jsx-a11y/no-autofocus
,
autoFocus: this.props.autoFocus,
customInput: _react2.default.createElement(_Input2.default, {
error: this.props.error,
errorMessage: this.props.errorMessage || this.state.errorMessage,
helpText: this.props.helpText,
label: this.props.label,
prefix: this.props.prefix,
size: this.props.size
}),
dateFormat: format,
disabled: this.props.disabled,
disabledKeyboardNavigation: true,
endDate: this.props.dateRangeEnd,
excludeDates: this.props.excludeDates,
excludeTimes: this.props.excludeTimes,
fixedHeight: this.props.direction === 'up',
id: this.props.id,
includeDates: this.props.includeDates,
includeTimes: this.props.includeTimes,
locale: this.props.locale,
maxDate: this.props.maxDate,
maxTime: this.props.maxTime,
minDate: this.props.minDate,
minTime: this.props.minTime,
name: this.props.name,
placeholderText: this.props.placeholder,
popperModifiers: this.popperModifiers,
popperProps: popperProps,
readOnly: this.props.readOnly,
required: this.props.required,
selected: this.props.value,
selectsEnd: this.props.isRangeEnd,
selectsStart: this.props.isRangeStart,
showDisabledMonthNavigation: this.props.limitMonthNavigation,
showTimeSelect: useTime || useTimeOnly,
startDate: this.props.dateRangeStart,
showTimeSelectOnly: useTimeOnly,
tabIndex: this.props.tabIndex,
timeFormat: "p",
timeIntervals: this.props.timeIntervals,
onBlur: this.props.onBlur,
onFocus: this.props.onFocus,
onChange: this.props.onChange
});
};
_createClass(DatePicker, [{
key: "popperModifiers",
get: function get() {
var _this$props2 = this.props,
align = _this$props2.align,
direction = _this$props2.direction,
size = _this$props2.size,
useTime = _this$props2.useTime;
var BASE_MODIFIERS = {
hide: {
enabled: false
},
preventOverflow: {
enabled: false
}
};
var isRightAligned = align === 'right';
var isUpwards = direction === 'up';
if (!isRightAligned && !isUpwards) {
return BASE_MODIFIERS;
}
var offsetX = isRightAligned ? (size === 'large' ? -91 : -136) - (useTime ? 130 : 0) : 0;
var offsetYBySize = {
large: -448,
regular: -440,
small: -432
};
var offsetY = isUpwards ? offsetYBySize[size] - (useTime ? 18 : 0) : 0;
return _extends({}, BASE_MODIFIERS, {
flip: {
enabled: !isUpwards
},
keepTogether: {
enabled: false
},
offset: {
offset: offsetX + ", " + offsetY
}
});
}
}]);
return DatePicker;
}(_react.Component);
DatePicker.defaultProps = {
align: 'left',
autoFocus: false,
direction: 'down',
disabled: false,
error: false,
label: '',
limitMonthNavigation: false,
prefix: _react2.default.createElement(_Calendar2.default, null),
readOnly: false,
required: false,
size: 'regular'
};
DatePicker.propTypes = {
/** @ignore Forwarded Ref */
forwardedRef: _withForwardedRef.refShape,
/** Popper alignment in relation to the input */
align: _propTypes2.default.oneOf(['left', 'right']),
/** Spec attribute */
autoFocus: _propTypes2.default.bool,
/** @ignore Date range end date */
dateRangeEnd: _propTypes2.default.instanceOf(Date),
/** @ignore Date range start date */
dateRangeStart: _propTypes2.default.instanceOf(Date),
/** @ignore Date format */
dateFormat: _propTypes2.default.string,
/** Popper position in relation to the input */
direction: _propTypes2.default.oneOf(['down', 'up']),
/** Spec attribute */
disabled: _propTypes2.default.bool,
/** Error highlight */
error: _propTypes2.default.bool,
/** Error message */
errorMessage: _propTypes2.default.string,
/** Dates to be excluded */
excludeDates: _propTypes2.default.arrayOf(_propTypes2.default.instanceOf(Date)),
/** Times to be excluded */
excludeTimes: _propTypes2.default.arrayOf(_propTypes2.default.instanceOf(Date)),
/** Help text */
helpText: _propTypes2.default.node,
/** Spec attribute */
id: _propTypes2.default.string,
/** Dates to be included */
includeDates: _propTypes2.default.arrayOf(_propTypes2.default.instanceOf(Date)),
/** Dates to be included */
includeTimes: _propTypes2.default.arrayOf(_propTypes2.default.instanceOf(Date)),
/** @ignore Indicates that the input represents the end date of a date range */
isRangeEnd: _propTypes2.default.bool,
/** @ignore Indicates that the input represents the start date of a date range */
isRangeStart: _propTypes2.default.bool,
/** Label */
label: _propTypes2.default.string,
/** Disables out-of-bounds month navigation */
limitMonthNavigation: _propTypes2.default.bool,
/** Locale string ('en-US', 'pt-BR', ...) */
locale: _propTypes2.default.string.isRequired,
/** Max possible date */
maxDate: _propTypes2.default.instanceOf(Date),
/** Upper time limit */
maxTime: _propTypes2.default.instanceOf(Date),
/** Minimum possible date */
minDate: _propTypes2.default.instanceOf(Date),
/** Lower time limit */
minTime: _propTypes2.default.instanceOf(Date),
/** Spec attribute */
name: _propTypes2.default.string,
/** onChange event */
onChange: _propTypes2.default.func.isRequired,
/** onFocus event */
onFocus: _propTypes2.default.func,
/** onBlur event */
onBlur: _propTypes2.default.func,
/** Placeholder text */
placeholder: _propTypes2.default.string,
/** @ignore Prefix component to be used as the prefix of the input */
prefix: _propTypes2.default.node,
/** Spec attribute */
readOnly: _propTypes2.default.bool,
/** Spec attribute */
required: _propTypes2.default.bool,
/** DatePicker size */
size: _propTypes2.default.oneOf(['small', 'regular', 'large']),
/** Spec attribute */
tabIndex: _propTypes2.default.string,
/** Interval between times (in min) */
timeIntervals: _propTypes2.default.number,
/** Flag used for indicating whether to use time or not */
useTime: _propTypes2.default.bool,
/** @ignore Do not show calendar view */
useTimeOnly: _propTypes2.default.bool,
/** Value of the selected date */
value: _propTypes2.default.instanceOf(Date).isRequired,
/** Sets the popper to position fixed. Fixes issues with overflow: hidden. */
positionFixed: _propTypes2.default.bool
};
exports.default = (0, _withForwardedRef.withForwardedRef)(DatePicker);