diff --git a/src/components/views/elements/PollCreateDialog.tsx b/src/components/views/elements/PollCreateDialog.tsx index 655215542d..d982cf9004 100644 --- a/src/components/views/elements/PollCreateDialog.tsx +++ b/src/components/views/elements/PollCreateDialog.tsx @@ -30,6 +30,7 @@ import Spinner from "./Spinner"; interface IProps extends IDialogProps { room: Room; + threadId?: string; } interface IState extends IScrollableBaseState { @@ -103,7 +104,12 @@ export default class PollCreateDialog extends ScrollableBaseModal a.trim()).filter(a => !!a), M_POLL_KIND_DISCLOSED, ).serialize(); - this.matrixClient.sendEvent(this.props.room.roomId, pollEvent.type, pollEvent.content).then( + this.matrixClient.sendEvent( + this.props.room.roomId, + this.props.threadId, + pollEvent.type, + pollEvent.content, + ).then( () => this.props.onFinished(true), ).catch(e => { console.error("Failed to post poll:", e); diff --git a/src/components/views/rooms/MessageComposerButtons.tsx b/src/components/views/rooms/MessageComposerButtons.tsx index b6dcad81e6..e659fb069f 100644 --- a/src/components/views/rooms/MessageComposerButtons.tsx +++ b/src/components/views/rooms/MessageComposerButtons.tsx @@ -20,6 +20,7 @@ import { M_POLL_START } from "matrix-events-sdk"; import React, { createContext, ReactElement, useContext } from 'react'; import { Room } from 'matrix-js-sdk/src/models/room'; import { MatrixClient } from 'matrix-js-sdk/src/client'; +import { RelationType } from 'matrix-js-sdk/src/@types/event'; import { _t } from '../../../languageHandler'; import AccessibleTooltipButton from "../elements/AccessibleTooltipButton"; @@ -73,7 +74,7 @@ const MessageComposerButtons: React.FC = (props: IProps) => { uploadButton(props, roomId), showStickersButton(props), voiceRecordingButton(props), - pollButton(room), + pollButton(room, props.relation), showLocationButton(props, room, roomId, matrixClient), ]; } else { @@ -84,7 +85,7 @@ const MessageComposerButtons: React.FC = (props: IProps) => { moreButtons = [ showStickersButton(props), voiceRecordingButton(props), - pollButton(room), + pollButton(room, props.relation), showLocationButton(props, room, roomId, matrixClient), ]; } @@ -288,12 +289,13 @@ function voiceRecordingButton(props: IProps): ReactElement { ); } -function pollButton(room: Room): ReactElement { - return ; +function pollButton(room: Room, relation?: IEventRelation): ReactElement { + return ; } interface IPollButtonProps { room: Room; + relation?: IEventRelation; } class PollButton extends React.PureComponent { @@ -319,12 +321,17 @@ class PollButton extends React.PureComponent { }, ); } else { + const threadId = this.props.relation.rel_type === RelationType.Thread + ? this.props.relation.event_id + : null; + Modal.createTrackedDialog( 'Polls', 'create', PollCreateDialog, { room: this.props.room, + threadId, }, 'mx_CompoundDialog', false, // isPriorityModal