/** * Copyright (c) OpenLens Authors. All rights reserved. * Licensed under MIT License. See LICENSE in root directory for more information. */ import "./welcome.scss"; import React from "react"; import { observer } from "mobx-react"; import type { IComputedValue } from "mobx"; import type { CarouselProps } from "react-material-ui-carousel"; import LegacyCarousel from "react-material-ui-carousel"; import { Icon } from "../icon"; import { slackUrl } from "../../../common/vars"; import { withInjectables } from "@ogre-tools/injectable-react"; import welcomeMenuItemsInjectable from "./welcome-menu-items/welcome-menu-items.injectable"; import type { WelcomeMenuRegistration } from "./welcome-menu-items/welcome-menu-registration"; import welcomeBannerItemsInjectable from "./welcome-banner-items/welcome-banner-items.injectable"; import type { WelcomeBannerRegistration } from "./welcome-banner-items/welcome-banner-registration"; import productNameInjectable from "../../../common/vars/product-name.injectable"; export const defaultWidth = 320; // This is to fix some react 18 type errors const Carousel = LegacyCarousel as React.ComponentType; interface Dependencies { welcomeMenuItems: IComputedValue; welcomeBannerItems: IComputedValue; productName: string; } const NonInjectedWelcome = observer(({ welcomeMenuItems, welcomeBannerItems, productName, }: Dependencies) => { const welcomeBanners = welcomeBannerItems.get(); // if there is banner with specified width, use it to calculate the width of the container const maxWidth = Math.max( ...welcomeBanners.map(banner => banner.width ?? 0), defaultWidth, ); return (
{welcomeBanners.length > 0 ? ( 1} autoPlay={true} navButtonsAlwaysInvisible={true} indicatorIconButtonProps={{ style: { color: "var(--iconActiveBackground)", }, }} activeIndicatorIconButtonProps={{ style: { color: "var(--iconActiveColor)", }, }} interval={8000} > {welcomeBanners.map((item, index) => ( ))} ) : ( )}

{`Welcome to ${productName}!`}

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 .

); }); export const Welcome = withInjectables(NonInjectedWelcome, { getProps: (di) => ({ welcomeMenuItems: di.inject(welcomeMenuItemsInjectable), welcomeBannerItems: di.inject(welcomeBannerItemsInjectable), productName: di.inject(productNameInjectable), }), });