diff --git a/src/users/UserSummary.jsx b/src/users/UserSummary.jsx index 04eeb40cb..7fc6133b7 100644 --- a/src/users/UserSummary.jsx +++ b/src/users/UserSummary.jsx @@ -244,16 +244,6 @@ export default function UserSummary({ }, })); - const proctoringData = [onboardingData].map(result => ({ - status: result.onboardingStatus ? titleCase(result.onboardingStatus) : 'Not Started', - expirationDate: formatDate(result.expirationDate), - onboardingReleaseDate: formatDate(result.onboardingReleaseDate), - onboardingLink: result.onboardingLink ? { - displayValue: Link, - value: result.onboardingLink, - } : 'N/A', - })); - const proctoringColumns = [ { label: 'Onboarding Status', @@ -263,16 +253,21 @@ export default function UserSummary({ label: 'Expiration Date', key: 'expirationDate', }, - { - label: 'Release Date', - key: 'onboardingReleaseDate', - }, { label: 'Onboarding Link', key: 'onboardingLink', }, ]; + const proctoringData = [onboardingData].map(result => ({ + status: result.onboardingStatus ? titleCase(result.onboardingStatus) : 'Not Started', + expirationDate: formatDate(result.expirationDate), + onboardingLink: result.onboardingLink ? { + displayValue: Link, + value: result.onboardingLink, + } : 'N/A', + })); + if (!userData.isActive) { let dataValue; if (userData.activationKey !== null) { @@ -472,7 +467,6 @@ UserSummary.propTypes = { onboardingStatus: PropTypes.string, expirationDate: PropTypes.string, onboardingLink: PropTypes.string, - onboardingReleaseDate: PropTypes.string, }), changeHandler: PropTypes.func.isRequired, }; diff --git a/src/users/UserSummary.test.jsx b/src/users/UserSummary.test.jsx index e09a6beae..f5e813401 100644 --- a/src/users/UserSummary.test.jsx +++ b/src/users/UserSummary.test.jsx @@ -76,11 +76,10 @@ describe('User Summary Component Tests', () => { it('Onboarding Status', () => { const dataTable = wrapper.find('Table#proctoring-data'); const dataBody = dataTable.find('tbody tr td'); - expect(dataBody).toHaveLength(4); + expect(dataBody).toHaveLength(3); expect(dataBody.at(0).text()).toEqual(titleCase(UserSummaryData.onboardingData.onboardingStatus)); expect(dataBody.at(1).text()).toEqual(formatDate(UserSummaryData.onboardingData.expirationDate)); - expect(dataBody.at(2).text()).toEqual(formatDate(UserSummaryData.onboardingData.onboardingReleaseDate)); - expect(dataBody.at(3).text()).toEqual('Link'); + expect(dataBody.at(2).text()).toEqual('Link'); }); it('No Onboarding Status Data', () => { @@ -89,11 +88,10 @@ describe('User Summary Component Tests', () => { wrapper = mount(); const dataTable = wrapper.find('Table#proctoring-data'); const dataBody = dataTable.find('tbody tr td'); - expect(dataBody).toHaveLength(4); + expect(dataBody).toHaveLength(3); expect(dataBody.at(0).text()).toEqual('Not Started'); expect(dataBody.at(1).text()).toEqual(formatDate(UserSummaryData.onboardingData.expirationDate)); - expect(dataBody.at(2).text()).toEqual(formatDate(UserSummaryData.onboardingData.onboardingReleaseDate)); - expect(dataBody.at(3).text()).toEqual('N/A'); + expect(dataBody.at(2).text()).toEqual('N/A'); }); }); diff --git a/src/users/data/api.js b/src/users/data/api.js index c323f2a43..6aa0b9146 100644 --- a/src/users/data/api.js +++ b/src/users/data/api.js @@ -2,7 +2,7 @@ import { ensureConfig } from '@edx/frontend-platform'; import { getAuthenticatedHttpClient } from '@edx/frontend-platform/auth'; import * as messages from '../../userMessages/messages'; import * as AppUrls from './urls'; -import { isEmail } from '../../utils'; +import { isEmail, sortedCompareDates } from '../../utils'; export async function getEntitlements(username, page = 1) { const baseURL = AppUrls.getEntitlementUrl(); @@ -187,7 +187,9 @@ export async function getOnboardingStatus(enrollments, username) { // get most recent paid enrollment const paidEnrollments = enrollments.filter((course) => course.mode === 'verified' || course.mode === 'professional'); - paidEnrollments.sort((a, b) => (a.created < b.created)); + + // sort courses on enrollments created with most recent enrollment on top + paidEnrollments.sort((x, y) => sortedCompareDates(x.created, y.created, false)); if (paidEnrollments.length === 0) { return { diff --git a/src/utils/index.js b/src/utils/index.js index ff1a9365a..4fd845231 100644 --- a/src/utils/index.js +++ b/src/utils/index.js @@ -31,3 +31,10 @@ export function sort(firstElement, secondElement, key, direction) { export function titleCase(str) { return str.toLowerCase().replace(/_/g, ' ').replace(/\b(\w)/g, s => s.toUpperCase()); } + +/** Compare dates function for array.sort() */ +export function sortedCompareDates(x, y, asc) { + const a = new Date(x); + const b = new Date(y); + return asc ? a - b : b - a; +} diff --git a/src/utils/index.test.js b/src/utils/index.test.js index 85dbf36f5..a3c79780f 100644 --- a/src/utils/index.test.js +++ b/src/utils/index.test.js @@ -1,5 +1,5 @@ import { - isEmail, isValidUsername, formatDate, sort, titleCase, + isEmail, isValidUsername, formatDate, sort, titleCase, sortedCompareDates, } from './index'; describe('Test Utils', () => { @@ -90,4 +90,41 @@ describe('Test Utils', () => { expect(titleCase('onboarding_exam_details')).toEqual('Onboarding Exam Details'); }); }); + + describe('sortedCompareDates', () => { + const dates = [ + '2022-04-06T20:49:53.428771Z', + '2022-04-06T20:49:53.428771Z', + '2021-04-06T20:49:53.428771Z', + '2020-04-06T20:49:53.428771Z', + '2021-04-06T10:49:53.428771Z', + ]; + + const ascSortedDates = [ + '2020-04-06T20:49:53.428771Z', + '2021-04-06T10:49:53.428771Z', + '2021-04-06T20:49:53.428771Z', + '2022-04-06T20:49:53.428771Z', + '2022-04-06T20:49:53.428771Z', + ]; + + const dscSortedDates = [ + '2022-04-06T20:49:53.428771Z', + '2022-04-06T20:49:53.428771Z', + '2021-04-06T20:49:53.428771Z', + '2021-04-06T10:49:53.428771Z', + '2020-04-06T20:49:53.428771Z', + ]; + + it('dates in asc order', () => { + expect(dates.sort( + (a, b) => sortedCompareDates(a, b, true), + )).toEqual(ascSortedDates); + }); + it('dates in dsc order', () => { + expect(dates.sort( + (a, b) => sortedCompareDates(a, b, false), + )).toEqual(dscSortedDates); + }); + }); });