Fix automatic composer focus, regressed by threads work (#7167)

pull/21833/head
Michael Telatynski 2021-11-19 17:15:15 +00:00 committed by GitHub
parent 21c142c19d
commit ddbfebbaa0
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 34 additions and 9 deletions

View File

@ -14,7 +14,7 @@ See the License for the specific language governing permissions and
limitations under the License.
*/
import * as React from 'react';
import React, { ClipboardEvent } from 'react';
import { MatrixClient } from 'matrix-js-sdk/src/client';
import { MatrixEvent } from 'matrix-js-sdk/src/models/event';
@ -415,9 +415,9 @@ class LoggedInView extends React.Component<IProps, IState> {
});
};
private onPaste = (ev) => {
private onPaste = (ev: ClipboardEvent) => {
let canReceiveInput = false;
let element = ev.target;
let element = ev.currentTarget;
// test for all parents because the target can be a child of a contenteditable element
while (!canReceiveInput && element) {
canReceiveInput = canElementReceiveInput(element);

View File

@ -94,7 +94,7 @@ class ReactionPicker extends React.Component<IProps, IState> {
this.props.mxEvent.getRoomId(),
myReactions[reaction],
);
dis.dispatch({ action: Action.FocusAComposer });
dis.fire(Action.FocusAComposer);
// Tell the emoji picker not to bump this in the more frequently used list.
return false;
} else {
@ -106,7 +106,7 @@ class ReactionPicker extends React.Component<IProps, IState> {
},
});
dis.dispatch({ action: "message_sent" });
dis.dispatch({ action: Action.FocusAComposer });
dis.fire(Action.FocusAComposer);
return true;
}
};

View File

@ -56,7 +56,7 @@ import ErrorDialog from "../dialogs/ErrorDialog";
import QuestionDialog from "../dialogs/QuestionDialog";
import { ActionPayload } from "../../../dispatcher/payloads";
import { decorateStartSendingTime, sendRoundTripMetric } from "../../../sendTimePerformanceMetrics";
import RoomContext from '../../../contexts/RoomContext';
import RoomContext, { TimelineRenderingType } from '../../../contexts/RoomContext';
import DocumentPosition from "../../../editor/position";
import { ComposerType } from "../../../dispatcher/payloads/ComposerInsertPayload";
@ -597,7 +597,7 @@ export class SendMessageComposer extends React.Component<ISendMessageComposerPro
switch (payload.action) {
case 'reply_to_event':
case Action.FocusSendMessageComposer:
if (payload.context === this.context.timelineRenderingType) {
if ((payload.context ?? TimelineRenderingType.Room) === this.context.timelineRenderingType) {
this.editorRef.current?.focus();
}
break;

View File

@ -56,12 +56,12 @@ export enum Action {
CheckUpdates = "check_updates",
/**
* Focuses the user's cursor to the send message composer. No additional payload information required.
* Focuses the user's cursor to the send message composer. Should be used with a FocusComposerPayload.
*/
FocusSendMessageComposer = "focus_send_message_composer",
/**
* Focuses the user's cursor to the edit message composer. No additional payload information required.
* Focuses the user's cursor to the edit message composer. Should be used with a FocusComposerPayload.
*/
FocusEditMessageComposer = "focus_edit_message_composer",

View File

@ -0,0 +1,25 @@
/*
Copyright 2021 The Matrix.org Foundation C.I.C.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
import { ActionPayload } from "../payloads";
import { Action } from "../actions";
import { TimelineRenderingType } from "../../contexts/RoomContext";
export interface FocusComposerPayload extends ActionPayload {
action: Action.FocusEditMessageComposer | Action.FocusSendMessageComposer | "reply_to_event";
context?: TimelineRenderingType; // defaults to Room type for backwards compatibility
}