import * as React from 'react'; import { Alert, AlertVariant } from '@patternfly/react-core/dist/dynamic/components/Alert'; import { Button, ButtonVariant } from '@patternfly/react-core/dist/dynamic/components/Button'; import { Modal, ModalProps, ModalVariant } from '@patternfly/react-core/dist/dynamic/components/Modal'; import { Spinner } from '@patternfly/react-core/dist/dynamic/components/Spinner'; export interface ActionModalError { title: string; description: React.ReactNode | string; } export interface ActionModalProps extends Pick { isOpen: boolean; isPerformingAction: boolean; title: string; content: React.ReactNode | string; error?: ActionModalError; onClose: (actionPerformed: boolean) => void; onAction: () => boolean | Promise; actionButtonTitle: string; actionButtonVariant: ButtonVariant; actionButtonDisabled?: boolean; actionButtonHidden?: boolean; cancelButtonTitle?: string; cancelButtonVariant?: ButtonVariant; } export const ActionModal: React.FunctionComponent = (props) => { const close = React.useCallback(() => { const onClose = props.onClose; onClose(false); }, [ props.onClose ]); const actionCallback = React.useCallback(async () => { const onClose = props.onClose; const onAction = props.onAction; const actionPerformed = await onAction(); if (actionPerformed) { onClose(true); } }, [ props.onAction, props.onClose ]); const actions = React.useMemo(() => { const actionContent: Array = []; if (!props.actionButtonHidden) { actionContent.push(); } actionContent.push(); return actionContent; }, [ props.actionButtonVariant, props.actionButtonTitle, props.actionButtonDisabled, props.actionButtonHidden, props.isPerformingAction, props.cancelButtonTitle, props.cancelButtonVariant, close, actionCallback ]); return ( { props.error && ( <> { props.error.description }
) } { props.content }
); };