1
0
mirror of https://github.com/lensapp/lens.git synced 2025-05-20 05:10:56 +00:00

Fix extension sidebar items sometimes being expandable (#4835)

* Fix extension sidebar items sometimes being expandable

- Change <TabRoutesSidebarItems> to be just a helper function

Signed-off-by: Sebastian Malton <sebastian@malton.name>

* Actual fix

Signed-off-by: Sebastian Malton <sebastian@malton.name>
This commit is contained in:
Sebastian Malton 2022-02-08 13:21:54 -05:00 committed by GitHub
parent f53892cb46
commit d4d2da1d28
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
9 changed files with 34 additions and 34 deletions

View File

@ -11,7 +11,7 @@ import { isActiveRoute } from "../../navigation";
import { Icon } from "../icon"; import { Icon } from "../icon";
import { SidebarItem } from "../layout/sidebar-item"; import { SidebarItem } from "../layout/sidebar-item";
import type { TabLayoutRoute } from "../layout/tab-layout"; import type { TabLayoutRoute } from "../layout/tab-layout";
import { TabRoutesSidebarItems } from "../layout/tab-routes-sidebar-items"; import { renderTabRoutesSidebarItems } from "../layout/tab-routes-sidebar-items";
import configRoutesInjectable from "./route-tabs.injectable"; import configRoutesInjectable from "./route-tabs.injectable";
export interface ConfigSidebarItemProps {} export interface ConfigSidebarItemProps {}
@ -32,7 +32,7 @@ const NonInjectedConfigSidebarItem = observer(({ routes }: Dependencies & Config
url={configURL()} url={configURL()}
icon={<Icon material="list"/>} icon={<Icon material="list"/>}
> >
<TabRoutesSidebarItems routes={tabRoutes} /> {renderTabRoutesSidebarItems(tabRoutes)}
</SidebarItem> </SidebarItem>
); );
}); });

View File

@ -10,7 +10,7 @@ import { isActiveRoute } from "../../navigation";
import { Icon } from "../icon"; import { Icon } from "../icon";
import { SidebarItem } from "../layout/sidebar-item"; import { SidebarItem } from "../layout/sidebar-item";
import type { TabLayoutRoute } from "../layout/tab-layout"; import type { TabLayoutRoute } from "../layout/tab-layout";
import { TabRoutesSidebarItems } from "../layout/tab-routes-sidebar-items"; import { renderTabRoutesSidebarItems } from "../layout/tab-routes-sidebar-items";
import { helmRoute, helmURL } from "../../../common/routes"; import { helmRoute, helmURL } from "../../../common/routes";
import networkRouteTabsInjectable from "./route-tabs.injectable"; import networkRouteTabsInjectable from "./route-tabs.injectable";
@ -31,7 +31,7 @@ const NonInjectedHelmSidebarItem = observer(({ routes }: Dependencies & HelmSide
url={helmURL()} url={helmURL()}
icon={<Icon material="apps"/>} icon={<Icon material="apps"/>}
> >
<TabRoutesSidebarItems routes={tabRoutes} /> {renderTabRoutesSidebarItems(tabRoutes)}
</SidebarItem> </SidebarItem>
); );
}); });

View File

@ -10,7 +10,7 @@ import { isActiveRoute } from "../../navigation";
import { Icon } from "../icon"; import { Icon } from "../icon";
import { SidebarItem } from "../layout/sidebar-item"; import { SidebarItem } from "../layout/sidebar-item";
import type { TabLayoutRoute } from "../layout/tab-layout"; import type { TabLayoutRoute } from "../layout/tab-layout";
import { TabRoutesSidebarItems } from "../layout/tab-routes-sidebar-items"; import { renderTabRoutesSidebarItems } from "../layout/tab-routes-sidebar-items";
import { networkRoute, networkURL } from "../../../common/routes"; import { networkRoute, networkURL } from "../../../common/routes";
import networkRouteTabsInjectable from "./route-tabs.injectable"; import networkRouteTabsInjectable from "./route-tabs.injectable";
@ -32,7 +32,7 @@ const NonInjectedNetworkSidebarItem = observer(({ routes }: Dependencies & Netwo
url={networkURL()} url={networkURL()}
icon={<Icon material="device_hub"/>} icon={<Icon material="device_hub"/>}
> >
<TabRoutesSidebarItems routes={tabRoutes} /> {renderTabRoutesSidebarItems(tabRoutes)}
</SidebarItem> </SidebarItem>
); );
}); });

View File

@ -11,7 +11,7 @@ import { isActiveRoute } from "../../navigation";
import { Icon } from "../icon"; import { Icon } from "../icon";
import { SidebarItem } from "../layout/sidebar-item"; import { SidebarItem } from "../layout/sidebar-item";
import type { TabLayoutRoute } from "../layout/tab-layout"; import type { TabLayoutRoute } from "../layout/tab-layout";
import { TabRoutesSidebarItems } from "../layout/tab-routes-sidebar-items"; import { renderTabRoutesSidebarItems } from "../layout/tab-routes-sidebar-items";
import storageRouteTabsInjectable from "./route-tabs.injectable"; import storageRouteTabsInjectable from "./route-tabs.injectable";
export interface StorageSidebarItemProps {} export interface StorageSidebarItemProps {}
@ -32,7 +32,7 @@ const NonInjectedStorageSidebarItem = observer(({ routes }: Dependencies & Stora
url={storageURL()} url={storageURL()}
icon={<Icon svg="storage"/>} icon={<Icon svg="storage"/>}
> >
<TabRoutesSidebarItems routes={tabRoutes} /> {renderTabRoutesSidebarItems(tabRoutes)}
</SidebarItem> </SidebarItem>
); );
}); });

View File

@ -11,7 +11,7 @@ import { isActiveRoute } from "../../navigation";
import { Icon } from "../icon"; import { Icon } from "../icon";
import { SidebarItem } from "../layout/sidebar-item"; import { SidebarItem } from "../layout/sidebar-item";
import type { TabLayoutRoute } from "../layout/tab-layout"; import type { TabLayoutRoute } from "../layout/tab-layout";
import { TabRoutesSidebarItems } from "../layout/tab-routes-sidebar-items"; import { renderTabRoutesSidebarItems } from "../layout/tab-routes-sidebar-items";
import userManagementRouteTabsInjectable from "./route-tabs.injectable"; import userManagementRouteTabsInjectable from "./route-tabs.injectable";
export interface UserManagementSidebarItemProps {} export interface UserManagementSidebarItemProps {}
@ -32,7 +32,7 @@ const NonInjectedUserManagementSidebarItem = observer(({ routes }: Dependencies
url={usersManagementURL()} url={usersManagementURL()}
icon={<Icon material="security"/>} icon={<Icon material="security"/>}
> >
<TabRoutesSidebarItems routes={tabRoutes} /> {renderTabRoutesSidebarItems(tabRoutes)}
</SidebarItem> </SidebarItem>
); );
}); });

View File

@ -11,7 +11,7 @@ import { isActiveRoute } from "../../navigation";
import { Icon } from "../icon"; import { Icon } from "../icon";
import { SidebarItem } from "../layout/sidebar-item"; import { SidebarItem } from "../layout/sidebar-item";
import type { TabLayoutRoute } from "../layout/tab-layout"; import type { TabLayoutRoute } from "../layout/tab-layout";
import { TabRoutesSidebarItems } from "../layout/tab-routes-sidebar-items"; import { renderTabRoutesSidebarItems } from "../layout/tab-routes-sidebar-items";
import workloadsRouteTabsInjectable from "./route-tabs.injectable"; import workloadsRouteTabsInjectable from "./route-tabs.injectable";
export interface WorkloadSidebarItemProps {} export interface WorkloadSidebarItemProps {}
@ -32,7 +32,7 @@ const NonInjectedWorkloadsSidebarItem = observer(({ routes }: Dependencies & Wor
url={workloadsURL()} url={workloadsURL()}
icon={<Icon svg="workloads"/>} icon={<Icon svg="workloads"/>}
> >
<TabRoutesSidebarItems routes={tabRoutes} /> {renderTabRoutesSidebarItems(tabRoutes)}
</SidebarItem> </SidebarItem>
); );
}); });

View File

@ -63,7 +63,7 @@ class NonInjectedSidebarItem extends React.Component<SidebarItemProps & Dependen
} }
@computed get isExpandable(): boolean { @computed get isExpandable(): boolean {
return Boolean(this.props.children); return React.Children.count(this.props.children) > 0;
} }
toggleExpand = () => { toggleExpand = () => {

View File

@ -14,7 +14,7 @@ import { ClusterPageMenuRegistration, ClusterPageMenuRegistry, ClusterPageRegist
import { SidebarItem } from "./sidebar-item"; import { SidebarItem } from "./sidebar-item";
import { catalogEntityRegistry } from "../../api/catalog-entity-registry"; import { catalogEntityRegistry } from "../../api/catalog-entity-registry";
import { SidebarCluster } from "./sidebar-cluster"; import { SidebarCluster } from "./sidebar-cluster";
import { TabRoutesSidebarItems } from "./tab-routes-sidebar-items"; import { renderTabRoutesSidebarItems } from "./tab-routes-sidebar-items";
import { ConfigSidebarItem } from "../+config/sidebar-item"; import { ConfigSidebarItem } from "../+config/sidebar-item";
import { ClusterSidebarItem } from "../+cluster/sidebar-item"; import { ClusterSidebarItem } from "../+cluster/sidebar-item";
import { NodesSidebarItem } from "../+nodes/sidebar-item"; import { NodesSidebarItem } from "../+nodes/sidebar-item";
@ -104,7 +104,7 @@ export class Sidebar extends React.Component<SidebarProps> {
text={menuItem.title} text={menuItem.title}
icon={<menuItem.components.Icon/>} icon={<menuItem.components.Icon/>}
> >
<TabRoutesSidebarItems routes={tabRoutes} /> {renderTabRoutesSidebarItems(tabRoutes)}
</SidebarItem> </SidebarItem>
); );
}); });

View File

@ -8,10 +8,6 @@ import { isActiveRoute } from "../../navigation";
import { SidebarItem } from "./sidebar-item"; import { SidebarItem } from "./sidebar-item";
import type { TabLayoutRoute } from "./tab-layout"; import type { TabLayoutRoute } from "./tab-layout";
export interface SidebarTreeProps {
routes: TabLayoutRoute[];
}
function withId(src: TabLayoutRoute) { function withId(src: TabLayoutRoute) {
return { return {
...src, ...src,
@ -19,19 +15,23 @@ function withId(src: TabLayoutRoute) {
}; };
} }
export const TabRoutesSidebarItems = ({ routes }: SidebarTreeProps) => ( /**
<> * Renders a sidebar item for each route
{ *
routes * NOTE: this cannot be a component because then the `<SidebarItem>.isExandable`
.map(withId) * check will always return true because a component that renders to `null` is
.map(({ title, routePath, url = routePath, exact = true, id }) => ( * still a present child to the parent `<SidebarItem>`
<SidebarItem */
key={id} export const renderTabRoutesSidebarItems = (routes: TabLayoutRoute[]) => (
id={id} routes
url={url} .map(withId)
text={title} .map(({ title, routePath, url = routePath, exact = true, id }) => (
isActive={isActiveRoute({ path: routePath, exact })} /> <SidebarItem
)) key={id}
} id={id}
</> url={url}
text={title}
isActive={isActiveRoute({ path: routePath, exact })}
/>
))
); );