diff --git a/UPDATING.md b/UPDATING.md index 08cd483775e..16d3373e1b3 100644 --- a/UPDATING.md +++ b/UPDATING.md @@ -23,6 +23,7 @@ This file documents any backwards-incompatible changes in Superset and assists people when migrating to a new version. ## Next +- [35062](https://github.com/apache/superset/pull/35062): Changed the function signature of `setupExtensions` to `setupCodeOverrides` with options as arguments. - [34871](https://github.com/apache/superset/pull/34871): Fixed Jest test hanging issue from Ant Design v5 upgrade. MessageChannel is now mocked in test environment to prevent rc-overflow from causing Jest to hang. Test environment only - no production impact. - [34782](https://github.com/apache/superset/pull/34782): Dataset exports now include the dataset ID in their file name (similar to charts and dashboards). If managing assets as code, make sure to rename existing dataset YAMLs to include the ID (and avoid duplicated files). - [34536](https://github.com/apache/superset/pull/34536): The `ENVIRONMENT_TAG_CONFIG` color values have changed to support only Ant Design semantic colors. Update your `superset_config.py`: diff --git a/superset-frontend/src/SqlLab/components/SqlEditor/SqlEditor.test.tsx b/superset-frontend/src/SqlLab/components/SqlEditor/SqlEditor.test.tsx index 945c0f13151..1ace7435ef6 100644 --- a/superset-frontend/src/SqlLab/components/SqlEditor/SqlEditor.test.tsx +++ b/superset-frontend/src/SqlLab/components/SqlEditor/SqlEditor.test.tsx @@ -41,7 +41,7 @@ import { import SqlEditorLeftBar from 'src/SqlLab/components/SqlEditorLeftBar'; import ResultSet from 'src/SqlLab/components/ResultSet'; import { api } from 'src/hooks/apiResources/queryApi'; -import setupExtensions from 'src/setup/setupExtensions'; +import setupCodeOverrides from 'src/setup/setupCodeOverrides'; import type { Action, Middleware, Store } from 'redux'; import SqlEditor, { Props } from '.'; @@ -353,7 +353,7 @@ describe('SqlEditor', () => { <>sqleditor.extension.form extension component )); - setupExtensions(); + setupCodeOverrides(); const { findByText } = setup(mockedProps, store); expect( await findByText('sqleditor.extension.form extension component'), diff --git a/superset-frontend/src/dashboard/components/EmbeddedModal/EmbeddedModal.test.tsx b/superset-frontend/src/dashboard/components/EmbeddedModal/EmbeddedModal.test.tsx index ba3eeca6b31..888eb7f7bf5 100644 --- a/superset-frontend/src/dashboard/components/EmbeddedModal/EmbeddedModal.test.tsx +++ b/superset-frontend/src/dashboard/components/EmbeddedModal/EmbeddedModal.test.tsx @@ -28,7 +28,7 @@ import { getExtensionsRegistry, makeApi, } from '@superset-ui/core'; -import setupExtensions from 'src/setup/setupExtensions'; +import setupCodeOverrides from 'src/setup/setupCodeOverrides'; import DashboardEmbedModal from './index'; const defaultResponse = { @@ -162,7 +162,7 @@ test('adds extension to DashboardEmbedModal', async () => { <>dashboard.embed.modal.extension component )); - setupExtensions(); + setupCodeOverrides(); setup(); expect( diff --git a/superset-frontend/src/dashboard/components/Header/Header.test.tsx b/superset-frontend/src/dashboard/components/Header/Header.test.tsx index bee4f724977..ddf13c25ecf 100644 --- a/superset-frontend/src/dashboard/components/Header/Header.test.tsx +++ b/superset-frontend/src/dashboard/components/Header/Header.test.tsx @@ -22,7 +22,7 @@ import { screen, userEvent, within, waitFor } from '@superset-ui/core/spec'; import { ActionCreators as UndoActionCreators } from 'redux-undo'; import fetchMock from 'fetch-mock'; import { getExtensionsRegistry, JsonObject } from '@superset-ui/core'; -import setupExtensions from 'src/setup/setupExtensions'; +import setupCodeOverrides from 'src/setup/setupCodeOverrides'; import getOwnerName from 'src/utils/getOwnerName'; import { render, createStore } from 'spec/helpers/testing-library'; import reducerIndex from 'spec/helpers/reducerIndex'; @@ -546,7 +546,7 @@ test('should render an extension component if one is supplied', () => { extensionsRegistry.set('dashboard.nav.right', () => ( <>dashboard.nav.right extension component )); - setupExtensions(); + setupCodeOverrides(); setup(); expect( diff --git a/superset-frontend/src/embedded/index.tsx b/superset-frontend/src/embedded/index.tsx index c2075249612..3cbe3d7408f 100644 --- a/superset-frontend/src/embedded/index.tsx +++ b/superset-frontend/src/embedded/index.tsx @@ -38,6 +38,7 @@ import { ErrorBoundary } from 'src/components'; import { addDangerToast } from 'src/components/MessageToasts/actions'; import ToastContainer from 'src/components/MessageToasts/ToastContainer'; import { UserWithPermissionsAndRoles } from 'src/types/bootstrapTypes'; +import setupCodeOverrides from 'src/setup/setupCodeOverrides'; import { EmbeddedContextProviders, getThemeController, @@ -46,6 +47,7 @@ import { embeddedApi } from './api'; import { getDataMaskChangeTrigger } from './utils'; setupPlugins(); +setupCodeOverrides({ embedded: true }); const debugMode = process.env.WEBPACK_MODE === 'development'; const bootstrapData = getBootstrapData(); diff --git a/superset-frontend/src/features/databases/DatabaseModal/index.test.tsx b/superset-frontend/src/features/databases/DatabaseModal/index.test.tsx index 8b75e15467d..febe6bb3579 100644 --- a/superset-frontend/src/features/databases/DatabaseModal/index.test.tsx +++ b/superset-frontend/src/features/databases/DatabaseModal/index.test.tsx @@ -28,7 +28,7 @@ import { waitFor, } from 'spec/helpers/testing-library'; import { getExtensionsRegistry } from '@superset-ui/core'; -import setupExtensions from 'src/setup/setupExtensions'; +import setupCodeOverrides from 'src/setup/setupCodeOverrides'; import * as hooks from 'src/views/CRUD/hooks'; import { DatabaseObject, ConfigurationMethod } from '../types'; import DatabaseModal, { @@ -1538,7 +1538,7 @@ describe('DatabaseModal', () => { <>ssh_tunnel.form.switch extension component )); - setupExtensions(); + setupCodeOverrides(); }); test('should render an extension component if one is supplied', async () => { diff --git a/superset-frontend/src/features/home/Menu.test.tsx b/superset-frontend/src/features/home/Menu.test.tsx index 9b8102ee381..952015841cb 100644 --- a/superset-frontend/src/features/home/Menu.test.tsx +++ b/superset-frontend/src/features/home/Menu.test.tsx @@ -19,7 +19,7 @@ import * as reactRedux from 'react-redux'; import fetchMock from 'fetch-mock'; import { render, screen, userEvent } from 'spec/helpers/testing-library'; -import setupExtensions from 'src/setup/setupExtensions'; +import setupCodeOverrides from 'src/setup/setupCodeOverrides'; import { getExtensionsRegistry } from '@superset-ui/core'; import { Menu } from './Menu'; @@ -597,7 +597,7 @@ test('should render an extension component if one is supplied', async () => { <>navbar.right extension component )); - setupExtensions(); + setupCodeOverrides(); render(, { useRouter: true, diff --git a/superset-frontend/src/pages/Home/Home.test.tsx b/superset-frontend/src/pages/Home/Home.test.tsx index 96c4a0cceaf..e8c172b9b24 100644 --- a/superset-frontend/src/pages/Home/Home.test.tsx +++ b/superset-frontend/src/pages/Home/Home.test.tsx @@ -25,7 +25,7 @@ import { } from 'spec/helpers/testing-library'; import { isFeatureEnabled, getExtensionsRegistry } from '@superset-ui/core'; import Welcome from 'src/pages/Home'; -import setupExtensions from 'src/setup/setupExtensions'; +import setupCodeOverrides from 'src/setup/setupCodeOverrides'; const chartsEndpoint = 'glob:*/api/v1/chart/?*'; const chartInfoEndpoint = 'glob:*/api/v1/chart/_info?*'; @@ -261,7 +261,7 @@ test('Should render an extension component if one is supplied', async () => { <>welcome.banner extension component )); - setupExtensions(); + setupCodeOverrides(); await renderWelcome(); @@ -275,7 +275,7 @@ test('Should render a submenu extension component if one is supplied', async () extensionsRegistry.set('home.submenu', () => <>submenu extension); - setupExtensions(); + setupCodeOverrides(); await renderWelcome(); @@ -293,7 +293,7 @@ test('Should not make data fetch calls if `welcome.main.replacement` is defined' <>welcome.main.replacement extension component )); - setupExtensions(); + setupCodeOverrides(); await renderWelcome(); diff --git a/superset-frontend/src/setup/setupExtensions.ts b/superset-frontend/src/setup/setupCodeOverrides.ts similarity index 65% rename from superset-frontend/src/setup/setupExtensions.ts rename to superset-frontend/src/setup/setupCodeOverrides.ts index 88a9cf10592..6c4ea9ab723 100644 --- a/superset-frontend/src/setup/setupExtensions.ts +++ b/superset-frontend/src/setup/setupCodeOverrides.ts @@ -17,5 +17,18 @@ * under the License. */ -// For individual deployments to add custom overrides -export default function setupExtensions() {} +/** + * Configuration options for setting up code overrides in different contexts. + */ +interface CodeOverrideOptions { + /** + * Whether the application is running in embedded mode. + */ + embedded?: boolean; +} + +/** + * Hook for individual deployments to add custom overrides + * @param options - Configuration options for the setup process + */ +export default function setupCodeOverrides(options: CodeOverrideOptions = {}) {} diff --git a/superset-frontend/src/views/App.tsx b/superset-frontend/src/views/App.tsx index 88274eec4f1..48120d510c6 100644 --- a/superset-frontend/src/views/App.tsx +++ b/superset-frontend/src/views/App.tsx @@ -36,7 +36,7 @@ import setupApp from 'src/setup/setupApp'; import setupPlugins from 'src/setup/setupPlugins'; import { routes, isFrontendRoute } from 'src/views/routes'; import { Logger, LOG_ACTIONS_SPA_NAVIGATION } from 'src/logger/LogUtils'; -import setupExtensions from 'src/setup/setupExtensions'; +import setupCodeOverrides from 'src/setup/setupCodeOverrides'; import { logEvent } from 'src/logger/actions'; import { store } from 'src/views/store'; import ExtensionsStartup from 'src/extensions/ExtensionsStartup'; @@ -45,7 +45,7 @@ import { ScrollToTop } from './ScrollToTop'; setupApp(); setupPlugins(); -setupExtensions(); +setupCodeOverrides(); setupAGGridModules(); const bootstrapData = getBootstrapData();