import {useState} from 'react'; import {css} from '@emotion/react'; import styled from '@emotion/styled'; import {Button} from 'sentry/components/button'; import {Radio} from 'sentry/components/core/radio'; import Panel from 'sentry/components/panels/panel'; import PanelBody from 'sentry/components/panels/panelBody'; import PanelFooter from 'sentry/components/panels/panelFooter'; import PanelItem from 'sentry/components/panels/panelItem'; import {t, tct} from 'sentry/locale'; import {space} from 'sentry/styles/space'; import TextBlock from 'sentry/views/settings/components/text/textBlock'; import CreditCardSetup from 'getsentry/components/creditCardSetup'; import SubscriptionStore from 'getsentry/stores/subscriptionStore'; import StepHeader from 'getsentry/views/amCheckout/steps/stepHeader'; import type {StepProps} from 'getsentry/views/amCheckout/types'; type Props = StepProps; function AddPaymentMethod({ subscription, organization, isActive, stepNumber, isCompleted, onEdit, onCompleteStep, prevStepCompleted, }: Props) { const [useExisting, setUseExisting] = useState(true); const title = t('Payment Method'); const hasPayment = subscription.paymentSource && !!subscription.paymentSource.last4; const onPaymentAccepted = (data: any) => { onCompleteStep(stepNumber); SubscriptionStore.set(data.slug, data); setUseExisting(true); }; function renderBody() { const cardComponent = ( ); if (!hasPayment) { return {cardComponent}; } return ( setUseExisting(true)} data-test-id="existing-card" > setUseExisting(false)} data-test-id="new-card" > {!useExisting && cardComponent} ); } return ( {isActive && renderBody()} {isActive && hasPayment && useExisting && ( )} ); } const CreditCardOption = styled(PanelItem)<{isSelected?: boolean}>` padding: 0; border-bottom: 1px solid ${p => p.theme.innerBorder}; ${p => p.isSelected && css` background: ${p.theme.backgroundSecondary}; color: ${p.theme.textColor}; `} `; const Label = styled('label')` display: grid; grid-template-columns: max-content auto; gap: ${space(1.5)}; padding: ${space(2)}; color: ${p => p.theme.textColor}; font-weight: normal; width: 100%; margin: 0; `; const StyledRadio = styled(Radio)` background: ${p => p.theme.background}; `; const CardDetails = styled('div')` display: inline-grid; gap: ${space(0.75)}; font-size: ${p => p.theme.fontSizeExtraLarge}; color: ${p => p.theme.textColor}; font-weight: 600; `; const Description = styled(TextBlock)` font-size: ${p => p.theme.fontSizeMedium}; color: ${p => p.theme.subText}; margin: 0; font-weight: normal; `; const AddCardSetup = styled(CreditCardSetup)` padding: ${space(2)} ${space(2)} 0; color: ${p => p.theme.textColor}; .form-actions { display: grid; justify-items: end; border-top: 1px solid ${p => p.theme.border}; padding: ${space(2)}; margin: -${space(0.5)} -${space(2)} 0; } `; const StepFooter = styled(PanelFooter)` padding: ${space(2)}; display: grid; align-items: center; justify-content: end; `; export default AddPaymentMethod;