mirror of
				https://github.com/vector-im/element-web.git
				synced 2025-11-04 02:02:14 +01:00 
			
		
		
		
	Cache surroundWith setting
Signed-off-by: Šimon Brandner <simon.bra.ag@gmail.com>
This commit is contained in:
		
							parent
							
								
									686e7d18c3
								
							
						
					
					
						commit
						38c0cd2716
					
				@ -107,6 +107,7 @@ interface IState {
 | 
				
			|||||||
    showVisualBell?: boolean;
 | 
					    showVisualBell?: boolean;
 | 
				
			||||||
    autoComplete?: AutocompleteWrapperModel;
 | 
					    autoComplete?: AutocompleteWrapperModel;
 | 
				
			||||||
    completionIndex?: number;
 | 
					    completionIndex?: number;
 | 
				
			||||||
 | 
					    surroundWith: boolean,
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@replaceableComponent("views.rooms.BasicMessageEditor")
 | 
					@replaceableComponent("views.rooms.BasicMessageEditor")
 | 
				
			||||||
@ -125,12 +126,14 @@ export default class BasicMessageEditor extends React.Component<IProps, IState>
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    private readonly emoticonSettingHandle: string;
 | 
					    private readonly emoticonSettingHandle: string;
 | 
				
			||||||
    private readonly shouldShowPillAvatarSettingHandle: string;
 | 
					    private readonly shouldShowPillAvatarSettingHandle: string;
 | 
				
			||||||
 | 
					    private readonly surroundWithHandle: string;
 | 
				
			||||||
    private readonly historyManager = new HistoryManager();
 | 
					    private readonly historyManager = new HistoryManager();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    constructor(props) {
 | 
					    constructor(props) {
 | 
				
			||||||
        super(props);
 | 
					        super(props);
 | 
				
			||||||
        this.state = {
 | 
					        this.state = {
 | 
				
			||||||
            showPillAvatar: SettingsStore.getValue("Pill.shouldShowPillAvatar"),
 | 
					            showPillAvatar: SettingsStore.getValue("Pill.shouldShowPillAvatar"),
 | 
				
			||||||
 | 
					            surroundWith: SettingsStore.getValue("MessageComposerInput.surroundWith"),
 | 
				
			||||||
        };
 | 
					        };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        this.emoticonSettingHandle = SettingsStore.watchSetting('MessageComposerInput.autoReplaceEmoji', null,
 | 
					        this.emoticonSettingHandle = SettingsStore.watchSetting('MessageComposerInput.autoReplaceEmoji', null,
 | 
				
			||||||
@ -138,6 +141,8 @@ export default class BasicMessageEditor extends React.Component<IProps, IState>
 | 
				
			|||||||
        this.configureEmoticonAutoReplace();
 | 
					        this.configureEmoticonAutoReplace();
 | 
				
			||||||
        this.shouldShowPillAvatarSettingHandle = SettingsStore.watchSetting("Pill.shouldShowPillAvatar", null,
 | 
					        this.shouldShowPillAvatarSettingHandle = SettingsStore.watchSetting("Pill.shouldShowPillAvatar", null,
 | 
				
			||||||
            this.configureShouldShowPillAvatar);
 | 
					            this.configureShouldShowPillAvatar);
 | 
				
			||||||
 | 
					        this.surroundWithHandle = SettingsStore.watchSetting("MessageComposerInput.surroundWith", null,
 | 
				
			||||||
 | 
					            this.surroundWithSettingChanged);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public componentDidUpdate(prevProps: IProps) {
 | 
					    public componentDidUpdate(prevProps: IProps) {
 | 
				
			||||||
@ -428,7 +433,6 @@ export default class BasicMessageEditor extends React.Component<IProps, IState>
 | 
				
			|||||||
    };
 | 
					    };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    private onKeyDown = (event: React.KeyboardEvent) => {
 | 
					    private onKeyDown = (event: React.KeyboardEvent) => {
 | 
				
			||||||
        const surroundWith = SettingsStore.getValue("MessageComposerInput.surroundWith");
 | 
					 | 
				
			||||||
        const selectionRange = getRangeForSelection(this.editorRef.current, this.props.model, document.getSelection());
 | 
					        const selectionRange = getRangeForSelection(this.editorRef.current, this.props.model, document.getSelection());
 | 
				
			||||||
        // trim the range as we want it to exclude leading/trailing spaces
 | 
					        // trim the range as we want it to exclude leading/trailing spaces
 | 
				
			||||||
        selectionRange.trim();
 | 
					        selectionRange.trim();
 | 
				
			||||||
@ -436,7 +440,7 @@ export default class BasicMessageEditor extends React.Component<IProps, IState>
 | 
				
			|||||||
        const model = this.props.model;
 | 
					        const model = this.props.model;
 | 
				
			||||||
        let handled = false;
 | 
					        let handled = false;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if (surroundWith && document.getSelection().type != "Caret") {
 | 
					        if (this.state.surroundWith && document.getSelection().type != "Caret") {
 | 
				
			||||||
            // Surround selected text with a character
 | 
					            // Surround selected text with a character
 | 
				
			||||||
            if (event.key === '(') {
 | 
					            if (event.key === '(') {
 | 
				
			||||||
                this.historyManager.ensureLastChangesPushed(this.props.model);
 | 
					                this.historyManager.ensureLastChangesPushed(this.props.model);
 | 
				
			||||||
@ -628,6 +632,11 @@ export default class BasicMessageEditor extends React.Component<IProps, IState>
 | 
				
			|||||||
        this.setState({ showPillAvatar });
 | 
					        this.setState({ showPillAvatar });
 | 
				
			||||||
    };
 | 
					    };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    private surroundWithSettingChanged = () => {
 | 
				
			||||||
 | 
					        const surroundWith = SettingsStore.getValue("MessageComposerInput.surroundWith");
 | 
				
			||||||
 | 
					        this.setState({ surroundWith });
 | 
				
			||||||
 | 
					    };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    componentWillUnmount() {
 | 
					    componentWillUnmount() {
 | 
				
			||||||
        document.removeEventListener("selectionchange", this.onSelectionChange);
 | 
					        document.removeEventListener("selectionchange", this.onSelectionChange);
 | 
				
			||||||
        this.editorRef.current.removeEventListener("input", this.onInput, true);
 | 
					        this.editorRef.current.removeEventListener("input", this.onInput, true);
 | 
				
			||||||
@ -635,6 +644,7 @@ export default class BasicMessageEditor extends React.Component<IProps, IState>
 | 
				
			|||||||
        this.editorRef.current.removeEventListener("compositionend", this.onCompositionEnd, true);
 | 
					        this.editorRef.current.removeEventListener("compositionend", this.onCompositionEnd, true);
 | 
				
			||||||
        SettingsStore.unwatchSetting(this.emoticonSettingHandle);
 | 
					        SettingsStore.unwatchSetting(this.emoticonSettingHandle);
 | 
				
			||||||
        SettingsStore.unwatchSetting(this.shouldShowPillAvatarSettingHandle);
 | 
					        SettingsStore.unwatchSetting(this.shouldShowPillAvatarSettingHandle);
 | 
				
			||||||
 | 
					        SettingsStore.unwatchSetting(this.surroundWithHandle);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    componentDidMount() {
 | 
					    componentDidMount() {
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user