You've already forked matrix-react-sdk
							
							
				mirror of
				https://github.com/matrix-org/matrix-react-sdk.git
				synced 2025-11-04 11:51:45 +03:00 
			
		
		
		
	Disable typing notifications for threads (#7180)
This commit is contained in:
		@@ -95,6 +95,7 @@ function selectionEquals(a: Partial<Selection>, b: Selection): boolean {
 | 
			
		||||
interface IProps {
 | 
			
		||||
    model: EditorModel;
 | 
			
		||||
    room: Room;
 | 
			
		||||
    threadId: string;
 | 
			
		||||
    placeholder?: string;
 | 
			
		||||
    label?: string;
 | 
			
		||||
    initialCaret?: DocumentOffset;
 | 
			
		||||
@@ -243,7 +244,11 @@ export default class BasicMessageEditor extends React.Component<IProps, IState>
 | 
			
		||||
                isTyping = false;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        TypingStore.sharedInstance().setSelfTyping(this.props.room.roomId, isTyping);
 | 
			
		||||
        TypingStore.sharedInstance().setSelfTyping(
 | 
			
		||||
            this.props.room.roomId,
 | 
			
		||||
            this.props.threadId,
 | 
			
		||||
            isTyping,
 | 
			
		||||
        );
 | 
			
		||||
 | 
			
		||||
        if (this.props.onChange) {
 | 
			
		||||
            this.props.onChange();
 | 
			
		||||
 
 | 
			
		||||
@@ -535,6 +535,7 @@ class EditMessageComposer extends React.Component<IEditMessageComposerProps, ISt
 | 
			
		||||
                ref={this.editorRef}
 | 
			
		||||
                model={this.model}
 | 
			
		||||
                room={this.getRoom()}
 | 
			
		||||
                threadId={this.props.editState?.getEvent()?.getThread()?.id}
 | 
			
		||||
                initialCaret={this.props.editState.getCaret()}
 | 
			
		||||
                label={_t("Edit message")}
 | 
			
		||||
                onChange={this.onChange}
 | 
			
		||||
 
 | 
			
		||||
@@ -643,6 +643,9 @@ export class SendMessageComposer extends React.Component<ISendMessageComposerPro
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    render() {
 | 
			
		||||
        const threadId = this.props.relation?.rel_type === RelationType.Thread
 | 
			
		||||
            ? this.props.relation.event_id
 | 
			
		||||
            : null;
 | 
			
		||||
        return (
 | 
			
		||||
            <div className="mx_SendMessageComposer" onClick={this.focusComposer} onKeyDown={this.onKeyDown}>
 | 
			
		||||
                <BasicMessageComposer
 | 
			
		||||
@@ -650,6 +653,7 @@ export class SendMessageComposer extends React.Component<ISendMessageComposerPro
 | 
			
		||||
                    ref={this.editorRef}
 | 
			
		||||
                    model={this.model}
 | 
			
		||||
                    room={this.props.room}
 | 
			
		||||
                    threadId={threadId}
 | 
			
		||||
                    label={this.props.placeholder}
 | 
			
		||||
                    placeholder={this.props.placeholder}
 | 
			
		||||
                    onPaste={this.onPaste}
 | 
			
		||||
 
 | 
			
		||||
@@ -37,7 +37,7 @@ export default class TypingStore {
 | 
			
		||||
        this.reset();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    static sharedInstance(): TypingStore {
 | 
			
		||||
    public static sharedInstance(): TypingStore {
 | 
			
		||||
        if (window.mxTypingStore === undefined) {
 | 
			
		||||
            window.mxTypingStore = new TypingStore();
 | 
			
		||||
        }
 | 
			
		||||
@@ -48,7 +48,7 @@ export default class TypingStore {
 | 
			
		||||
     * Clears all cached typing states. Intended to be called when the
 | 
			
		||||
     * MatrixClientPeg client changes.
 | 
			
		||||
     */
 | 
			
		||||
    reset() {
 | 
			
		||||
    public reset() {
 | 
			
		||||
        this.typingStates = {
 | 
			
		||||
            // "roomId": {
 | 
			
		||||
            //     isTyping: bool,     // Whether the user is typing or not
 | 
			
		||||
@@ -63,9 +63,12 @@ export default class TypingStore {
 | 
			
		||||
     * @param {string} roomId The room ID to set the typing state in.
 | 
			
		||||
     * @param {boolean} isTyping Whether the user is typing or not.
 | 
			
		||||
     */
 | 
			
		||||
    setSelfTyping(roomId: string, isTyping: boolean): void {
 | 
			
		||||
    public setSelfTyping(roomId: string, threadId: string | null, isTyping: boolean): void {
 | 
			
		||||
        if (!SettingsStore.getValue('sendTypingNotifications')) return;
 | 
			
		||||
        if (SettingsStore.getValue('lowBandwidth')) return;
 | 
			
		||||
        // Disable typing notification for threads for the initial launch
 | 
			
		||||
        // before we figure out a better user experience for them
 | 
			
		||||
        if (SettingsStore.getValue("feature_thread") && threadId) return;
 | 
			
		||||
 | 
			
		||||
        let currentTyping = this.typingStates[roomId];
 | 
			
		||||
        if ((!isTyping && !currentTyping) || (currentTyping && currentTyping.isTyping === isTyping)) {
 | 
			
		||||
@@ -96,7 +99,7 @@ export default class TypingStore {
 | 
			
		||||
 | 
			
		||||
            if (!currentTyping.userTimer.isRunning()) {
 | 
			
		||||
                currentTyping.userTimer.restart().finished().then(() => {
 | 
			
		||||
                    this.setSelfTyping(roomId, false);
 | 
			
		||||
                    this.setSelfTyping(roomId, threadId, false);
 | 
			
		||||
                });
 | 
			
		||||
            } else currentTyping.userTimer.restart();
 | 
			
		||||
        }
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user