sentryAppComponentIcon.tsx 1.1 KB

12345678910111213141516171819202122232425262728293031323334
  1. import styled from '@emotion/styled';
  2. import SentryAppAvatar from 'sentry/components/avatar/sentryAppAvatar';
  3. import ConfigStore from 'sentry/stores/configStore';
  4. import {SentryAppComponent} from 'sentry/types';
  5. type Props = {
  6. sentryAppComponent: SentryAppComponent;
  7. };
  8. /**
  9. * Icon Renderer for SentryAppComponents with UI
  10. * (e.g. Issue Linking, Stacktrace Linking)
  11. */
  12. const SentryAppComponentIcon = ({sentryAppComponent: {sentryApp}}: Props) => {
  13. const selectedAvatar = sentryApp?.avatars?.find(({color}) => color === false);
  14. const isDefault = selectedAvatar?.avatarType !== 'upload';
  15. return (
  16. <SentryAppAvatarWrapper
  17. isDark={ConfigStore.get('theme') === 'dark'}
  18. isDefault={isDefault}
  19. >
  20. <SentryAppAvatar sentryApp={sentryApp} size={20} isColor={false} />
  21. </SentryAppAvatarWrapper>
  22. );
  23. };
  24. export default SentryAppComponentIcon;
  25. const SentryAppAvatarWrapper = styled('span')<{isDark: boolean; isDefault: boolean}>`
  26. color: ${({isDark}) => (isDark ? 'white' : 'black')};
  27. filter: ${p => (p.isDark && !p.isDefault ? 'invert(1)' : 'invert(0)')};
  28. line-height: 0;
  29. `;