import styled from '@emotion/styled'; import {Button} from 'sentry/components/button'; import Confirm from 'sentry/components/confirm'; import {DateTime} from 'sentry/components/dateTime'; import PanelItem from 'sentry/components/panels/panelItem'; import {IconSubtract} from 'sentry/icons'; import {t} from 'sentry/locale'; import {space} from 'sentry/styles/space'; import type {InternalAppApiToken} from 'sentry/types'; import getDynamicText from 'sentry/utils/getDynamicText'; import {tokenPreview} from 'sentry/views/settings/organizationAuthTokens'; type Props = { onRemove: (token: InternalAppApiToken) => void; token: InternalAppApiToken; tokenPrefix?: string; }; function ApiTokenRow({token, onRemove, tokenPrefix = ''}: Props) { return ( {token.name ? token.name : ''} onRemove(token)} message={t( 'Are you sure you want to revoke %s token? It will not be usable anymore, and this cannot be undone.', tokenPreview(token.tokenLastCharacters, tokenPrefix) )} >
{t('Token')} {tokenPreview( getDynamicText({ value: token.tokenLastCharacters, fixed: 'ABCD', }), tokenPrefix )} {t('Scopes')} {token.scopes.join(', ')}
{t('Created')}
); } const StyledPanelItem = styled(PanelItem)` flex-direction: column; padding: ${space(2)}; `; const Controls = styled('div')` display: flex; align-items: center; margin-bottom: ${space(1)}; `; const Details = styled('div')` display: flex; margin-top: ${space(1)}; `; const TokenWrapper = styled('div')` flex: 1; margin-right: ${space(1)}; `; const ScopesWrapper = styled('div')` flex: 2; margin-right: ${space(4)}; `; const ScopeList = styled('div')` font-size: ${p => p.theme.fontSizeRelativeSmall}; line-height: 1.4; `; const Time = styled('time')` font-size: ${p => p.theme.fontSizeRelativeSmall}; line-height: 1.4; `; const Heading = styled('div')` font-size: ${p => p.theme.fontSizeMedium}; text-transform: uppercase; color: ${p => p.theme.subText}; margin-bottom: ${space(1)}; `; const TokenPreview = styled('div')` color: ${p => p.theme.gray300}; `; const ButtonWrapper = styled('div')` margin-left: auto; display: flex; flex-direction: column; align-items: flex-end; justify-content: flex-end; font-size: ${p => p.theme.fontSizeSmall}; gap: ${space(1)}; `; export default ApiTokenRow;