Skip to content

Commit 8e99ec6

Browse files
chore: disable invite link when in ABAC enabled room (RocketChat#37349)
1 parent 2772d86 commit 8e99ec6

6 files changed

Lines changed: 541 additions & 5 deletions

File tree

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
import { composeStories } from '@storybook/react';
2+
import { render } from '@testing-library/react';
3+
import { axe } from 'jest-axe';
4+
5+
import * as stories from './RoomMembers.stories';
6+
7+
jest.mock('../../hooks/useUserInfoActions', () => ({
8+
useUserInfoActions: jest.fn(),
9+
}));
10+
11+
const testCases = Object.values(composeStories(stories)).map((Story) => [Story.storyName || 'Story', Story]);
12+
test.each(testCases)(`renders %s without crashing`, async (_storyname, Story) => {
13+
const { baseElement } = render(<Story />);
14+
expect(baseElement).toMatchSnapshot();
15+
});
16+
17+
test.each(testCases)('%s should have no a11y violations', async (_storyname, Story) => {
18+
const { container } = render(<Story />);
19+
20+
// Disable 'nested-interactive' rule because our `Select` component is still not a11y compliant
21+
const results = await axe(container, { rules: { 'nested-interactive': { enabled: false } } });
22+
expect(results).toHaveNoViolations();
23+
});

apps/meteor/client/views/room/contextualBar/RoomMembers/RoomMembers.stories.tsx

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,3 +47,27 @@ Loading.args = {
4747
loadMoreItems: action('loadMoreItems'),
4848
reload: action('reload'),
4949
};
50+
51+
export const WithABACRoom = Template.bind({});
52+
WithABACRoom.args = {
53+
loading: false,
54+
members: [
55+
{
56+
_id: 'rocket.cat',
57+
username: 'rocket.cat',
58+
status: UserStatus.ONLINE,
59+
name: 'Rocket.Cat',
60+
},
61+
],
62+
text: 'filter',
63+
type: 'online',
64+
setText: action('Lorem Ipsum'),
65+
setType: action('online'),
66+
total: 123,
67+
loadMoreItems: action('loadMoreItems'),
68+
rid: '!roomId',
69+
isTeam: false,
70+
isDirect: false,
71+
reload: action('reload'),
72+
isABACRoom: true,
73+
};

apps/meteor/client/views/room/contextualBar/RoomMembers/RoomMembers.tsx

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -44,13 +44,14 @@ type RoomMembersProps = {
4444
loadMoreItems: () => void;
4545
renderRow?: ElementType<ComponentProps<typeof RoomMembersRow>>;
4646
reload: () => void;
47+
isABACRoom?: boolean;
4748
};
4849

4950
const RoomMembers = ({
5051
loading,
5152
members = [],
5253
text,
53-
type,
54+
type = 'online',
5455
setText,
5556
setType,
5657
onClickClose,
@@ -65,6 +66,7 @@ const RoomMembers = ({
6566
isTeam,
6667
isDirect,
6768
reload,
69+
isABACRoom = false,
6870
}: RoomMembersProps): ReactElement => {
6971
const t = useTranslation();
7072
const inputRef = useAutoFocus<HTMLInputElement>(true);
@@ -199,7 +201,14 @@ const RoomMembers = ({
199201
<ContextualbarFooter>
200202
<ButtonGroup stretch>
201203
{onClickInvite && (
202-
<Button icon='link' onClick={onClickInvite} width='50%'>
204+
<Button
205+
icon='link'
206+
onClick={onClickInvite}
207+
width='50%'
208+
disabled={isABACRoom}
209+
title={isABACRoom ? t('Not_available_for_ABAC_enabled_rooms') : undefined}
210+
aria-label={t('Invite_Link')}
211+
>
203212
{t('Invite_Link')}
204213
</Button>
205214
)}

apps/meteor/client/views/room/contextualBar/RoomMembers/RoomMembersItem.tsx

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,6 @@ const RoomMembersItem = ({
3939
useRealName,
4040
}: RoomMembersItemProps): ReactElement => {
4141
const [showButton, setShowButton] = useState();
42-
4342
const isReduceMotionEnabled = usePrefersReducedMotion();
4443
const handleMenuEvent = {
4544
[isReduceMotionEnabled ? 'onMouseEnter' : 'onTransitionEnd']: setShowButton,
@@ -62,7 +61,7 @@ const RoomMembersItem = ({
6261
{showButton ? (
6362
<UserActions username={username} name={name} rid={rid} _id={_id} freeSwitchExtension={freeSwitchExtension} reload={reload} />
6463
) : (
65-
<IconButton tiny icon='kebab' />
64+
<IconButton tiny icon='kebab' aria-hidden tabIndex={-1} />
6665
)}
6766
</OptionMenu>
6867
</Option>

apps/meteor/client/views/room/contextualBar/RoomMembers/RoomMembersWithData.tsx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,6 @@ const RoomMembersWithData = ({ rid }: { rid: IRoom['_id'] }): ReactElement => {
3434
const isDirect = room && isDirectMessageRoom(room);
3535
const hasPermissionToCreateInviteLinks = usePermission('create-invite-links', rid);
3636
const isFederated = room && isRoomFederated(room);
37-
3837
// we are dropping the non native federation for now
3938
const isFederationBlocked = room && !isRoomNativeFederated(room);
4039

@@ -118,6 +117,8 @@ const RoomMembersWithData = ({ rid }: { rid: IRoom['_id'] }): ReactElement => {
118117
reload={refetch}
119118
onClickInvite={canCreateInviteLinks && canAddUsers ? openInvite : undefined}
120119
onClickAdd={canAddUsers ? openAddUser : undefined}
120+
// @ts-expect-error to be implemented in ABAC Feature branch
121+
isABACRoom={Boolean(room?.abacAttributes)}
121122
/>
122123
);
123124
};

0 commit comments

Comments
 (0)