shareIssue.tsx 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. import styled from '@emotion/styled';
  2. import {openModal} from 'sentry/actionCreators/modal';
  3. import {Button} from 'sentry/components/button';
  4. import {Tooltip} from 'sentry/components/tooltip';
  5. import {t} from 'sentry/locale';
  6. import type {Group, Organization} from 'sentry/types';
  7. import ShareIssueModal from './shareModal';
  8. interface ShareIssueProps {
  9. group: Group;
  10. onToggle: () => void;
  11. organization: Organization;
  12. disabled?: boolean;
  13. disabledReason?: string;
  14. }
  15. function ShareIssue({
  16. onToggle,
  17. disabled,
  18. group,
  19. organization,
  20. disabledReason,
  21. }: ShareIssueProps) {
  22. const handleOpen = () => {
  23. // Starts sharing as soon as dropdown is opened
  24. openModal(modalProps => (
  25. <ShareIssueModal
  26. {...modalProps}
  27. organization={organization}
  28. projectSlug={group.project.slug}
  29. groupId={group.id}
  30. onToggle={onToggle}
  31. />
  32. ));
  33. };
  34. return (
  35. <Tooltip title={disabledReason} disabled={!disabled}>
  36. <Button
  37. size="xs"
  38. onClick={handleOpen}
  39. disabled={disabled}
  40. icon={
  41. <IndicatorDot
  42. aria-label={group.isPublic ? t('Shared') : t('Not Shared')}
  43. isShared={group.isPublic}
  44. />
  45. }
  46. >
  47. {t('Share')}
  48. </Button>
  49. </Tooltip>
  50. );
  51. }
  52. export default ShareIssue;
  53. const IndicatorDot = styled('div')<{isShared?: boolean}>`
  54. border-radius: 50%;
  55. width: 10px;
  56. height: 10px;
  57. background: ${p => (p.isShared ? p.theme.active : p.theme.border)};
  58. `;