import React from "react"; import { computed } from "mobx"; import { disposeOnUnmount, observer } from "mobx-react"; import { cssNames } from "../../utils"; import { KubeObject } from "../../api/kube-object"; import { ItemListLayout, ItemListLayoutProps } from "../item-object-list/item-list-layout"; import { KubeObjectStore } from "../../kube-object.store"; import { kubeSelectedUrlParam, showDetails } from "./kube-object-details"; import { kubeWatchApi } from "../../api/kube-watch-api"; import { clusterContext } from "../context"; import { getKubeObjectMenuItems } from "../../../extensions/registries"; export interface KubeObjectListLayoutProps extends ItemListLayoutProps { store: KubeObjectStore; dependentStores?: KubeObjectStore[]; renderItemMenu?: undefined; } @observer export class KubeObjectListLayout extends React.Component { @computed get selectedItem() { return this.props.store.getByPath(kubeSelectedUrlParam.get()); } componentDidMount() { const { store, dependentStores = [] } = this.props; const stores = Array.from(new Set([store, ...dependentStores])); disposeOnUnmount(this, [ kubeWatchApi.subscribeStores(stores, { preload: true, namespaces: clusterContext.contextNamespaces, }) ]); } onDetails = (item: KubeObject) => { if (this.props.onDetails) { this.props.onDetails(item); } else { showDetails(item.selfLink); } }; render() { const { className, store, items = store.contextItems, ...layoutProps } = this.props; return ( getKubeObjectMenuItems(item as KubeObject)} /> ); } }