import { Box, Container, Input, Text, useToast } from '@chakra-ui/react'; import { __, sprintf } from '@wordpress/i18n'; import React, { useRef, useState } from 'react'; import { LuFileJson } from 'react-icons/lu'; interface Props { handleFileUpload: any; fileType?: string; } const DNDJson: React.FC = ({ handleFileUpload, fileType = 'application/json', }) => { const [fileDNDInProgress, setFileDNDInProgress] = useState(false); const fileInputRef = useRef(null); const toast = useToast(); const handleFileOpenClick = () => { if (fileInputRef.current) { fileInputRef.current.click(); } }; const handleFileChange = (e: React.ChangeEvent) => { e.preventDefault(); if (e.target.files) { const selectedFile = e.target.files[0]; // Extract file type description from MIME type (e.g., "JSON" from "application/json") const fileTypeDescription = fileType.split('/').pop()?.toUpperCase(); if (!selectedFile.size) { return toast({ title: __('Selected file is empty', 'learning-management-system'), status: 'error', isClosable: true, }); } if (selectedFile.type !== fileType) { return toast({ title: sprintf( // translators: %s: required file type, e.g. JSON. __('Selected file must only be %s', 'learning-management-system'), fileTypeDescription, ), status: 'error', isClosable: true, }); } handleFileUpload(selectedFile); setFileDNDInProgress(false); } }; const handleDragStart = (e: React.DragEvent) => { e.dataTransfer.setData('text/plain', ''); }; const handleDragOver = (e: React.DragEvent) => { e.preventDefault(); setFileDNDInProgress(true); }; const handleDragLeave = (e: React.DragEvent) => { e.preventDefault(); setFileDNDInProgress(false); }; const handleDrop = (e: React.DragEvent) => { e.preventDefault(); const selectedFile = e.dataTransfer.files[0]; // Extract file type description from MIME type const fileTypeDescription = fileType.split('/').pop()?.toUpperCase(); if (!selectedFile.size) { setFileDNDInProgress(false); return toast({ title: __('Selected file is empty', 'learning-management-system'), status: 'error', isClosable: true, }); } if (selectedFile.type !== fileType) { setFileDNDInProgress(false); return toast({ title: sprintf( // translators: %s: required file type, e.g. JSON. __('Selected file must only be %s', 'learning-management-system'), fileTypeDescription, ), status: 'error', isClosable: true, }); } handleFileUpload(selectedFile); setFileDNDInProgress(false); }; return ( {__( 'Click / Drag & Drop Your File Here', 'learning-management-system', )} ); }; export default DNDJson;