UNPKG

@kinvolk/headlamp-plugin

Version:

The needed infrastructure for building Headlamp plugins.

77 lines (76 loc) 3.84 kB
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } 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 from 'react'; import { useTranslation } from 'react-i18next'; import { useDispatch } from 'react-redux'; import { useLocation } from 'react-router-dom'; import { clusterAction } from '../../../redux/clusterActionSlice'; import { EventStatus, HeadlampEventType, useEventCallback, } from '../../../redux/headlampEventSlice'; import ActionButton from '../ActionButton'; import ConfirmDialog from '../ConfirmDialog'; function RestartMultipleButtonDescription(props) { const { t } = useTranslation(['translation']); return (_jsxs(_Fragment, { children: [t('Are you sure you want to restart the following items?'), _jsx("ul", { children: props.items.map(item => (_jsx("li", { children: item.metadata.name }, item.metadata.uid))) })] })); } export default function RestartMultipleButton(props) { const dispatch = useDispatch(); const { items, buttonStyle, afterConfirm } = props; const [openDialog, setOpenDialog] = React.useState(false); const { t } = useTranslation(['translation']); const location = useLocation(); const dispatchRestartEvent = useEventCallback(HeadlampEventType.RESTART_RESOURCES); async function restartResources() { return Promise.all(items.map(item => { const patchData = { spec: { template: { metadata: { annotations: { 'kubectl.kubernetes.io/restartedAt': new Date().toISOString(), }, }, }, }, }; return item.patch(patchData); })); } const handleRestart = () => { const itemsLength = items.length; dispatch(clusterAction(() => restartResources(), { startMessage: t('Restarting {{ itemsLength }} items…', { itemsLength }), cancelledMessage: t('Cancelled restarting {{ itemsLength }} items.', { itemsLength }), successMessage: t('Restarted {{ itemsLength }} items.', { itemsLength }), errorMessage: t('Failed to restart {{ itemsLength }} items.', { itemsLength }), cancelUrl: location.pathname, startUrl: location.pathname, errorUrl: location.pathname, })); }; return (_jsxs(_Fragment, { children: [_jsx(ActionButton, { description: t('translation|Restart items'), buttonStyle: buttonStyle, onClick: () => { setOpenDialog(true); }, icon: "mdi:restart" }), openDialog && (_jsx(ConfirmDialog, { open: openDialog, title: t('translation|Restart items'), description: _jsx(RestartMultipleButtonDescription, { items: items }), handleClose: () => setOpenDialog(false), onConfirm: () => { handleRestart(); dispatchRestartEvent({ resources: items, status: EventStatus.CONFIRMED, }); if (afterConfirm) { afterConfirm(); } }, cancelLabel: t('Cancel'), confirmLabel: t('Restart') }))] })); }