import "./entity-settings.scss"; import React from "react"; import { makeObservable, observable } from "mobx"; import { RouteComponentProps } from "react-router"; import { observer } from "mobx-react"; import { PageLayout } from "../layout/page-layout"; import { navigation } from "../../navigation"; import { Tab, Tabs } from "../tabs"; import { CatalogEntity } from "../../api/catalog-entity"; import { catalogEntityRegistry } from "../../api/catalog-entity-registry"; import { entitySettingRegistry } from "../../../extensions/registries"; import { EntitySettingsRouteParams } from "./entity-settings.route"; interface Props extends RouteComponentProps { } @observer export class EntitySettings extends React.Component { constructor(props: Props) { super(props); makeObservable(this); } @observable activeTab: string; get entityId() { return this.props.match.params.entityId; } get entity(): CatalogEntity { return catalogEntityRegistry.getById(this.entityId); } get menuItems() { if (!this.entity) return []; return entitySettingRegistry.getItemsForKind(this.entity.kind, this.entity.apiVersion, this.entity.metadata.source); } async componentDidMount() { const { hash } = navigation.location; this.ensureActiveTab(); document.getElementById(hash.slice(1))?.scrollIntoView(); } onTabChange = (tabId: string) => { this.activeTab = tabId; }; renderNavigation() { return ( <>

{this.entity.metadata.name}

Settings
{this.menuItems.map((setting) => ( ))}
); } ensureActiveTab() { if (!this.activeTab) { this.activeTab = this.menuItems[0]?.id; } } render() { if (!this.entity) { console.error("entity not found", this.entityId); return null; } this.ensureActiveTab(); const activeSetting = this.menuItems.find((setting) => setting.id === this.activeTab); return (

{activeSetting.title}

); } }