Files
twenty_crm/packages/twenty-front/src/modules/action-menu/actions/components/ActionModal.tsx
Raphaël Bosi ace515eea7 Fix workflow with manual triggers and no selection not appearing in the command menu (#11544)
Fix workflow with manual triggers and no selection not appearing in the
command menu

---------

Co-authored-by: Charles Bochet <charles@twenty.com>
2025-04-14 11:03:29 +02:00

67 lines
1.7 KiB
TypeScript

import { ReactNode, useCallback, useContext, useState } from 'react';
import { createPortal } from 'react-dom';
import { ActionDisplay } from '@/action-menu/actions/display/components/ActionDisplay';
import { ActionConfigContext } from '@/action-menu/contexts/ActionConfigContext';
import { useCloseActionMenu } from '@/action-menu/hooks/useCloseActionMenu';
import { ConfirmationModal } from '@/ui/layout/modal/components/ConfirmationModal';
import { ButtonAccent } from 'twenty-ui/input';
export type ActionModalProps = {
title: string;
subtitle: ReactNode;
onConfirmClick: () => void;
confirmButtonText?: string;
confirmButtonAccent?: ButtonAccent;
isLoading?: boolean;
};
export const ActionModal = ({
title,
subtitle,
onConfirmClick,
confirmButtonText = 'Confirm',
confirmButtonAccent = 'danger',
isLoading = false,
}: ActionModalProps) => {
const [isOpen, setIsOpen] = useState(false);
const handleOpen = useCallback(() => {
setIsOpen(true);
}, []);
const { closeActionMenu } = useCloseActionMenu();
const handleConfirmClick = () => {
closeActionMenu();
onConfirmClick();
setIsOpen(false);
};
const actionConfig = useContext(ActionConfigContext);
if (!actionConfig) {
return null;
}
return (
<>
<ActionDisplay onClick={handleOpen} />
{isOpen &&
createPortal(
<ConfirmationModal
isOpen={isOpen}
setIsOpen={setIsOpen}
title={title}
subtitle={subtitle}
onConfirmClick={handleConfirmClick}
confirmButtonText={confirmButtonText}
confirmButtonAccent={confirmButtonAccent}
loading={isLoading}
/>,
document.body,
)}
</>
);
};