Fixed more to redirections

This commit is contained in:
Mitchell Magro 2025-12-29 19:40:38 +01:00
parent c405d22fbd
commit 4f90aeff3c
3 changed files with 37 additions and 3 deletions

View File

@ -45,3 +45,11 @@ export interface IPaymentRequest {
export interface IPaymentResponse {
payment_url: string; // URL where customer needs to continue with payment flow
}
export type TCashierResultStatus = 'success' | 'cancel' | 'error';
export interface ICashierResultMessage {
type: 'CASHIER_RESULT';
status: TCashierResultStatus;
message?: string;
}

View File

@ -1,5 +1,8 @@
import { useEffect } from 'react';
import { useNavigate, useSearchParams } from 'react-router-dom';
import Status from '@/components/Status/Status';
import { postMessageToParent } from '@/utils/parentMessage';
import type { TCashierResultStatus } from '@/features/cashier/types';
import './PaymentStatus.scss';
function PaymentStatus() {
@ -8,13 +11,21 @@ function PaymentStatus() {
// Get status from URL query params
const statusParam = searchParams.get('status');
const status: 'success' | 'cancel' | 'error' =
const status: TCashierResultStatus =
statusParam === 'success' || statusParam === 'cancel' || statusParam === 'error'
? statusParam
: 'error'; // Default to error if invalid or missing
// Get message from URL params or use default
const message = searchParams.get('message') || getDefaultMessage(status);
const message = getDefaultMessage(status);
// Notify parent window about the payment result
useEffect(() => {
postMessageToParent({
type: 'CASHIER_RESULT',
status,
});
}, [status]);
const handleAction = () => {
navigate('/');
@ -38,7 +49,7 @@ function PaymentStatus() {
);
}
function getDefaultMessage(type: 'success' | 'cancel' | 'error'): string {
function getDefaultMessage(type: TCashierResultStatus): string {
switch (type) {
case 'success':
return 'Payment completed successfully!';

View File

@ -0,0 +1,15 @@
import type { ICashierResultMessage } from '@/features/cashier/types';
/**
* Posts a message to the parent window (useful for iframe integrations)
* @param message - The message object to send
* @param targetOrigin - The target origin for the message (defaults to '*' for flexibility)
*/
export function postMessageToParent(
message: ICashierResultMessage,
targetOrigin: string = '*'
): void {
if (window.parent && window.parent !== window) {
window.parent.postMessage(message, targetOrigin);
}
}