|
@@ -1,66 +0,0 @@
|
|
-import React, { useState, useRef } from "react";
|
|
|
|
-import styled from "styled-components";
|
|
|
|
-
|
|
|
|
-const Container = styled.div`
|
|
|
|
- position: relative;
|
|
|
|
- display: inline-flex;
|
|
|
|
- justify-content: center;
|
|
|
|
-`
|
|
|
|
-
|
|
|
|
-const UnderlinedSpan = styled.span`
|
|
|
|
- border-bottom: 1px dashed #bbb;
|
|
|
|
-`
|
|
|
|
-
|
|
|
|
-const ToolTip = styled.span`
|
|
|
|
- background-color: black;
|
|
|
|
- color: white;
|
|
|
|
- text-align: center;
|
|
|
|
- padding: 2px 8px;
|
|
|
|
- border-radius: 8px;
|
|
|
|
- position: absolute;
|
|
|
|
- z-index: 1;
|
|
|
|
- top: -115%;
|
|
|
|
- white-space: nowrap;
|
|
|
|
- transition: opacity 0.25s;
|
|
|
|
- opacity: ${({ show }) => show ? 0.75 : 0};
|
|
|
|
-`
|
|
|
|
-
|
|
|
|
-const InvisbleTextarea = styled.textarea`
|
|
|
|
- position: absolute;
|
|
|
|
- top: -10000px;
|
|
|
|
- z-index: -10000;
|
|
|
|
- opacity: 0;
|
|
|
|
-`
|
|
|
|
-
|
|
|
|
-export default ({ text, children }) => {
|
|
|
|
- const textareaRef = useRef(null);
|
|
|
|
- const [hovered, setHovered] = useState(false);
|
|
|
|
- const [copied, setCopied] = useState(false);
|
|
|
|
-
|
|
|
|
- const onClick = () => {
|
|
|
|
- textareaRef.current.select();
|
|
|
|
- document.execCommand("copy");
|
|
|
|
- setCopied(true);
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- const onHover = () => {
|
|
|
|
- setCopied(false);
|
|
|
|
- setHovered(true);
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- const onUnhover = () => {
|
|
|
|
- setHovered(false);
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- return (
|
|
|
|
- <Container>
|
|
|
|
- <UnderlinedSpan onClick={onClick} onMouseOver={onHover} onMouseOut={onUnhover}>
|
|
|
|
- {children ? children : text}
|
|
|
|
- </UnderlinedSpan>
|
|
|
|
- <ToolTip show={hovered}>
|
|
|
|
- {copied ? "Copied!" : "Click to Copy"}
|
|
|
|
- </ToolTip>
|
|
|
|
- <InvisbleTextarea ref={textareaRef} value={text} readOnly />
|
|
|
|
- </Container>
|
|
|
|
- )
|
|
|
|
-}
|
|
|