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 + ? ( + + Please signin to view this content + + ) : ) : + )} + {shouldShowContent && ( +
+