Merged in feat/SW-618-payment-non-happy-path (pull request #874)

Feat/SW-618 payment non happy path

* feat(SW-618): filter out expired saved cards

* feat(SW-618): Added payment error codes and way of showing messages based on code

* feat(SW-618): show error message if max retries has been reached and remove search param after showing toast

* fix(SW-618): move fallback error codes

* fix(SW-618): remove ref from stopping useEffect to run twice

* fix(SW-618): refactored logic for toast message and minor fixes

* fix(SW-618): remove error message enum due to static analysis problems


Approved-by: Christian Andolf
Approved-by: Arvid Norlin
This commit is contained in:
Tobias Johansson
2024-11-18 14:10:11 +00:00
parent d18bc45b19
commit a70f8a3b97
13 changed files with 176 additions and 28 deletions

View File

@@ -2,6 +2,7 @@ import { metrics } from "@opentelemetry/api"
import { cache } from "react"
import * as api from "@/lib/api"
import { dt } from "@/lib/dt"
import {
protectedProcedure,
router,
@@ -208,7 +209,13 @@ export function parsedUser(data: User, isMFA: boolean) {
return user
}
async function getCreditCards(session: Session) {
async function getCreditCards({
session,
onlyNonExpired,
}: {
session: Session
onlyNonExpired?: boolean
}) {
getCreditCardsCounter.add(1)
console.info("api.profile.creditCards start", JSON.stringify({}))
const apiResponse = await api.get(api.endpoints.v1.Profile.creditCards, {
@@ -255,7 +262,19 @@ async function getCreditCards(session: Session) {
}
getCreditCardsSuccessCounter.add(1)
console.info("api.profile.creditCards success", JSON.stringify({}))
return verifiedData.data.data
return verifiedData.data.data.filter((card) => {
if (onlyNonExpired) {
try {
const expirationDate = dt(card.expirationDate).startOf("day")
const currentDate = dt().startOf("day")
return expirationDate > currentDate
} catch (error) {
return false
}
}
return true
})
}
export const userQueryRouter = router({
@@ -492,7 +511,7 @@ export const userQueryRouter = router({
)
const nextCursor =
verifiedData.data.links &&
verifiedData.data.links.offset < verifiedData.data.links.totalCount
verifiedData.data.links.offset < verifiedData.data.links.totalCount
? verifiedData.data.links.offset
: undefined
@@ -585,7 +604,7 @@ export const userQueryRouter = router({
})
const nextCursor =
verifiedData.data.links &&
verifiedData.data.links.offset < verifiedData.data.links.totalCount
verifiedData.data.links.offset < verifiedData.data.links.totalCount
? verifiedData.data.links.offset
: undefined
@@ -730,14 +749,14 @@ export const userQueryRouter = router({
}),
creditCards: protectedProcedure.query(async function ({ ctx }) {
return await getCreditCards(ctx.session)
return await getCreditCards({ session: ctx.session })
}),
safeCreditCards: safeProtectedProcedure.query(async function ({ ctx }) {
if (!ctx.session) {
return null
}
return await getCreditCards(ctx.session)
return await getCreditCards({ session: ctx.session, onlyNonExpired: true })
}),
membershipCards: protectedProcedure.query(async function ({ ctx }) {