You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@superset.apache.org by kg...@apache.org on 2024/03/13 15:30:40 UTC
(superset) branch master updated: chore: Add an extension for Home submenu (#27480)
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 a75bb7685d chore: Add an extension for Home submenu (#27480)
a75bb7685d is described below
commit a75bb7685dfe5b45564db8b7b1819e4480f20194
Author: Kamil Gabryjelski <ka...@gmail.com>
AuthorDate: Wed Mar 13 16:30:32 2024 +0100
chore: Add an extension for Home submenu (#27480)
---
.../superset-ui-core/src/ui-overrides/types.ts | 23 +++++++++++++++++++++-
superset-frontend/src/pages/Home/Home.test.tsx | 16 +++++++++++++++
superset-frontend/src/pages/Home/index.tsx | 7 ++++++-
3 files changed, 44 insertions(+), 2 deletions(-)
diff --git a/superset-frontend/packages/superset-ui-core/src/ui-overrides/types.ts b/superset-frontend/packages/superset-ui-core/src/ui-overrides/types.ts
index 60598bd4e1..cf03650e6e 100644
--- a/superset-frontend/packages/superset-ui-core/src/ui-overrides/types.ts
+++ b/superset-frontend/packages/superset-ui-core/src/ui-overrides/types.ts
@@ -16,7 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
-import React from 'react';
+import React, { ReactNode, MouseEventHandler } from 'react';
/**
* A function which returns text (or marked-up text)
@@ -144,6 +144,26 @@ export interface DashboardEmbedModalExtensions {
onHide: () => void;
}
+export interface ButtonProps {
+ name: ReactNode;
+ onClick?: MouseEventHandler<HTMLElement>;
+ 'data-test'?: string;
+ buttonStyle:
+ | 'primary'
+ | 'secondary'
+ | 'dashed'
+ | 'link'
+ | 'warning'
+ | 'success'
+ | 'tertiary';
+}
+
+export interface SubMenuProps {
+ buttons?: Array<ButtonProps>;
+ name?: string | ReactNode;
+ activeChild?: string;
+}
+
export type Extensions = Partial<{
'alertsreports.header.icon': React.ComponentType;
'embedded.documentation.configuration_details': React.ComponentType<ConfigDetailsProps>;
@@ -151,6 +171,7 @@ export type Extensions = Partial<{
'embedded.documentation.url': string;
'embedded.modal': React.ComponentType<DashboardEmbedModalExtensions>;
'dashboard.nav.right': React.ComponentType;
+ 'home.submenu': React.ComponentType<SubMenuProps>;
'navbar.right-menu.item.icon': React.ComponentType<RightMenuItemIconProps>;
'navbar.right': React.ComponentType;
'report-modal.dropdown.item.icon': React.ComponentType;
diff --git a/superset-frontend/src/pages/Home/Home.test.tsx b/superset-frontend/src/pages/Home/Home.test.tsx
index 8de33f323e..9a83e41839 100644
--- a/superset-frontend/src/pages/Home/Home.test.tsx
+++ b/superset-frontend/src/pages/Home/Home.test.tsx
@@ -255,3 +255,19 @@ test('should render an extension component if one is supplied', () => {
screen.getByText('welcome.banner extension component'),
).toBeInTheDocument();
});
+
+test('should render a submenu extension component if one is supplied', () => {
+ const extensionsRegistry = getExtensionsRegistry();
+
+ extensionsRegistry.set('home.submenu', () => <>submenu extension</>);
+
+ setupExtensions();
+
+ render(
+ <Provider store={store}>
+ <Welcome {...mockedProps} />
+ </Provider>,
+ );
+
+ expect(screen.getByText('submenu extension')).toBeInTheDocument();
+});
diff --git a/superset-frontend/src/pages/Home/index.tsx b/superset-frontend/src/pages/Home/index.tsx
index 2314111171..e6682ee921 100644
--- a/superset-frontend/src/pages/Home/index.tsx
+++ b/superset-frontend/src/pages/Home/index.tsx
@@ -186,6 +186,7 @@ function Welcome({ user, addDangerToast }: WelcomeProps) {
setItem(LocalStorageKeys.HomepageCollapseState, state);
};
+ const SubmenuExtension = extensionsRegistry.get('home.submenu');
const WelcomeMessageExtension = extensionsRegistry.get('welcome.message');
const WelcomeTopExtension = extensionsRegistry.get('welcome.banner');
const WelcomeMainExtension = extensionsRegistry.get(
@@ -352,7 +353,11 @@ function Welcome({ user, addDangerToast }: WelcomeProps) {
return (
<>
- <SubMenu {...menuData} />
+ {SubmenuExtension ? (
+ <SubmenuExtension {...menuData} />
+ ) : (
+ <SubMenu {...menuData} />
+ )}
<WelcomeContainer>
{WelcomeMessageExtension && <WelcomeMessageExtension />}
{WelcomeTopExtension && <WelcomeTopExtension />}