selectorItem.tsx 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. import styled from '@emotion/styled';
  2. import space from 'sentry/styles/space';
  3. type Props = {
  4. label: React.ReactNode;
  5. onClick: (value: string, e?: React.MouseEvent) => void;
  6. selected: boolean;
  7. value: string;
  8. className?: string;
  9. last?: boolean;
  10. };
  11. const BaseSelectorItem = ({onClick, value, className, label}: Props) => (
  12. <div className={className} onClick={e => onClick(value, e)}>
  13. <Label>{label}</Label>
  14. </div>
  15. );
  16. const SelectorItem = styled(BaseSelectorItem)`
  17. display: flex;
  18. cursor: pointer;
  19. white-space: nowrap;
  20. padding: ${space(1)};
  21. align-items: center;
  22. flex: 1;
  23. background-color: ${p => (p.selected ? p.theme.active : 'transparent')};
  24. color: ${p => (p.selected ? p.theme.white : p.theme.subText)};
  25. font-weight: ${p => (p.selected ? 'bold' : 'normal')};
  26. border-bottom: 1px solid ${p => (p.last ? 'transparent' : p.theme.innerBorder)};
  27. &:hover {
  28. color: ${p => p.theme.textColor};
  29. background: ${p => p.theme.hover};
  30. }
  31. `;
  32. const Label = styled('span')`
  33. flex: 1;
  34. margin-right: ${space(1)};
  35. `;
  36. export default SelectorItem;