Skip to content

Commit f4384d8

Browse files
authored
fix: Reported new donation flow issues (#1979)
* fix: Reported new donation flow issues * fix: Non-anonymous donation being flagged as anonymous * fix: E2E test breakage * chore: Remove redundant console log
1 parent 953b219 commit f4384d8

File tree

5 files changed

+19
-16
lines changed

5 files changed

+19
-16
lines changed

e2e/pages/web-pages/donation/donation.page.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ export class DonationPage extends CampaignsPage {
5656
bgLocalizationValidation['informed-agree-with'] + ' ' + bgLocalizationValidation.gdpr
5757
private readonly enPrivacyCheckboxText =
5858
enLocalizationValidation['informed-agree-with'] + ' ' + enLocalizationValidation.gdpr
59-
private readonly bgStripeErrorNoBalanceText = 'Картата Ви не разполага с достатъчно средства.'
59+
private readonly bgStripeErrorNoBalanceText = 'В картата ви няма достатъчно средства. Опитайте с друга.'
6060

6161
async checkPageUrlByRegExp(urlRegExpAsString?: string, timeoutParam = 10000): Promise<void> {
6262
await this.page.waitForTimeout(1000)

src/components/client/donation-flow/DonationFlowForm.tsx

Lines changed: 15 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,18 @@ export const validationSchema: yup.SchemaOf<DonationFormData> = yup
101101
export function DonationFlowForm() {
102102
const formikRef = useRef<FormikProps<DonationFormData> | null>(null)
103103
const { t } = useTranslation('donation-flow')
104+
const { campaign, setupIntent, paymentError, setPaymentError, idempotencyKey } = useDonationFlow()
105+
const stripe = useStripe()
106+
const elements = useElements()
107+
const router = useRouter()
108+
const updateSetupIntentMutation = useUpdateSetupIntent()
109+
const cancelSetupIntentMutation = useCancelSetupIntent()
110+
const paymentMethodSectionRef = React.useRef<HTMLDivElement>(null)
111+
const authenticationSectionRef = React.useRef<HTMLDivElement>(null)
112+
const stripeChargeRef = React.useRef<string>(idempotencyKey)
113+
const [showCancelDialog, setShowCancelDialog] = React.useState(false)
114+
const [submitPaymentLoading, setSubmitPaymentLoading] = React.useState(false)
115+
const { data: { user: person } = { user: null } } = useCurrentPerson()
104116
const { data: session } = useSession({
105117
required: false,
106118
onUnauthenticated: () => {
@@ -117,17 +129,6 @@ export function DonationFlowForm() {
117129
formikRef.current?.setFieldValue('email', '')
118130
formikRef.current?.setFieldValue('isAnonymous', true, false)
119131
}, [session])
120-
const { campaign, setupIntent, paymentError, setPaymentError, idempotencyKey } = useDonationFlow()
121-
const stripe = useStripe()
122-
const elements = useElements()
123-
const router = useRouter()
124-
const updateSetupIntentMutation = useUpdateSetupIntent()
125-
const cancelSetupIntentMutation = useCancelSetupIntent()
126-
const paymentMethodSectionRef = React.useRef<HTMLDivElement>(null)
127-
const authenticationSectionRef = React.useRef<HTMLDivElement>(null)
128-
const [showCancelDialog, setShowCancelDialog] = React.useState(false)
129-
const [submitPaymentLoading, setSubmitPaymentLoading] = React.useState(false)
130-
const { data: { user: person } = { user: null } } = useCurrentPerson()
131132

132133
return (
133134
<Formik
@@ -186,6 +187,7 @@ export function DonationFlowForm() {
186187
return_url: `${window.location.origin}/${routes.campaigns.donationStatus(
187188
campaign.slug,
188189
)}`,
190+
personId: !values.isAnonymous && session?.user && person?.id ? person.id : null,
189191
},
190192
},
191193
})
@@ -197,7 +199,7 @@ export function DonationFlowForm() {
197199
campaign,
198200
values,
199201
session,
200-
idempotencyKey,
202+
stripeChargeRef.current,
201203
)
202204
router.push(
203205
`${window.location.origin}${routes.campaigns.donationStatus(campaign.slug)}?p_status=${
@@ -210,7 +212,7 @@ export function DonationFlowForm() {
210212
type: 'invalid_request_error',
211213
message: (error as StripeError).message ?? t('step.summary.alerts.error'),
212214
})
213-
215+
stripeChargeRef.current = crypto.randomUUID()
214216
return
215217
}
216218

src/components/client/donation-flow/alerts/AlertsColumn.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,7 @@ function AlertsColumn({
6060
<>
6161
{updatedRefArray.map((ref, index) => {
6262
const alert = alerts[ref.current?.id as keyof typeof alerts]
63+
if (!alert) return null
6364
return <AnchoredAlert key={index} sectionRef={ref} {...alert} />
6465
})}
6566
</>

src/components/client/donation-flow/contexts/DonationFlowProvider.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ type DonationContext = {
1010
paymentError: StripeError | null
1111
setPaymentError: React.Dispatch<React.SetStateAction<StripeError | null>>
1212
campaign: CampaignResponse
13-
stripe: StripeType | null
13+
stripe: Promise<StripeType | null>
1414
idempotencyKey: string
1515
}
1616

src/service/stripeClient.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,4 +4,4 @@ const {
44
publicRuntimeConfig: { STRIPE_PUBLISHABLE_KEY },
55
} = getConfig()
66

7-
export const stripe = await loadStripe(STRIPE_PUBLISHABLE_KEY)
7+
export const stripe = loadStripe(STRIPE_PUBLISHABLE_KEY)

0 commit comments

Comments
 (0)