Merge pull request #23527 from npiyush97/navfix

🐛 bug fix:fix issue in entitypage tabs with replacing nav link tabs
This commit is contained in:
Ben Lambert
2024-04-02 14:31:58 +02:00
committed by GitHub
5 changed files with 28 additions and 9 deletions
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/core-components': patch
---
Added Link component in `TabUI` providing functionality like copy link or open in new tab.
@@ -95,4 +95,13 @@ describe('<HeaderTabs />', () => {
await user.click(rendered.getByText('Docs'));
expect(mockOnChange).toHaveBeenCalledTimes(1);
});
it('should render 2 nav tabs', async () => {
const rendered = await renderInTestApp(<HeaderTabs tabs={mockTabs} />);
const tabs = rendered.queryAllByTestId(id => id.startsWith('header-tab'));
expect(tabs).toHaveLength(2);
tabs.forEach(tab => {
expect(tab.tagName.toLocaleLowerCase('en-US')).toBe('a');
});
});
});
@@ -18,6 +18,7 @@ import { makeStyles } from '@material-ui/core/styles';
import TabUI, { TabProps } from '@material-ui/core/Tab';
import Tabs from '@material-ui/core/Tabs';
import React, { useCallback, useEffect, useState } from 'react';
import { Link } from '@backstage/core-components';
// TODO(blam): Remove this implementation when the Tabs are ready
// This is just a temporary solution to implementing tabs for now
@@ -95,7 +96,9 @@ export function HeaderTabs(props: HeaderTabsProps) {
setSelectedTab(selectedIndex);
}
}, [selectedIndex]);
function removeLeadingSlash(path: string) {
return path.replace(/^\//, '');
}
return (
<Box className={styles.tabsWrapper}>
<Tabs
@@ -109,13 +112,15 @@ export function HeaderTabs(props: HeaderTabsProps) {
>
{tabs.map((tab, index) => (
<TabUI
{...tab.tabProps}
data-testid={`header-tab-${index}`}
label={tab.label}
key={tab.id}
component={Link}
to={removeLeadingSlash(tab.id)}
value={index}
className={styles.defaultTab}
classes={{ selected: styles.selected, root: styles.tabRoot }}
{...tab.tabProps}
/>
))}
</Tabs>
@@ -34,7 +34,7 @@ describe('<DefaultSettingsPage />', () => {
it('should render the settings page with 3 tabs', async () => {
const { container } = await renderInTestApp(<DefaultSettingsPage />);
const tabs = container.querySelectorAll('[class*=MuiTabs-root] button');
const tabs = container.querySelectorAll('[class*=MuiTabs-root] a');
expect(tabs).toHaveLength(3);
});
@@ -48,7 +48,7 @@ describe('<DefaultSettingsPage />', () => {
<DefaultSettingsPage tabs={[advancedTabRoute]} />,
);
const tabs = container.querySelectorAll('[class*=MuiTabs-root] button');
const tabs = container.querySelectorAll('[class*=MuiTabs-root] a');
expect(tabs).toHaveLength(4);
expect(tabs[3].textContent).toEqual('Advanced');
});
@@ -63,7 +63,7 @@ describe('<DefaultSettingsPage />', () => {
<DefaultSettingsPage tabs={[advancedTabRoute]} />,
);
const tabs = container.querySelectorAll('[class*=MuiTabs-root] button');
const tabs = container.querySelectorAll('[class*=MuiTabs-root] a');
expect(tabs).toHaveLength(4);
expect(tabs[3].textContent).toEqual('Advanced');
});
@@ -36,7 +36,7 @@ describe('<SettingsPage />', () => {
it('should render the default settings page with 3 tabs', async () => {
const { container } = await renderInTestApp(<SettingsPage />);
const tabs = container.querySelectorAll('[class*=MuiTabs-root] button');
const tabs = container.querySelectorAll('[class*=MuiTabs-root] a');
expect(tabs).toHaveLength(3);
});
@@ -49,7 +49,7 @@ describe('<SettingsPage />', () => {
(useOutlet as jest.Mock).mockReturnValue(advancedTabRoute);
const { container } = await renderInTestApp(<SettingsPage />);
const tabs = container.querySelectorAll('[class*=MuiTabs-root] button');
const tabs = container.querySelectorAll('[class*=MuiTabs-root] a');
expect(tabs).toHaveLength(4);
expect(tabs[3].textContent).toEqual('Advanced');
});
@@ -63,7 +63,7 @@ describe('<SettingsPage />', () => {
(useOutlet as jest.Mock).mockReturnValue(advancedTabRoute);
const { container } = await renderInTestApp(<SettingsPage />);
const tabs = container.querySelectorAll('[class*=MuiTabs-root] button');
const tabs = container.querySelectorAll('[class*=MuiTabs-root] a');
expect(tabs).toHaveLength(4);
expect(tabs[3].textContent).toEqual('Advanced');
const user = userEvent.setup();
@@ -86,7 +86,7 @@ describe('<SettingsPage />', () => {
(useOutlet as jest.Mock).mockReturnValue(customLayout);
const { container } = await renderInTestApp(<SettingsPage />);
const tabs = container.querySelectorAll('[class*=MuiTabs-root] button');
const tabs = container.querySelectorAll('[class*=MuiTabs-root] a');
expect(tabs).toHaveLength(2);
expect(tabs[0].textContent).toEqual('General');
expect(tabs[1].textContent).toEqual('Advanced');