import PropTypes from 'prop-types'; import React from 'react'; import { AppContext } from '@edx/frontend-platform/react'; import { useIntl } from '@edx/frontend-platform/i18n'; import { useModel } from '@src/generic/model-store'; import { usePluginsCallback } from '@src/generic/plugin-store'; import BookmarkButton from '../../bookmark/BookmarkButton'; import messages from '../messages'; import ContentIFrame from './ContentIFrame'; import UnitSuspense from './UnitSuspense'; import { modelKeys, views } from './constants'; import { useExamAccess, useShouldDisplayHonorCode } from './hooks'; import { getIFrameUrl } from './urls'; import UnitTitleSlot from '../../../../plugin-slots/UnitTitleSlot'; const Unit = ({ courseId, format, onLoaded, id, }) => { const { formatMessage } = useIntl(); const { authenticatedUser } = React.useContext(AppContext); const examAccess = useExamAccess({ id }); const shouldDisplayHonorCode = useShouldDisplayHonorCode({ courseId, id }); const unit = useModel(modelKeys.units, id); const isProcessing = unit.bookmarkedUpdateState === 'loading'; const view = authenticatedUser ? views.student : views.public; const getUrl = usePluginsCallback('getIFrameUrl', () => getIFrameUrl({ id, view, format, examAccess, })); const iframeUrl = getUrl(); return (