Skip to content

Commit 53f1cdb

Browse files
feat(translations): translate course user roles
1 parent 01a4bb7 commit 53f1cdb

File tree

27 files changed

+333
-310
lines changed

27 files changed

+333
-310
lines changed

client/app/api/course/Users.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
import { AxiosResponse } from 'axios';
22
import {
3+
CourseStaffRole,
34
CourseUserBasicListData,
45
CourseUserBasicMiniEntity,
56
CourseUserData,
67
CourseUserListData,
78
ManageCourseUsersPermissions,
89
ManageCourseUsersSharedData,
9-
StaffRoles,
1010
UpdateCourseUserPatchData,
1111
} from 'types/course/courseUsers';
1212
import { TimelineData } from 'types/course/referenceTimelines';
@@ -110,13 +110,13 @@ export default class UsersAPI extends BaseCourseAPI {
110110
* Upgrade a user to staff.
111111
*
112112
* @param {CourseUserBasicMiniEntity[]} users
113-
* @param {StaffRoles} role
113+
* @param {CourseStaffRole} role
114114
* @return {Promise} list of upgraded users
115115
* error response: { errors: [] } - An array of errors will be returned upon validation error.
116116
*/
117117
upgradeToStaff(
118118
users: CourseUserBasicMiniEntity[],
119-
role: StaffRoles,
119+
role: CourseStaffRole,
120120
): Promise<AxiosResponse> {
121121
const userIds = users.map((user) => user.id);
122122
const params = {

client/app/bundles/course/container/Sidebar/CourseUserItem.tsx

Lines changed: 25 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@ import { Avatar, Typography } from '@mui/material';
44
import { CourseLayoutData } from 'types/course/courses';
55

66
import PopupMenu from 'lib/components/core/PopupMenu';
7-
import { COURSE_USER_ROLES } from 'lib/constants/sharedConstants';
87
import useTranslation from 'lib/hooks/useTranslation';
8+
import roleTranslations from 'lib/translations/course/users/roles';
99

1010
import CourseUserProgress from './CourseUserProgress';
1111
import LevelRing from './LevelRing';
@@ -45,24 +45,30 @@ interface CourseUserNameAndRoleProps {
4545

4646
const CourseUserNameAndRole = (
4747
props: CourseUserNameAndRoleProps,
48-
): JSX.Element => (
49-
<>
50-
<Typography
51-
className="overflow-hidden text-ellipsis whitespace-nowrap"
52-
variant="body2"
53-
>
54-
{props.from.courseUserName}
55-
</Typography>
56-
57-
<Typography
58-
className="overflow-hidden text-ellipsis whitespace-nowrap"
59-
color="text.secondary"
60-
variant="caption"
61-
>
62-
{COURSE_USER_ROLES[props.from.courseUserRole!]}
63-
</Typography>
64-
</>
65-
);
48+
): JSX.Element => {
49+
const { t } = useTranslation();
50+
51+
return (
52+
<>
53+
<Typography
54+
className="overflow-hidden text-ellipsis whitespace-nowrap"
55+
variant="body2"
56+
>
57+
{props.from.courseUserName}
58+
</Typography>
59+
60+
{props.from.courseUserRole && (
61+
<Typography
62+
className="overflow-hidden text-ellipsis whitespace-nowrap"
63+
color="text.secondary"
64+
variant="caption"
65+
>
66+
{t(roleTranslations[props.from.courseUserRole])}
67+
</Typography>
68+
)}
69+
</>
70+
);
71+
};
6672

6773
const SimpleCourseUserItemContent = (
6874
props: CourseUserItemProps,

client/app/bundles/course/enrol-requests/components/buttons/PendingEnrolRequestsButtons.tsx

Lines changed: 17 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,18 @@
11
import { FC, memo, useState } from 'react';
2-
import { defineMessages, injectIntl, WrappedComponentProps } from 'react-intl';
2+
import { defineMessages } from 'react-intl';
33
import equal from 'fast-deep-equal';
44
import { EnrolRequestRowData } from 'types/course/enrolRequests';
55

66
import AcceptButton from 'lib/components/core/buttons/AcceptButton';
77
import DeleteButton from 'lib/components/core/buttons/DeleteButton';
8-
import { COURSE_USER_ROLES } from 'lib/constants/sharedConstants';
98
import { useAppDispatch } from 'lib/hooks/store';
109
import toast from 'lib/hooks/toast';
10+
import useTranslation from 'lib/hooks/useTranslation';
11+
import roleTranslations from 'lib/translations/course/users/roles';
1112

1213
import { approveEnrolRequest, rejectEnrolRequest } from '../../operations';
1314

14-
interface Props extends WrappedComponentProps {
15+
interface Props {
1516
enrolRequest: EnrolRequestRowData;
1617
}
1718
const styles = {
@@ -53,7 +54,8 @@ const translations = defineMessages({
5354
});
5455

5556
const PendingEnrolRequestsButtons: FC<Props> = (props) => {
56-
const { intl, enrolRequest } = props;
57+
const { enrolRequest } = props;
58+
const { t } = useTranslation();
5759
const dispatch = useAppDispatch();
5860
const [isApproving, setIsApproving] = useState(false);
5961
const [isDeleting, setIsDeleting] = useState(false);
@@ -63,7 +65,7 @@ const PendingEnrolRequestsButtons: FC<Props> = (props) => {
6365
return dispatch(approveEnrolRequest(enrolRequest))
6466
.then(() => {
6567
toast.success(
66-
intl.formatMessage(translations.approveSuccess, {
68+
t(translations.approveSuccess, {
6769
name: enrolRequest.name,
6870
}),
6971
);
@@ -73,7 +75,7 @@ const PendingEnrolRequestsButtons: FC<Props> = (props) => {
7375
? error.response.data.errors
7476
: '';
7577
toast.error(
76-
intl.formatMessage(translations.approveFailure, {
78+
t(translations.approveFailure, {
7779
error: errorMessage,
7880
}),
7981
);
@@ -86,7 +88,7 @@ const PendingEnrolRequestsButtons: FC<Props> = (props) => {
8688
return dispatch(rejectEnrolRequest(enrolRequest.id))
8789
.then(() => {
8890
toast.success(
89-
intl.formatMessage(translations.rejectSuccess, {
91+
t(translations.rejectSuccess, {
9092
name: enrolRequest.name,
9193
}),
9294
);
@@ -96,7 +98,7 @@ const PendingEnrolRequestsButtons: FC<Props> = (props) => {
9698
? error.response.data.errors
9799
: '';
98100
toast.error(
99-
intl.formatMessage(translations.rejectFailure, {
101+
t(translations.rejectFailure, {
100102
error: errorMessage,
101103
}),
102104
);
@@ -111,28 +113,25 @@ const PendingEnrolRequestsButtons: FC<Props> = (props) => {
111113
disabled={isApproving || isDeleting}
112114
onClick={onApprove}
113115
sx={styles.buttonStyle}
114-
tooltip={intl.formatMessage(translations.approveTooltip)}
116+
tooltip={t(translations.approveTooltip)}
115117
/>
116118
<DeleteButton
117119
className={`enrol-request-reject-${enrolRequest.id}`}
118-
confirmMessage={intl.formatMessage(translations.rejectConfirm, {
119-
role: COURSE_USER_ROLES[enrolRequest.role!],
120+
confirmMessage={t(translations.rejectConfirm, {
121+
role: t(roleTranslations[enrolRequest.role!]),
120122
name: enrolRequest.name,
121123
email: enrolRequest.email,
122124
})}
123125
disabled={isApproving || isDeleting}
124126
loading={isDeleting}
125127
onClick={onDelete}
126128
sx={styles.buttonStyle}
127-
tooltip={intl.formatMessage(translations.rejectTooltip)}
129+
tooltip={t(translations.rejectTooltip)}
128130
/>
129131
</div>
130132
);
131133
};
132134

133-
export default memo(
134-
injectIntl(PendingEnrolRequestsButtons),
135-
(prevProps, nextProps) => {
136-
return equal(prevProps.enrolRequest, nextProps.enrolRequest);
137-
},
138-
);
135+
export default memo(PendingEnrolRequestsButtons, (prevProps, nextProps) => {
136+
return equal(prevProps.enrolRequest, nextProps.enrolRequest);
137+
});

0 commit comments

Comments
 (0)