diff --git a/client/app/components/ParameterValueInput.jsx b/client/app/components/ParameterValueInput.jsx index 54839e45b7..05683f5a3a 100644 --- a/client/app/components/ParameterValueInput.jsx +++ b/client/app/components/ParameterValueInput.jsx @@ -37,16 +37,19 @@ export class ParameterValueInput extends React.Component { constructor(props) { super(props); this.state = { - value: props.value, - isDirty: false, + value: props.parameter.hasPendingValue ? props.parameter.pendingValue : props.value, + isDirty: props.parameter.hasPendingValue, }; } componentDidUpdate = (prevProps) => { - const { value } = this.props; + const { value, parameter } = this.props; // if value prop updated, reset dirty state - if (prevProps.value !== value) { - this.setState({ value, isDirty: false }); + if (prevProps.value !== value || prevProps.parameter !== parameter) { + this.setState({ + value: parameter.hasPendingValue ? parameter.pendingValue : value, + isDirty: parameter.hasPendingValue, + }); } } diff --git a/client/app/pages/queries/view.js b/client/app/pages/queries/view.js index 2605d62b79..aef1b66a39 100644 --- a/client/app/pages/queries/view.js +++ b/client/app/pages/queries/view.js @@ -1,4 +1,4 @@ -import { pick, some, find, minBy, map, intersection, isArray } from 'lodash'; +import { pick, some, find, minBy, map, intersection, isArray, omit } from 'lodash'; import { SCHEMA_NOT_SUPPORTED, SCHEMA_LOAD_ERROR } from '@/services/data-source'; import getTags from '@/services/getTags'; import { policy } from '@/services/policy'; @@ -253,6 +253,14 @@ function QueryViewCtrl( delete request.version; } + // omit pendingValue before saving + if (request.options && request.options.parameters) { + request.options = { + ...request.options, + parameters: map(request.options.parameters, p => omit(p, 'pendingValue')), + }; + } + function overwrite() { options.force = true; $scope.saveQuery(options, data); diff --git a/client/app/services/query.js b/client/app/services/query.js index 991e2f21f3..6669106da6 100644 --- a/client/app/services/query.js +++ b/client/app/services/query.js @@ -429,7 +429,8 @@ class Parameters { const parameterExists = p => includes(parameterNames, p.name); const parameters = this.query.options.parameters; - this.query.options.parameters = parameters.filter(parameterExists).map(p => new Parameter(p, this.query.id)); + this.query.options.parameters = parameters.filter(parameterExists) + .map(p => (p instanceof Parameter ? p : new Parameter(p, this.query.id))); } initFromQueryString(query) {