Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { FC, memo, useState } from 'react';
import { defineMessages, injectIntl, WrappedComponentProps } from 'react-intl';
import { defineMessages } from 'react-intl';
import equal from 'fast-deep-equal';
import { EnrolRequestRowData } from 'types/course/enrolRequests';

Expand All @@ -8,10 +8,11 @@ import DeleteButton from 'lib/components/core/buttons/DeleteButton';
import { COURSE_USER_ROLES } from 'lib/constants/sharedConstants';
import { useAppDispatch } from 'lib/hooks/store';
import toast from 'lib/hooks/toast';
import useTranslation from 'lib/hooks/useTranslation';

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

interface Props extends WrappedComponentProps {
interface Props {
enrolRequest: EnrolRequestRowData;
}
const styles = {
Expand Down Expand Up @@ -53,7 +54,8 @@ const translations = defineMessages({
});

const PendingEnrolRequestsButtons: FC<Props> = (props) => {
const { intl, enrolRequest } = props;
const { enrolRequest } = props;
const { t } = useTranslation();
const dispatch = useAppDispatch();
const [isApproving, setIsApproving] = useState(false);
const [isDeleting, setIsDeleting] = useState(false);
Expand All @@ -63,7 +65,7 @@ const PendingEnrolRequestsButtons: FC<Props> = (props) => {
return dispatch(approveEnrolRequest(enrolRequest))
.then(() => {
toast.success(
intl.formatMessage(translations.approveSuccess, {
t(translations.approveSuccess, {
name: enrolRequest.name,
}),
);
Expand All @@ -73,7 +75,7 @@ const PendingEnrolRequestsButtons: FC<Props> = (props) => {
? error.response.data.errors
: '';
toast.error(
intl.formatMessage(translations.approveFailure, {
t(translations.approveFailure, {
error: errorMessage,
}),
);
Expand All @@ -86,7 +88,7 @@ const PendingEnrolRequestsButtons: FC<Props> = (props) => {
return dispatch(rejectEnrolRequest(enrolRequest.id))
.then(() => {
toast.success(
intl.formatMessage(translations.rejectSuccess, {
t(translations.rejectSuccess, {
name: enrolRequest.name,
}),
);
Expand All @@ -96,7 +98,7 @@ const PendingEnrolRequestsButtons: FC<Props> = (props) => {
? error.response.data.errors
: '';
toast.error(
intl.formatMessage(translations.rejectFailure, {
t(translations.rejectFailure, {
error: errorMessage,
}),
);
Expand All @@ -111,11 +113,11 @@ const PendingEnrolRequestsButtons: FC<Props> = (props) => {
disabled={isApproving || isDeleting}
onClick={onApprove}
sx={styles.buttonStyle}
tooltip={intl.formatMessage(translations.approveTooltip)}
tooltip={t(translations.approveTooltip)}
/>
<DeleteButton
className={`enrol-request-reject-${enrolRequest.id}`}
confirmMessage={intl.formatMessage(translations.rejectConfirm, {
confirmMessage={t(translations.rejectConfirm, {
role: COURSE_USER_ROLES[enrolRequest.role!],
name: enrolRequest.name,
email: enrolRequest.email,
Expand All @@ -124,14 +126,14 @@ const PendingEnrolRequestsButtons: FC<Props> = (props) => {
loading={isDeleting}
onClick={onDelete}
sx={styles.buttonStyle}
tooltip={intl.formatMessage(translations.rejectTooltip)}
tooltip={t(translations.rejectTooltip)}
/>
</div>
);
};

export default memo(
injectIntl(PendingEnrolRequestsButtons),
PendingEnrolRequestsButtons,
(prevProps, nextProps) => {
return equal(prevProps.enrolRequest, nextProps.enrolRequest);
},
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import {
UseFieldArrayAppend,
UseFieldArrayRemove,
} from 'react-hook-form';
import { defineMessages, injectIntl, WrappedComponentProps } from 'react-intl';
import { defineMessages } from 'react-intl';
import { Close } from '@mui/icons-material';
import { Box, Grid, IconButton, Tooltip } from '@mui/material';
import { ManageCourseUsersPermissions } from 'types/course/courseUsers';
Expand All @@ -21,9 +21,10 @@ import {
COURSE_USER_ROLES,
TIMELINE_ALGORITHMS,
} from 'lib/constants/sharedConstants';
import useTranslation from 'lib/hooks/useTranslation';
import tableTranslations from 'lib/translations/table';

interface Props extends WrappedComponentProps {
interface Props {
permissions: ManageCourseUsersPermissions;
fieldsConfig: {
control: Control<IndividualInvites>;
Expand Down Expand Up @@ -70,7 +71,8 @@ const userRoleOptions = Object.keys(COURSE_USER_ROLES).map((roleValue) => ({
}));

const IndividualInvitation: FC<Props> = (props) => {
const { permissions, fieldsConfig, index, intl } = props;
const { permissions, fieldsConfig, index } = props;
const { t } = useTranslation();

const renderInvitationBody = (
<Grid alignItems="center" container flexWrap="nowrap">
Expand All @@ -82,8 +84,8 @@ const IndividualInvitation: FC<Props> = (props) => {
field={field}
fieldState={fieldState}
id={`name-${index}`}
label={intl.formatMessage(tableTranslations.name)}
placeholder={intl.formatMessage(translations.namePlaceholder)}
label={t(tableTranslations.name)}
placeholder={t(translations.namePlaceholder)}
sx={styles.textInput}
variant="standard"
/>
Expand All @@ -97,8 +99,8 @@ const IndividualInvitation: FC<Props> = (props) => {
field={field}
fieldState={fieldState}
id={`email-${index}`}
label={intl.formatMessage(tableTranslations.email)}
placeholder={intl.formatMessage(translations.emailPlaceholder)}
label={t(tableTranslations.email)}
placeholder={t(translations.emailPlaceholder)}
sx={styles.textInput}
variant="standard"
/>
Expand All @@ -111,7 +113,7 @@ const IndividualInvitation: FC<Props> = (props) => {
<FormSelectField
field={field}
fieldState={fieldState}
label={intl.formatMessage(tableTranslations.role)}
label={t(tableTranslations.role)}
options={userRoleOptions}
sx={styles.textInput}
/>
Expand All @@ -125,7 +127,7 @@ const IndividualInvitation: FC<Props> = (props) => {
<FormSelectField
field={field}
fieldState={fieldState}
label={intl.formatMessage(tableTranslations.timelineAlgorithm)}
label={t(tableTranslations.timelineAlgorithm)}
options={TIMELINE_ALGORITHMS}
/>
)}
Expand All @@ -138,7 +140,7 @@ const IndividualInvitation: FC<Props> = (props) => {
<FormCheckboxField
field={field}
fieldState={fieldState}
label={intl.formatMessage(tableTranslations.phantom)}
label={t(tableTranslations.phantom)}
/>
)}
/>
Expand All @@ -148,7 +150,7 @@ const IndividualInvitation: FC<Props> = (props) => {
return (
<Box key={index} style={styles.invitation}>
{renderInvitationBody}
<Tooltip title={intl.formatMessage(translations.removeInvitation)}>
<Tooltip title={t(translations.removeInvitation)}>
<IconButton onClick={(): void => fieldsConfig.remove(index)}>
<Close />
</IconButton>
Expand All @@ -157,4 +159,4 @@ const IndividualInvitation: FC<Props> = (props) => {
);
};

export default injectIntl(IndividualInvitation);
export default IndividualInvitation;
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
import { FC, memo } from 'react';
import { injectIntl, WrappedComponentProps } from 'react-intl';
import { Typography } from '@mui/material';
import equal from 'fast-deep-equal';
import { TableColumns, TableOptions } from 'types/components/DataTable';
Expand All @@ -10,15 +9,17 @@ import {
COURSE_USER_ROLES,
DEFAULT_TABLE_ROWS_PER_PAGE,
} from 'lib/constants/sharedConstants';
import useTranslation from 'lib/hooks/useTranslation';
import tableTranslations from 'lib/translations/table';

interface Props extends WrappedComponentProps {
interface Props {
title: JSX.Element;
invitations: InvitationListData[];
}

const InvitationResultInvitationsTable: FC<Props> = (props) => {
const { title, invitations, intl } = props;
const { title, invitations } = props;
const { t } = useTranslation();

if (invitations && invitations.length === 0) return null;

Expand Down Expand Up @@ -47,7 +48,7 @@ const InvitationResultInvitationsTable: FC<Props> = (props) => {
const columns: TableColumns[] = [
{
name: 'id',
label: intl.formatMessage(tableTranslations.id),
label: t(tableTranslations.id),
options: {
display: false,
filter: false,
Expand All @@ -56,23 +57,23 @@ const InvitationResultInvitationsTable: FC<Props> = (props) => {
},
{
name: 'name',
label: intl.formatMessage(tableTranslations.name),
label: t(tableTranslations.name),
options: {
alignCenter: false,
sort: false,
},
},
{
name: 'email',
label: intl.formatMessage(tableTranslations.email),
label: t(tableTranslations.email),
options: {
alignCenter: false,
sort: false,
},
},
{
name: 'phantom',
label: intl.formatMessage(tableTranslations.phantom),
label: t(tableTranslations.phantom),
options: {
sort: false,
customBodyRenderLite: (dataIndex): JSX.Element => {
Expand All @@ -91,7 +92,7 @@ const InvitationResultInvitationsTable: FC<Props> = (props) => {
},
{
name: 'role',
label: intl.formatMessage(tableTranslations.role),
label: t(tableTranslations.role),
options: {
alignCenter: false,
sort: false,
Expand All @@ -111,7 +112,7 @@ const InvitationResultInvitationsTable: FC<Props> = (props) => {
},
{
name: 'sentAt',
label: intl.formatMessage(tableTranslations.invitationSentAt),
label: t(tableTranslations.invitationSentAt),
options: {
alignCenter: false,
sort: false,
Expand All @@ -132,7 +133,7 @@ const InvitationResultInvitationsTable: FC<Props> = (props) => {
};

export default memo(
injectIntl(InvitationResultInvitationsTable),
InvitationResultInvitationsTable,
(prevProps, nextProps) => {
return equal(prevProps.invitations, nextProps.invitations);
},
Expand Down
Original file line number Diff line number Diff line change
@@ -1,21 +1,22 @@
import { FC, memo } from 'react';
import { injectIntl, WrappedComponentProps } from 'react-intl';
import { Typography } from '@mui/material';
import equal from 'fast-deep-equal';
import { TableColumns, TableOptions } from 'types/components/DataTable';
import { CourseUserData } from 'types/course/courseUsers';

import DataTable from 'lib/components/core/layouts/DataTable';
import { COURSE_USER_ROLES } from 'lib/constants/sharedConstants';
import useTranslation from 'lib/hooks/useTranslation';
import tableTranslations from 'lib/translations/table';

interface Props extends WrappedComponentProps {
interface Props {
title: JSX.Element;
users: CourseUserData[];
}

const InvitationResultUsersTable: FC<Props> = (props) => {
const { title, users, intl } = props;
const { title, users } = props;
const { t } = useTranslation();

if (users && users.length === 0) return null;

Expand All @@ -42,7 +43,7 @@ const InvitationResultUsersTable: FC<Props> = (props) => {
const columns: TableColumns[] = [
{
name: 'id',
label: intl.formatMessage(tableTranslations.id),
label: t(tableTranslations.id),
options: {
display: false,
filter: false,
Expand All @@ -51,23 +52,23 @@ const InvitationResultUsersTable: FC<Props> = (props) => {
},
{
name: 'name',
label: intl.formatMessage(tableTranslations.name),
label: t(tableTranslations.name),
options: {
alignCenter: false,
sort: false,
},
},
{
name: 'email',
label: intl.formatMessage(tableTranslations.email),
label: t(tableTranslations.email),
options: {
alignCenter: false,
sort: false,
},
},
{
name: 'phantom',
label: intl.formatMessage(tableTranslations.phantom),
label: t(tableTranslations.phantom),
options: {
sort: false,
customBodyRenderLite: (dataIndex): JSX.Element => {
Expand All @@ -86,7 +87,7 @@ const InvitationResultUsersTable: FC<Props> = (props) => {
},
{
name: 'role',
label: intl.formatMessage(tableTranslations.role),
label: t(tableTranslations.role),
options: {
alignCenter: false,
sort: false,
Expand Down Expand Up @@ -119,7 +120,7 @@ const InvitationResultUsersTable: FC<Props> = (props) => {
};

export default memo(
injectIntl(InvitationResultUsersTable),
InvitationResultUsersTable,
(prevProps, nextProps) => {
return equal(prevProps.users, nextProps.users);
},
Expand Down
Loading
Loading