diff --git a/src/course-home/outline-tab/messages.js b/src/course-home/outline-tab/messages.js index 1e6a107e..0a2de618 100644 --- a/src/course-home/outline-tab/messages.js +++ b/src/course-home/outline-tab/messages.js @@ -216,6 +216,10 @@ const messages = defineMessages({ id: 'learning.proctoringPanel.reviewRequirementsButton', defaultMessage: 'Review instructions and system requirements', }, + proctoringOnboardingButtonPastDue: { + id: 'learning.proctoringPanel.onboardingButtonPastDue', + defaultMessage: 'Onboarding Past Due', + }, }); export default messages; diff --git a/src/course-home/outline-tab/widgets/ProctoringInfoPanel.jsx b/src/course-home/outline-tab/widgets/ProctoringInfoPanel.jsx index acde48d6..146618f7 100644 --- a/src/course-home/outline-tab/widgets/ProctoringInfoPanel.jsx +++ b/src/course-home/outline-tab/widgets/ProctoringInfoPanel.jsx @@ -9,10 +9,12 @@ import messages from '../messages'; import { getProctoringInfoData } from '../../data/api'; function ProctoringInfoPanel({ courseId, username, intl }) { - const [status, setStatus] = useState(''); const [link, setLink] = useState(''); - const [releaseDate, setReleaseDate] = useState(null); + const [onboardingPastDue, setOnboardingPastDue] = useState(false); + const [showInfoPanel, setShowInfoPanel] = useState(false); + const [status, setStatus] = useState(''); const [readableStatus, setReadableStatus] = useState(''); + const [releaseDate, setReleaseDate] = useState(null); const readableStatuses = { notStarted: 'notStarted', @@ -77,6 +79,10 @@ function ProctoringInfoPanel({ courseId, username, intl }) { .then( response => { if (response) { + if (Object.keys(response).length > 0) { + setShowInfoPanel(true); + } + setStatus(response.onboarding_status); setLink(response.onboarding_link); const expirationDate = response.expiration_date; @@ -86,14 +92,54 @@ function ProctoringInfoPanel({ courseId, username, intl }) { setReadableStatus(getReadableStatusClass(response.onboarding_status)); } setReleaseDate(new Date(response.onboarding_release_date)); + setOnboardingPastDue(response.onboarding_past_due); } }, ); }, []); + let onboardingExamButton = null; + + if (isNotYetReleased(releaseDate)) { + onboardingExamButton = ( + + ); + } else if (onboardingPastDue) { + onboardingExamButton = ( + + ); + } else if (!isNotYetReleased(releaseDate)) { + if (readableStatus === readableStatuses.otherCourseApproved) { + onboardingExamButton = ( + + ); + } else if (readableStatus !== readableStatuses.otherCourseApproved) { + onboardingExamButton = ( + + ); + } + } + return ( <> - { link && ( + { showInfoPanel && (

{intl.formatMessage(messages.proctoringInfoPanel)}

@@ -114,50 +160,17 @@ function ProctoringInfoPanel({ courseId, username, intl }) { <>

{isNotYetSubmitted(status) && ( - <> - {intl.formatMessage(messages.proctoringPanelGeneralInfo)} - + intl.formatMessage(messages.proctoringPanelGeneralInfo) )} {!isNotYetSubmitted(status) && ( - <> - {intl.formatMessage(messages.proctoringPanelGeneralInfoSubmitted)} - + intl.formatMessage(messages.proctoringPanelGeneralInfoSubmitted) )}

{intl.formatMessage(messages.proctoringPanelGeneralTime)}

)} {isNotYetSubmitted(status) && ( - <> - {!isNotYetReleased(releaseDate) && ( - - )} - {isNotYetReleased(releaseDate) && ( - - )} - + onboardingExamButton )}