CredentialRow.tsx 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. import {Fragment} from 'react';
  2. import {Button} from 'sentry/components/button';
  3. import Confirm from 'sentry/components/confirm';
  4. import {Flex} from 'sentry/components/container/flex';
  5. import LoadingIndicator from 'sentry/components/loadingIndicator';
  6. import TimeSince from 'sentry/components/timeSince';
  7. import {Tooltip} from 'sentry/components/tooltip';
  8. import {IconSubtract} from 'sentry/icons';
  9. import {t} from 'sentry/locale';
  10. import type {TempestCredentials} from './types';
  11. export function CredentialRow({
  12. credential,
  13. isRemoving,
  14. removeCredential,
  15. }: {
  16. credential: TempestCredentials;
  17. isRemoving: boolean;
  18. removeCredential?: (data: {id: number}) => void;
  19. }) {
  20. return (
  21. <Fragment>
  22. <Flex align="center">{credential.clientId}</Flex>
  23. <Flex align="center">{credential.clientSecret}</Flex>
  24. <Flex align="center">
  25. <TimeSince date={credential.dateAdded} />
  26. </Flex>
  27. <Flex align="center">
  28. {credential.createdByEmail ? credential.createdByEmail : '\u2014'}
  29. </Flex>
  30. <Flex align="center" justify="flex-end">
  31. <Tooltip
  32. title={t('You must be an organization admin to remove credentials.')}
  33. disabled={!!removeCredential}
  34. >
  35. <Confirm
  36. message={t('Are you sure you want to remove the credentials?')}
  37. onConfirm={
  38. removeCredential ? () => removeCredential({id: credential.id}) : undefined
  39. }
  40. disabled={isRemoving || !removeCredential}
  41. >
  42. <Button
  43. size="xs"
  44. disabled={isRemoving || !removeCredential}
  45. aria-label={t('Remove credentials')}
  46. icon={
  47. isRemoving ? (
  48. <LoadingIndicator mini />
  49. ) : (
  50. <IconSubtract isCircled size="xs" />
  51. )
  52. }
  53. >
  54. {t('Remove')}
  55. </Button>
  56. </Confirm>
  57. </Tooltip>
  58. </Flex>
  59. </Fragment>
  60. );
  61. }