From 540be053ae3a7e76f3033cdedf34eb2d077a1178 Mon Sep 17 00:00:00 2001 From: yaacov Date: Thu, 20 Jun 2019 21:30:36 +0300 Subject: [PATCH] Add details --- frontend/packages/console-app/package.json | 1 + .../vm-templates/vm-template-details-page.tsx | 34 +++++++++++ .../vm-templates/vm-template-details.tsx | 61 +++++++++++++++++++ .../vm-templates/vm-template-resource.tsx | 34 +++++++++++ .../components/vm-templates/vm-template.tsx | 21 ++++--- .../packages/kubevirt-plugin/src/plugin.ts | 14 ++++- 6 files changed, 157 insertions(+), 8 deletions(-) create mode 100644 frontend/packages/kubevirt-plugin/src/components/vm-templates/vm-template-details-page.tsx create mode 100644 frontend/packages/kubevirt-plugin/src/components/vm-templates/vm-template-details.tsx create mode 100644 frontend/packages/kubevirt-plugin/src/components/vm-templates/vm-template-resource.tsx diff --git a/frontend/packages/console-app/package.json b/frontend/packages/console-app/package.json index d65fd8fe41c4..6037d3ccf958 100644 --- a/frontend/packages/console-app/package.json +++ b/frontend/packages/console-app/package.json @@ -11,6 +11,7 @@ "@console/dev-console": "0.0.0-fixed", "@console/internal": "0.0.0-fixed", "@console/plugin-sdk": "0.0.0-fixed", + "@console/kubevirt-plugin": "0.0.0-fixed", "@console/shared": "0.0.0-fixed" }, "consolePlugin": { diff --git a/frontend/packages/kubevirt-plugin/src/components/vm-templates/vm-template-details-page.tsx b/frontend/packages/kubevirt-plugin/src/components/vm-templates/vm-template-details-page.tsx new file mode 100644 index 000000000000..80084fbb772a --- /dev/null +++ b/frontend/packages/kubevirt-plugin/src/components/vm-templates/vm-template-details-page.tsx @@ -0,0 +1,34 @@ +import * as React from 'react'; + +import { navFactory } from '@console/internal/components/utils'; + +import { DetailsPage } from '@console/internal/components/factory'; +import { K8sResourceKindReference } from '@console/internal/module/k8s'; + +import { TemplateModel } from '@console/internal/models'; +import { VmTemplateDetailsFirehose } from './vm-template-details'; + +export const VmTemplateDetailsPage = (props: VmTemplateDetailsPageProps) => { + const pages = [navFactory.details(VmTemplateDetailsFirehose), navFactory.editYaml()]; + + const menuActions = undefined; // TODO(mlibra): menuActions + + return ( + + ); +}; + +type VmTemplateDetailsPageProps = { + name: string; + namespace: string; + kind: K8sResourceKindReference; + match: any; +}; diff --git a/frontend/packages/kubevirt-plugin/src/components/vm-templates/vm-template-details.tsx b/frontend/packages/kubevirt-plugin/src/components/vm-templates/vm-template-details.tsx new file mode 100644 index 000000000000..643fb6c24491 --- /dev/null +++ b/frontend/packages/kubevirt-plugin/src/components/vm-templates/vm-template-details.tsx @@ -0,0 +1,61 @@ +import * as React from 'react'; + +import { getResource } from 'kubevirt-web-ui-components'; + +import { + Firehose, + StatusBox, + ScrollToTopOnMount, + SectionHeading, +} from '@console/internal/components/utils'; + +import { TemplateKind } from '@console/internal/module/k8s'; +import { VmTemplateResourceSummary } from './vm-template-resource'; +import { TemplateModel } from '../../../../../public/models/index'; + +export const VmTemplateDetailsFirehose = ({ obj: template }: { obj: TemplateKind }) => { + const { name, namespace } = template.metadata; + + const vmtRes = getResource(TemplateModel, { + name, + namespace, + isList: false, + prop: 'vmt', + optional: true, + }); + + const resources = [vmtRes]; + + return ( +
+ + + +
+ ); +}; + +const VmTemplateDetails = (props: VmTemplateDetailsProps) => { + const { template, ...restProps } = props; + const flatResources = { + template, + }; + + return ( + + +
+ +
+
+ +
+
+
+
+ ); +}; + +type VmTemplateDetailsProps = { + template: TemplateKind; +}; diff --git a/frontend/packages/kubevirt-plugin/src/components/vm-templates/vm-template-resource.tsx b/frontend/packages/kubevirt-plugin/src/components/vm-templates/vm-template-resource.tsx new file mode 100644 index 000000000000..9d0236f168b3 --- /dev/null +++ b/frontend/packages/kubevirt-plugin/src/components/vm-templates/vm-template-resource.tsx @@ -0,0 +1,34 @@ +import * as React from 'react'; + +import { + getVmTemplate, + getTemplateDisplayName, + getOperatingSystemName, + getOperatingSystem, + getDescription, +} from 'kubevirt-web-ui-components'; + +import { ResourceSummary } from '@console/internal/components/utils'; + +import { DASH } from '@console/shared'; +import { TemplateKind } from '@console/internal/module/k8s'; + +export const VmTemplateResourceSummary = ({ template }: VmTemplateResourceSummaryProps) => { + const base = getVmTemplate(template); + const baseLink = base && getTemplateDisplayName(base); // TODO(mlibra): link to a template detail, once implemented + + return ( + +
Description
+
{getDescription(template)}
+
Operating System
+
{getOperatingSystemName(template) || getOperatingSystem(template) || DASH}
+
Template
+
{baseLink || DASH}
+
+ ); +}; + +type VmTemplateResourceSummaryProps = { + template: TemplateKind; +}; diff --git a/frontend/packages/kubevirt-plugin/src/components/vm-templates/vm-template.tsx b/frontend/packages/kubevirt-plugin/src/components/vm-templates/vm-template.tsx index 0fe0a8b9b625..437955258aa8 100644 --- a/frontend/packages/kubevirt-plugin/src/components/vm-templates/vm-template.tsx +++ b/frontend/packages/kubevirt-plugin/src/components/vm-templates/vm-template.tsx @@ -11,9 +11,15 @@ import { } from 'kubevirt-web-ui-components'; import { ListPage, Table, TableRow, TableData } from '@console/internal/components/factory'; -import { Kebab, ResourceLink, ResourceKebab } from '@console/internal/components/utils'; +import { + Kebab, + ResourceLink, + ResourceKebab, + ResourceIcon, +} from '@console/internal/components/utils'; import { getName, getNamespace, DASH } from '@console/shared'; import { TemplateModel } from '@console/internal/models'; +import { Link } from 'react-router-dom'; export const menuActions = Kebab.factory.common; @@ -78,16 +84,17 @@ VmTempleateTableHeader.displayName = 'VmTemplateTableHeader'; const VmTemplateTableRow = ({ obj: template, index, key, style }) => { const os = getTemplateOperatingSystems([template])[0]; + const name = getName(template); + const namespace = getNamespace(template); + const path = `/k8s/ns/${namespace}/vmtemplates/${name}`; return ( - + + + {getName(template)} + = [ { type: 'Page/Route', properties: { + exact: true, path: [`/k8s/ns/:ns/vmtemplates`, '/k8s/all-namespaces/vmtemplates'], loader: () => import( @@ -113,6 +114,17 @@ const plugin: Plugin = [ ).then((m) => m.VirtualMachineTemplatesPage), }, }, + { + type: 'Page/Route', + properties: { + exact: true, + path: `/k8s/ns/:ns/vmtemplates/:name`, + loader: () => + import( + './components/vm-templates/vm-template-details-page' /* webpackChunkName: "kubevirt-virtual-machine-details" */ + ).then((m) => m.VmTemplateDetailsPage), + }, + }, ]; export default plugin;