diff --git a/src/containers/CourseCard/CourseCardFooter.jsx b/src/containers/CourseCard/CourseCardFooter.jsx index 8c3546a..2155dbc 100644 --- a/src/containers/CourseCard/CourseCardFooter.jsx +++ b/src/containers/CourseCard/CourseCardFooter.jsx @@ -1,9 +1,17 @@ import React from 'react'; -import { Button, PageBanner, Alert } from '@edx/paragon'; -import { Program } from '@edx/paragon/icons'; +import { + // Button, + // PageBanner, + Alert, +} from '@edx/paragon'; +import { +// Program +} from '@edx/paragon/icons'; export const CourseCardFooter = () => ( - + footer -); \ No newline at end of file +); + +export default CourseCardFooter; diff --git a/src/containers/CourseCard/CourseCardMenu.jsx b/src/containers/CourseCard/CourseCardMenu.jsx index b8b6e9f..eb5bf31 100644 --- a/src/containers/CourseCard/CourseCardMenu.jsx +++ b/src/containers/CourseCard/CourseCardMenu.jsx @@ -5,18 +5,20 @@ import { MoreVert } from '@edx/paragon/icons'; export const CourseCardMenu = () => ( - Unenroll - Email Settings - Share to Facebook - Share to Twitter + Unenroll + Email Settings + Share to Facebook + Share to Twitter ); + +export default CourseCardMenu; diff --git a/src/containers/CourseCard/RelatedProgram.jsx b/src/containers/CourseCard/RelatedProgram.jsx index a1fbdb3..68914bf 100644 --- a/src/containers/CourseCard/RelatedProgram.jsx +++ b/src/containers/CourseCard/RelatedProgram.jsx @@ -1,3 +1,4 @@ +/* eslint-disable quotes */ import React from 'react'; import { Button, useToggle, ModalDialog } from '@edx/paragon'; import { Program } from '@edx/paragon/icons'; @@ -6,7 +7,12 @@ export const RelatedProgram = () => { const [isOpen, open, close] = useToggle(false); return ( <> - {

- I'm baby palo santo ugh celiac fashion axe. La croix lo-fi venmo whatever. Beard man braid migas single-origin coffee forage ramps. Tumeric messenger bag bicycle rights wayfarers, try-hard cronut blue bottle health goth. Sriracha tumblr cardigan, cloud bread succulents tumeric copper mug marfa semiotics woke next level organic roof party +1 try-hard. + {/* eslint-disable-next-line */} + I am baby palo santo ugh celiac fashion axe. La croix lo-fi venmo whatever. Beard man braid migas single-origin coffee forage ramps. Tumeric messenger bag bicycle rights wayfarers, try-hard cronut blue bottle health goth. Sriracha tumblr cardigan, cloud bread succulents tumeric copper mug marfa semiotics woke next level organic roof party +1 try-hard.

); }; + +export default RelatedProgram; diff --git a/src/containers/CourseCard/index.jsx b/src/containers/CourseCard/index.jsx index 79a836f..3273e6a 100644 --- a/src/containers/CourseCard/index.jsx +++ b/src/containers/CourseCard/index.jsx @@ -1,16 +1,15 @@ -import React, { useContext } from 'react'; +import React from 'react'; import PropTypes from 'prop-types'; -import { getConfig } from '@edx/frontend-platform'; -import { injectIntl, intlShape } from '@edx/frontend-platform/i18n'; -import { Program, Locked, MoreVert } from '@edx/paragon/icons'; +import { Locked } from '@edx/paragon/icons'; import { Button, Card } from '@edx/paragon'; -import { RelatedProgram } from './RelatedProgram'; -import { CourseCardMenu } from './CourseCardMenu'; -import { CourseCardFooter } from './CourseCardFooter'; + import { courseData } from 'data/services/lms/fakeData/courses'; +import RelatedProgram from './RelatedProgram'; +import CourseCardMenu from './CourseCardMenu'; +import CourseCardFooter from './CourseCardFooter'; -function CourseCard({ courseID }) { +export const CourseCard = ({ courseID }) => { const { title, imageUrl, @@ -18,13 +17,12 @@ function CourseCard({ courseID }) { displayOrg, accessExpiryDate, } = courseData[courseID] || {}; - console.log(courseID); return (
- + @@ -36,8 +34,8 @@ function CourseCard({ courseID }) { {displayOrg} • {displayNumber} • Access expires {accessExpiryDate} - }> - @@ -47,14 +45,12 @@ function CourseCard({ courseID }) {
); -} +}; CourseCard.propTypes = { - // intl: intlShape.isRequired, + courseID: PropTypes.string.isRequired, }; CourseCard.defaultProps = {}; export default CourseCard; - -// export default injectIntl(CourseCard); diff --git a/src/containers/CourseList/index.jsx b/src/containers/CourseList/index.jsx index 3a0bed5..01a0376 100644 --- a/src/containers/CourseList/index.jsx +++ b/src/containers/CourseList/index.jsx @@ -1,13 +1,17 @@ import React from 'react'; +import PropTypes from 'prop-types'; import CourseCard from 'containers/CourseCard'; export const CourseList = ({ courseIDs }) => ( -
+
{courseIDs.map((id) => ( ))}
); +CourseList.propTypes = { + courseIDs: PropTypes.arrayOf(PropTypes.string).isRequired, +}; export default CourseList; diff --git a/src/containers/Dashboard/index.jsx b/src/containers/Dashboard/index.jsx index f45f051..743d735 100644 --- a/src/containers/Dashboard/index.jsx +++ b/src/containers/Dashboard/index.jsx @@ -3,29 +3,27 @@ import React from 'react'; import CourseList from 'containers/CourseList'; import WidgetSidebar from 'containers/WidgetSidebar'; import { courseIDs } from 'data/services/lms/fakeData/courses'; +import { FormattedMessage } from '@edx/frontend-platform/i18n'; import EmptyCourse from '../EmptyCourse'; -import { FormattedMessage } from '@edx/frontend-platform/i18n'; -import messages from '../Dashboard/messages'; +import messages from './messages'; -export const Dashboard = () => { - return ( -
- {courseIDs.length ? ( - <> -

- -

-
- - -
- - ) : ( - - )} -
- ); -}; +export const Dashboard = () => ( +
+ {courseIDs.length ? ( + <> +

+ +

+
+ + +
+ + ) : ( + + )} +
+); export default Dashboard; diff --git a/src/containers/EmptyCourse/index.jsx b/src/containers/EmptyCourse/index.jsx index 2c60a10..e48dec7 100644 --- a/src/containers/EmptyCourse/index.jsx +++ b/src/containers/EmptyCourse/index.jsx @@ -1,13 +1,13 @@ import React from 'react'; -import messages from './messages'; import { FormattedMessage } from '@edx/frontend-platform/i18n'; -import { Button } from '@edx/paragon' +import { Button } from '@edx/paragon'; +import messages from './messages'; import './index.scss'; export const EmptyCourse = () => ( -
- +
+ empty course banner

diff --git a/src/containers/LearnerDashboardHeader/AuthenticatedUserDropdown.jsx b/src/containers/LearnerDashboardHeader/AuthenticatedUserDropdown.jsx index a8e5489..c85298c 100644 --- a/src/containers/LearnerDashboardHeader/AuthenticatedUserDropdown.jsx +++ b/src/containers/LearnerDashboardHeader/AuthenticatedUserDropdown.jsx @@ -8,42 +8,40 @@ import { Person } from '@edx/paragon/icons'; import messages from './messages'; -function AuthenticatedUserDropdown({ intl, username }) { - return ( - <> - - - - - {username} - - - - - {intl.formatMessage(messages.dashboard)} - {' '} - - {intl.formatMessage(messages.profile)} +export const AuthenticatedUserDropdown = ({ intl, username }) => ( + <> + + + + + {username} + + + + + {intl.formatMessage(messages.dashboard)} + {' '} + + {intl.formatMessage(messages.profile)} + + + {intl.formatMessage(messages.account)} + + {getConfig().ORDER_HISTORY_URL && ( + + {intl.formatMessage(messages.orderHistory)} - - {intl.formatMessage(messages.account)} - - {getConfig().ORDER_HISTORY_URL && ( - - {intl.formatMessage(messages.orderHistory)} - - )} - - {intl.formatMessage(messages.help)} - - - {intl.formatMessage(messages.signOut)} - - - - - ); -} + )} + + {intl.formatMessage(messages.help)} + + + {intl.formatMessage(messages.signOut)} + + + + +); AuthenticatedUserDropdown.propTypes = { intl: intlShape.isRequired, diff --git a/src/containers/LearnerDashboardHeader/GreetingBanner.jsx b/src/containers/LearnerDashboardHeader/GreetingBanner.jsx index 92f16d2..bd7d4cf 100644 --- a/src/containers/LearnerDashboardHeader/GreetingBanner.jsx +++ b/src/containers/LearnerDashboardHeader/GreetingBanner.jsx @@ -6,28 +6,28 @@ import messages from './messages'; export const GreetingBanner = () => { let greetMessage; - let hour = new Date().getHours(); + const hour = new Date().getHours(); - if ( hour > 16 ) { + if (hour > 16) { greetMessage = messages.goodEvening; - } - else if ( hour > 11 ) { + } else if (hour > 11) { greetMessage = messages.goodAfternoon; - } - else { + } else { greetMessage = messages.goodMorning; } - + return ( -
+
{getConfig().SITE_NAME} -

+

); }; + +export default GreetingBanner; diff --git a/src/containers/LearnerDashboardHeader/index.jsx b/src/containers/LearnerDashboardHeader/index.jsx index 2168f57..9d3a925 100644 --- a/src/containers/LearnerDashboardHeader/index.jsx +++ b/src/containers/LearnerDashboardHeader/index.jsx @@ -5,17 +5,17 @@ import { Program } from '@edx/paragon/icons'; import { Button } from '@edx/paragon'; import AuthenticatedUserDropdown from './AuthenticatedUserDropdown'; -import { GreetingBanner } from './GreetingBanner'; +import GreetingBanner from './GreetingBanner'; import messages from './messages'; -function LearnerDashboardHeader({ intl }) { +export const LearnerDashboardHeader = ({ intl }) => { const { authenticatedUser } = useContext(AppContext); return ( -
-
-
+
+
+
-
+
{authenticatedUser && ( )} @@ -24,7 +24,7 @@ function LearnerDashboardHeader({ intl }) {
); -} +}; LearnerDashboardHeader.propTypes = { intl: intlShape.isRequired, diff --git a/src/containers/LearnerDashboardHeader/messages.js b/src/containers/LearnerDashboardHeader/messages.js index 1f23cdd..94d1c53 100644 --- a/src/containers/LearnerDashboardHeader/messages.js +++ b/src/containers/LearnerDashboardHeader/messages.js @@ -50,8 +50,8 @@ const messages = defineMessages({ switchToProgram: { id: 'leanerDashboard.switchToProgram', defaultMessage: 'Switch to Programs', - description: 'Header link for switching to program page.' - } + description: 'Header link for switching to program page.', + }, }); export default messages; diff --git a/src/containers/WidgetSidebar/index.jsx b/src/containers/WidgetSidebar/index.jsx index 4f264fb..6330e62 100644 --- a/src/containers/WidgetSidebar/index.jsx +++ b/src/containers/WidgetSidebar/index.jsx @@ -1,13 +1,13 @@ import React from 'react'; -import messages from './messages'; import { FormattedMessage } from '@edx/frontend-platform/i18n'; import { Hyperlink, Card } from '@edx/paragon'; +import messages from './messages'; import './index.scss'; export const WidgetSidebar = () => ( -
-
+
+
{/*

@@ -17,16 +17,16 @@ export const WidgetSidebar = () => (

*/} - +

- +
diff --git a/src/data/redux/requests/selectors.js b/src/data/redux/requests/selectors.js index a524142..52c983a 100644 --- a/src/data/redux/requests/selectors.js +++ b/src/data/redux/requests/selectors.js @@ -1,6 +1,6 @@ import { StrictDict } from 'utils'; import { RequestStates } from 'data/constants/requests'; -import * as module from './selectors'; +// import * as module from './selectors'; export const requestStatus = (state, { requestKey }) => state.requests[requestKey]; diff --git a/src/data/redux/thunkActions/app.js b/src/data/redux/thunkActions/app.js index 16c7fd5..537d424 100644 --- a/src/data/redux/thunkActions/app.js +++ b/src/data/redux/thunkActions/app.js @@ -1,16 +1,16 @@ import { StrictDict } from 'utils'; -import { selectors, actions } from 'data/redux'; -import { locationId } from 'data/constants/app'; +// import { selectors, actions } from 'data/redux'; +// import { locationId } from 'data/constants/app'; // import { } from './requests'; -import * as module from './app'; +// import * as module from './app'; /** * initialize the app, loading ora and course metadata from the api, and loading the initial * submission list data. */ -export const initialize = () => (dispatch) => { +export const initialize = () => () => { }; export default StrictDict({ diff --git a/src/data/redux/thunkActions/requests.js b/src/data/redux/thunkActions/requests.js index c659cff..c923726 100644 --- a/src/data/redux/thunkActions/requests.js +++ b/src/data/redux/thunkActions/requests.js @@ -1,10 +1,10 @@ import { StrictDict } from 'utils'; -import { RequestKeys } from 'data/constants/requests'; +// import { RequestKeys } from 'data/constants/requests'; import { actions } from 'data/redux'; -import api from 'data/services/lms/api'; +// import api from 'data/services/lms/api'; -import * as module from './requests'; +// import * as module from './requests'; /** * Wrapper around a network request promise, that sends actions to the redux store to diff --git a/src/data/services/lms/api.js b/src/data/services/lms/api.js index 6e8376b..c1e701d 100644 --- a/src/data/services/lms/api.js +++ b/src/data/services/lms/api.js @@ -1,13 +1,15 @@ -// import { StrictDict } from 'utils'; +/* +import { StrictDict } from 'utils'; import { locationId } from 'data/constants/app'; -// import { paramKeys } from './constants'; +import { paramKeys } from './constants'; import urls from './urls'; import { - // client, + client, get, - // post, + post, stringifyUrl, } from './utils'; +*/ /********************************************************************************* * GET Actions diff --git a/src/data/services/lms/messages.js b/src/data/services/lms/messages.js deleted file mode 100644 index 7d17cc1..0000000 --- a/src/data/services/lms/messages.js +++ /dev/null @@ -1,34 +0,0 @@ -import { defineMessages } from '@edx/frontend-platform/i18n'; -import { gradingStatuses } from './constants'; - -const messages = defineMessages({ - ungraded: { - id: 'learner-dashboard.lms-api.gradingStatusDisplay.ungraded', - defaultMessage: 'Ungraded', - description: 'Grading status label for ungraded submission', - }, - locked: { - id: 'learner-dashboard.lms-api.gradingStatusDisplay.locked', - defaultMessage: 'Currently being graded by someone else', - description: 'Grading status label for locked submission', - }, - graded: { - id: 'learner-dashboard.lms-api.gradingStatusDisplay.graded', - defaultMessage: 'Grading Completed', - description: 'Grading status label for graded submission', - }, - inProgress: { - id: 'learner-dashboard.lms-api.gradingStatusDisplay.inProgress', - defaultMessage: 'You are currently grading this response', - description: 'Grading status label for in-progress submission', - }, -}); - -// re-keying the messages to ensure that the api can link to them even if the passed -// status keys change. -export default { - [gradingStatuses.ungraded]: messages.ungraded, - [gradingStatuses.locked]: messages.locked, - [gradingStatuses.graded]: messages.graded, - [gradingStatuses.inProgress]: messages.inProgress, -}; diff --git a/src/test/inspector.js b/src/test/inspector.js index 49fadb0..123e621 100644 --- a/src/test/inspector.js +++ b/src/test/inspector.js @@ -1,12 +1,10 @@ /* eslint-disable import/no-extraneous-dependencies */ -import { within } from '@testing-library/react'; +// import { within } from '@testing-library/react'; -import fakeData from 'data/services/lms/fakeData'; -import { gradingStatusTransform } from 'data/redux/grading/selectors/selected'; +// import fakeData from 'data/services/lms/fakeData'; +// import { gradingStatusTransform } from 'data/redux/grading/selectors/selected'; -import appMessages from './messages'; - -const { rubricConfig } = fakeData.oraMetadata; +// import appMessages from './messages'; /** * App inspector class providing methods to return elements from within @@ -23,86 +21,11 @@ class Inspector { this.findByLabelText = this.el.findByLabelText; } - /** - * Returns listView elements (immediate return methods) - */ - get listView() { - const table = () => this.getByRole('table'); - const tableRows = () => table().querySelectorAll('tbody tr'); - return { - table, - tableRows, - selectedBtn: (num) => this.getByText(`View selected responses (${num})`), - loadingResponses: () => this.getByText(appMessages.ListView.loadingResponses), - listCheckbox: (index) => ( - within(tableRows().item(index)).getByTitle('Toggle Row Selected') - ), - backLink: () => this.getByText(appMessages.ListView.backToResponsesLowercase).closest('a'), - reloadBtn: () => this.getByText(appMessages.ListView.reloadSubmissions).closest('button'), - }; - } - - /** - * Returns Review Modal elements (immediate return methods) - */ - get review() { - const modal = this.getByRole('dialog'); - const modalEl = within(modal); - const { getByLabelText, getByText } = modalEl; - const rubricContent = () => modalEl.getByText(appMessages.Rubric.rubric).closest('div'); - const rubricFeedback = () => ( - within(rubricContent()).getByText(appMessages.Rubric.overallComments).closest('div') - ); - const rubricCriterion = (index) => ( - within(rubricContent()).getByText(rubricConfig.criteria[index].prompt).closest('div') - ); - return { - modal: () => modal, - modalEl: () => modalEl, - nextNav: () => getByLabelText(appMessages.ReviewActionsComponents.loadNext), - prevNav: () => getByLabelText(appMessages.ReviewActionsComponents.loadPrevious), - hideRubricBtn: () => getByText(appMessages.ReviewActions.hideRubric), - showRubricBtn: () => getByText(appMessages.ReviewActions.showRubric), - loadingResponse: () => getByText(appMessages.ReviewModal.loadingResponse), - retryFetchLink: () => ( - getByText(appMessages.ReviewErrors.reloadSubmission).closest('button') - ), - username: (index) => getByText(fakeData.ids.username(index)), - gradingStatus: (submission) => ( - getByText(appMessages.lms[gradingStatusTransform(submission)]) - ), - rubric: { - criteria: () => modal.querySelectorAll('.rubric-criteria'), - feedbackInput: () => within(rubricFeedback()).getByRole('textbox'), - submitGradeBtn: () => modalEl.getByText(appMessages.Rubric.submitGrade), - criterion: rubricCriterion, - criterionOption: (criterionIndex, optionIndex) => ( - within(rubricCriterion(criterionIndex)) - .getByText(rubricConfig.criteria[criterionIndex].options[optionIndex].label) - ), - criterionFeedback: (index) => within(rubricCriterion(index)).getByRole('textbox'), - }, - }; - } - /** * Returns promises for attempting to find elements within the DOM */ get find() { return { - listView: { - viewAllResponsesBtn: () => this.findByText(appMessages.ListView.viewAllResponses), - loadErrorHeading: () => this.findByText(appMessages.ListView.loadErrorHeading), - }, - review: { - prevNav: () => ( - this.review.modalEl().findByLabelText(appMessages.ReviewActionsComponents.loadPrevious) - ), - loadErrorHeading: () => this.findByText(appMessages.ReviewErrors.loadErrorHeading), - startGradingBtn: () => this.findByText(appMessages.ReviewActionsComponents.startGrading), - overrideGradeBtn: () => this.findByText(appMessages.ReviewActionsComponents.overrideGrade), - submitGradeBtn: () => this.findByText(appMessages.Rubric.submitGrade), - }, }; } } diff --git a/src/test/messages.js b/src/test/messages.js index ca52ac1..850e3e5 100644 --- a/src/test/messages.js +++ b/src/test/messages.js @@ -1,30 +1,9 @@ -import InfoPopover from 'components/InfoPopover/messages'; -import ResponseDisplay from 'containers/ResponseDisplay/messages'; -import ResponseDisplayComponents from 'containers/ResponseDisplay/components/messages'; -import CriterionContainer from 'containers/CriterionContainer/messages'; -import ListView from 'containers/ListView/messages'; -import ReviewActions from 'containers/ReviewActions/messages'; -import ReviewActionsComponents from 'containers/ReviewActions/components/messages'; -import Rubric from 'containers/Rubric/messages'; -import ReviewModal from 'containers/ReviewModal/messages'; -import ReviewErrors from 'containers/ReviewModal/ReviewErrors/messages'; -import lms from 'data/services/lms/messages'; - +/* const mapMessages = (messages) => Object.keys(messages).reduce( (acc, key) => ({ ...acc, [key]: messages[key].defaultMessage }), {}, ); +*/ export default { - InfoPopover: mapMessages(InfoPopover), - ResponseDisplay: mapMessages(ResponseDisplay), - ResponseDisplayComponents: mapMessages(ResponseDisplayComponents), - CriterionContainer: mapMessages(CriterionContainer), - ListView: mapMessages(ListView), - ReviewActions: mapMessages(ReviewActions), - ReviewActionsComponents: mapMessages(ReviewActionsComponents), - Rubric: mapMessages(Rubric), - ReviewModal: mapMessages(ReviewModal), - ReviewErrors: mapMessages(ReviewErrors), - lms: mapMessages(lms), };