diff --git a/src/extensions/registries/welcome-banner-registry.ts b/src/extensions/registries/welcome-banner-registry.ts index ef36da8444..1102dc8a3f 100644 --- a/src/extensions/registries/welcome-banner-registry.ts +++ b/src/extensions/registries/welcome-banner-registry.ts @@ -30,6 +30,10 @@ export interface WelcomeBannerRegistration { * The banner component to be shown on the welcome screen. */ Banner?: React.ComponentType + /** + * The banner width in px. + */ + width?: number } export class WelcomeBannerRegistry extends BaseRegistry { } diff --git a/src/renderer/components/+welcome/__test__/welcome.test.tsx b/src/renderer/components/+welcome/__test__/welcome.test.tsx index 52f579643f..6eab098d05 100644 --- a/src/renderer/components/+welcome/__test__/welcome.test.tsx +++ b/src/renderer/components/+welcome/__test__/welcome.test.tsx @@ -24,6 +24,7 @@ import { render, screen } from "@testing-library/react"; import "@testing-library/jest-dom/extend-expect"; import { Welcome } from "../welcome"; import { TopBarRegistry, WelcomeMenuRegistry, WelcomeBannerRegistry } from "../../../../extensions/registries"; +import { defaultWidth } from "../welcome"; describe("", () => { beforeEach(() => { @@ -69,4 +70,30 @@ describe("", () => { expect(screen.queryByTestId(testId)).toBeInTheDocument(); expect(container.getElementsByClassName("logo").length).toBe(0); }); + + it("calculates max width from WelcomeBanner.width registered in WelcomeBannerRegistry", async () => { + WelcomeBannerRegistry.getInstance().getItems = jest.fn().mockImplementationOnce(() => [ + { + width: 100, + Banner: () =>
+ }, + { + width: 800, + Banner: () =>
+ } + ]); + + render(); + + expect(screen.queryByTestId("welcome-banner-container")).toHaveStyle({ + // should take the max width of the banners (if > defaultWidth) + width: `800px`, + }); + expect(screen.queryByTestId("welcome-text-container")).toHaveStyle({ + width: `${defaultWidth}px` + }); + expect(screen.queryByTestId("welcome-menu-container")).toHaveStyle({ + width: `${defaultWidth}px` + }); + }); }); diff --git a/src/renderer/components/+welcome/welcome.scss b/src/renderer/components/+welcome/welcome.scss index bb1318c64e..94bf713192 100644 --- a/src/renderer/components/+welcome/welcome.scss +++ b/src/renderer/components/+welcome/welcome.scss @@ -25,10 +25,6 @@ height: 100%; z-index: 1; - .box { - width: 320px; - } - h2 { color: var(--textColorAccent); font-weight: 600; @@ -41,7 +37,6 @@ } ul { - width: 200px; margin-top: 20px; li { diff --git a/src/renderer/components/+welcome/welcome.tsx b/src/renderer/components/+welcome/welcome.tsx index ffb290fb09..d2ec4fea8c 100644 --- a/src/renderer/components/+welcome/welcome.tsx +++ b/src/renderer/components/+welcome/welcome.tsx @@ -29,21 +29,35 @@ import { WelcomeMenuRegistry } from "../../../extensions/registries"; import { WelcomeTopbar } from "../cluster-manager/welcome-topbar"; import { WelcomeBannerRegistry } from "../../../extensions/registries"; +export const defaultWidth = 320; + @observer export class Welcome extends React.Component { render() { const welcomeBanner = WelcomeBannerRegistry.getInstance().getItems(); + // if there is banner with specified width, use it to calculate the width of the container + const maxWidth = welcomeBanner.reduce((acc, curr) => { + const currWidth = curr.width ?? 0; + + if (acc > currWidth) { + return acc; + } + + return currWidth; + }, defaultWidth); + return ( <>
-
+
{welcomeBanner.length > 0 ? ( 1} autoPlay={true} + navButtonsAlwaysInvisible={true} > {welcomeBanner.map((item, index) => @@ -51,21 +65,25 @@ export class Welcome extends React.Component { ) : } -

Welcome to {productName} 5!

+
+
+

Welcome to {productName} 5!

-

+

To get you started we have auto-detected your clusters in your kubeconfig file and added them to the catalog, your centralized view for managing all your cloud-native resources. -

+

If you have any questions or feedback, please join our Lens Community slack channel. -

+

- + +
+