// Copyright (c) 2022 Robin Davies // // Permission is hereby granted, free of charge, to any person obtaining a copy of // this software and associated documentation files (the "Software"), to deal in // the Software without restriction, including without limitation the rights to // use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of // the Software, and to permit persons to whom the Software is furnished to do so, // subject to the following conditions: // // The above copyright notice and this permission notice shall be included in all // copies or substantial portions of the Software. // // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS // FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR // COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER // IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN // CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. import React,{ Component, SyntheticEvent } from 'react'; import { Theme } from '@mui/material/styles'; import { WithStyles } from '@mui/styles'; import createStyles from '@mui/styles/createStyles'; import withStyles from '@mui/styles/withStyles'; const styles = ({ palette }: Theme) => createStyles({ frame: { position: "absolute", width: "100%", height: "100%" }, hover: { position: "absolute", width: "100%", height: "100%", background: palette.action.hover, //opacity: palette.action.hoverOpacity }, selected: { position: "absolute", width: "100%", height: "100%", background: palette.action.selected, //opacity: palette.action.selectedOpacity } }); interface HoverProps extends WithStyles { selected: boolean; showHover?: boolean; borderRadius?: number; theme: Theme; children?: React.ReactNode; } interface HoverState { } export const SelectHoverBackground = withStyles(styles, { withTheme: true })( class extends Component { constructor(props: HoverProps) { super(props); this.state = { }; this.selfRef = React.createRef(); this.hoverElementRef = React.createRef(); this.handleMouseOver = this.handleMouseOver.bind(this); this.handleMouseLeave = this.handleMouseLeave.bind(this); } handleMouseOver(e: SyntheticEvent): void { if (this.props.showHover ?? true) { if (this.hoverElementRef.current) { this.hoverElementRef.current.style.display = "block"; } } } handleMouseLeave(e: SyntheticEvent): void { if (this.props.showHover ?? true) { if (this.hoverElementRef.current) { this.hoverElementRef.current.style.display = "none"; } } } private selfRef: React.RefObject; private hoverElementRef: React.RefObject; render() { let classes = this.props.classes; let isSelected = this.props.selected; return (
{ this.handleMouseOver(e); }} onMouseLeave={(e) => { this.handleMouseLeave(e) }} >
{ this.props.children }
); } } ); export default SelectHoverBackground;