discoverQueryMenu.tsx 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. import {MouseEvent} from 'react';
  2. import styled from '@emotion/styled';
  3. import classNames from 'classnames';
  4. import Button from 'app/components/button';
  5. import DropdownMenu from 'app/components/dropdownMenu';
  6. import {IconEllipsis} from 'app/icons';
  7. import space from 'app/styles/space';
  8. const DiscoverQueryMenu = ({children}) => (
  9. <DropdownMenu>
  10. {({isOpen, getRootProps, getActorProps, getMenuProps}) => {
  11. const topLevelCx = classNames('dropdown', {
  12. 'anchor-right': true,
  13. open: isOpen,
  14. });
  15. return (
  16. <span
  17. {...getRootProps({
  18. className: topLevelCx,
  19. })}
  20. >
  21. <DropdownTarget
  22. {...getActorProps({
  23. onClick: (event: MouseEvent) => {
  24. event.stopPropagation();
  25. event.preventDefault();
  26. },
  27. })}
  28. >
  29. <Button size="small">
  30. <IconEllipsis data-test-id="context-menu" size="md" />
  31. </Button>
  32. </DropdownTarget>
  33. {isOpen && (
  34. <Menu {...getMenuProps({})} className={classNames('dropdown-menu')}>
  35. {children}
  36. </Menu>
  37. )}
  38. </span>
  39. );
  40. }}
  41. </DropdownMenu>
  42. );
  43. const DropdownTarget = styled('div')`
  44. display: flex;
  45. cursor: pointer;
  46. `;
  47. const Menu = styled('ul')`
  48. margin-top: ${space(2)};
  49. margin-right: ${space(0.25)};
  50. `;
  51. export default DiscoverQueryMenu;