chore: Add an extension for Home submenu (#27480)

This commit is contained in:
Kamil Gabryjelski 2024-03-13 16:30:32 +01:00 committed by GitHub
parent 735b895dd5
commit a75bb7685d
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 44 additions and 2 deletions

View File

@ -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;

View File

@ -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();
});

View File

@ -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 />}