From 698daf4a67f7e234375de61b38979eca99b6daf0 Mon Sep 17 00:00:00 2001 From: ruzniaievdm Date: Tue, 13 Jun 2023 14:39:25 +0300 Subject: [PATCH 1/5] feat: Create MFE page with base structure for schedule and details --- .env.development | 2 +- src/CourseAuthoringRoutes.jsx | 3 +- src/advanced-settings/AdvancedSettings.jsx | 6 +- .../AdvancedSettings.test.jsx | 12 +- ...cedSettings.scss => AdvancedSettings.scss} | 34 ---- src/advanced-settings/scss/_variables.scss | 2 - .../settings-sidebar/SettingsSidebar.jsx | 95 +++------- .../settings-sidebar/SettingsSidebar.test.jsx | 8 + .../SettingsSidebar.test.jsx.snap | 40 ++-- .../settings-sidebar/messages.js | 24 --- src/assets/scss/_typography.scss | 35 ++++ src/assets/scss/_variables.scss | 2 + src/generic/HelpSidebar.jsx | 141 ++++++++++++++ .../alert-message/AlertMessage.test.jsx} | 16 +- .../__snapshots__/AlertMessage.test.jsx.snap} | 2 +- src/generic/alert-message/index.jsx | 22 +++ src/generic/messages.js | 40 ++++ src/generic/scss/HelpSidebar.scss | 34 ++++ src/i18n/messages/ar.json | 53 +++++- src/i18n/messages/de.json | 53 +++++- src/i18n/messages/de_DE.json | 53 +++++- src/i18n/messages/es_419.json | 53 +++++- src/i18n/messages/fr.json | 53 +++++- src/i18n/messages/fr_CA.json | 53 +++++- src/i18n/messages/hi.json | 53 +++++- src/i18n/messages/it.json | 53 +++++- src/i18n/messages/it_IT.json | 53 +++++- src/i18n/messages/pt.json | 53 +++++- src/i18n/messages/pt_PT.json | 53 +++++- src/i18n/messages/ru.json | 53 +++++- src/i18n/messages/uk.json | 53 +++++- src/i18n/messages/zh_CN.json | 53 +++++- src/index.scss | 6 +- .../ScheduleAndDetails.scss | 37 ++++ .../ScheduleAndDetails.test.jsx | 76 ++++++++ .../__mocks__/courseDetails.js | 48 +++++ .../__mocks__/courseSettings.js | 60 ++++++ src/schedule-and-details/__mocks__/index.js | 2 + .../basic-section/BasicSection.scss | 36 ++++ .../basic-section/BasicSection.test.jsx | 78 ++++++++ .../__snapshots__/BasicSection.test.jsx.snap | 123 ++++++++++++ .../basic-section/constants.js | 3 + .../basic-section/index.jsx | 154 +++++++++++++++ .../basic-section/messages.js | 42 ++++ .../credit-section/CreditSection.scss | 9 + .../credit-section/CreditSection.test.jsx | 60 ++++++ .../__snapshots__/CreditSection.test.jsx.snap | 44 +++++ .../credit-section/index.jsx | 99 ++++++++++ .../credit-section/messages.js | 35 ++++ src/schedule-and-details/data/api.js | 41 ++++ src/schedule-and-details/data/selectors.js | 5 + src/schedule-and-details/data/slice.js | 48 +++++ src/schedule-and-details/data/thunks.js | 60 ++++++ src/schedule-and-details/hooks.jsx | 50 +++++ src/schedule-and-details/index.jsx | 179 ++++++++++++++++++ src/schedule-and-details/messages.js | 50 +++++ .../pacing-section/PacingSection.scss | 15 ++ .../pacing-section/PacingSection.test.jsx | 92 +++++++++ .../__snapshots__/PacingSection.test.jsx.snap | 96 ++++++++++ .../pacing-section/constants.js | 3 + .../pacing-section/index.jsx | 65 +++++++ .../pacing-section/messages.js | 35 ++++ .../schedule-sidebar/ScheduleSidebar.test.jsx | 35 ++++ .../ScheduleSidebar.test.jsx.snap | 119 ++++++++++++ .../schedule-sidebar/index.jsx | 33 ++++ .../schedule-sidebar/messages.js | 14 ++ src/store.js | 2 + src/utils.js | 5 +- 68 files changed, 2875 insertions(+), 244 deletions(-) rename src/advanced-settings/scss/{AdvencedSettings.scss => AdvancedSettings.scss} (69%) create mode 100644 src/assets/scss/_typography.scss create mode 100644 src/assets/scss/_variables.scss create mode 100644 src/generic/HelpSidebar.jsx rename src/{advanced-settings/setting-alert/SettingsAlert.test.jsx => generic/alert-message/AlertMessage.test.jsx} (76%) rename src/{advanced-settings/setting-alert/__snapshots__/SettingsAlert.test.jsx.snap => generic/alert-message/__snapshots__/AlertMessage.test.jsx.snap} (94%) create mode 100644 src/generic/alert-message/index.jsx create mode 100644 src/generic/messages.js create mode 100644 src/generic/scss/HelpSidebar.scss 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/__snapshots__/BasicSection.test.jsx.snap 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/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/__snapshots__/CreditSection.test.jsx.snap 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/hooks.jsx create mode 100644 src/schedule-and-details/index.jsx 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/__snapshots__/PacingSection.test.jsx.snap create mode 100644 src/schedule-and-details/pacing-section/constants.js 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/schedule-sidebar/ScheduleSidebar.test.jsx create mode 100644 src/schedule-and-details/schedule-sidebar/__snapshots__/ScheduleSidebar.test.jsx.snap create mode 100644 src/schedule-and-details/schedule-sidebar/index.jsx create mode 100644 src/schedule-and-details/schedule-sidebar/messages.js diff --git a/.env.development b/.env.development index 11c5b491fc..2eae5c14d9 100644 --- a/.env.development +++ b/.env.development @@ -34,7 +34,7 @@ ENABLE_NEW_COURSE_OUTLINE_PAGE = false ENABLE_NEW_UPDATES_PAGE = false ENABLE_NEW_FILES_UPLOADS_PAGE = false ENABLE_NEW_VIDEO_UPLOAD_PAGE = false -ENABLE_NEW_SCHEDULE_DETAILS_PAGE = false +ENABLE_NEW_SCHEDULE_DETAILS_PAGE = true ENABLE_NEW_GRADING_PAGE = false ENABLE_NEW_COURSE_TEAM_PAGE = false ENABLE_NEW_ADVANCED_SETTINGS_PAGE = true diff --git a/src/CourseAuthoringRoutes.jsx b/src/CourseAuthoringRoutes.jsx index 7e83e2ec2f..71fa7d378a 100644 --- a/src/CourseAuthoringRoutes.jsx +++ b/src/CourseAuthoringRoutes.jsx @@ -9,6 +9,7 @@ import ProctoredExamSettings from './proctored-exam-settings/ProctoredExamSettin import EditorContainer from './editors/EditorContainer'; import VideoSelectorContainer from './selectors/VideoSelectorContainer'; 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: @@ -92,7 +93,7 @@ const CourseAuthoringRoutes = ({ courseId }) => { {process.env.ENABLE_NEW_SCHEDULE_DETAILS_PAGE === 'true' && ( - + )} diff --git a/src/advanced-settings/AdvancedSettings.jsx b/src/advanced-settings/AdvancedSettings.jsx index 3061c3f215..7372731024 100644 --- a/src/advanced-settings/AdvancedSettings.jsx +++ b/src/advanced-settings/AdvancedSettings.jsx @@ -13,7 +13,7 @@ import { getCourseAppSettings, getSavingStatus, getProctoringExamErrors, getSendRequestErrors, } from './data/selectors'; import SettingCard from './setting-card/SettingCard'; -import SettingAlert from './setting-alert/SettingAlert'; +import AlertMessage from '../generic/alert-message'; import SettingsSidebar from './settings-sidebar/SettingsSidebar'; import validateAdvancedSettingsData from './utils'; import messages from './messages'; @@ -91,7 +91,7 @@ const AdvancedSettings = ({ intl, courseId }) => { aria-describedby={intl.formatMessage(messages.alertProctoringDescribedby)} /> )} - {
- ({ getProctoringExamErrors: jest.fn(), })); +const mockPathname = '/foo-bar'; +jest.mock('react-router-dom', () => ({ + ...jest.requireActual('react-router-dom'), + useLocation: () => ({ + pathname: mockPathname, + }), +})); + describe('AdvancedSettings', () => { const courseId = '123'; const mockDispatch = jest.fn(); @@ -70,14 +78,14 @@ describe('AdvancedSettings', () => { const textarea = settingCard.find('textarea'); textarea.simulate('change', { target: { value: 'new value' } }); expect(textarea.text()).toBe('new value'); - const settingAlert = wrapper.find('SettingAlert'); + const settingAlert = wrapper.find('AlertMessage'); expect(settingAlert.find('AlertHeading').at(0).text()).toBe('You`ve made some changes'); }); it('show warning alert and after click on Cancel button reset textarea value', () => { const settingCard = wrapper.find('SettingCard').at(0); const textarea = settingCard.find('textarea'); textarea.simulate('change', { target: { value: 'new value' } }); - const settingAlert = wrapper.find('SettingAlert'); + const settingAlert = wrapper.find('AlertMessage'); const resetBtn = settingAlert.find('Button').at(1); resetBtn.simulate('click'); expect(textarea.text()).toBe('value1'); diff --git a/src/advanced-settings/scss/AdvencedSettings.scss b/src/advanced-settings/scss/AdvancedSettings.scss similarity index 69% rename from src/advanced-settings/scss/AdvencedSettings.scss rename to src/advanced-settings/scss/AdvancedSettings.scss index 2d23b184d3..ac1c472904 100644 --- a/src/advanced-settings/scss/AdvencedSettings.scss +++ b/src/advanced-settings/scss/AdvancedSettings.scss @@ -97,40 +97,6 @@ } } -.setting-sidebar-supplementary { - margin-top: 1.875rem; - - .setting-sidebar-supplementary-about { - .setting-sidebar-supplementary-about-title { - font: normal $font-weight-bold 1.125rem/1.5rem $font-family-base; - color: $headings-color; - margin-bottom: 1.25rem; - } - - .setting-sidebar-supplementary-about-descriptions { - font: normal $font-weight-normal .875rem/1.5rem $font-family-base; - color: $text-color-base; - } - } - - .setting-sidebar-supplementary-other-links ul { - list-style: none; - - .setting-sidebar-supplementary-other-link { - font: normal $font-weight-normal .875rem/1.5rem $font-family-base; - line-height: 1.5rem; - color: $info-500; - margin-bottom: .5rem; - } - } - - .setting-sidebar-supplementary-other-title { - font: normal $font-weight-bold 1.125rem/1.5rem $font-family-base; - color: $headings-color; - margin-bottom: 1.25rem; - } -} - .modal-error-item { list-style: none; diff --git a/src/advanced-settings/scss/_variables.scss b/src/advanced-settings/scss/_variables.scss index 39daf6dfa2..77933cba03 100644 --- a/src/advanced-settings/scss/_variables.scss +++ b/src/advanced-settings/scss/_variables.scss @@ -1,3 +1 @@ -$font-family-base: inter, sans-serif; -$text-color-base: $gray-700; $setting-form-control-width: 34.375rem; diff --git a/src/advanced-settings/settings-sidebar/SettingsSidebar.jsx b/src/advanced-settings/settings-sidebar/SettingsSidebar.jsx index 82e5d1d8e9..02dd5921ee 100644 --- a/src/advanced-settings/settings-sidebar/SettingsSidebar.jsx +++ b/src/advanced-settings/settings-sidebar/SettingsSidebar.jsx @@ -1,75 +1,34 @@ -import React, { useContext } from 'react'; -import { FormattedMessage, injectIntl, intlShape } from '@edx/frontend-platform/i18n'; -import { AppContext } from '@edx/frontend-platform/react'; +import React from 'react'; +import { + FormattedMessage, + injectIntl, + intlShape, +} from '@edx/frontend-platform/i18n'; import PropTypes from 'prop-types'; -import { Hyperlink } from '@edx/paragon'; -import { getPagePath } from '../../utils'; +import HelpSidebar from '../../generic/HelpSidebar'; import messages from './messages'; -const SettingsSidebar = ({ intl, courseId }) => { - const { config } = useContext(AppContext); - return ( - - ); -}; +const SettingsSidebar = ({ intl, courseId }) => ( + +

+ {intl.formatMessage(messages.about)} +

+

+ {intl.formatMessage(messages.aboutDescription1)} +

+

+ {intl.formatMessage(messages.aboutDescription2)} +

+

+ Note: }} + /> +

+
+); SettingsSidebar.propTypes = { intl: intlShape.isRequired, diff --git a/src/advanced-settings/settings-sidebar/SettingsSidebar.test.jsx b/src/advanced-settings/settings-sidebar/SettingsSidebar.test.jsx index 4c5c4a9683..30ec849381 100644 --- a/src/advanced-settings/settings-sidebar/SettingsSidebar.test.jsx +++ b/src/advanced-settings/settings-sidebar/SettingsSidebar.test.jsx @@ -4,6 +4,14 @@ import { IntlProvider, injectIntl } from '@edx/frontend-platform/i18n'; import { AppContext } from '@edx/frontend-platform/react'; import SettingsSidebar from './SettingsSidebar'; +const mockPathname = '/foo-bar'; +jest.mock('react-router-dom', () => ({ + ...jest.requireActual('react-router-dom'), + useLocation: () => ({ + pathname: mockPathname, + }), +})); + describe('SettingsSidebar', () => { const config = { STUDIO_BASE_URL: 'https://example.com' }; const courseId = 'course123'; diff --git a/src/advanced-settings/settings-sidebar/__snapshots__/SettingsSidebar.test.jsx.snap b/src/advanced-settings/settings-sidebar/__snapshots__/SettingsSidebar.test.jsx.snap index 16c4ec23f4..d0ca580cbc 100644 --- a/src/advanced-settings/settings-sidebar/__snapshots__/SettingsSidebar.test.jsx.snap +++ b/src/advanced-settings/settings-sidebar/__snapshots__/SettingsSidebar.test.jsx.snap @@ -2,28 +2,28 @@ exports[`SettingsSidebar should match the snapshot 1`] = `