UNPKG

@kinvolk/headlamp-plugin

Version:

The needed infrastructure for building Headlamp plugins.

153 lines (152 loc) 5.72 kB
import { jsx as _jsx } from "react/jsx-runtime"; /* * Copyright 2025 The Kubernetes Authors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ import { useTranslation } from 'react-i18next'; import { useParams } from 'react-router-dom'; import HTTPRoute from '../../lib/k8s/httpRoute'; import EmptyContent from '../common/EmptyContent'; import InnerTable from '../common/InnerTable'; import LabelListItem from '../common/LabelListItem'; import Link from '../common/Link'; import NameValueTable from '../common/NameValueTable'; import { DetailsGrid } from '../common/Resource'; import SectionBox from '../common/SectionBox'; import { GatewayParentRefSection } from './utils'; function HTTPRouteRuleTable(props) { const { rule, namespace } = props; const { t } = useTranslation(['glossary', 'translation']); const mainRows = [ { name: rule.name, withHighlightStyle: true, hide: rule.name === undefined, }, { name: t('translation|Matches'), value: _jsx(RuleMatches, { matches: rule?.matches || [] }), valueFullRow: true, hide: (rule.matches?.length || 0) === 0, }, { name: t('translation|BackendRefs'), value: _jsx(RuleBackendRefs, { backendRefs: rule?.backendRefs || [], namespace: namespace }), valueFullRow: true, hide: (rule.backendRefs?.length || 0) === 0, }, { name: t('translation|Filters'), value: _jsx(RuleFilters, { filters: rule?.filters || [] }), valueFullRow: true, hide: (rule.filters?.length || 0) === 0, }, ]; return _jsx(NameValueTable, { rows: mainRows }); } export function RuleMatches(props) { const { matches } = props; const { t } = useTranslation(); if (!matches) { return null; } return (_jsx(InnerTable, { columns: [ { label: t('translation|Path Type'), getter: (data) => data.path?.type, }, { label: t('translation|Path'), getter: (data) => data.path.value, }, { label: t('translation|Headers'), getter: (data) => data.headers?.length, }, { label: t('translation|Query Parameters'), getter: (data) => data.queryParams?.length, }, { label: t('translation|Method'), getter: (data) => data.method, }, ], data: matches })); } export function RuleFilters(props) { const { filters } = props; const { t } = useTranslation(); if (!filters) { return null; } return (_jsx(InnerTable, { columns: [ { label: t('translation|Filter Type'), getter: (data) => data.type, }, ], data: filters })); } export function RuleBackendRefs(props) { const { backendRefs, namespace } = props; const { t } = useTranslation(); if (!backendRefs) { return null; } return (_jsx(InnerTable, { columns: [ { label: t('translation|Name'), getter: (data) => (_jsx(Link, { routeName: data.kind?.toLowerCase(), params: { namespace: data?.namespace ?? namespace, name: data.name }, children: data.name })), }, { label: t('translation|Namespace'), getter: (data) => data.namespace, }, { label: t('translation|Kind'), getter: (data) => data.kind, }, { label: t('translation|Group'), getter: (data) => data.group, }, { label: t('translation|Port'), getter: (data) => data.port, }, { label: t('translation|Weight'), getter: (data) => data.weight, }, ], data: backendRefs })); } export default function HTTPRouteDetails(props) { const params = useParams(); const { name = params.name, namespace = params.namespace } = props; const { t } = useTranslation(['glossary', 'translation']); return (_jsx(DetailsGrid, { resourceType: HTTPRoute, name: name, namespace: namespace, extraInfo: httpRoute => httpRoute && [ { name: 'Hostnames', value: _jsx(LabelListItem, { labels: httpRoute.hostnames.map(tls => `${tls}`) }), }, ], withEvents: true, extraSections: (item) => item && [ { id: 'headlamp.httproute-rules', section: item && (_jsx(SectionBox, { title: t('Rules'), children: item.rules.length === 0 ? (_jsx(EmptyContent, { children: t('No data') })) : (item.rules.map((rule, index) => (_jsx(HTTPRouteRuleTable, { rule: rule, namespace: namespace }, index)))) })), }, { id: 'headlamp.httproute-parentrefs', section: _jsx(GatewayParentRefSection, { parentRefs: item?.parentRefs || [] }), }, ] })); }