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

rusackas 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 74451057355 fix(explore): explain disabled chart overwrite option 
(#39796)
74451057355 is described below

commit 74451057355ac672d00971390996c5b13a9dd7fc
Author: yeaight <[email protected]>
AuthorDate: Tue May 12 21:53:59 2026 +0200

    fix(explore): explain disabled chart overwrite option (#39796)
---
 .../src/explore/components/SaveModal.test.tsx      | 29 +++++++++++++++++++++-
 .../src/explore/components/SaveModal.tsx           | 17 ++++++++++++-
 2 files changed, 44 insertions(+), 2 deletions(-)

diff --git a/superset-frontend/src/explore/components/SaveModal.test.tsx 
b/superset-frontend/src/explore/components/SaveModal.test.tsx
index e4fdf217ceb..9a3ba617ec0 100644
--- a/superset-frontend/src/explore/components/SaveModal.test.tsx
+++ b/superset-frontend/src/explore/components/SaveModal.test.tsx
@@ -282,7 +282,7 @@ test('disables overwrite option for new slice', () => {
 });
 
 test('disables overwrite option for non-owner', () => {
-  const { getByRole } = setup(
+  const { getByRole, getByText } = setup(
     {},
     mockStore({
       ...initialState,
@@ -290,6 +290,33 @@ test('disables overwrite option for non-owner', () => {
     }),
   );
   expect(getByRole('radio', { name: 'Save (Overwrite)' })).toBeDisabled();
+  expect(
+    getByText(
+      'Must be a chart owner to overwrite this chart. Save as a new chart 
instead.',
+    ),
+  ).toBeInTheDocument();
+});
+
+test('disables overwrite option for externally managed slice', () => {
+  const { getByRole, getByText } = setup(
+    {},
+    mockStore({
+      ...initialState,
+      explore: {
+        ...initialState.explore,
+        slice: {
+          ...initialState.explore.slice,
+          is_managed_externally: true,
+        },
+      },
+    }),
+  );
+  expect(getByRole('radio', { name: 'Save (Overwrite)' })).toBeDisabled();
+  expect(
+    getByText(
+      "This chart is managed externally and can't be overwritten in Superset.",
+    ),
+  ).toBeInTheDocument();
 });
 
 test('updates slice name and selected dashboard', async () => {
diff --git a/superset-frontend/src/explore/components/SaveModal.tsx 
b/superset-frontend/src/explore/components/SaveModal.tsx
index 6e72769f078..ec169671271 100755
--- a/superset-frontend/src/explore/components/SaveModal.tsx
+++ b/superset-frontend/src/explore/components/SaveModal.tsx
@@ -34,6 +34,7 @@ import {
   Loading,
   Divider,
   Flex,
+  Typography,
   TreeSelect,
 } from '@superset-ui/core/components';
 import { logging } from '@apache-superset/core/utils';
@@ -597,18 +598,32 @@ class SaveModal extends Component<SaveModalProps, 
SaveModalState> {
 
   renderSaveChartModal = () => {
     const info = this.info();
+    const canOverwriteSlice = this.canOverwriteSlice();
     return (
       <Form data-test="save-modal-body" layout="vertical">
         <FormItem data-test="radio-group">
           <Radio
             id="overwrite-radio"
-            disabled={!this.canOverwriteSlice()}
+            disabled={!canOverwriteSlice}
             checked={this.state.action === 'overwrite'}
             onChange={() => this.changeAction('overwrite')}
             data-test="save-overwrite-radio"
           >
             {t('Save (Overwrite)')}
           </Radio>
+          {this.props.slice && !canOverwriteSlice && (
+            <div>
+              <Typography.Text type="secondary">
+                {this.props.slice.is_managed_externally
+                  ? t(
+                      "This chart is managed externally and can't be 
overwritten in Superset.",
+                    )
+                  : t(
+                      'Must be a chart owner to overwrite this chart. Save as 
a new chart instead.',
+                    )}
+              </Typography.Text>
+            </div>
+          )}
           <Radio
             id="saveas-radio"
             data-test="saveas-radio"

Reply via email to