/** * Copyright (c) 2021 OpenLens Authors * * Permission is hereby granted, free of charge, to any person obtaining a copy of * this software and associated documentation files (the "Software"), to deal in * the Software without restriction, including without limitation the rights to * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of * the Software, and to permit persons to whom the Software is furnished to do so, * subject to the following conditions: * * The above copyright notice and this permission notice shall be included in all * copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ import "./catalog-entity-details.scss"; import React, { Component } from "react"; import { observer } from "mobx-react"; import { Drawer, DrawerItem, DrawerItemLabels } from "../drawer"; import { CatalogEntity, catalogEntityRunContext } from "../../api/catalog-entity"; import type { CatalogCategory } from "../../../common/catalog"; import { Icon } from "../icon"; import { KubeObject } from "../../api/kube-object"; import { CatalogEntityDrawerMenu } from "./catalog-entity-drawer-menu"; import { CatalogEntityDetailRegistry } from "../../../extensions/registries"; import { HotbarIcon } from "../hotbar/hotbar-icon"; interface Props { entity: CatalogEntity; hideDetails(): void; } @observer export class CatalogEntityDetails extends Component { private abortController?: AbortController; constructor(props: Props) { super(props); } componentWillUnmount() { this.abortController?.abort(); } categoryIcon(category: CatalogCategory) { if (category.metadata.icon.includes("; } else { return ; } } openEntity() { this.props.entity.onRun(catalogEntityRunContext); } renderContent() { const { entity } = this.props; const labels = KubeObject.stringifyLabels(entity.metadata.labels); const detailItems = CatalogEntityDetailRegistry.getInstance().getItemsForKind(entity.kind, entity.apiVersion); const details = detailItems.map((item, index) => { return ; }); const showDetails = detailItems.find((item) => item.priority > 999) === undefined; return ( <> {showDetails && (
this.openEntity()} size={128} />
Click to open
{entity.metadata.name} {entity.kind} {entity.metadata.source}
)}
{details}
); } render() { const { entity, hideDetails } = this.props; const title = `${entity.kind}: ${entity.metadata.name}`; return ( } onClose={hideDetails} > {this.renderContent()} ); } }