UNPKG

@material-ui/lab

Version:

Material-UI Lab - Incubator for Material-UI React components.

100 lines (90 loc) 2.61 kB
import _extends from "@babel/runtime/helpers/esm/extends"; import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose"; import * as React from 'react'; import clsx from 'clsx'; import { withStyles, createStyles } from '@material-ui/core/styles'; export const styles = theme => createStyles({ pointer: { width: 2, backgroundColor: theme.palette.primary.main, position: 'absolute', left: 'calc(50% - 1px)', bottom: '50%', transformOrigin: 'center bottom 0px' }, animateTransform: { transition: theme.transitions.create(['transform', 'height']) }, thumb: { width: 4, height: 4, backgroundColor: theme.palette.primary.contrastText, borderRadius: '100%', position: 'absolute', top: -21, left: -15, border: `14px solid ${theme.palette.primary.main}`, boxSizing: 'content-box' }, noPoint: { backgroundColor: theme.palette.primary.main } }); /** * @ignore - internal component. */ class ClockPointer extends React.Component { constructor(...args) { super(...args); this.state = { toAnimateTransform: false, // eslint-disable-next-line react/no-unused-state previousType: undefined }; this.getAngleStyle = () => { const { value, isInner, type } = this.props; const max = type === 'hours' ? 12 : 60; let angle = 360 / max * value; if (type === 'hours' && value > 12) { angle -= 360; // round up angle to max 360 degrees } return { height: isInner ? '26%' : '40%', transform: `rotateZ(${angle}deg)` }; }; } render() { const _this$props = this.props, { classes, hasSelected } = _this$props, other = _objectWithoutPropertiesLoose(_this$props, ["classes", "hasSelected", "isInner", "type", "value"]); return /*#__PURE__*/React.createElement("div", _extends({}, other, { style: this.getAngleStyle(), className: clsx(classes.pointer, this.state.toAnimateTransform && classes.animateTransform) }), /*#__PURE__*/React.createElement("div", { className: clsx(classes.thumb, hasSelected && classes.noPoint) })); } } ClockPointer.getDerivedStateFromProps = (nextProps, state) => { if (nextProps.type !== state.previousType) { return { toAnimateTransform: true, previousType: nextProps.type }; } return { toAnimateTransform: false, previousType: nextProps.type }; }; export default withStyles(styles, { name: 'MuiClockPointer' })(ClockPointer);