UNPKG

material-ui-pickers-fork

Version:

React components, that implements material design pickers for material-ui v1

274 lines (234 loc) 8.06 kB
"use strict"; var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard"); var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.default = exports.TimePicker = void 0; var _inheritsLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/inheritsLoose")); var _react = _interopRequireWildcard(require("react")); var _propTypes = _interopRequireDefault(require("prop-types")); var _classnames2 = _interopRequireDefault(require("classnames")); var _withStyles = _interopRequireDefault(require("@material-ui/core/styles/withStyles")); var _PickerToolbar = _interopRequireDefault(require("../_shared/PickerToolbar")); var _ToolbarButton = _interopRequireDefault(require("../_shared/ToolbarButton")); var _timeUtils = require("../_helpers/time-utils"); var _WithUtils = _interopRequireDefault(require("../_shared/WithUtils")); var _TimePickerView = _interopRequireDefault(require("./TimePickerView")); var clockType = _interopRequireWildcard(require("../constants/clock-types")); var TimePicker = /*#__PURE__*/ function (_Component) { (0, _inheritsLoose2.default)(TimePicker, _Component); function TimePicker() { var _this; for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { args[_key] = arguments[_key]; } _this = _Component.call.apply(_Component, [this].concat(args)) || this; _this.state = { openView: clockType.HOURS, meridiemMode: _this.props.utils.getHours(_this.props.date) >= 12 ? 'pm' : 'am' }; _this.setMeridiemMode = function (mode) { return function () { _this.setState({ meridiemMode: mode }, function () { return _this.handleChange({ time: _this.props.date, isFinish: false, openMinutes: false, openSeconds: false }); }); }; }; _this.handleChange = function (_ref) { var time = _ref.time, isFinish = _ref.isFinish, openMinutes = _ref.openMinutes, openSeconds = _ref.openSeconds; var withMeridiem = (0, _timeUtils.convertToMeridiem)(time, _this.state.meridiemMode, _this.props.ampm, _this.props.utils); if (isFinish) { if (!openMinutes && !openSeconds) { _this.props.onChange(withMeridiem, isFinish); return; } if (openMinutes) { _this.openMinutesView(); } if (openSeconds) { _this.openSecondsView(); } } _this.props.onChange(withMeridiem, false); }; _this.handleHourChange = function (time, isFinish) { _this.handleChange({ time: time, isFinish: isFinish, openMinutes: true, openSeconds: false }); }; _this.handleMinutesChange = function (time, isFinish) { _this.handleChange({ time: time, isFinish: isFinish, openMinutes: false, openSeconds: _this.props.seconds }); }; _this.handleSecondsChange = function (time, isFinish) { _this.handleChange({ time: time, isFinish: isFinish, openMinutes: false, openSeconds: false }); }; _this.openSecondsView = function () { _this.setState({ openView: clockType.SECONDS }); }; _this.openMinutesView = function () { _this.setState({ openView: clockType.MINUTES }); }; _this.openHourView = function () { _this.setState({ openView: clockType.HOURS }); }; return _this; } var _proto = TimePicker.prototype; _proto.render = function render() { var _classnames; var _this$props = this.props, classes = _this$props.classes, theme = _this$props.theme, date = _this$props.date, utils = _this$props.utils, ampm = _this$props.ampm, seconds = _this$props.seconds; var _this$state = this.state, meridiemMode = _this$state.meridiemMode, openView = _this$state.openView; var rtl = theme.direction === 'rtl'; var hourMinuteClassName = rtl ? classes.hourMinuteLabelReverse : classes.hourMinuteLabel; return _react.default.createElement(_react.Fragment, null, _react.default.createElement(_PickerToolbar.default, { className: (0, _classnames2.default)(classes.toolbar, (_classnames = {}, _classnames[classes.toolbarLeftPadding] = ampm, _classnames)) }, _react.default.createElement("div", { className: hourMinuteClassName }, _react.default.createElement(_ToolbarButton.default, { variant: "display3", onClick: this.openHourView, selected: openView === clockType.HOURS, label: utils.getHourText(date, ampm) }), _react.default.createElement(_ToolbarButton.default, { variant: "display3", label: ":", selected: false, className: classes.separator }), _react.default.createElement(_ToolbarButton.default, { variant: "display3", onClick: this.openMinutesView, selected: openView === clockType.MINUTES, label: utils.getMinuteText(date) }), seconds && _react.default.createElement(_react.Fragment, null, _react.default.createElement(_ToolbarButton.default, { variant: "display3", label: ":", selected: false, className: classes.separator }), _react.default.createElement(_ToolbarButton.default, { variant: "display3", onClick: this.openSecondsView, selected: openView === clockType.SECONDS, label: utils.getSecondText(date) }))), ampm && _react.default.createElement("div", { className: seconds ? classes.ampmSelectionWithSeconds : classes.ampmSelection }, _react.default.createElement(_ToolbarButton.default, { className: classes.ampmLabel, selected: meridiemMode === 'am', variant: "subheading", label: utils.getMeridiemText('am'), onClick: this.setMeridiemMode('am') }), _react.default.createElement(_ToolbarButton.default, { className: classes.ampmLabel, selected: meridiemMode === 'pm', variant: "subheading", label: utils.getMeridiemText('pm'), onClick: this.setMeridiemMode('pm') }))), this.props.children, _react.default.createElement(_TimePickerView.default, { date: date, type: this.state.openView, ampm: ampm, onHourChange: this.handleHourChange, onMinutesChange: this.handleMinutesChange, onSecondsChange: this.handleSecondsChange })); }; return TimePicker; }(_react.Component); exports.TimePicker = TimePicker; TimePicker.propTypes = { date: _propTypes.default.object.isRequired, onChange: _propTypes.default.func.isRequired, classes: _propTypes.default.object.isRequired, theme: _propTypes.default.object.isRequired, children: _propTypes.default.node, utils: _propTypes.default.object.isRequired, ampm: _propTypes.default.bool, seconds: _propTypes.default.bool }; TimePicker.defaultProps = { children: null, ampm: true, seconds: false }; var styles = function styles() { return { toolbar: { flexDirection: 'row', alignItems: 'center' }, toolbarLeftPadding: { paddingLeft: 50 }, separator: { margin: '0 4px 0 2px', cursor: 'default' }, ampmSelection: { marginLeft: 20, marginRight: -20 }, ampmSelectionWithSeconds: { marginLeft: 15, marginRight: 10 }, ampmLabel: { fontSize: 18 }, hourMinuteLabel: { display: 'flex', justifyContent: 'flex-end', alignItems: 'flex-end' }, hourMinuteLabelReverse: { display: 'flex', justifyContent: 'flex-end', alignItems: 'flex-end', flexDirection: 'row-reverse' } }; }; var _default = (0, _withStyles.default)(styles, { withTheme: true, name: 'MuiPickersTimePicker' })((0, _WithUtils.default)()(TimePicker)); exports.default = _default;