@e-group/material-lab
Version:
EGroup Team Lab - Incubator for EGroup Team experimental React components.
168 lines (150 loc) • 5.38 kB
JavaScript
"use strict";
var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard");
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
var _react = _interopRequireWildcard(require("react"));
var _core = require("@material-ui/core");
var _clsx = _interopRequireDefault(require("clsx"));
var _useControlled3 = _interopRequireDefault(require("@e-group/hooks/useControlled"));
var _scrollTo = _interopRequireDefault(require("@e-group/utils/scrollTo"));
const hours = Array.from(Array(24).keys()).map(el => el < 10 ? "0".concat(el) : "".concat(el));
const minutes = Array.from(Array(60).keys()).map(el => el < 10 ? "0".concat(el) : "".concat(el));
const styles = theme => (0, _core.createStyles)({
root: {
display: 'inline-flex'
},
header: {
height: 53,
width: '100%',
borderBottom: "1px solid ".concat(theme.palette.divider)
},
container: {
height: 285
},
columnContainer: {
overflow: 'auto',
maxHeight: 285,
padding: '4px 0',
width: 80
},
column: {
paddingBottom: 250
},
item: {
width: '100%',
textAlign: 'center',
cursor: 'pointer',
transition: 'all 0.2s',
padding: '6px 0',
'&:hover': {
backgroundColor: theme.palette.action.hover
}
},
itemActive: {
backgroundColor: theme.palette.primary.main,
color: '#fff',
'&:hover': {
backgroundColor: theme.palette.primary.main
}
}
});
const Time = props => {
const classes = props.classes,
onTimeClick = props.onTimeClick,
valueProp = props.value;
const _useControlled = (0, _useControlled3.default)({
controlled: valueProp,
default: ''
}),
_useControlled2 = (0, _slicedToArray2.default)(_useControlled, 2),
value = _useControlled2[0],
setValue = _useControlled2[1];
const hoursColumnEl = (0, _react.useRef)(null);
const hoursActiveEl = (0, _react.useRef)(null);
const minutesColumnEl = (0, _react.useRef)(null);
const minutesActiveEl = (0, _react.useRef)(null);
(0, _react.useEffect)(() => {
const hoursColumn = hoursColumnEl.current;
const hoursActive = hoursActiveEl.current;
const minsColumn = minutesColumnEl.current;
const minsActive = minutesActiveEl.current;
if (hoursColumn && hoursActive) {
(0, _scrollTo.default)(hoursColumn, hoursActive.offsetTop - 60, 300);
}
if (minsColumn && minsActive) {
(0, _scrollTo.default)(minsColumn, minsActive.offsetTop - 60, 300);
}
}, [value]);
return /*#__PURE__*/_react.default.createElement("div", {
className: classes.root
}, /*#__PURE__*/_react.default.createElement(_core.Grid, {
container: true,
direction: "column"
}, /*#__PURE__*/_react.default.createElement("div", {
className: classes.header
}), /*#__PURE__*/_react.default.createElement(_core.Grid, {
item: true,
container: true,
className: classes.container
}, /*#__PURE__*/_react.default.createElement(_core.Grid, {
ref: hoursColumnEl,
item: true,
className: classes.columnContainer
}, /*#__PURE__*/_react.default.createElement(_core.Grid, {
container: true,
direction: "column",
className: classes.column
}, hours.map(hour => {
const valueHour = value === null || value === void 0 ? void 0 : value.split(':')[0];
const valueMinute = value === null || value === void 0 ? void 0 : value.split(':')[1];
const isActive = valueHour === hour;
return /*#__PURE__*/_react.default.createElement(_core.Grid, {
ref: isActive ? hoursActiveEl : undefined,
item: true,
key: hour,
className: (0, _clsx.default)(classes.item, isActive && classes.itemActive),
onClick: () => {
if (onTimeClick) {
setValue("".concat(hour, ":").concat(valueMinute));
onTimeClick("".concat(hour, ":").concat(valueMinute));
}
}
}, /*#__PURE__*/_react.default.createElement(_core.Typography, {
variant: "body2"
}, hour));
}))), /*#__PURE__*/_react.default.createElement(_core.Grid, {
ref: minutesColumnEl,
item: true,
className: classes.columnContainer
}, /*#__PURE__*/_react.default.createElement(_core.Grid, {
container: true,
direction: "column",
className: classes.column
}, minutes.map(minute => {
const valueHour = value === null || value === void 0 ? void 0 : value.split(':')[0];
const valueMinute = value === null || value === void 0 ? void 0 : value.split(':')[1];
const isActive = valueMinute === minute;
return /*#__PURE__*/_react.default.createElement(_core.Grid, {
ref: isActive ? minutesActiveEl : undefined,
item: true,
key: minute,
className: (0, _clsx.default)(classes.item, isActive && classes.itemActive),
onClick: () => {
if (onTimeClick) {
setValue("".concat(valueHour, ":").concat(minute));
onTimeClick("".concat(valueHour, ":").concat(minute));
}
}
}, /*#__PURE__*/_react.default.createElement(_core.Typography, {
variant: "body2"
}, minute));
}))))));
};
var _default = (0, _core.withStyles)(styles, {
name: 'EgTime'
})(Time);
exports.default = _default;