From 98bf878d6ea263d4747cf4b7c23bc52555b177e7 Mon Sep 17 00:00:00 2001 From: Kamil Gabryjelski Date: Tue, 7 Feb 2023 23:23:52 +0100 Subject: [PATCH] fix(explore): Enable saving metric after changing title (#23020) --- .../AdhocMetricEditPopover.test.tsx | 10 ++++++++++ .../MetricControl/AdhocMetricEditPopover/index.jsx | 3 +++ .../MetricControl/AdhocMetricPopoverTrigger.tsx | 4 ++++ 3 files changed, 17 insertions(+) diff --git a/superset-frontend/src/explore/components/controls/MetricControl/AdhocMetricEditPopover/AdhocMetricEditPopover.test.tsx b/superset-frontend/src/explore/components/controls/MetricControl/AdhocMetricEditPopover/AdhocMetricEditPopover.test.tsx index 3614e7222c..78add77814 100644 --- a/superset-frontend/src/explore/components/controls/MetricControl/AdhocMetricEditPopover/AdhocMetricEditPopover.test.tsx +++ b/superset-frontend/src/explore/components/controls/MetricControl/AdhocMetricEditPopover/AdhocMetricEditPopover.test.tsx @@ -162,6 +162,16 @@ test('Clicking on "Save" should call onChange and onClose for new metric', () => expect(props.onClose).toBeCalledTimes(1); }); +test('Clicking on "Save" should call onChange and onClose for new title', () => { + const props = createProps(); + render(); + expect(props.onChange).toBeCalledTimes(0); + expect(props.onClose).toBeCalledTimes(0); + userEvent.click(screen.getByRole('button', { name: 'Save' })); + expect(props.onChange).toBeCalledTimes(1); + expect(props.onClose).toBeCalledTimes(1); +}); + test('Should switch to tab:Simple', () => { const props = createProps(); props.getCurrentTab.mockImplementation(tab => { diff --git a/superset-frontend/src/explore/components/controls/MetricControl/AdhocMetricEditPopover/index.jsx b/superset-frontend/src/explore/components/controls/MetricControl/AdhocMetricEditPopover/index.jsx index c824d1e929..9ed817f283 100644 --- a/superset-frontend/src/explore/components/controls/MetricControl/AdhocMetricEditPopover/index.jsx +++ b/superset-frontend/src/explore/components/controls/MetricControl/AdhocMetricEditPopover/index.jsx @@ -62,6 +62,7 @@ const propTypes = { savedMetric: savedMetricType, datasource: PropTypes.object, isNewMetric: PropTypes.bool, + isLabelModified: PropTypes.bool, }; const defaultProps = { @@ -299,6 +300,7 @@ export default class AdhocMetricEditPopover extends React.PureComponent { onResize, datasource, isNewMetric, + isLabelModified, ...popoverProps } = this.props; const { adhocMetric, savedMetric } = this.state; @@ -345,6 +347,7 @@ export default class AdhocMetricEditPopover extends React.PureComponent { const stateIsValid = adhocMetric.isValid() || savedMetric?.metric_name; const hasUnsavedChanges = + isLabelModified || isNewMetric || !adhocMetric.equals(propsAdhocMetric) || (!( diff --git a/superset-frontend/src/explore/components/controls/MetricControl/AdhocMetricPopoverTrigger.tsx b/superset-frontend/src/explore/components/controls/MetricControl/AdhocMetricPopoverTrigger.tsx index c593cc2ee8..f423c2651a 100644 --- a/superset-frontend/src/explore/components/controls/MetricControl/AdhocMetricPopoverTrigger.tsx +++ b/superset-frontend/src/explore/components/controls/MetricControl/AdhocMetricPopoverTrigger.tsx @@ -225,6 +225,10 @@ class AdhocMetricPopoverTrigger extends React.PureComponent< getCurrentTab={this.getCurrentTab} getCurrentLabel={this.getCurrentLabel} isNewMetric={this.props.isNew} + isLabelModified={ + this.state.labelModified && + adhocMetricLabel !== this.state.title.label + } /> );