Skip to content
This repository was archived by the owner on Sep 11, 2024. It is now read-only.

Hide sticker picker for local rooms #9174

Merged
merged 2 commits into from
Aug 11, 2022
Merged
Show file tree
Hide file tree
Changes from 1 commit
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
9 changes: 5 additions & 4 deletions src/components/views/rooms/MessageComposerButtons.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@ import RoomContext from '../../../contexts/RoomContext';
import { useDispatcher } from "../../../hooks/useDispatcher";
import { chromeFileInputFix } from "../../../utils/BrowserWorkarounds";
import IconizedContextMenu, { IconizedContextMenuOptionList } from '../context_menus/IconizedContextMenu';
import { isLocalRoom } from '../../../utils/localRoom/isLocalRoom';

interface IProps {
addEmoji: (emoji: string) => boolean;
Expand Down Expand Up @@ -74,7 +75,7 @@ const MessageComposerButtons: React.FC<IProps> = (props: IProps) => {
];
moreButtons = [
uploadButton(), // props passed via UploadButtonContext
showStickersButton(props),
showStickersButton(props, room),
voiceRecordingButton(props, narrow),
props.showPollsButton && pollButton(room, props.relation),
showLocationButton(props, room, roomId, matrixClient),
Expand All @@ -85,7 +86,7 @@ const MessageComposerButtons: React.FC<IProps> = (props: IProps) => {
uploadButton(), // props passed via UploadButtonContext
];
moreButtons = [
showStickersButton(props),
showStickersButton(props, room),
voiceRecordingButton(props, narrow),
props.showPollsButton && pollButton(room, props.relation),
showLocationButton(props, room, roomId, matrixClient),
Expand Down Expand Up @@ -265,9 +266,9 @@ const UploadButton = () => {
/>;
};

function showStickersButton(props: IProps): ReactElement {
function showStickersButton(props: IProps, room: Room): ReactElement {
return (
props.showStickersButton
!isLocalRoom(room) && props.showStickersButton
? <CollapsibleButton
id='stickersButton'
key="controls_stickers"
Expand Down
35 changes: 34 additions & 1 deletion test/components/views/rooms/MessageComposerButtons-test.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ import React from "react";
import { mount, ReactWrapper } from "enzyme";
import { Room } from "matrix-js-sdk/src/models/room";
import { RoomMember } from "matrix-js-sdk/src/models/room-member";
import { mocked } from "jest-mock";

import MatrixClientContext from "../../../../src/contexts/MatrixClientContext";
import { Layout } from "../../../../src/settings/enums/Layout";
Expand All @@ -27,6 +28,11 @@ import { createTestClient } from "../../../test-utils";
import { IRoomState } from "../../../../src/components/structures/RoomView";
import { MatrixClientPeg } from "../../../../src/MatrixClientPeg";
import MessageComposerButtons from "../../../../src/components/views/rooms/MessageComposerButtons";
import { isLocalRoom } from "../../../../src/utils/localRoom/isLocalRoom";

jest.mock("../../../../src/utils/localRoom/isLocalRoom", () => ({
isLocalRoom: jest.fn(),
}));

// @ts-ignore - we're deliberately not implementing the whole interface here, but
// can't use Partial<> for types because it'll annoy TS more than it helps.
Expand Down Expand Up @@ -176,9 +182,35 @@ describe("MessageComposerButtons", () => {
]);
});
});

describe("stickers button", () => {
it("should not be rendered for local rooms", () => {
const buttons = wrapAndRender(
<MessageComposerButtons
isMenuOpen={true}
showLocationButton={true}
showPollsButton={true}
showStickersButton={true}
{...mockProps}
/>,
true,
true,
);

expect(buttonLabels(buttons)).toEqual([
"Emoji",
"More options",
[
"Attachment",
"Poll",
"Location",
],
]);
});
});
});

function wrapAndRender(component: React.ReactElement, narrow: boolean): ReactWrapper {
function wrapAndRender(component: React.ReactElement, narrow: boolean, localRoom = false): ReactWrapper {
const mockClient = createTestClient();
jest.spyOn(MatrixClientPeg, 'get').mockReturnValue(mockClient);
const roomId = "myroomid";
Expand All @@ -191,6 +223,7 @@ function wrapAndRender(component: React.ReactElement, narrow: boolean): ReactWra
},
};
const roomState = createRoomState(mockRoom, narrow);
mocked(isLocalRoom).mockReturnValue(localRoom);

return mount(
<MatrixClientContext.Provider value={mockClient}>
Expand Down