@e-group/material-lab
Version:
EGroup Team Lab - Incubator for EGroup Team experimental React components.
105 lines (99 loc) • 3.91 kB
JavaScript
import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
import React from 'react';
import clsx from 'clsx';
import { IconButton, Typography, createStyles, withStyles } from '@material-ui/core';
const startBorderStyle = {
borderRadius: '50% 0 0 50%'
};
const endBorderStyle = {
borderRadius: '0 50% 50% 0'
};
const styles = theme => createStyles({
inRange: {
backgroundColor: theme.palette.primary.light,
'&:first-child': startBorderStyle,
'&:last-child': endBorderStyle
},
startBorder: startBorderStyle,
endBorder: endBorderStyle,
buttonContainer: {
display: 'flex',
borderStyle: 'dashed',
borderWidth: 2,
borderColor: 'transparent'
},
button: {
height: 36,
width: 36,
transform: 'scale(1.1)'
},
buttonText: {
lineHeight: 1.6
},
outlined: {
border: "1px solid ".concat(theme.palette.primary.dark)
},
filled: {
'&:hover': {
backgroundColor: theme.palette.primary.dark
},
backgroundColor: theme.palette.primary.dark
},
hovered: {
borderTopColor: theme.palette.action.focus,
borderBottomColor: theme.palette.action.focus,
'&:first-child': _objectSpread(_objectSpread({}, startBorderStyle), {}, {
borderLeftColor: theme.palette.action.focus
}),
'&:last-child': _objectSpread(_objectSpread({}, endBorderStyle), {}, {
borderRightColor: theme.palette.action.focus
})
},
hoveredStart: _objectSpread(_objectSpread({}, startBorderStyle), {}, {
borderLeftColor: theme.palette.action.focus
}),
hoveredEnd: _objectSpread(_objectSpread({}, endBorderStyle), {}, {
borderRightColor: theme.palette.action.focus
}),
contrast: {
color: theme.palette.primary.contrastText
},
invisible: {
visibility: 'hidden'
}
});
const Day = ({
classes,
startOfDateRange,
endOfDateRange,
disabled,
isInDateRange,
onClick,
onHover,
filled,
isInHoveredRange,
value,
outlined,
invisible,
endOfHoveredRange,
startOfHoveredRange
}) => {
const enable = !disabled && !invisible;
return /*#__PURE__*/React.createElement("div", {
className: clsx(classes.buttonContainer, invisible && classes.invisible, startOfDateRange && classes.startBorder, endOfDateRange && classes.endBorder, enable && isInDateRange && classes.inRange, enable && isInHoveredRange && classes.hovered, enable && isInHoveredRange && endOfHoveredRange && classes.hoveredEnd, enable && isInHoveredRange && startOfHoveredRange && classes.hoveredStart)
}, /*#__PURE__*/React.createElement(IconButton, {
className: clsx(classes.button, !disabled && outlined && classes.outlined, !disabled && filled && classes.filled),
disabled: disabled,
onClick: onClick,
onMouseOver: onHover
}, /*#__PURE__*/React.createElement(Typography, {
color: disabled ? 'textSecondary' : 'textPrimary',
className: clsx(classes.buttonText, !disabled && filled && classes.contrast),
variant: "body2"
}, value)));
};
export default withStyles(styles, {
name: 'EgDay'
})(Day);