From a0e37c03576c36e5db14fa7a28add49e1b3b17cb Mon Sep 17 00:00:00 2001 From: ruzniaievdm Date: Tue, 8 Aug 2023 16:49:53 +0300 Subject: [PATCH] feat: Added Schedule and Details MFE page (#547) --- .env | 2 +- .env.development | 2 +- .env.test | 2 +- package-lock.json | 91 ++++- package.json | 3 +- src/CourseAuthoringRoutes.jsx | 6 +- src/CourseAuthoringRoutes.test.jsx | 11 + src/advanced-settings/AdvancedSettings.jsx | 13 +- src/advanced-settings/data/selectors.js | 2 +- .../setting-alert/SettingAlert.jsx | 24 -- .../setting-alert/SettingsAlert.test.jsx | 36 -- .../settings-sidebar/SettingsSidebar.jsx | 110 ++---- src/assets/scss/_form.scss | 81 ++++ src/assets/scss/_utilities.scss | 3 + src/constants.js | 8 + src/generic/ApplyWrapper.jsx | 3 + src/generic/WysiwygEditor.jsx | 94 +++++ .../alert-message/AlertMessage.test.jsx | 6 +- .../CourseUploadImage.scss | 26 ++ .../CourseUploadImage.test.jsx | 83 ++++ src/generic/course-upload-image/data/api.js | 21 ++ src/generic/course-upload-image/index.jsx | 167 ++++++++ src/generic/course-upload-image/messages.js | 38 ++ .../datepicker-control/DatepickerControl.jsx | 102 +++++ .../DatepickerControl.test.jsx | 51 +++ src/generic/datepicker-control/index.js | 2 + src/generic/datepicker-control/messages.js | 14 + src/generic/help-sidebar/HelpSidebar.scss | 18 +- src/generic/help-sidebar/HelpSidebar.test.jsx | 36 +- src/generic/help-sidebar/HelpSidebarLink.jsx | 26 ++ src/generic/help-sidebar/constants.js | 9 + src/generic/help-sidebar/index.jsx | 149 +++----- src/generic/styles.scss | 1 + src/i18n/messages/ar.json | 208 +++++++++- src/i18n/messages/de.json | 208 +++++++++- src/i18n/messages/de_DE.json | 208 +++++++++- src/i18n/messages/es_419.json | 208 +++++++++- src/i18n/messages/fr.json | 208 +++++++++- src/i18n/messages/fr_CA.json | 208 +++++++++- src/i18n/messages/hi.json | 208 +++++++++- src/i18n/messages/it.json | 208 +++++++++- src/i18n/messages/it_IT.json | 208 +++++++++- src/i18n/messages/pt.json | 208 +++++++++- src/i18n/messages/pt_PT.json | 208 +++++++++- src/i18n/messages/ru.json | 208 +++++++++- src/i18n/messages/uk.json | 208 +++++++++- src/i18n/messages/zh_CN.json | 208 +++++++++- src/index.jsx | 1 + src/index.scss | 4 + .../proctoredExamSettings.scss | 2 +- .../ScheduleAndDetails.scss | 30 ++ .../ScheduleAndDetails.test.jsx | 147 ++++++++ .../__mocks__/courseDetails.js | 48 +++ .../__mocks__/courseSettings.js | 61 +++ src/schedule-and-details/__mocks__/index.js | 2 + .../basic-section/BasicSection.scss | 31 ++ .../basic-section/BasicSection.test.jsx | 80 ++++ .../basic-section/constants.js | 2 + .../basic-section/index.jsx | 151 ++++++++ .../basic-section/messages.js | 42 +++ src/schedule-and-details/constants.js | 2 + .../credit-section/CreditSection.scss | 15 + .../credit-section/CreditSection.test.jsx | 49 +++ .../credit-section/index.jsx | 84 +++++ .../credit-section/messages.js | 35 ++ src/schedule-and-details/data/api.js | 47 +++ src/schedule-and-details/data/selectors.js | 5 + src/schedule-and-details/data/slice.js | 48 +++ src/schedule-and-details/data/thunks.js | 68 ++++ .../details-section/DetailsSection.scss | 6 + .../details-section/DetailsSection.test.jsx | 60 +++ .../details-section/index.jsx | 61 +++ .../details-section/messages.js | 26 ++ src/schedule-and-details/hooks.jsx | 106 ++++++ src/schedule-and-details/index.jsx | 355 ++++++++++++++++++ .../InstructorsSection.scss | 11 + .../InstructorsSection.test.jsx | 99 +++++ .../instructors-section/index.jsx | 96 +++++ .../InstructorContainer.test.jsx | 129 +++++++ .../instructor-container/index.jsx | 120 ++++++ .../instructor-container/messages.js | 70 ++++ .../instructors-section/messages.js | 18 + .../IntroducingSection.scss | 7 + .../IntroducingSection.test.jsx | 101 +++++ .../ExtendedCourseDetails.test.jsx | 67 ++++ .../extended-course-details/index.jsx | 87 +++++ .../extended-course-details/messages.js | 54 +++ .../introducing-section/index.jsx | 205 ++++++++++ .../introduction-video/IntroductionVideo.scss | 10 + .../IntroductionVideo.test.jsx | 65 ++++ .../introduction-video/index.jsx | 64 ++++ .../introduction-video/messages.js | 22 ++ .../introducing-section/messages.js | 70 ++++ .../InstructorsSection.test.jsx | 67 ++++ .../LearningOutcomes.scss | 10 + .../learning-outcomes-section/index.jsx | 77 ++++ .../learning-outcomes-section/messages.js | 30 ++ .../license-section/LicenseSection.scss | 9 + .../license-section/LicenseSection.test.jsx | 28 ++ .../license-section/constants.js | 18 + .../license-section/hooks.jsx | 113 ++++++ .../license-section/index.jsx | 57 +++ .../LicenseCommonsOptions.test.jsx | 58 +++ .../license-commons-options/index.jsx | 99 +++++ .../license-commons-options/messages.js | 46 +++ .../license-display/LicenseDisplay.test.jsx | 30 ++ .../license-section/license-display/index.jsx | 43 +++ .../license-display/messages.js | 14 + .../license-icons/LicenseIcons.test.jsx | 56 +++ .../license-section/license-icons/index.jsx | 101 +++++ .../license-section/license-icons/messages.js | 14 + .../license-selector/LicenseSelector.test.jsx | 63 ++++ .../license-selector/index.jsx | 69 ++++ .../license-selector/messages.js | 30 ++ .../license-section/messages.js | 14 + .../license-section/utils.js | 17 + src/schedule-and-details/messages.js | 94 +++++ .../pacing-section/PacingSection.scss | 27 ++ .../pacing-section/PacingSection.test.jsx | 70 ++++ .../pacing-section/index.jsx | 63 ++++ .../pacing-section/messages.js | 35 ++ .../RequirementsSection.scss | 5 + .../RequirementsSection.test.jsx | 93 +++++ .../entrance-exam/EntranceExam.test.jsx | 61 +++ .../entrance-exam/index.jsx | 88 +++++ .../entrance-exam/messages.js | 22 ++ .../GradeRequirements.test.jsx | 53 +++ .../grade-requirements/index.jsx | 54 +++ .../grade-requirements/messages.js | 15 + .../requirements-section/index.jsx | 130 +++++++ .../requirements-section/messages.js | 34 ++ .../schedule-section/ScheduleSection.scss | 38 ++ .../schedule-section/ScheduleSection.test.jsx | 74 ++++ .../CertificateDisplayRow.jsx | 185 +++++++++ .../CertificateDisplayRow.scss | 39 ++ .../CertificateDisplayRow.test.jsx | 96 +++++ .../certificate-display-row/index.js | 2 + .../certificate-display-row/messages.js | 66 ++++ .../schedule-section/index.jsx | 170 +++++++++ .../schedule-section/messages.js | 78 ++++ .../schedule-row/ScheduleRow.jsx | 66 ++++ .../schedule-row/ScheduleRow.test.jsx | 44 +++ .../schedule-section/schedule-row/index.js | 2 + .../schedule-sidebar/index.jsx | 35 ++ .../schedule-sidebar/messages.js | 14 + .../ScheduleSubHeader.test.jsx | 16 + .../schedule-sub-header/index.jsx | 20 + src/schedule-and-details/utils.js | 86 +++++ src/store.js | 2 + src/studio-header/Header.jsx | 2 +- src/studio-header/header.scss | 10 +- src/utils.js | 37 +- 152 files changed, 9633 insertions(+), 371 deletions(-) delete mode 100644 src/advanced-settings/setting-alert/SettingAlert.jsx delete mode 100644 src/advanced-settings/setting-alert/SettingsAlert.test.jsx create mode 100644 src/assets/scss/_form.scss create mode 100644 src/assets/scss/_utilities.scss create mode 100644 src/constants.js create mode 100644 src/generic/ApplyWrapper.jsx create mode 100644 src/generic/WysiwygEditor.jsx create mode 100644 src/generic/course-upload-image/CourseUploadImage.scss create mode 100644 src/generic/course-upload-image/CourseUploadImage.test.jsx create mode 100644 src/generic/course-upload-image/data/api.js create mode 100644 src/generic/course-upload-image/index.jsx create mode 100644 src/generic/course-upload-image/messages.js create mode 100644 src/generic/datepicker-control/DatepickerControl.jsx create mode 100644 src/generic/datepicker-control/DatepickerControl.test.jsx create mode 100644 src/generic/datepicker-control/index.js create mode 100644 src/generic/datepicker-control/messages.js create mode 100644 src/generic/help-sidebar/HelpSidebarLink.jsx create mode 100644 src/generic/help-sidebar/constants.js create mode 100644 src/schedule-and-details/ScheduleAndDetails.scss create mode 100644 src/schedule-and-details/ScheduleAndDetails.test.jsx create mode 100644 src/schedule-and-details/__mocks__/courseDetails.js create mode 100644 src/schedule-and-details/__mocks__/courseSettings.js create mode 100644 src/schedule-and-details/__mocks__/index.js create mode 100644 src/schedule-and-details/basic-section/BasicSection.scss create mode 100644 src/schedule-and-details/basic-section/BasicSection.test.jsx create mode 100644 src/schedule-and-details/basic-section/constants.js create mode 100644 src/schedule-and-details/basic-section/index.jsx create mode 100644 src/schedule-and-details/basic-section/messages.js create mode 100644 src/schedule-and-details/constants.js create mode 100644 src/schedule-and-details/credit-section/CreditSection.scss create mode 100644 src/schedule-and-details/credit-section/CreditSection.test.jsx create mode 100644 src/schedule-and-details/credit-section/index.jsx create mode 100644 src/schedule-and-details/credit-section/messages.js create mode 100644 src/schedule-and-details/data/api.js create mode 100644 src/schedule-and-details/data/selectors.js create mode 100644 src/schedule-and-details/data/slice.js create mode 100644 src/schedule-and-details/data/thunks.js create mode 100644 src/schedule-and-details/details-section/DetailsSection.scss create mode 100644 src/schedule-and-details/details-section/DetailsSection.test.jsx create mode 100644 src/schedule-and-details/details-section/index.jsx create mode 100644 src/schedule-and-details/details-section/messages.js create mode 100644 src/schedule-and-details/hooks.jsx create mode 100644 src/schedule-and-details/index.jsx create mode 100644 src/schedule-and-details/instructors-section/InstructorsSection.scss create mode 100644 src/schedule-and-details/instructors-section/InstructorsSection.test.jsx create mode 100644 src/schedule-and-details/instructors-section/index.jsx create mode 100644 src/schedule-and-details/instructors-section/instructor-container/InstructorContainer.test.jsx create mode 100644 src/schedule-and-details/instructors-section/instructor-container/index.jsx create mode 100644 src/schedule-and-details/instructors-section/instructor-container/messages.js create mode 100644 src/schedule-and-details/instructors-section/messages.js create mode 100644 src/schedule-and-details/introducing-section/IntroducingSection.scss create mode 100644 src/schedule-and-details/introducing-section/IntroducingSection.test.jsx create mode 100644 src/schedule-and-details/introducing-section/extended-course-details/ExtendedCourseDetails.test.jsx create mode 100644 src/schedule-and-details/introducing-section/extended-course-details/index.jsx create mode 100644 src/schedule-and-details/introducing-section/extended-course-details/messages.js create mode 100644 src/schedule-and-details/introducing-section/index.jsx create mode 100644 src/schedule-and-details/introducing-section/introduction-video/IntroductionVideo.scss create mode 100644 src/schedule-and-details/introducing-section/introduction-video/IntroductionVideo.test.jsx create mode 100644 src/schedule-and-details/introducing-section/introduction-video/index.jsx create mode 100644 src/schedule-and-details/introducing-section/introduction-video/messages.js create mode 100644 src/schedule-and-details/introducing-section/messages.js create mode 100644 src/schedule-and-details/learning-outcomes-section/InstructorsSection.test.jsx create mode 100644 src/schedule-and-details/learning-outcomes-section/LearningOutcomes.scss create mode 100644 src/schedule-and-details/learning-outcomes-section/index.jsx create mode 100644 src/schedule-and-details/learning-outcomes-section/messages.js create mode 100644 src/schedule-and-details/license-section/LicenseSection.scss create mode 100644 src/schedule-and-details/license-section/LicenseSection.test.jsx create mode 100644 src/schedule-and-details/license-section/constants.js create mode 100644 src/schedule-and-details/license-section/hooks.jsx create mode 100644 src/schedule-and-details/license-section/index.jsx create mode 100644 src/schedule-and-details/license-section/license-commons-options/LicenseCommonsOptions.test.jsx create mode 100644 src/schedule-and-details/license-section/license-commons-options/index.jsx create mode 100644 src/schedule-and-details/license-section/license-commons-options/messages.js create mode 100644 src/schedule-and-details/license-section/license-display/LicenseDisplay.test.jsx create mode 100644 src/schedule-and-details/license-section/license-display/index.jsx create mode 100644 src/schedule-and-details/license-section/license-display/messages.js create mode 100644 src/schedule-and-details/license-section/license-icons/LicenseIcons.test.jsx create mode 100644 src/schedule-and-details/license-section/license-icons/index.jsx create mode 100644 src/schedule-and-details/license-section/license-icons/messages.js create mode 100644 src/schedule-and-details/license-section/license-selector/LicenseSelector.test.jsx create mode 100644 src/schedule-and-details/license-section/license-selector/index.jsx create mode 100644 src/schedule-and-details/license-section/license-selector/messages.js create mode 100644 src/schedule-and-details/license-section/messages.js create mode 100644 src/schedule-and-details/license-section/utils.js create mode 100644 src/schedule-and-details/messages.js create mode 100644 src/schedule-and-details/pacing-section/PacingSection.scss create mode 100644 src/schedule-and-details/pacing-section/PacingSection.test.jsx create mode 100644 src/schedule-and-details/pacing-section/index.jsx create mode 100644 src/schedule-and-details/pacing-section/messages.js create mode 100644 src/schedule-and-details/requirements-section/RequirementsSection.scss create mode 100644 src/schedule-and-details/requirements-section/RequirementsSection.test.jsx create mode 100644 src/schedule-and-details/requirements-section/entrance-exam/EntranceExam.test.jsx create mode 100644 src/schedule-and-details/requirements-section/entrance-exam/index.jsx create mode 100644 src/schedule-and-details/requirements-section/entrance-exam/messages.js create mode 100644 src/schedule-and-details/requirements-section/grade-requirements/GradeRequirements.test.jsx create mode 100644 src/schedule-and-details/requirements-section/grade-requirements/index.jsx create mode 100644 src/schedule-and-details/requirements-section/grade-requirements/messages.js create mode 100644 src/schedule-and-details/requirements-section/index.jsx create mode 100644 src/schedule-and-details/requirements-section/messages.js create mode 100644 src/schedule-and-details/schedule-section/ScheduleSection.scss create mode 100644 src/schedule-and-details/schedule-section/ScheduleSection.test.jsx create mode 100644 src/schedule-and-details/schedule-section/certificate-display-row/CertificateDisplayRow.jsx create mode 100644 src/schedule-and-details/schedule-section/certificate-display-row/CertificateDisplayRow.scss create mode 100644 src/schedule-and-details/schedule-section/certificate-display-row/CertificateDisplayRow.test.jsx create mode 100644 src/schedule-and-details/schedule-section/certificate-display-row/index.js create mode 100644 src/schedule-and-details/schedule-section/certificate-display-row/messages.js create mode 100644 src/schedule-and-details/schedule-section/index.jsx create mode 100644 src/schedule-and-details/schedule-section/messages.js create mode 100644 src/schedule-and-details/schedule-section/schedule-row/ScheduleRow.jsx create mode 100644 src/schedule-and-details/schedule-section/schedule-row/ScheduleRow.test.jsx create mode 100644 src/schedule-and-details/schedule-section/schedule-row/index.js create mode 100644 src/schedule-and-details/schedule-sidebar/index.jsx create mode 100644 src/schedule-and-details/schedule-sidebar/messages.js create mode 100644 src/schedule-and-details/schedule-sub-header/ScheduleSubHeader.test.jsx create mode 100644 src/schedule-and-details/schedule-sub-header/index.jsx create mode 100644 src/schedule-and-details/utils.js diff --git a/.env b/.env index d906240d6..2874b4a97 100644 --- a/.env +++ b/.env @@ -34,7 +34,6 @@ ENABLE_NEW_HOME_PAGE = false ENABLE_NEW_COURSE_OUTLINE_PAGE = false ENABLE_NEW_UPDATES_PAGE = false ENABLE_NEW_VIDEO_UPLOAD_PAGE = false -ENABLE_NEW_SCHEDULE_DETAILS_PAGE = false ENABLE_NEW_GRADING_PAGE = false ENABLE_NEW_COURSE_TEAM_PAGE = false ENABLE_NEW_IMPORT_PAGE = false @@ -45,3 +44,4 @@ BBB_LEARN_MORE_URL='' HOTJAR_APP_ID='' HOTJAR_VERSION=6 HOTJAR_DEBUG=false +INVITE_STUDENTS_EMAIL_TO='' diff --git a/.env.development b/.env.development index 391cd08fb..b17611fad 100644 --- a/.env.development +++ b/.env.development @@ -36,7 +36,6 @@ ENABLE_NEW_HOME_PAGE = false ENABLE_NEW_COURSE_OUTLINE_PAGE = false ENABLE_NEW_UPDATES_PAGE = false ENABLE_NEW_VIDEO_UPLOAD_PAGE = false -ENABLE_NEW_SCHEDULE_DETAILS_PAGE = false ENABLE_NEW_GRADING_PAGE = false ENABLE_NEW_COURSE_TEAM_PAGE = false ENABLE_NEW_IMPORT_PAGE = false @@ -47,3 +46,4 @@ BBB_LEARN_MORE_URL='' HOTJAR_APP_ID='' HOTJAR_VERSION=6 HOTJAR_DEBUG=true +INVITE_STUDENTS_EMAIL_TO="someone@domain.com" diff --git a/.env.test b/.env.test index 495c6754c..8a5740394 100644 --- a/.env.test +++ b/.env.test @@ -32,7 +32,6 @@ ENABLE_NEW_HOME_PAGE = false ENABLE_NEW_COURSE_OUTLINE_PAGE = true ENABLE_NEW_UPDATES_PAGE = true ENABLE_NEW_VIDEO_UPLOAD_PAGE = true -ENABLE_NEW_SCHEDULE_DETAILS_PAGE = true ENABLE_NEW_GRADING_PAGE = true ENABLE_NEW_COURSE_TEAM_PAGE = true ENABLE_NEW_IMPORT_PAGE = true @@ -40,3 +39,4 @@ ENABLE_NEW_EXPORT_PAGE = true ENABLE_UNIT_PAGE = true ENABLE_VIDEO_UPLOAD_PAGE_LINK_IN_CONTENT_DROPDOWN = true BBB_LEARN_MORE_URL='' +INVITE_STUDENTS_EMAIL_TO="someone@domain.com" diff --git a/package-lock.json b/package-lock.json index 51adac5b4..f1eb55834 100644 --- a/package-lock.json +++ b/package-lock.json @@ -12,7 +12,7 @@ "@edx/brand": "npm:@edx/brand-openedx@1.1.0", "@edx/frontend-component-footer": "12.0.0", "@edx/frontend-enterprise-hotjar": "^1.2.1", - "@edx/frontend-lib-content-components": "^1.163.1", + "@edx/frontend-lib-content-components": "^1.167.0", "@edx/frontend-platform": "4.2.0", "@edx/paragon": "^20.45.4", "@fortawesome/fontawesome-svg-core": "1.2.28", @@ -30,6 +30,7 @@ "moment": "2.29.2", "prop-types": "15.7.2", "react": "16.14.0", + "react-datepicker": "^4.13.0", "react-dom": "16.14.0", "react-helmet": "^6.1.0", "react-redux": "7.1.3", @@ -1884,16 +1885,19 @@ } }, "node_modules/@codemirror/lang-html": { - "version": "6.1.0", - "license": "MIT", + "version": "6.4.4", + "resolved": "https://registry.npmjs.org/@codemirror/lang-html/-/lang-html-6.4.4.tgz", + "integrity": "sha512-NbrqEp0GUOSvhZbG6BxVcS4SzM4SvN5vkkD2sEoETHIyHLZDb9pO1z+r1L2heb6LuF4bUeBCXKjHXoSeDJHO1w==", "dependencies": { "@codemirror/autocomplete": "^6.0.0", "@codemirror/lang-css": "^6.0.0", "@codemirror/lang-javascript": "^6.0.0", - "@codemirror/language": "^6.0.0", + "@codemirror/language": "^6.4.0", "@codemirror/state": "^6.0.0", + "@codemirror/view": "^6.2.2", "@lezer/common": "^1.0.0", - "@lezer/html": "^1.0.0" + "@lezer/css": "^1.1.0", + "@lezer/html": "^1.3.0" } }, "node_modules/@codemirror/lang-javascript": { @@ -1951,14 +1955,16 @@ } }, "node_modules/@codemirror/state": { - "version": "6.1.1", - "license": "MIT" + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/@codemirror/state/-/state-6.2.1.tgz", + "integrity": "sha512-RupHSZ8+OjNT38zU9fKH2sv+Dnlr8Eb8sl4NOnnqz95mCFTZUaiRP8Xv5MeeaG0px2b8Bnfe7YGwCV3nsBhbuw==" }, "node_modules/@codemirror/view": { - "version": "6.2.0", - "license": "MIT", + "version": "6.13.2", + "resolved": "https://registry.npmjs.org/@codemirror/view/-/view-6.13.2.tgz", + "integrity": "sha512-XA/jUuu1H+eTja49654QkrQwx2CuDMdjciHcdqyasfTVo4HRlvj87rD/Qmm4HfnhwX8234FQSSA8HxEzxihX/Q==", "dependencies": { - "@codemirror/state": "^6.0.0", + "@codemirror/state": "^6.1.4", "style-mod": "^4.0.0", "w3c-keyname": "^2.2.4" } @@ -2291,9 +2297,9 @@ } }, "node_modules/@edx/frontend-lib-content-components": { - "version": "1.163.1", - "resolved": "https://registry.npmjs.org/@edx/frontend-lib-content-components/-/frontend-lib-content-components-1.163.1.tgz", - "integrity": "sha512-GrEsEh+AkO+9slCU+PK0I+w2/7OkJS08rRZpuLxNF2g7lv4IC6YcCuyhCSR99lIcTPmqsceKvuiLy8ehpMobDg==", + "version": "1.167.0", + "resolved": "https://registry.npmjs.org/@edx/frontend-lib-content-components/-/frontend-lib-content-components-1.167.0.tgz", + "integrity": "sha512-fISyyUiZhdAkEhYsz8hJOIt5w3vpBAH5J0pf4UpxyzqzpxU6anTI3VIkF3i78yJMZgIQ6Sl4eW75KXqIXAijPw==", "dependencies": { "@codemirror/lang-html": "^6.0.0", "@codemirror/lang-xml": "^6.0.0", @@ -2331,8 +2337,8 @@ "@edx/frontend-platform": "^4.0.0", "@edx/paragon": "^20.27.0", "prop-types": "^15.5.10", - "react": "^16.14.0", - "react-dom": "^16.14.0" + "react": "^16.14.0 || ^17.0.0", + "react-dom": "^16.14.0 || ^17.0.0" } }, "node_modules/@edx/frontend-lib-content-components/node_modules/@edx/browserslist-config": { @@ -3797,8 +3803,9 @@ "license": "MIT" }, "node_modules/@lezer/css": { - "version": "1.0.0", - "license": "MIT", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@lezer/css/-/css-1.1.2.tgz", + "integrity": "sha512-5TKMAReXukfEmIiZprDlGfZVfOOCyEStFi1YLzxclm9H3G/HHI49/2wzlRT6bQw5r7PoZVEtjTItEkb/UuZQyg==", "dependencies": { "@lezer/highlight": "^1.0.0", "@lezer/lr": "^1.0.0" @@ -3812,8 +3819,9 @@ } }, "node_modules/@lezer/html": { - "version": "1.0.1", - "license": "MIT", + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/@lezer/html/-/html-1.3.4.tgz", + "integrity": "sha512-HdJYMVZcT4YsMo7lW3ipL4NoyS2T67kMPuSVS5TgLGqmaCjEU/D6xv7zsa1ktvTK5lwk7zzF1e3eU6gBZIPm5g==", "dependencies": { "@lezer/common": "^1.0.0", "@lezer/highlight": "^1.0.0", @@ -7662,6 +7670,21 @@ "node": ">=10" } }, + "node_modules/date-fns": { + "version": "2.30.0", + "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.30.0.tgz", + "integrity": "sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw==", + "dependencies": { + "@babel/runtime": "^7.21.0" + }, + "engines": { + "node": ">=0.11" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/date-fns" + } + }, "node_modules/debug": { "version": "4.3.4", "dev": true, @@ -17443,6 +17466,23 @@ "react-dom": ">=16.8.0" } }, + "node_modules/react-datepicker": { + "version": "4.13.0", + "resolved": "https://registry.npmjs.org/react-datepicker/-/react-datepicker-4.13.0.tgz", + "integrity": "sha512-1S8yAqzcHE+LjCjMrTXJfUkTVijTPogxUYrmQmSpmRJ23fdC2w8cg04jzaEAyesTzyUa06JzayZJKk85QHbvcw==", + "dependencies": { + "@popperjs/core": "^2.9.2", + "classnames": "^2.2.6", + "date-fns": "^2.24.0", + "prop-types": "^15.7.2", + "react-onclickoutside": "^6.12.2", + "react-popper": "^2.3.0" + }, + "peerDependencies": { + "react": "^16.9.0 || ^17 || ^18", + "react-dom": "^16.9.0 || ^17 || ^18" + } + }, "node_modules/react-dev-utils": { "version": "12.0.1", "dev": true, @@ -17808,6 +17848,19 @@ "react": ">=16.8.0" } }, + "node_modules/react-onclickoutside": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/react-onclickoutside/-/react-onclickoutside-6.13.0.tgz", + "integrity": "sha512-ty8So6tcUpIb+ZE+1HAhbLROvAIJYyJe/1vRrrcmW+jLsaM+/powDRqxzo6hSh9CuRZGSL1Q8mvcF5WRD93a0A==", + "funding": { + "type": "individual", + "url": "https://github.com/Pomax/react-onclickoutside/blob/master/FUNDING.md" + }, + "peerDependencies": { + "react": "^15.5.x || ^16.x || ^17.x || ^18.x", + "react-dom": "^15.5.x || ^16.x || ^17.x || ^18.x" + } + }, "node_modules/react-overlays": { "version": "5.2.0", "license": "MIT", diff --git a/package.json b/package.json index 4f13c3845..03fbe8378 100644 --- a/package.json +++ b/package.json @@ -37,7 +37,7 @@ "@edx/brand": "npm:@edx/brand-openedx@1.1.0", "@edx/frontend-component-footer": "12.0.0", "@edx/frontend-enterprise-hotjar": "^1.2.1", - "@edx/frontend-lib-content-components": "^1.163.1", + "@edx/frontend-lib-content-components": "^1.167.0", "@edx/frontend-platform": "4.2.0", "@edx/paragon": "^20.45.4", "@fortawesome/fontawesome-svg-core": "1.2.28", @@ -55,6 +55,7 @@ "moment": "2.29.2", "prop-types": "15.7.2", "react": "16.14.0", + "react-datepicker": "^4.13.0", "react-dom": "16.14.0", "react-helmet": "^6.1.0", "react-redux": "7.1.3", diff --git a/src/CourseAuthoringRoutes.jsx b/src/CourseAuthoringRoutes.jsx index 016043568..657ddd6c0 100644 --- a/src/CourseAuthoringRoutes.jsx +++ b/src/CourseAuthoringRoutes.jsx @@ -11,6 +11,7 @@ import VideoSelectorContainer from './selectors/VideoSelectorContainer'; import CustomPages from './custom-pages'; import FilesAndUploads from './files-and-uploads'; import { AdvancedSettings } from './advanced-settings'; +import ScheduleAndDetails from './schedule-and-details'; /** * As of this writing, these routes are mounted at a path prefixed with the following: @@ -86,10 +87,7 @@ const CourseAuthoringRoutes = ({ courseId }) => { )} - {process.env.ENABLE_NEW_SCHEDULE_DETAILS_PAGE === 'true' - && ( - - )} + {process.env.ENABLE_NEW_GRADING_PAGE === 'true' diff --git a/src/CourseAuthoringRoutes.test.jsx b/src/CourseAuthoringRoutes.test.jsx index 99adaeb8e..8e1bd6fd1 100644 --- a/src/CourseAuthoringRoutes.test.jsx +++ b/src/CourseAuthoringRoutes.test.jsx @@ -14,6 +14,17 @@ const videoSelectorContainerMockText = 'Video Selector Container'; const customPagesMockText = 'Custom Pages'; let store; const mockComponentFn = jest.fn(); + +// Mock the TinyMceWidget from frontend-lib-content-components +jest.mock('@edx/frontend-lib-content-components', () => ({ + TinyMceWidget: () =>
Widget
, + Footer: () =>
Footer
, + prepareEditorRef: jest.fn(() => ({ + refReady: true, + setEditorRef: jest.fn().mockName('prepareEditorRef.setEditorRef'), + })), +})); + jest.mock('react-router', () => ({ ...jest.requireActual('react-router'), useRouteMatch: () => ({ diff --git a/src/advanced-settings/AdvancedSettings.jsx b/src/advanced-settings/AdvancedSettings.jsx index 29ef4639f..9b9f8b720 100644 --- a/src/advanced-settings/AdvancedSettings.jsx +++ b/src/advanced-settings/AdvancedSettings.jsx @@ -55,6 +55,10 @@ const AdvancedSettings = ({ intl, courseId }) => { }, disabledStates: ['pending'], }; + const { + proctoringErrors, + mfeProctoredExamSettingsUrl, + } = proctoringExamErrors; useEffect(() => { if (savingStatus === RequestStatus.SUCCESSFUL) { @@ -123,10 +127,10 @@ const AdvancedSettings = ({ intl, courseId }) => { <>
- {(proctoringExamErrors?.length > 0) && ( + {(proctoringErrors?.length > 0) && (