Skip to content

Commit 093c977

Browse files
authored
fix: text labeling fixes (#1226)
fix: text labeling fixes
1 parent 107a310 commit 093c977

File tree

9 files changed

+38
-16
lines changed

9 files changed

+38
-16
lines changed

src/components/learner-credit-management/BudgetStatusSubtitle.jsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ const BudgetStatusSubtitle = ({
3737
enrollmentType:
3838
intl.formatMessage({
3939
id: 'lcm.budget.detail.page.overview.enroll.assignable',
40-
defaultMessage: 'Assignable',
40+
defaultMessage: 'Assignment',
4141
description: 'Enrollment type for budgets that are assignable',
4242
}),
4343
popoverText:

src/components/learner-credit-management/cards/data/utils.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -156,7 +156,7 @@ export const isInviteEmailAddressesInputValueValid = ({ learnerEmails }) => {
156156
ensureValidationErrorObjectExists();
157157
if (learnerEmailsCount > MAX_EMAIL_ENTRY_LIMIT) {
158158
validationError.reason = 'over_email_max';
159-
validationError.message = `${learnerEmailsCount} emails entered (${MAX_EMAIL_ENTRY_LIMIT}} maximum).`
159+
validationError.message = `${learnerEmailsCount} emails entered (${MAX_EMAIL_ENTRY_LIMIT} maximum). `
160160
+ `Delete ${learnerEmailsCount - MAX_EMAIL_ENTRY_LIMIT} emails to proceed.`;
161161
}
162162
if (invalidEmails.length > 0) {

src/components/learner-credit-management/invite-modal/FileUpload.jsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ const FileUpload = ({ memberInviteMetadata, setEmailAddressesInputValue }) => {
4545
multipleDragged: 'Cannot upload more than one file.',
4646
}}
4747
/>
48-
<InviteModalInputFeedback memberInviteMetadata={memberInviteMetadata} />
48+
<InviteModalInputFeedback memberInviteMetadata={memberInviteMetadata} isCsvUpload />
4949
</Form.Group>
5050
);
5151
};

src/components/learner-credit-management/invite-modal/InviteModalContent.jsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,7 @@ const InviteModalContent = ({ onEmailAddressesChange, subsidyAccessPolicy }) =>
8686
rows={10}
8787
data-hj-suppress
8888
/>
89-
<InviteModalInputFeedback memberInviteMetadata={memberInviteMetadata} />
89+
<InviteModalInputFeedback memberInviteMetadata={memberInviteMetadata} isCsvUpload={false} />
9090
</Form.Group>
9191
)}
9292
{inputType === INPUT_TYPE.CSV && (

src/components/learner-credit-management/invite-modal/InviteModalInputFeedback.jsx

Lines changed: 21 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,7 @@ import { Form } from '@edx/paragon';
22
import PropTypes from 'prop-types';
33
import { MAX_EMAIL_ENTRY_LIMIT } from '../cards/data';
44

5-
const InviteModalInputFeedback = (metadata) => {
6-
const { memberInviteMetadata } = metadata;
5+
const InviteModalInputFeedback = ({ memberInviteMetadata, isCsvUpload }) => {
76
if (memberInviteMetadata.validationError) {
87
if (!memberInviteMetadata.isValidInput) {
98
return (
@@ -18,6 +17,18 @@ const InviteModalInputFeedback = (metadata) => {
1817
</Form.Control.Feedback>
1918
);
2019
}
20+
if (isCsvUpload) {
21+
return (
22+
<div>
23+
{!memberInviteMetadata.lowerCasedEmails.length > 0 ? (
24+
<Form.Control.Feedback>
25+
<p className="mb-0">Maximum invite at a time: {MAX_EMAIL_ENTRY_LIMIT} emails</p>
26+
</Form.Control.Feedback>
27+
) : null}
28+
</div>
29+
);
30+
}
31+
2132
return (
2233
<Form.Control.Feedback>
2334
<p className="mb-0">Maximum invite at a time: {MAX_EMAIL_ENTRY_LIMIT} emails</p>
@@ -27,14 +38,16 @@ const InviteModalInputFeedback = (metadata) => {
2738
};
2839

2940
InviteModalInputFeedback.propTypes = {
30-
metadata: PropTypes.shape({
31-
memberInviteMetadata: PropTypes.shape({
32-
isValidInput: PropTypes.bool,
33-
validationError: PropTypes.shape({
34-
message: PropTypes.number,
35-
}),
41+
memberInviteMetadata: PropTypes.shape({
42+
isValidInput: PropTypes.bool,
43+
validationError: PropTypes.shape({
44+
message: PropTypes.number,
3645
}),
46+
lowerCasedEmails: PropTypes.arrayOf(
47+
PropTypes.shape({}),
48+
),
3749
}),
50+
isCsvUpload: PropTypes.bool,
3851
};
3952

4053
export default InviteModalInputFeedback;

src/components/learner-credit-management/invite-modal/tests/InviteMemberModal.test.jsx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@ import {
1616
useBudgetId, useEnterpriseGroupLearners, useSubsidyAccessPolicy, useContentMetadata,
1717
} from '../../data';
1818
import { EMAIL_ADDRESSES_INPUT_VALUE_DEBOUNCE_DELAY } from '../../cards/data';
19-
2019
import { queryClient } from '../../../test/testUtils';
2120

2221
import InviteMembersModalWrapper from '../InviteMembersModalWrapper';
@@ -163,6 +162,8 @@ describe('<InviteMemberModal />', () => {
163162
expect(screen.getByText('emails.csv')).toBeInTheDocument();
164163
expect(screen.getByText('Summary (1)')).toBeInTheDocument();
165164
expect(screen.getByText('[email protected]')).toBeInTheDocument();
165+
const formFeedbackText = 'Maximum invite at a time: 1000';
166+
expect(screen.queryByText(formFeedbackText)).not.toBeInTheDocument();
166167
}, { timeout: EMAIL_ADDRESSES_INPUT_VALUE_DEBOUNCE_DELAY + 1000 });
167168
});
168169
it('does not allow non-csv files', async () => {

src/components/learner-credit-management/members-tab/LearnerCreditGroupMembersTable.jsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@ const KabobMenu = ({
5353
removeAllUsers={removeModal.allUsersSelected}
5454
totalToRemove={totalToRemove}
5555
groupUuid={groupUuid}
56+
isRemoveIndividualUser
5657
/>
5758
</>
5859
);

src/components/learner-credit-management/members-tab/bulk-actions/MemberRemoveModal.jsx

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,10 +18,12 @@ import { useBudgetId, useSubsidyAccessPolicy } from '../../data';
1818
* @param {number} totalToRemove
1919
* @returns {Object}
2020
*/
21-
const generateRemoveModalSubmitLabel = (totalToRemove) => {
21+
const generateRemoveModalSubmitLabel = (totalToRemove, isRemoveIndividualUser) => {
2222
let buttonNumberLabel = 'all';
2323

24-
if (Number.isFinite(totalToRemove)) {
24+
if (isRemoveIndividualUser) {
25+
buttonNumberLabel = 'member';
26+
} else if (Number.isFinite(totalToRemove)) {
2527
buttonNumberLabel = `(${totalToRemove})`;
2628
}
2729

@@ -41,9 +43,10 @@ const MemberRemoveModal = ({
4143
removeAllUsers,
4244
totalToRemove,
4345
groupUuid,
46+
isRemoveIndividualUser,
4447
}) => {
4548
const [requestState, setRequestState, initialRequestState] = useRequestState(isOpen);
46-
const buttonLabels = generateRemoveModalSubmitLabel(totalToRemove);
49+
const buttonLabels = generateRemoveModalSubmitLabel(totalToRemove, isRemoveIndividualUser);
4750

4851
const title = `Remove member${removeAllUsers || totalToRemove > 1 ? 's' : ''}?`;
4952
const { subsidyAccessPolicyId } = useBudgetId();
@@ -155,6 +158,7 @@ const MemberRemoveModal = ({
155158
MemberRemoveModal.defaultProps = {
156159
removeAllUsers: false,
157160
totalToRemove: -1,
161+
isRemoveIndividualUser: false,
158162
};
159163

160164
MemberRemoveModal.propTypes = {
@@ -170,6 +174,7 @@ MemberRemoveModal.propTypes = {
170174
removeAllUsers: PropTypes.bool,
171175
totalToRemove: PropTypes.number,
172176
groupUuid: PropTypes.string.isRequired,
177+
isRemoveIndividualUser: PropTypes.bool,
173178
};
174179

175180
export default MemberRemoveModal;

src/components/learner-credit-management/members-tab/tests/MembersTab.test.jsx

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -508,6 +508,7 @@ describe('<BudgetDetailPage />', () => {
508508

509509
expect(screen.queryByText('Remove members?')).toBeInTheDocument();
510510
const modalRemoveButton = screen.getByTestId('modal-remove-button');
511+
expect(modalRemoveButton).toHaveTextContent('Remove (2)');
511512
userEvent.click(modalRemoveButton);
512513
expect(mockRemoveSpy).toHaveBeenCalled();
513514
await waitForElementToBeRemoved(() => screen.queryByText('Removing (2)'));
@@ -578,6 +579,7 @@ describe('<BudgetDetailPage />', () => {
578579

579580
await waitFor(() => expect(screen.queryByText('Remove member?')).toBeInTheDocument());
580581
const modalRemoveButton = screen.getByTestId('modal-remove-button');
582+
expect(modalRemoveButton).toHaveTextContent('Remove member');
581583
userEvent.click(modalRemoveButton);
582584
expect(mockRemoveSpy).toHaveBeenCalled();
583585
await waitFor(() => expect(screen.queryByText('1 member successfully removed')).toBeInTheDocument());

0 commit comments

Comments
 (0)