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

suddjian 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 2389871556 feat: add extension point to the top of welcome page 
(#20575)
2389871556 is described below

commit 2389871556cde32c61bc694f09b4e7dbc5432af5
Author: Lily Kuang <[email protected]>
AuthorDate: Fri Jul 1 12:21:13 2022 -0700

    feat: add extension point to the top of welcome page (#20575)
    
    * welcome top extension
    
    * show database modal
    
    * add test
    
    * Delete lines.svg
    
    * rename to banner
    
    * remove lines
    
    Co-authored-by: David Aaron Suddjian 
<[email protected]>
---
 .../src/ui-overrides/UiOverrideRegistry.ts         |  1 +
 superset-frontend/src/constants.ts                 |  4 ++++
 .../src/views/CRUD/data/database/DatabaseList.tsx  |  7 ++++++-
 .../src/views/CRUD/welcome/Welcome.test.tsx        | 23 ++++++++++++++++++++++
 .../src/views/CRUD/welcome/Welcome.tsx             |  7 ++++++-
 5 files changed, 40 insertions(+), 2 deletions(-)

diff --git 
a/superset-frontend/packages/superset-ui-core/src/ui-overrides/UiOverrideRegistry.ts
 
b/superset-frontend/packages/superset-ui-core/src/ui-overrides/UiOverrideRegistry.ts
index 6006bd5cc0..730116562e 100644
--- 
a/superset-frontend/packages/superset-ui-core/src/ui-overrides/UiOverrideRegistry.ts
+++ 
b/superset-frontend/packages/superset-ui-core/src/ui-overrides/UiOverrideRegistry.ts
@@ -35,6 +35,7 @@ export type UiOverrides = Partial<{
   'embedded.documentation.description': UiGeneratorText;
   'embedded.documentation.url': string;
   'navbar.right': React.ComponentType;
+  'welcome.banner': React.ComponentType;
 }>;
 
 /**
diff --git a/superset-frontend/src/constants.ts 
b/superset-frontend/src/constants.ts
index 84e809532e..c72077a6f1 100644
--- a/superset-frontend/src/constants.ts
+++ b/superset-frontend/src/constants.ts
@@ -95,6 +95,10 @@ export const URL_PARAMS = {
     name: 'viz_type',
     type: 'string',
   },
+  showDatabaseModal: {
+    name: 'show_database_modal',
+    type: 'boolean',
+  },
 } as const;
 
 export const RESERVED_CHART_URL_PARAMS: string[] = [
diff --git a/superset-frontend/src/views/CRUD/data/database/DatabaseList.tsx 
b/superset-frontend/src/views/CRUD/data/database/DatabaseList.tsx
index 3743917aba..d203e40ba6 100644
--- a/superset-frontend/src/views/CRUD/data/database/DatabaseList.tsx
+++ b/superset-frontend/src/views/CRUD/data/database/DatabaseList.tsx
@@ -29,6 +29,8 @@ import { createErrorHandler, uploadUserPerms } from 
'src/views/CRUD/utils';
 import withToasts from 'src/components/MessageToasts/withToasts';
 import SubMenu, { SubMenuProps } from 'src/views/components/SubMenu';
 import DeleteModal from 'src/components/DeleteModal';
+import { getUrlParam } from 'src/utils/urlUtils';
+import { URL_PARAMS } from 'src/constants';
 import { Tooltip } from 'src/components/Tooltip';
 import Icons from 'src/components/Icons';
 import { isUserAdmin } from 'src/dashboard/util/permissionUtils';
@@ -92,12 +94,15 @@ function DatabaseList({ addDangerToast, addSuccessToast }: 
DatabaseListProps) {
   const user = useSelector<any, UserWithPermissionsAndRoles>(
     state => state.user,
   );
+  const showDatabaseModal = getUrlParam(URL_PARAMS.showDatabaseModal);
 
   const [query, setQuery] = useQueryParams({
     databaseAdded: BooleanParam,
   });
 
-  const [databaseModalOpen, setDatabaseModalOpen] = useState<boolean>(false);
+  const [databaseModalOpen, setDatabaseModalOpen] = useState<boolean>(
+    showDatabaseModal || false,
+  );
   const [databaseCurrentlyDeleting, setDatabaseCurrentlyDeleting] =
     useState<DatabaseDeleteObject | null>(null);
   const [currentDatabase, setCurrentDatabase] = useState<DatabaseObject | 
null>(
diff --git a/superset-frontend/src/views/CRUD/welcome/Welcome.test.tsx 
b/superset-frontend/src/views/CRUD/welcome/Welcome.test.tsx
index 85c953017b..c29010a7db 100644
--- a/superset-frontend/src/views/CRUD/welcome/Welcome.test.tsx
+++ b/superset-frontend/src/views/CRUD/welcome/Welcome.test.tsx
@@ -27,6 +27,9 @@ import * as featureFlags from 'src/featureFlags';
 import Welcome from 'src/views/CRUD/welcome/Welcome';
 import { ReactWrapper } from 'enzyme';
 import waitForComponentToPaint from 'spec/helpers/waitForComponentToPaint';
+import { render, screen } from 'spec/helpers/testing-library';
+import { getUiOverrideRegistry } from '@superset-ui/core';
+import setupExtensions from 'src/setup/setupExtensions';
 
 const mockStore = configureStore([thunk]);
 const store = mockStore({});
@@ -179,3 +182,23 @@ describe('Welcome page with toggle switch', () => {
     expect(wrapper.find('ImageLoader')).not.toExist();
   });
 });
+
+test('should render an extension component if one is supplied', () => {
+  const uiOverrideRegistry = getUiOverrideRegistry();
+
+  uiOverrideRegistry.set('welcome.banner', () => (
+    <>welcome.banner extension component</>
+  ));
+
+  setupExtensions();
+
+  render(
+    <Provider store={store}>
+      <Welcome {...mockedProps} />
+    </Provider>,
+  );
+
+  expect(
+    screen.getByText('welcome.banner extension component'),
+  ).toBeInTheDocument();
+});
diff --git a/superset-frontend/src/views/CRUD/welcome/Welcome.tsx 
b/superset-frontend/src/views/CRUD/welcome/Welcome.tsx
index 3660b8acc8..aa13f4bdb8 100644
--- a/superset-frontend/src/views/CRUD/welcome/Welcome.tsx
+++ b/superset-frontend/src/views/CRUD/welcome/Welcome.tsx
@@ -17,7 +17,7 @@
  * under the License.
  */
 import React, { useEffect, useState } from 'react';
-import { styled, t } from '@superset-ui/core';
+import { styled, t, getUiOverrideRegistry } from '@superset-ui/core';
 import Collapse from 'src/components/Collapse';
 import { User } from 'src/types/bootstrapTypes';
 import { reject } from 'lodash';
@@ -46,6 +46,8 @@ import ChartTable from './ChartTable';
 import SavedQueries from './SavedQueries';
 import DashboardTable from './DashboardTable';
 
+const uiOverrideRegistry = getUiOverrideRegistry();
+
 interface WelcomeProps {
   user: User;
   addDangerToast: (arg0: string) => void;
@@ -177,6 +179,8 @@ function Welcome({ user, addDangerToast }: WelcomeProps) {
     setItem(LocalStorageKeys.homepage_collapse_state, state);
   };
 
+  const WelcomeTopExtension = uiOverrideRegistry.get('welcome.banner');
+
   useEffect(() => {
     const activeTab = getItem(LocalStorageKeys.homepage_activity_filter, null);
     setActiveState(collapseState.length > 0 ? collapseState : DEFAULT_TAB_ARR);
@@ -278,6 +282,7 @@ function Welcome({ user, addDangerToast }: WelcomeProps) {
     !activityData?.Examples && !activityData?.Viewed;
   return (
     <WelcomeContainer>
+      {WelcomeTopExtension && <WelcomeTopExtension />}
       <WelcomeNav>
         <h1 className="welcome-header">Home</h1>
         {isFeatureEnabled(FeatureFlag.THUMBNAILS) ? (

Reply via email to