import styled from '@emotion/styled'; import { ChangeEvent, useRef, useState } from 'react'; import { SkeletonLoader } from '@/activities/components/SkeletonLoader'; import { AttachmentList } from '@/activities/files/components/AttachmentList'; import { DropZone } from '@/activities/files/components/DropZone'; import { useAttachments } from '@/activities/files/hooks/useAttachments'; import { useUploadAttachmentFile } from '@/activities/files/hooks/useUploadAttachmentFile'; import { ActivityTargetableObject } from '@/activities/types/ActivityTargetableEntity'; import { useObjectMetadataItem } from '@/object-metadata/hooks/useObjectMetadataItem'; import { useObjectPermissionsForObject } from '@/object-record/hooks/useObjectPermissionsForObject'; import { isDefined } from 'twenty-shared/utils'; import { IconPlus } from 'twenty-ui/display'; import { Button } from 'twenty-ui/input'; import { AnimatedPlaceholder, AnimatedPlaceholderEmptyContainer, AnimatedPlaceholderEmptySubTitle, AnimatedPlaceholderEmptyTextContainer, AnimatedPlaceholderEmptyTitle, EMPTY_PLACEHOLDER_TRANSITION_PROPS, } from 'twenty-ui/layout'; const StyledAttachmentsContainer = styled.div` display: flex; flex: 1; flex-direction: column; height: 100%; overflow: auto; `; const StyledFileInput = styled.input` display: none; `; const StyledDropZoneContainer = styled.div` height: 100%; `; export const Attachments = ({ targetableObject, }: { targetableObject: ActivityTargetableObject; }) => { const inputFileRef = useRef(null); const { attachments, loading } = useAttachments(targetableObject); const { uploadAttachmentFile } = useUploadAttachmentFile(); const [isDraggingFile, setIsDraggingFile] = useState(false); const handleFileChange = (e: ChangeEvent) => { if (isDefined(e.target.files)) onUploadFile?.(e.target.files[0]); }; const handleUploadFileClick = () => { inputFileRef?.current?.click?.(); }; const onUploadFile = async (file: File) => { await uploadAttachmentFile(file, targetableObject); }; const isAttachmentsEmpty = !attachments || attachments.length === 0; const { objectMetadataItem } = useObjectMetadataItem({ objectNameSingular: targetableObject.targetObjectNameSingular, }); const objectPermissions = useObjectPermissionsForObject( objectMetadataItem.id, ); const hasObjectUpdatePermissions = objectPermissions.canUpdateObjectRecords; if (loading && isAttachmentsEmpty) { return ; } if (isAttachmentsEmpty) { return ( setIsDraggingFile(true)}> {isDraggingFile ? ( ) : ( No Files There are no associated files with this record. {!hasObjectUpdatePermissions && ( ) } /> ); };