/** * This component is a template for a modal dialog that wraps the application style */ import React, { ReactNode, SyntheticEvent } from 'react'; import Modal from 'react-modal'; import { useTranslation } from 'react-i18next'; import { Loader } from './loader'; import CustomAssetAPI from '../api/custom-asset'; import { CustomAssetName } from '../models/custom-asset'; import { FabButton } from './fab-button'; Modal.setAppElement('body'); export enum ModalSize { small = 'sm', medium = 'md', large = 'lg' } interface FabModalProps { title: string, isOpen: boolean, toggleModal: () => void, confirmButton?: ReactNode, closeButton?: boolean, className?: string, width?: ModalSize, customFooter?: ReactNode, onConfirm?: (event: SyntheticEvent) => void, preventConfirm?: boolean } const blackLogoFile = CustomAssetAPI.get(CustomAssetName.LogoBlackFile); export const FabModal: React.FC = ({ title, isOpen, toggleModal, children, confirmButton, className, width = 'sm', closeButton, customFooter, onConfirm, preventConfirm }) => { const { t } = useTranslation('shared'); const blackLogo = blackLogoFile.read(); /** * Check if the confirm button should be present */ const hasConfirmButton = (): boolean => { return confirmButton !== undefined; } /** * Should we display the close button? */ const hasCloseButton = (): boolean => { return closeButton; } /** * Check if there's a custom footer */ const hasCustomFooter = (): boolean => { return customFooter !== undefined; } return (
{blackLogo.custom_asset_file_attributes.attachment}

{ title }

{children}
{hasCloseButton() &&{t('app.shared.buttons.close')}} {hasConfirmButton() && {confirmButton}} {hasCustomFooter() && customFooter}
); }