This is an automated email from the ASF dual-hosted git repository.

kgabryje pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/superset.git


The following commit(s) were added to refs/heads/master by this push:
     new 98bf878d6e fix(explore): Enable saving metric after changing title 
(#23020)
98bf878d6e is described below

commit 98bf878d6ea263d4747cf4b7c23bc52555b177e7
Author: Kamil Gabryjelski <[email protected]>
AuthorDate: Tue Feb 7 23:23:52 2023 +0100

    fix(explore): Enable saving metric after changing title (#23020)
---
 .../AdhocMetricEditPopover/AdhocMetricEditPopover.test.tsx     | 10 ++++++++++
 .../controls/MetricControl/AdhocMetricEditPopover/index.jsx    |  3 +++
 .../controls/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(<AdhocMetricEditPopover {...props} isLabelModified />);
+  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
+          }
         />
       </ExplorePopoverContent>
     );

Reply via email to