clipboardTooltip.tsx 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. import React from 'react';
  2. import styled from '@emotion/styled';
  3. import Clipboard from 'app/components/clipboard';
  4. import TextOverflow from 'app/components/textOverflow';
  5. import Tooltip from 'app/components/tooltip';
  6. import {IconCopy} from 'app/icons';
  7. import space from 'app/styles/space';
  8. type Props = Omit<React.ComponentProps<typeof Tooltip>, 'isHoverable' | 'title'> & {
  9. title: string;
  10. onSuccess?: () => void;
  11. };
  12. function ClipboardTooltip({title, onSuccess, ...props}: Props) {
  13. return (
  14. <Tooltip
  15. {...props}
  16. title={
  17. <TooltipClipboardWrapper
  18. onClick={event => {
  19. event.stopPropagation();
  20. }}
  21. >
  22. <TextOverflow>{title}</TextOverflow>
  23. <Clipboard value={title} onSuccess={onSuccess}>
  24. <TooltipClipboardIconWrapper>
  25. <IconCopy size="xs" color="white" />
  26. </TooltipClipboardIconWrapper>
  27. </Clipboard>
  28. </TooltipClipboardWrapper>
  29. }
  30. isHoverable
  31. />
  32. );
  33. }
  34. export default ClipboardTooltip;
  35. const TooltipClipboardWrapper = styled('div')`
  36. display: grid;
  37. grid-template-columns: auto max-content;
  38. align-items: center;
  39. grid-gap: ${space(0.5)};
  40. `;
  41. const TooltipClipboardIconWrapper = styled('div')`
  42. position: relative;
  43. bottom: -${space(0.25)};
  44. :hover {
  45. cursor: pointer;
  46. }
  47. `;