import React, { useCallback, useMemo } from 'react'; import { HasObjectId, IAttachment, IUser } from '@growi/core'; import { UserPicture } from '@growi/ui'; import { Button, Modal, ModalHeader, ModalBody, ModalFooter, } from 'reactstrap'; import { Username } from '../User/Username'; import styles from './DeleteAttachmentModal.module.scss'; const iconByFormat = (format: string): string => { return format.match(/image\/.+/i) ? 'icon-picture' : 'icon-doc'; }; export const AttachmentDeleteModal: React.FC<{ isOpen: boolean, toggle: () => void, attachmentToDelete: IAttachment & HasObjectId, deleting: boolean, deleteError: string, onAttachmentDeleteHandler: (attachment: IAttachment & HasObjectId) => Promise, }> = ({ isOpen, toggle, attachmentToDelete, deleting, deleteError, onAttachmentDeleteHandler, }) => { const onDeleteClicked = useCallback(() => { onAttachmentDeleteHandler(attachmentToDelete); }, [attachmentToDelete, onAttachmentDeleteHandler]); const renderByFileFormat = useCallback((attachment: IAttachment & HasObjectId) => { const content = (attachment.fileFormat.match(/image\/.+/i)) // eslint-disable-next-line @next/next/no-img-element ? deleting image : ''; return (

{attachment.originalName}

uploaded by

{content}
); }, []); const deletingIndicator = useMemo(() => { if (deleting) { return
; } if (deleteError) { return {deleteError}; } return <>; }, [deleting, deleteError]); return ( Delete attachment? {renderByFileFormat(attachmentToDelete)}
{deletingIndicator}
); };