From d5b0b924371f1419d08cdd8aec1b9050d6736394 Mon Sep 17 00:00:00 2001 From: Pavel Zavora Date: Mon, 21 Mar 2022 06:24:36 +0100 Subject: [PATCH 1/7] feat(ui/flux): detect custom script --- .../components/TimeMachine/FluxQueryMaker.tsx | 2 ++ .../fluxQueryBuilder/FluxQueryBuilder.tsx | 15 +++++++++++++-- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/ui/src/shared/components/TimeMachine/FluxQueryMaker.tsx b/ui/src/shared/components/TimeMachine/FluxQueryMaker.tsx index 37276f946..cf7a1fd46 100644 --- a/ui/src/shared/components/TimeMachine/FluxQueryMaker.tsx +++ b/ui/src/shared/components/TimeMachine/FluxQueryMaker.tsx @@ -90,6 +90,7 @@ class FluxQueryMaker extends PureComponent { fluxProportions, onSetFluxProportions, timeRange, + script, } = this.props if (!this.state.isWizardActive) { const {suggestions, draftScriptStatus} = this.state @@ -172,6 +173,7 @@ class FluxQueryMaker extends PureComponent { return ( void onShowEditor: () => void - isRunnable: boolean + script: string } type Props = OwnProps & typeof mdtp & ReturnType @@ -48,6 +48,7 @@ const FluxQueryBuilder = ({ onSubmit, onShowEditor, onAddTagSelector, + script: editorScript, }: Props) => { const [defaultPeriod, timeRangeText] = useMemo( () => [ @@ -56,6 +57,14 @@ const FluxQueryBuilder = ({ ], [timeRange, timeZone] ) + // isCustomScript detects if the supplied script contains user changes + const isCustomScript = useMemo(() => { + if (!editorScript) { + return false + } + const builtScript = buildQuery(builderState) + return editorScript !== builtScript + }, [editorScript]) return (
@@ -130,7 +139,9 @@ const FluxQueryBuilder = ({ />
diff --git a/ui/src/shared/components/TimeMachine/fluxQueryBuilder/FluxQueryBuilderSubmit.tsx b/ui/src/shared/components/TimeMachine/fluxQueryBuilder/FluxQueryBuilderSubmit.tsx new file mode 100644 index 000000000..d7c1865bb --- /dev/null +++ b/ui/src/shared/components/TimeMachine/fluxQueryBuilder/FluxQueryBuilderSubmit.tsx @@ -0,0 +1,36 @@ +// Libraries +import React from 'react' +import { + Button, + ComponentColor, + ComponentSize, + ComponentStatus, +} from 'src/reusable_ui' + +interface Props { + isCustomScript: boolean + isRunnable: boolean + submitAction: () => void +} + +const FluxQueryBuilderSubmit = ({ + isCustomScript, + isRunnable, + submitAction, +}: Props) => { + // TODO require confirmation when isCustomScript + // Submitting the query builder will discard any changes you have made + // using Flux. This cannot be recovered. + + return ( +