/** * Copyright (c) OpenLens Authors. All rights reserved. * Licensed under MIT License. See LICENSE in root directory for more information. */ import "./release-details.scss"; import React from "react"; import { Link } from "react-router-dom"; import { DrawerItem, DrawerTitle } from "../../drawer"; import { stopPropagation } from "../../../utils"; import { observer } from "mobx-react"; import { withInjectables } from "@ogre-tools/injectable-react"; import type { ConfigurationInput, MinimalResourceGroup, OnlyUserSuppliedValuesAreShownToggle, ReleaseDetailsModel } from "./release-details-model/release-details-model.injectable"; import releaseDetailsModelInjectable from "./release-details-model/release-details-model.injectable"; import { Button } from "../../button"; import { kebabCase } from "lodash/fp"; import { Badge } from "../../badge"; import { SubTitle } from "../../layout/sub-title"; import { Table, TableCell, TableHead, TableRow } from "../../table"; import { ReactiveDuration } from "../../duration/reactive-duration"; import { Checkbox } from "../../checkbox"; import { MonacoEditor } from "../../monaco-editor"; import { Spinner } from "../../spinner"; import type { TargetHelmRelease } from "./target-helm-release.injectable"; interface ReleaseDetailsContentProps { targetRelease: TargetHelmRelease; } interface Dependencies { model: ReleaseDetailsModel; } const NonInjectedReleaseDetailsContent = observer(({ model }: Dependencies & ReleaseDetailsContentProps) => { const loadingError = model.loadingError.get(); if (loadingError) { return (
Failed to load release: {" "} {loadingError}
); } return (
{model.release.chart}
{`${model.release.getUpdated()} ago (${model.release.updated})`} {model.release.getNs()}
{model.release.getVersion()}
Notes {model.notes &&
{model.notes}
} Resources {model.groupedResources.length > 0 && (
{model.groupedResources.map((group) => ( ))}
)}
); }); export const ReleaseDetailsContent = withInjectables(NonInjectedReleaseDetailsContent, { getPlaceholder: () => , getProps: async (di, props) => ({ model: await di.inject(releaseDetailsModelInjectable, props.targetRelease), ...props, }), }); const ResourceGroup = ({ group: { kind, isNamespaced, resources }, }: { group: MinimalResourceGroup; }) => ( <> Name {isNamespaced && Namespace} Age {resources.map( ({ creationTimestamp, detailsUrl, name, namespace, uid }) => ( {detailsUrl ? {name} : name} {isNamespaced && ( {namespace} )} ), )}
); interface ReleaseValuesProps { configuration: ConfigurationInput; onlyUserSuppliedValuesAreShown: OnlyUserSuppliedValuesAreShownToggle; } const ReleaseValues = observer(({ configuration, onlyUserSuppliedValuesAreShown }: ReleaseValuesProps) => { const configurationIsLoading = configuration.isLoading.get(); return (
Values
); });