From 98147fd52b7c99ecb115832c6b9d98e25b35311c Mon Sep 17 00:00:00 2001 From: kay delaney <45561153+kaydelaney@users.noreply.github.com> Date: Wed, 3 Jul 2019 15:42:03 +0100 Subject: [PATCH] Explore: Adds support for toggling text edit mode in explore (#17870) * Explore: Adds support for toggling text edit mode in explore Also modifies query-row-status css to use relative position instead of absolute Closes #16770 * Explore: Defines State interface for and removes unnecessary constructor --- public/app/features/explore/QueryEditor.tsx | 20 +++++++++++--- public/app/features/explore/QueryRow.tsx | 29 ++++++++++++++++++--- public/sass/pages/_explore.scss | 5 ++-- 3 files changed, 44 insertions(+), 10 deletions(-) diff --git a/public/app/features/explore/QueryEditor.tsx b/public/app/features/explore/QueryEditor.tsx index d29e8a0e892..53212c4d76e 100644 --- a/public/app/features/explore/QueryEditor.tsx +++ b/public/app/features/explore/QueryEditor.tsx @@ -19,11 +19,13 @@ interface QueryEditorProps { initialQuery: DataQuery; exploreEvents: Emitter; range: TimeRange; + textEditModeEnabled?: boolean; } export default class QueryEditor extends PureComponent { element: any; component: AngularComponent; + angularScope: any; async componentDidMount() { if (!this.element) { @@ -58,6 +60,7 @@ export default class QueryEditor extends PureComponent { }; this.component = loader.load(this.element, scopeProps, template); + this.angularScope = scopeProps.ctrl; setTimeout(() => { this.props.onQueryChange(target); this.props.onExecuteQuery(); @@ -65,10 +68,19 @@ export default class QueryEditor extends PureComponent { } componentDidUpdate(prevProps: QueryEditorProps) { - if (prevProps.error !== this.props.error && this.component) { - // Some query controllers listen to data error events and need a digest - // for some reason this needs to be done in next tick - setTimeout(this.component.digest); + const hasToggledEditorMode = prevProps.textEditModeEnabled !== this.props.textEditModeEnabled; + const hasNewError = prevProps.error !== this.props.error; + + if (this.component) { + if (hasToggledEditorMode) { + this.angularScope.toggleEditorMode(); + } + + if (hasNewError || hasToggledEditorMode) { + // Some query controllers listen to data error events and need a digest + // for some reason this needs to be done in next tick + setTimeout(this.component.digest); + } } } diff --git a/public/app/features/explore/QueryRow.tsx b/public/app/features/explore/QueryRow.tsx index 03d066ce5a3..54b0162c552 100644 --- a/public/app/features/explore/QueryRow.tsx +++ b/public/app/features/explore/QueryRow.tsx @@ -53,7 +53,15 @@ interface QueryRowProps extends PropsFromParent { mode: ExploreMode; } -export class QueryRow extends PureComponent { +interface QueryRowState { + textEditModeEnabled: boolean; +} + +export class QueryRow extends PureComponent { + state: QueryRowState = { + textEditModeEnabled: false, + }; + onRunQuery = () => { const { exploreId } = this.props; this.props.runQueries(exploreId); @@ -95,6 +103,10 @@ export class QueryRow extends PureComponent { this.props.runQueries(exploreId); }; + onClickToggleEditorMode = () => { + this.setState({ textEditModeEnabled: !this.state.textEditModeEnabled }); + }; + updateLogsHighlights = _.debounce((value: DataQuery) => { const { datasourceInstance } = this.props; if (datasourceInstance.getHighlighterExpression) { @@ -117,6 +129,7 @@ export class QueryRow extends PureComponent { queryErrors, mode, } = this.props; + const canToggleEditorModes = _.has(datasourceInstance, 'components.QueryCtrl.prototype.toggleEditorMode'); let QueryField; if (mode === ExploreMode.Metrics && datasourceInstance.components.ExploreMetricsQueryField) { @@ -129,9 +142,6 @@ export class QueryRow extends PureComponent { return ( - - - {QueryField ? ( { initialQuery={query} exploreEvents={exploreEvents} range={range} + textEditModeEnabled={this.state.textEditModeEnabled} /> )} + + + + {canToggleEditorModes && ( + + + + + + )} diff --git a/public/sass/pages/_explore.scss b/public/sass/pages/_explore.scss index a3c6b12351a..0b686ee3632 100644 --- a/public/sass/pages/_explore.scss +++ b/public/sass/pages/_explore.scss @@ -287,14 +287,15 @@ } .query-row-status { - position: absolute; + position: relative; top: 0; - right: 105px; + right: 35px; z-index: 1015; display: flex; flex-direction: column; justify-content: center; height: $input-height; + width: 0; } .query-row-field {