/* * SPDX-License-Identifier: Apache-2.0 * * The OpenSearch Contributors require contributions made to * this file be licensed under the Apache-2.0 license or a * compatible open source license. * * Modifications Copyright OpenSearch Contributors. See * GitHub history for details. */ import React, { useState } from 'react'; import { EuiOverlayMask, EuiCallOut, EuiText, EuiFieldText, EuiButton, EuiButtonEmpty, EuiFlexGroup, EuiModal, EuiModalHeader, EuiModalFooter, EuiModalBody, EuiModalHeaderTitle, EuiLoadingSpinner, } from '@elastic/eui'; import { get, isEmpty } from 'lodash'; import { Monitor } from '../../../../models/interfaces'; import { DetectorListItem } from '../../../../models/interfaces'; import { Listener } from '../../../../utils/utils'; import { EuiSpacer } from '@elastic/eui'; import { DETECTOR_STATE } from '../../../../../server/utils/constants'; import { getNamesAndMonitorsAndStatesGrid, containsEnabledDetectors, } from './utils/helpers'; interface ConfirmDeleteDetectorsModalProps { detectors: DetectorListItem[]; monitors: { [key: string]: Monitor }; onHide(): void; onConfirm(): void; onStopDetectors(listener?: Listener): void; onDeleteDetectors(): void; isListLoading: boolean; } export const ConfirmDeleteDetectorsModal = ( props: ConfirmDeleteDetectorsModalProps ) => { const containsMonitors = !isEmpty(props.monitors); const containsEnabled = containsEnabledDetectors(props.detectors); const detectorsToDisplay = containsEnabled ? props.detectors .sort((detector) => detector.curState === DETECTOR_STATE.INIT || detector.curState === DETECTOR_STATE.RUNNING ? -1 : 1 ) .sort((detector) => (get(props.monitors, `${detector.id}`) ? -1 : 1)) : containsMonitors ? props.detectors.sort((detector) => get(props.monitors, `${detector.id}`) ? -1 : 1 ) : props.detectors; const [deleteTyped, setDeleteTyped] = useState(false); const [isModalLoading, setIsModalLoading] = useState(false); const isLoading = isModalLoading || props.isListLoading; return ( {'Are you sure you want to delete the selected detectors?'}  {containsMonitors ? ( ) : null} {containsMonitors && containsEnabled ? : null} {containsEnabled ? ( ) : null} {containsMonitors || containsEnabled ? : null} The following detectors and feature configurations will be permanently removed. This action is irreversible.
{isLoading ? ( ) : ( getNamesAndMonitorsAndStatesGrid( detectorsToDisplay, props.monitors ) )}

To confirm deletion, type delete in the field.

{ if (e.target.value === 'delete') { setDeleteTyped(true); } else { setDeleteTyped(false); } }} />
{isLoading ? null : ( Cancel )} { setIsModalLoading(true); if (containsEnabled) { const listener: Listener = { onSuccess: () => { props.onDeleteDetectors(); props.onConfirm(); }, onException: props.onConfirm, }; props.onStopDetectors(listener); } else { props.onDeleteDetectors(); props.onConfirm(); } }} > {'Delete detectors'}
); };