newTokenHandler.tsx 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. import type {MouseEventHandler} from 'react';
  2. import styled from '@emotion/styled';
  3. import {Button} from 'sentry/components/button';
  4. import {Alert} from 'sentry/components/core/alert';
  5. import FieldGroup from 'sentry/components/forms/fieldGroup';
  6. import PanelItem from 'sentry/components/panels/panelItem';
  7. import TextCopyInput from 'sentry/components/textCopyInput';
  8. import {t} from 'sentry/locale';
  9. import {space} from 'sentry/styles/space';
  10. function NewTokenHandler({
  11. token,
  12. handleGoBack,
  13. }: {
  14. handleGoBack: MouseEventHandler;
  15. token: string;
  16. }) {
  17. return (
  18. <div>
  19. <Alert.Container>
  20. <Alert type="warning" showIcon system>
  21. {t("Please copy this token to a safe place — it won't be shown again!")}
  22. </Alert>
  23. </Alert.Container>
  24. <PanelItem>
  25. <InputWrapper>
  26. <FieldGroupNoPadding
  27. label={t('Token')}
  28. help={t('You can only view this token when it was created.')}
  29. inline
  30. flexibleControlStateSize
  31. >
  32. <TextCopyInput aria-label={t('Generated token')}>{token}</TextCopyInput>
  33. </FieldGroupNoPadding>
  34. </InputWrapper>
  35. </PanelItem>
  36. <PanelItem>
  37. <ButtonWrapper>
  38. <Button onClick={handleGoBack} priority="primary">
  39. {t('Done')}
  40. </Button>
  41. </ButtonWrapper>
  42. </PanelItem>
  43. </div>
  44. );
  45. }
  46. const InputWrapper = styled('div')`
  47. flex: 1;
  48. `;
  49. const FieldGroupNoPadding = styled(FieldGroup)`
  50. padding: 0;
  51. `;
  52. const ButtonWrapper = styled('div')`
  53. margin-left: auto;
  54. display: flex;
  55. flex-direction: column;
  56. align-items: flex-end;
  57. font-size: ${p => p.theme.fontSizeSmall};
  58. gap: ${space(1)};
  59. `;
  60. export default NewTokenHandler;