mirror of
https://github.com/apache/superset.git
synced 2026-05-12 19:35:17 +00:00
fix(dataset): prevent metric duplication error when editing SQL and adding metric (#33523)
Co-authored-by: QinQin <qinqin@geotab.com>
(cherry picked from commit 2fba789e8d)
This commit is contained in:
@@ -39,8 +39,8 @@ import mockDatasource from 'spec/fixtures/mockDatasource';
|
||||
// Define your constants here
|
||||
const SAVE_ENDPOINT = 'glob:*/api/v1/dataset/7';
|
||||
const SAVE_PAYLOAD = { new: 'data' };
|
||||
const SAVE_DATASOURCE_ENDPOINT = 'glob:*/api/v1/dataset/7';
|
||||
const GET_DATASOURCE_ENDPOINT = SAVE_DATASOURCE_ENDPOINT;
|
||||
const SAVE_DATASOURCE_ENDPOINT = 'glob:*/api/v1/dataset/7?override_columns=*';
|
||||
const GET_DATASOURCE_ENDPOINT = 'glob:*/api/v1/dataset/7';
|
||||
const GET_DATABASE_ENDPOINT = 'glob:*/api/v1/database/?q=*';
|
||||
|
||||
const mockedProps = {
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
* under the License.
|
||||
*/
|
||||
import { FunctionComponent, useState, useRef } from 'react';
|
||||
import { useDispatch, useSelector } from 'react-redux';
|
||||
import { useSelector } from 'react-redux';
|
||||
import Alert from 'src/components/Alert';
|
||||
import Button from 'src/components/Button';
|
||||
import {
|
||||
@@ -33,15 +33,6 @@ import Modal from 'src/components/Modal';
|
||||
import AsyncEsmComponent from 'src/components/AsyncEsmComponent';
|
||||
import ErrorMessageWithStackTrace from 'src/components/ErrorMessage/ErrorMessageWithStackTrace';
|
||||
import withToasts from 'src/components/MessageToasts/withToasts';
|
||||
import {
|
||||
startMetaDataLoading,
|
||||
stopMetaDataLoading,
|
||||
syncDatasourceMetadata,
|
||||
} from 'src/explore/actions/exploreActions';
|
||||
import {
|
||||
fetchSyncedColumns,
|
||||
updateColumns,
|
||||
} from 'src/components/Datasource/utils';
|
||||
import { DatasetObject } from '../../features/datasets/types';
|
||||
|
||||
const DatasourceEditor = AsyncEsmComponent(() => import('./DatasourceEditor'));
|
||||
@@ -95,13 +86,11 @@ function buildExtraJsonObject(
|
||||
|
||||
const DatasourceModal: FunctionComponent<DatasourceModalProps> = ({
|
||||
addSuccessToast,
|
||||
addDangerToast,
|
||||
datasource,
|
||||
onDatasourceSave,
|
||||
onHide,
|
||||
show,
|
||||
}) => {
|
||||
const dispatch = useDispatch();
|
||||
const [currentDatasource, setCurrentDatasource] = useState(datasource);
|
||||
const currencies = useSelector<
|
||||
{
|
||||
@@ -184,36 +173,13 @@ const DatasourceModal: FunctionComponent<DatasourceModalProps> = ({
|
||||
const onConfirmSave = async () => {
|
||||
// Pull out extra fields into the extra object
|
||||
setIsSaving(true);
|
||||
const overrideColumns = datasource.sql !== currentDatasource.sql;
|
||||
try {
|
||||
await SupersetClient.put({
|
||||
endpoint: `/api/v1/dataset/${currentDatasource.id}`,
|
||||
endpoint: `/api/v1/dataset/${currentDatasource.id}?override_columns=${overrideColumns}`,
|
||||
jsonPayload: buildPayload(currentDatasource),
|
||||
});
|
||||
if (datasource.sql !== currentDatasource.sql) {
|
||||
// if sql has changed, save a second time with synced columns
|
||||
dispatch(startMetaDataLoading());
|
||||
try {
|
||||
const columnJson = await fetchSyncedColumns(currentDatasource);
|
||||
const columnChanges = updateColumns(
|
||||
currentDatasource.columns,
|
||||
columnJson,
|
||||
addSuccessToast,
|
||||
);
|
||||
currentDatasource.columns = columnChanges.finalColumns;
|
||||
dispatch(syncDatasourceMetadata(currentDatasource));
|
||||
dispatch(stopMetaDataLoading());
|
||||
addSuccessToast(t('Metadata has been synced'));
|
||||
} catch (error) {
|
||||
dispatch(stopMetaDataLoading());
|
||||
addDangerToast(
|
||||
t('An error has occurred while syncing virtual dataset columns'),
|
||||
);
|
||||
}
|
||||
await SupersetClient.put({
|
||||
endpoint: `/api/v1/dataset/${currentDatasource.id}`,
|
||||
jsonPayload: buildPayload(currentDatasource),
|
||||
});
|
||||
}
|
||||
|
||||
const { json } = await SupersetClient.get({
|
||||
endpoint: `/api/v1/dataset/${currentDatasource?.id}`,
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user