TooltipParent.tsx 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. import React, { Component } from "react";
  2. import styled from "styled-components";
  3. type PropsType = {
  4. tooltipText: string;
  5. };
  6. type StateType = {
  7. showTooltip: boolean;
  8. };
  9. export default class TooltipParent extends Component<PropsType, StateType> {
  10. state = {
  11. showTooltip: false,
  12. };
  13. renderTooltip = (): JSX.Element | undefined => {
  14. if (this.state.showTooltip) {
  15. return <Tooltip>{this.props.tooltipText}</Tooltip>;
  16. }
  17. };
  18. render() {
  19. return (
  20. <StyledTooltipParent
  21. onMouseOver={() => {
  22. this.setState({ showTooltip: true });
  23. }}
  24. onMouseOut={() => {
  25. this.setState({ showTooltip: false });
  26. }}
  27. >
  28. {this.props.children}
  29. {this.renderTooltip()}
  30. </StyledTooltipParent>
  31. );
  32. }
  33. }
  34. const Tooltip = styled.div`
  35. position: absolute;
  36. left: 10px;
  37. top: 20px;
  38. height: 18px;
  39. padding: 2px 5px;
  40. background: #383842dd;
  41. display: flex;
  42. align-items: center;
  43. justify-content: center;
  44. flex: 1;
  45. color: white;
  46. font-size: 12px;
  47. font-family: "Work Sans", sans-serif;
  48. outline: 1px solid #ffffff55;
  49. opacity: 0;
  50. animation: faded-in 0.2s 0.15s;
  51. animation-fill-mode: forwards;
  52. @keyframes faded-in {
  53. from {
  54. opacity: 0;
  55. }
  56. to {
  57. opacity: 1;
  58. }
  59. }
  60. `;
  61. const StyledTooltipParent = styled.div`
  62. position: relative;
  63. `;