diff --git a/src/courseware/course/sequence/Unit/ContentIFrame.jsx b/src/courseware/course/sequence/Unit/ContentIFrame.jsx
index 6d21c129b0..d38927f3b2 100644
--- a/src/courseware/course/sequence/Unit/ContentIFrame.jsx
+++ b/src/courseware/course/sequence/Unit/ContentIFrame.jsx
@@ -1,11 +1,15 @@
import PropTypes from 'prop-types';
-import React from 'react';
+import React, { useEffect, useState } from 'react';
import { ErrorPage } from '@edx/frontend-platform/react';
import { StrictDict } from '@edx/react-unit-test-utils';
-import { ModalDialog, Modal } from '@openedx/paragon';
+import {
+ ModalDialog, Modal, Icon, PageBanner,
+} from '@openedx/paragon';
import PageLoading from '@src/generic/PageLoading';
+import { getAuthenticatedHttpClient } from '@edx/frontend-platform/auth';
+import { WarningFilled } from '@openedx/paragon/icons';
import * as hooks from './hooks';
/**
@@ -27,6 +31,49 @@ export const testIDs = StrictDict({
modalIFrame: 'modal-iframe-test-id',
});
+const IFrameComponent = ({
+ url, shouldShowContent, hasLoaded, loadingMessage, showError, title, contentIFrameProps,
+}) => {
+ const [httpStatusCode, setHttpStatusCode] = useState(500);
+ useEffect(() => {
+ getAuthenticatedHttpClient().get(url).then(res => {
+ setHttpStatusCode(res.status);
+ }).catch((error) => {
+ setHttpStatusCode(error.response.status);
+ });
+ }, []);
+ return (
+ <>
+ {(shouldShowContent && !hasLoaded) && (
+ // eslint-disable-next-line no-nested-ternary
+ showError ? (httpStatusCode >= 400 && httpStatusCode < 500
+ ? (
+