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 (

{unit.title}

{formatMessage(messages.headerPlaceholder)}

); }; Unit.propTypes = { courseId: PropTypes.string.isRequired, format: PropTypes.string, id: PropTypes.string.isRequired, onLoaded: PropTypes.func, }; Unit.defaultProps = { format: null, onLoaded: undefined, }; export default Unit;