import type { PayChannel } from "@/data/schemas/payment"; import type { AppSubscriptionReturnTo } from "@/router/navigation-types"; export type PaymentSearchParamValue = string | string[] | undefined; export type PaymentSearchParams = Record; export interface PaymentReturnSearchParams { initialPayChannel: PayChannel | null; shouldResumePendingOrder: boolean; } export function getFirstPaymentSearchParam( value: PaymentSearchParamValue, ): string | null { return Array.isArray(value) ? (value[0] ?? null) : (value ?? null); } export function parsePaymentPayChannel( value: PaymentSearchParamValue, ): PayChannel | null { const channel = getFirstPaymentSearchParam(value); return channel === "ezpay" || channel === "stripe" ? channel : null; } export function parseSubscriptionReturnTo( value: PaymentSearchParamValue, ): AppSubscriptionReturnTo { const returnTo = getFirstPaymentSearchParam(value); if ( returnTo === "chat" || returnTo === "private-room" || returnTo === "profile" ) { return returnTo; } return null; } export function parsePaymentReturnSearchParams( searchParams: PaymentSearchParams, ): PaymentReturnSearchParams { return { initialPayChannel: parsePaymentPayChannel(searchParams.payChannel), shouldResumePendingOrder: getFirstPaymentSearchParam(searchParams.paymentReturn) === "1", }; }