fix(sql lab): Selecting edit on a query from query history doesn't update the SQL Editor properly (#19290)

This commit is contained in:
Diego Medina 2022-04-15 14:49:32 -04:00 committed by GitHub
parent 56381f4ee8
commit bbe0af348b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 18 additions and 4 deletions

View File

@ -66,7 +66,6 @@ interface Props {
interface State {
sql: string;
selectedText: string;
words: AceCompleterKeyword[];
}
@ -80,13 +79,20 @@ class AceEditorWrapper extends React.PureComponent<Props, State> {
extendedTables: [],
};
private currentSelectionCache;
constructor(props: Props) {
super(props);
this.state = {
sql: props.sql,
selectedText: '',
words: [],
};
// The editor changeSelection is called multiple times in a row,
// faster than React reconciliation process, so the selected text
// needs to be stored out of the state to ensure changes to it
// get saved immediately
this.currentSelectionCache = '';
this.onChange = this.onChange.bind(this);
}
@ -146,17 +152,19 @@ class AceEditorWrapper extends React.PureComponent<Props, State> {
editor.$blockScrolling = Infinity; // eslint-disable-line no-param-reassign
editor.selection.on('changeSelection', () => {
const selectedText = editor.getSelectedText();
// Backspace trigger 1 character selection, ignoring
if (
selectedText !== this.state.selectedText &&
selectedText !== this.currentSelectionCache &&
selectedText.length !== 1
) {
this.setState({ selectedText });
this.props.actions.queryEditorSetSelectedText(
this.props.queryEditor,
selectedText,
);
}
this.currentSelectionCache = selectedText;
});
}

View File

@ -240,6 +240,12 @@ class SqlEditor extends React.PureComponent {
});
}
componentDidUpdate() {
if (this.props.queryEditor.sql !== this.state.sql) {
this.onSqlChanged(this.props.queryEditor.sql);
}
}
componentWillUnmount() {
window.removeEventListener('resize', this.handleWindowResize);
window.removeEventListener('beforeunload', this.onBeforeUnload);