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 { export interface IPaymentResponse {
payment_url: string; // URL where customer needs to continue with payment flow 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 { useNavigate, useSearchParams } from 'react-router-dom';
import Status from '@/components/Status/Status'; import Status from '@/components/Status/Status';
import { postMessageToParent } from '@/utils/parentMessage';
import type { TCashierResultStatus } from '@/features/cashier/types';
import './PaymentStatus.scss'; import './PaymentStatus.scss';
function PaymentStatus() { function PaymentStatus() {
@ -8,13 +11,21 @@ function PaymentStatus() {
// Get status from URL query params // Get status from URL query params
const statusParam = searchParams.get('status'); const statusParam = searchParams.get('status');
const status: 'success' | 'cancel' | 'error' = const status: TCashierResultStatus =
statusParam === 'success' || statusParam === 'cancel' || statusParam === 'error' statusParam === 'success' || statusParam === 'cancel' || statusParam === 'error'
? statusParam ? statusParam
: 'error'; // Default to error if invalid or missing : 'error'; // Default to error if invalid or missing
// Get message from URL params or use default // 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 = () => { const handleAction = () => {
navigate('/'); navigate('/');
@ -38,7 +49,7 @@ function PaymentStatus() {
); );
} }
function getDefaultMessage(type: 'success' | 'cancel' | 'error'): string { function getDefaultMessage(type: TCashierResultStatus): string {
switch (type) { switch (type) {
case 'success': case 'success':
return 'Payment completed successfully!'; 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);
}
}