/* * Copyright © 2024 Hexastack. All rights reserved. * * Licensed under the GNU Affero General Public License v3.0 (AGPLv3) with the following additional terms: * 1. The name "Hexabot" is a trademark of Hexastack. You may not use this name in derivative works without express written permission. * 2. All derivative works must include clear attribution to the original creator and software, Hexastack and Hexabot, in a prominent location (e.g., in the software's "About" section, documentation, and README file). */ import { Box, FormHelperText, FormLabel } from "@mui/material"; import { forwardRef } from "react"; import { useTranslation } from "react-i18next"; import { useGet } from "@/hooks/crud/useGet"; import { useHasPermission } from "@/hooks/useHasPermission"; import { EntityType } from "@/services/types"; import { IAttachment } from "@/types/attachment.types"; import { PermissionAction } from "@/types/permission.types"; import AttachmentThumbnail from "./AttachmentThumbnail"; import AttachmentUploader from "./AttachmentUploader"; type AttachmentThumbnailProps = { label: string; value: string | undefined | null; format: "small" | "basic" | "full"; accept: string; enableMediaLibrary?: boolean; size?: number; onChange?: (id: string | null, mimeType: string | null) => void; error?: boolean; helperText?: string; }; const AttachmentInput = forwardRef( ( { label, value, format, accept, enableMediaLibrary = true, size, onChange, error, helperText, }, ref, ) => { const hasPermission = useHasPermission(); const { t } = useTranslation(); const handleChange = (attachment: IAttachment | null) => { onChange && onChange(attachment?.id || null, attachment?.type || null); }; // Ensure load the attachment if not fetched yet useGet( value || "", { entity: EntityType.ATTACHMENT, }, { enabled: !!value, }, ); return ( {label} {value ? ( ) : hasPermission(EntityType.ATTACHMENT, PermissionAction.CREATE) ? ( ) : ( t("message.no_attachment") )} {helperText ? ( {helperText} ) : null} ); }, ); AttachmentInput.displayName = "AttachmentInput"; export default AttachmentInput;