11import React from 'react' ;
22import PropTypes from 'prop-types' ;
33
4- import { injectIntl , intlShape } from '@edx/frontend-platform/i18n' ;
4+ import { useIntl } from '@edx/frontend-platform/i18n' ;
55import {
66 Award , Check , Groups , RemoveRedEye ,
77} from '@openedx/paragon/icons' ;
88
99import NumberCard from './cards/NumberCard' ;
1010
11- class AdminCards extends React . Component {
12- constructor ( props ) {
13- super ( props ) ;
14- const { intl } = this . props ;
11+ const AdminCards = ( {
12+ activeLearners,
13+ numberOfUsers,
14+ courseCompletions,
15+ enrolledLearners,
16+ } ) => {
17+ const intl = useIntl ( ) ;
1518
16- this . cards = {
17- numberOfUsers : {
18- ref : React . createRef ( ) ,
19- description : intl . formatMessage ( {
20- id : 'adminPortal.cards.registeredLearners' ,
21- defaultMessage : 'total number of learners registered' ,
19+ const cards = {
20+ numberOfUsers : {
21+ ref : React . createRef ( ) ,
22+ description : intl . formatMessage ( {
23+ id : 'adminPortal.cards.registeredLearners' ,
24+ defaultMessage : 'total number of learners registered' ,
25+ } ) ,
26+ icon : Groups ,
27+ actions : [ {
28+ label : intl . formatMessage ( {
29+ id : 'adminPortal.cards.registeredUnenrolledLearners' ,
30+ defaultMessage : 'Which learners are registered but not yet enrolled in any courses?' ,
2231 } ) ,
23- icon : Groups ,
24- actions : [ {
25- label : intl . formatMessage ( {
26- id : 'adminPortal.cards.registeredUnenrolledLearners' ,
27- defaultMessage : 'Which learners are registered but not yet enrolled in any courses?' ,
28- } ) ,
29- slug : 'registered-unenrolled-learners ' ,
30- } ] ,
31- } ,
32- enrolledLearners : {
33- ref : React . createRef ( ) ,
34- description : intl . formatMessage ( {
35- id : 'adminPortal.cards.enrolledOneCourse ' ,
36- defaultMessage : 'learners enrolled in at least one course ' ,
32+ slug : 'registered-unenrolled-learners' ,
33+ } ] ,
34+ } ,
35+ enrolledLearners : {
36+ ref : React . createRef ( ) ,
37+ description : intl . formatMessage ( {
38+ id : 'adminPortal.cards.enrolledOneCourse ' ,
39+ defaultMessage : 'learners enrolled in at least one course' ,
40+ } ) ,
41+ icon : Check ,
42+ actions : [ {
43+ label : intl . formatMessage ( {
44+ id : 'adminPortal.cards.enrolledLearners ' ,
45+ defaultMessage : 'How many courses are learners enrolled in? ' ,
3746 } ) ,
38- icon : Check ,
39- actions : [ {
40- label : intl . formatMessage ( {
41- id : 'adminPortal.cards.enrolledLearners' ,
42- defaultMessage : 'How many courses are learners enrolled in?' ,
43- } ) ,
44- slug : 'enrolled-learners' ,
45- } , {
46- label : intl . formatMessage ( {
47- id : 'adminPortal.cards.enrolledLearnersInactiveCourses' ,
48- defaultMessage : 'Who is no longer enrolled in a current course?' ,
49- } ) ,
50- slug : 'enrolled-learners-inactive-courses' ,
51- } ] ,
52- } ,
53- activeLearners : {
54- ref : React . createRef ( ) ,
55- description : intl . formatMessage ( {
56- id : 'adminPortal.cards.activeLearnersPastWeek' ,
57- defaultMessage : 'active learners in the past week' ,
47+ slug : 'enrolled-learners' ,
48+ } , {
49+ label : intl . formatMessage ( {
50+ id : 'adminPortal.cards.enrolledLearnersInactiveCourses' ,
51+ defaultMessage : 'Who is no longer enrolled in a current course?' ,
5852 } ) ,
59- icon : RemoveRedEye ,
60- actions : [ {
61- label : intl . formatMessage ( {
62- id : 'adminPortal.cards.learnersActiveWeek' ,
63- defaultMessage : 'Who are my top active learners?' ,
64- } ) ,
65- slug : 'learners-active-week' ,
66- } , {
67- label : intl . formatMessage ( {
68- id : 'adminPortal.cards.learnersInactiveWeek' ,
69- defaultMessage : 'Who has not been active for over a week?' ,
70- } ) ,
71- slug : 'learners-inactive-week' ,
72- } , {
73- label : intl . formatMessage ( {
74- id : 'adminPortal.cards.learnersInactiveMonth' ,
75- defaultMessage : 'Who has not been active for over a month?' ,
76- } ) ,
77- slug : 'learners-inactive-month' ,
78- } ] ,
79- } ,
80- courseCompletions : {
81- ref : React . createRef ( ) ,
82- description : 'course completions' ,
83- icon : Award ,
84- actions : [ {
85- label : intl . formatMessage ( {
86- id : 'adminPortal.cards.completedLearners' ,
87- defaultMessage : 'How many courses have been completed by learners?' ,
88- } ) ,
89- slug : 'completed-learners' ,
90- } , {
91- label : intl . formatMessage ( {
92- id : 'adminPortal.cards.completedLearnersWeek' ,
93- defaultMessage : 'Who completed a course in the past week?' ,
94- } ) ,
95- slug : 'completed-learners-week' ,
96- } ] ,
97- } ,
98- } ;
99- }
53+ slug : 'enrolled-learners-inactive-courses' ,
54+ } ] ,
55+ } ,
56+ activeLearners : {
57+ ref : React . createRef ( ) ,
58+ description : intl . formatMessage ( {
59+ id : 'adminPortal.cards.activeLearnersPastWeek' ,
60+ defaultMessage : 'active learners in the past week' ,
61+ } ) ,
62+ icon : RemoveRedEye ,
63+ actions : [ {
64+ label : intl . formatMessage ( {
65+ id : 'adminPortal.cards.learnersActiveWeek' ,
66+ defaultMessage : 'Who are my top active learners?' ,
67+ } ) ,
68+ slug : 'learners-active-week' ,
69+ } , {
70+ label : intl . formatMessage ( {
71+ id : 'adminPortal.cards.learnersInactiveWeek' ,
72+ defaultMessage : 'Who has not been active for over a week?' ,
73+ } ) ,
74+ slug : 'learners-inactive-week' ,
75+ } , {
76+ label : intl . formatMessage ( {
77+ id : 'adminPortal.cards.learnersInactiveMonth' ,
78+ defaultMessage : 'Who has not been active for over a month?' ,
79+ } ) ,
80+ slug : 'learners-inactive-month' ,
81+ } ] ,
82+ } ,
83+ courseCompletions : {
84+ ref : React . createRef ( ) ,
85+ description : 'course completions' ,
86+ icon : Award ,
87+ actions : [ {
88+ label : intl . formatMessage ( {
89+ id : 'adminPortal.cards.completedLearners' ,
90+ defaultMessage : 'How many courses have been completed by learners?' ,
91+ } ) ,
92+ slug : 'completed-learners' ,
93+ } , {
94+ label : intl . formatMessage ( {
95+ id : 'adminPortal.cards.completedLearnersWeek' ,
96+ defaultMessage : 'Who completed a course in the past week?' ,
97+ } ) ,
98+ slug : 'completed-learners-week' ,
99+ } ] ,
100+ } ,
101+ } ;
100102
101- renderCard ( { title, cardKey } ) {
102- const card = this . cards [ cardKey ] ;
103+ const renderCard = ( { title, cardKey } ) => {
104+ const card = cards [ cardKey ] ;
103105
104106 return (
105107 < div
@@ -115,31 +117,22 @@ class AdminCards extends React.Component {
115117 />
116118 </ div >
117119 ) ;
118- }
119-
120- render ( ) {
121- const {
122- activeLearners,
123- numberOfUsers,
124- courseCompletions,
125- enrolledLearners,
126- } = this . props ;
120+ } ;
127121
128- const data = {
129- activeLearners : activeLearners . past_week ,
130- numberOfUsers,
131- courseCompletions,
132- enrolledLearners,
133- } ;
122+ const data = {
123+ activeLearners : activeLearners . past_week ,
124+ numberOfUsers,
125+ courseCompletions,
126+ enrolledLearners,
127+ } ;
134128
135- return Object . keys ( this . cards ) . map ( cardKey => (
136- this . renderCard ( {
137- title : data [ cardKey ] ,
138- cardKey,
139- } )
140- ) ) ;
141- }
142- }
129+ return Object . keys ( cards ) . map ( cardKey => (
130+ renderCard ( {
131+ title : data [ cardKey ] ,
132+ cardKey,
133+ } )
134+ ) ) ;
135+ } ;
143136
144137AdminCards . propTypes = {
145138 activeLearners : PropTypes . shape ( {
@@ -149,8 +142,6 @@ AdminCards.propTypes = {
149142 numberOfUsers : PropTypes . number . isRequired ,
150143 courseCompletions : PropTypes . number . isRequired ,
151144 enrolledLearners : PropTypes . number . isRequired ,
152- // injected
153- intl : intlShape . isRequired ,
154145} ;
155146
156- export default injectIntl ( AdminCards ) ;
147+ export default AdminCards ;
0 commit comments