diff --git a/packages/cashier/src/components/page-container/page-container.scss b/packages/cashier/src/components/page-container/page-container.scss index d450a607ae40..f7800cfb3ef5 100644 --- a/packages/cashier/src/components/page-container/page-container.scss +++ b/packages/cashier/src/components/page-container/page-container.scss @@ -11,6 +11,7 @@ } &__content { + min-height: 100%; display: flex; flex-direction: column; align-items: center; diff --git a/packages/cashier/src/modules/deposit-fiat/components/deposit-fiat-iframe/__test__/deposit-fiat-iframe.spec.tsx b/packages/cashier/src/modules/deposit-fiat/components/deposit-fiat-iframe/__test__/deposit-fiat-iframe.spec.tsx new file mode 100644 index 000000000000..aad0d980aff6 --- /dev/null +++ b/packages/cashier/src/modules/deposit-fiat/components/deposit-fiat-iframe/__test__/deposit-fiat-iframe.spec.tsx @@ -0,0 +1,55 @@ +import React from 'react'; +import { render, screen } from '@testing-library/react'; +import { mockStore } from '@deriv/stores'; +import { useDepositFiatAddress } from '@deriv/hooks'; +import CashierProviders from '../../../../../cashier-providers'; +import DepositFiatIframe from '../deposit-fiat-iframe'; + +jest.mock('@deriv/hooks', () => ({ + ...jest.requireActual('@deriv/hooks'), + useDepositFiatAddress: jest.fn(), +})); + +const mockedUseDepositFiatAddress = useDepositFiatAddress as jest.MockedFunction; + +describe('', () => { + it('should render the loader when waiting for the response from the cashier API', () => { + // @ts-expect-error need to come up with a way to mock the return type of useFetch + mockedUseDepositFiatAddress.mockReturnValue({ + data: undefined, + isLoading: false, + isSuccess: true, + error: undefined, + resend: jest.fn(), + }); + + const mock = mockStore({}); + + const wrapper = ({ children }: { children: JSX.Element }) => ( + {children} + ); + render(, { wrapper }); + + expect(screen.getByTestId('dt_initial_loader')).toBeInTheDocument(); + }); + + it('should render the iframe once the url is received from API', () => { + // @ts-expect-error need to come up with a way to mock the return type of useFetch + mockedUseDepositFiatAddress.mockReturnValue({ + data: 'https://example.com', + isLoading: false, + isSuccess: true, + error: undefined, + resend: jest.fn(), + }); + + const mock = mockStore({}); + + const wrapper = ({ children }: { children: JSX.Element }) => ( + {children} + ); + render(, { wrapper }); + + expect(screen.getByTestId('dt_deposit_fiat_iframe_iframe')).toBeInTheDocument(); + }); +}); diff --git a/packages/cashier/src/modules/deposit-fiat/components/deposit-fiat-iframe/deposit-fiat-iframe.scss b/packages/cashier/src/modules/deposit-fiat/components/deposit-fiat-iframe/deposit-fiat-iframe.scss new file mode 100644 index 000000000000..7dd40dccb39a --- /dev/null +++ b/packages/cashier/src/modules/deposit-fiat/components/deposit-fiat-iframe/deposit-fiat-iframe.scss @@ -0,0 +1,6 @@ +.deposit-fiat-iframe { + &__iframe { + width: 100%; + flex: 1; + } +} diff --git a/packages/cashier/src/modules/deposit-fiat/components/deposit-fiat-iframe/deposit-fiat-iframe.tsx b/packages/cashier/src/modules/deposit-fiat/components/deposit-fiat-iframe/deposit-fiat-iframe.tsx new file mode 100644 index 000000000000..672d63086e81 --- /dev/null +++ b/packages/cashier/src/modules/deposit-fiat/components/deposit-fiat-iframe/deposit-fiat-iframe.tsx @@ -0,0 +1,32 @@ +import React, { useState } from 'react'; +import { Loading } from '@deriv/components'; +import { useDepositFiatAddress } from '@deriv/hooks'; +import { observer } from '@deriv/stores'; +import './deposit-fiat-iframe.scss'; + +const DepositFiatIframe: React.FC = observer(() => { + const { data: iframe_url, isSuccess } = useDepositFiatAddress(); + const [is_loading, setIsLoading] = useState(true); + + React.useEffect(() => { + setIsLoading(true); + }, [iframe_url]); + + return ( + + {is_loading && } + {isSuccess && ( +