zent
Version:
一套前端设计语言和基于React的实现
297 lines (232 loc) • 8.69 kB
JavaScript
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
var _extends2 = require('babel-runtime/helpers/extends');
var _extends3 = _interopRequireDefault(_extends2);
var _classCallCheck2 = require('babel-runtime/helpers/classCallCheck');
var _classCallCheck3 = _interopRequireDefault(_classCallCheck2);
var _createClass2 = require('babel-runtime/helpers/createClass');
var _createClass3 = _interopRequireDefault(_createClass2);
var _possibleConstructorReturn2 = require('babel-runtime/helpers/possibleConstructorReturn');
var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2);
var _inherits2 = require('babel-runtime/helpers/inherits');
var _inherits3 = _interopRequireDefault(_inherits2);
var _react = require('react');
var _react2 = _interopRequireDefault(_react);
var _classnames = require('classnames');
var _classnames2 = _interopRequireDefault(_classnames);
var _input = require('../input');
var _input2 = _interopRequireDefault(_input);
var _popover = require('../popover');
var _popover2 = _interopRequireDefault(_popover);
var _formatDate = require('zan-utils/date/formatDate');
var _formatDate2 = _interopRequireDefault(_formatDate);
var _parseDate = require('zan-utils/date/parseDate');
var _parseDate2 = _interopRequireDefault(_parseDate);
var _getWidth = require('../utils/getWidth');
var _getWidth2 = _interopRequireDefault(_getWidth);
var _MonthPanel = require('./month/MonthPanel');
var _MonthPanel2 = _interopRequireDefault(_MonthPanel);
var _PanelFooter = require('./common/PanelFooter');
var _PanelFooter2 = _interopRequireDefault(_PanelFooter);
var _utils = require('./utils/');
var _date = require('./utils/date');
var _constants = require('./constants/');
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
function extractStateFromProps(props) {
var showPlaceholder = void 0;
var selected = void 0;
var actived = void 0;
var format = props.format,
value = props.value,
defaultValue = props.defaultValue;
if (value) {
var tmp = (0, _parseDate2['default'])(value, format);
if (tmp) {
showPlaceholder = false;
selected = actived = tmp;
} else {
// eslint-disable-line
showPlaceholder = true;
selected = actived = (0, _date.dayStart)();
}
} else {
showPlaceholder = true;
if (defaultValue) {
actived = (0, _parseDate2['default'])(defaultValue, format);
} else {
actived = (0, _date.dayStart)();
}
selected = actived = (0, _parseDate2['default'])(actived, format);
}
return {
value: (0, _formatDate2['default'])(selected, format),
actived: actived,
selected: selected,
openPanel: false,
showPlaceholder: showPlaceholder
};
}
var _ref3 = _react2['default'].createElement('span', { className: 'zenticon zenticon-calendar-o' });
var MonthPicker = function (_ref) {
(0, _inherits3['default'])(MonthPicker, _ref);
function MonthPicker(props) {
(0, _classCallCheck3['default'])(this, MonthPicker);
var _this = (0, _possibleConstructorReturn3['default'])(this, (MonthPicker.__proto__ || Object.getPrototypeOf(MonthPicker)).call(this, props));
_this.onChangeMonth = function (val) {
_this.setState({
actived: val
});
};
_this.onSelectMonth = function (val) {
var onClick = _this.props.onClick;
_this.setState({
selected: val,
actived: val
});
onClick && onClick(val);
};
_this.onClearInput = function (evt) {
evt.stopPropagation();
_this.props.onChange('');
};
_this.onConfirm = function () {
var format = _this.props.format;
var selected = _this.state.selected;
var value = (0, _formatDate2['default'])(selected, format);
_this.setState({
value: value,
openPanel: false,
showPlaceholder: false
});
_this.props.onChange(value);
};
_this.isDisabled = function (val) {
var year = _this.state.actived.getFullYear();
var dateStr = year + '-' + (val + 1);
var ret = (0, _parseDate2['default'])(dateStr, 'YYYY-MM');
var _this$props = _this.props,
disabledDate = _this$props.disabledDate,
min = _this$props.min,
max = _this$props.max,
format = _this$props.format;
if (disabledDate && disabledDate(ret)) return true;
if (min && ret < (0, _parseDate2['default'])(min, format)) return true;
if (max && ret > (0, _parseDate2['default'])(max, format)) return true;
return false;
};
_this.togglePicker = function () {
var _this$props2 = _this.props,
onOpen = _this$props2.onOpen,
onClose = _this$props2.onClose,
disabled = _this$props2.disabled;
var openPanel = !_this.state.openPanel;
if (disabled) return;
openPanel ? onOpen && onOpen() : onClose && onClose();
_this.setState({
openPanel: !_this.state.openPanel
});
};
_this.state = extractStateFromProps(props);
return _this;
}
(0, _createClass3['default'])(MonthPicker, [{
key: 'componentWillReceiveProps',
value: function componentWillReceiveProps(next) {
var state = extractStateFromProps(next);
this.setState(state);
}
}, {
key: 'renderPicker',
value: function renderPicker() {
var _this2 = this;
var state = this.state;
var props = this.props;
var monthPicker = void 0;
if (state.openPanel) {
monthPicker = _react2['default'].createElement(
'div',
{ className: 'month-picker', ref: function ref(_ref2) {
return _this2.picker = _ref2;
} },
_react2['default'].createElement(_MonthPanel2['default'], {
actived: state.actived,
selected: state.selected,
onChange: this.onChangeMonth,
onSelect: this.onSelectMonth,
disabledDate: this.isDisabled
}),
_react2['default'].createElement(_PanelFooter2['default'], {
buttonText: props.confirmText,
linkText: '\u5F53\u524D\u6708',
linkCls: 'link--current',
onClickLink: function onClickLink() {
return _this2.onSelectMonth(_utils.CURRENT);
},
onClickButton: this.onConfirm
})
);
}
return monthPicker;
}
}, {
key: 'render',
value: function render() {
var state = this.state;
var props = this.props;
var wrapperCls = props.prefix + '-datetime-picker ' + props.className;
var inputCls = (0, _classnames2['default'])({
'picker-input': true,
'picker-input--filled': !state.showPlaceholder,
'picker-input--disabled': props.disabled
});
var widthStyle = (0, _getWidth2['default'])(props.width);
return _react2['default'].createElement(
'div',
{ style: widthStyle, className: wrapperCls },
_react2['default'].createElement(
_popover2['default'],
{
cushion: 5,
visible: state.openPanel,
onVisibleChange: this.togglePicker,
className: props.prefix + '-datetime-picker-popover ' + props.className + '-popover',
position: _constants.popPositionMap[props.popPosition.toLowerCase()]
},
_react2['default'].createElement(
_popover2['default'].Trigger.Click,
null,
_react2['default'].createElement(
'div',
{ style: widthStyle, className: inputCls },
_react2['default'].createElement(_input2['default'], {
name: props.name,
value: state.showPlaceholder ? props.placeholder : state.value,
onChange: _constants.noop,
disabled: props.disabled
}),
_ref3,
_react2['default'].createElement('span', {
onClick: this.onClearInput,
className: 'zenticon zenticon-close-circle'
})
)
),
_react2['default'].createElement(
_popover2['default'].Content,
null,
this.renderPicker()
)
)
);
}
}]);
return MonthPicker;
}(_react.PureComponent || _react.Component);
MonthPicker.PropTypes = (0, _extends3['default'])({}, _constants.commonPropTypes);
MonthPicker.defaultProps = (0, _extends3['default'])({}, _constants.commonProps, {
placeholder: '请选择月份',
format: 'YYYY-MM'
});
exports['default'] = MonthPicker;