mirror of
https://github.com/lensapp/lens.git
synced 2025-05-20 05:10:56 +00:00
Add 'welcome banner' extension API (#3656)
* Add react-material-ui-carousel Signed-off-by: Hung-Han (Henry) Chen <chenhungh@gmail.com> * Add welcomeBanners extension api Signed-off-by: Hung-Han (Henry) Chen <chenhungh@gmail.com>
This commit is contained in:
10 files changed
+141
-6
No files matched your search
@@ -20,20 +20,22 @@
|
||||
*/
|
||||
|
||||
import React from "react";
|
||||
import { render } from "@testing-library/react";
|
||||
import { render, screen } from "@testing-library/react";
|
||||
import "@testing-library/jest-dom/extend-expect";
|
||||
import { Welcome } from "../welcome";
|
||||
import { TopBarRegistry, WelcomeMenuRegistry } from "../../../../extensions/registries";
|
||||
import { TopBarRegistry, WelcomeMenuRegistry, WelcomeBannerRegistry } from "../../../../extensions/registries";
|
||||
|
||||
describe("<Welcome/>", () => {
|
||||
beforeEach(() => {
|
||||
TopBarRegistry.createInstance();
|
||||
WelcomeMenuRegistry.createInstance();
|
||||
WelcomeBannerRegistry.createInstance();
|
||||
});
|
||||
|
||||
afterEach(() => {
|
||||
TopBarRegistry.resetInstance();
|
||||
WelcomeMenuRegistry.resetInstance();
|
||||
WelcomeBannerRegistry.resetInstance();
|
||||
});
|
||||
|
||||
it("renders items in the top bar", async () => {
|
||||
@@ -48,8 +50,23 @@ describe("<Welcome/>", () => {
|
||||
}
|
||||
]);
|
||||
|
||||
const { getByTestId } = render(<Welcome />);
|
||||
render(<Welcome />);
|
||||
|
||||
expect(await getByTestId(testId)).toHaveTextContent(text);
|
||||
expect(screen.getByTestId(testId)).toHaveTextContent(text);
|
||||
});
|
||||
|
||||
it("renders <Banner /> registered in WelcomeBannerRegistry and hide logo", async () => {
|
||||
const testId = "testId";
|
||||
|
||||
WelcomeBannerRegistry.getInstance().getItems = jest.fn().mockImplementationOnce(() => [
|
||||
{
|
||||
Banner: () => <div data-testid={testId} />
|
||||
}
|
||||
]);
|
||||
|
||||
const { container } = render(<Welcome />);
|
||||
|
||||
expect(screen.queryByTestId(testId)).toBeInTheDocument();
|
||||
expect(container.getElementsByClassName("logo").length).toBe(0);
|
||||
});
|
||||
});
|
||||
@@ -22,20 +22,34 @@
|
||||
import "./welcome.scss";
|
||||
import React from "react";
|
||||
import { observer } from "mobx-react";
|
||||
import Carousel from "react-material-ui-carousel";
|
||||
import { Icon } from "../icon";
|
||||
import { productName, slackUrl } from "../../../common/vars";
|
||||
import { WelcomeMenuRegistry } from "../../../extensions/registries";
|
||||
import { WelcomeTopbar } from "../cluster-manager/welcome-topbar";
|
||||
import { WelcomeBannerRegistry } from "../../../extensions/registries";
|
||||
|
||||
@observer
|
||||
export class Welcome extends React.Component {
|
||||
render() {
|
||||
const welcomeBanner = WelcomeBannerRegistry.getInstance().getItems();
|
||||
|
||||
return (
|
||||
<>
|
||||
<WelcomeTopbar/>
|
||||
<div className="Welcome flex justify-center align-center">
|
||||
<div className="flex justify-center Welcome align-center">
|
||||
<div className="box">
|
||||
<Icon svg="logo-lens" className="logo" />
|
||||
{welcomeBanner.length > 0 ? (
|
||||
<Carousel
|
||||
stopAutoPlayOnHover={true}
|
||||
indicators={welcomeBanner.length > 1}
|
||||
autoPlay={true}
|
||||
>
|
||||
{welcomeBanner.map((item, index) =>
|
||||
<item.Banner key={index} />
|
||||
)}
|
||||
</Carousel>
|
||||
) : <Icon svg="logo-lens" className="logo" />}
|
||||
|
||||
<h2>Welcome to {productName} 5!</h2>
|
||||
|
||||
|
||||
@@ -34,6 +34,7 @@ export function initRegistries() {
|
||||
registries.KubeObjectStatusRegistry.createInstance();
|
||||
registries.StatusBarRegistry.createInstance();
|
||||
registries.WelcomeMenuRegistry.createInstance();
|
||||
registries.WelcomeBannerRegistry.createInstance();
|
||||
registries.WorkloadsOverviewDetailRegistry.createInstance();
|
||||
registries.TopBarRegistry.createInstance();
|
||||
}
|
||||
Reference in new issue
Block a user