Skip to content

Commit 01305ec

Browse files
committed
✨(frontend) improve share modal button accessibility
Added aria-labels to remove and invite buttons Signed-off-by: Cyril <[email protected]>
1 parent 2e64298 commit 01305ec

File tree

5 files changed

+22
-6
lines changed

5 files changed

+22
-6
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ and this project adheres to
1717
- ♿(frontend) improve ARIA in doc grid and editor for a11y #1519
1818
- ♿(frontend) improve accessibility and styling of summary table #1528
1919
- ♿(frontend) add focus trap and enter key support to remove doc modal #1531
20+
- ♿(frontend) improve share modal button accessibility
2021
- 🐛(docx) fix image overflow by limiting width to 600px during export #1525
2122
- 🐛(frontend) preserve @ character when esc is pressed after typing it #1512
2223
- 🐛(frontend) make summary button fixed to remain visible during scroll #1581

src/frontend/apps/e2e/__tests__/app-impress/doc-member-create.spec.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@ test.describe('Document create member', () => {
8484

8585
// Validate
8686
await page.getByRole('menuitem', { name: 'Administrator' }).click();
87-
await page.getByRole('button', { name: 'Invite' }).click();
87+
await page.getByRole('button', { name: /^Invite / }).click();
8888

8989
// Check invitation added
9090
await expect(
@@ -135,7 +135,7 @@ test.describe('Document create member', () => {
135135
(response) =>
136136
response.url().includes('/invitations/') && response.status() === 201,
137137
);
138-
await page.getByRole('button', { name: 'Invite' }).click();
138+
await page.getByRole('button', { name: /^Invite / }).click();
139139

140140
// Check invitation sent
141141

@@ -154,7 +154,7 @@ test.describe('Document create member', () => {
154154
response.url().includes('/invitations/') && response.status() === 400,
155155
);
156156

157-
await page.getByRole('button', { name: 'Invite' }).click();
157+
await page.getByRole('button', { name: /^Invite / }).click();
158158
await expect(
159159
page.getByText(`"${email}" is already invited to the document.`),
160160
).toBeVisible();
@@ -191,7 +191,7 @@ test.describe('Document create member', () => {
191191
response.url().includes('/invitations/') && response.status() === 201,
192192
);
193193

194-
await page.getByRole('button', { name: 'Invite' }).click();
194+
await page.getByRole('button', { name: /^Invite / }).click();
195195

196196
// Check invitation sent
197197
const responseCreateInvitation = await responsePromiseCreateInvitation;

src/frontend/apps/e2e/__tests__/app-impress/utils-share.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ export const addNewMember = async (
4040
// Choose a role
4141
await page.getByLabel('doc-role-dropdown').click();
4242
await page.getByRole('menuitem', { name: role }).click();
43-
await page.getByRole('button', { name: 'Invite' }).click();
43+
await page.getByRole('button', { name: /^Invite / }).click();
4444

4545
return users[index].email;
4646
};

src/frontend/apps/impress/src/features/docs/doc-share/components/DocShareAddMemberList.tsx

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -108,6 +108,12 @@ export const DocShareAddMemberList = ({
108108
afterInvite?.();
109109
setIsLoading(false);
110110
};
111+
const inviteLabel =
112+
selectedUsers.length === 1
113+
? t('Invite {{name}}', {
114+
name: selectedUsers[0].full_name || selectedUsers[0].email,
115+
})
116+
: t('Invite {{count}} members', { count: selectedUsers.length });
111117

112118
return (
113119
<Box
@@ -143,7 +149,11 @@ export const DocShareAddMemberList = ({
143149
currentRole={invitationRole}
144150
onSelectRole={setInvitationRole}
145151
/>
146-
<Button onClick={() => void onInvite()} disabled={isLoading}>
152+
<Button
153+
onClick={() => void onInvite()}
154+
disabled={isLoading}
155+
aria-label={inviteLabel}
156+
>
147157
{t('Invite')}
148158
</Button>
149159
</Box>

src/frontend/apps/impress/src/features/docs/doc-share/components/DocShareAddMemberListItem.tsx

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import { Button } from '@openfun/cunningham-react';
2+
import { useTranslation } from 'react-i18next';
23
import { css } from 'styled-components';
34

45
import { Box, Icon, Text } from '@/components';
@@ -10,6 +11,7 @@ type Props = {
1011
onRemoveUser?: (user: User) => void;
1112
};
1213
export const DocShareAddMemberListItem = ({ user, onRemoveUser }: Props) => {
14+
const { t } = useTranslation();
1315
const { spacingsTokens, colorsTokens, fontSizesTokens } =
1416
useCunninghamTheme();
1517

@@ -42,6 +44,9 @@ export const DocShareAddMemberListItem = ({ user, onRemoveUser }: Props) => {
4244
size="nano"
4345
onClick={() => onRemoveUser?.(user)}
4446
icon={<Icon $variation="600" $size="sm" iconName="close" />}
47+
aria-label={t('Remove {{name}} from the invite list', {
48+
name: user.full_name || user.email,
49+
})}
4550
/>
4651
</Box>
4752
);

0 commit comments

Comments
 (0)