UNPKG

@kinvolk/headlamp-plugin

Version:

The needed infrastructure for building Headlamp plugins.

41 lines (40 loc) 1.76 kB
import { jsx as _jsx, Fragment as _Fragment } 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 React, { isValidElement, useMemo } from 'react'; import { HeadlampEventType, useEventCallback } from '../../redux/headlampEventSlice'; import { useTypedSelector } from '../../redux/reducers/reducers'; import ErrorBoundary from '../common/ErrorBoundary'; /** * View components registered by plugins in the different Details views. * * @see registerDetailsViewSection */ export default function DetailsViewSection(props) { const { resource } = props; const detailViews = useTypedSelector(state => state.detailsViewSection.detailViews); const dispatchHeadlampEvent = useEventCallback(HeadlampEventType.DETAILS_VIEW); React.useEffect(() => { dispatchHeadlampEvent({ resource }); }, [resource]); const memoizedComponents = useMemo(() => detailViews.map((Component, index) => { if (!resource || !Component) { return null; } return _jsx(ErrorBoundary, { children: isValidElement(Component) && Component }, index); }), [detailViews, resource]); return _jsx(_Fragment, { children: memoizedComponents }); }