import { forwardRef, useState, useEffect, type FormEvent } from 'react' import { Dialog, Button, Input, FormItem } from '@/components/ui' import type { FileItem } from '@/types/fileManagement' import { useLocalization } from '@/utils/hooks/useLocalization' // Create Folder Modal export interface CreateFolderModalProps { isOpen: boolean onClose: () => void onCreate: (name: string) => Promise loading?: boolean currentFolderId?: string } export const CreateFolderModal = forwardRef( (props, ref) => { const { isOpen, onClose, onCreate, loading = false } = props const [folderName, setFolderName] = useState('') const [error, setError] = useState('') const { translate } = useLocalization() const handleSubmit = async (e: FormEvent) => { e.preventDefault() if (!folderName.trim()) { setError('Folder name is required') return } try { await onCreate(folderName.trim()) setFolderName('') setError('') onClose() } catch { setError('Failed to create folder') } } const handleClose = () => { setFolderName('') setError('') onClose() } return (
setFolderName(e.target.value)} />
) }, ) CreateFolderModal.displayName = 'CreateFolderModal' // Rename Item Modal export interface RenameItemModalProps { isOpen: boolean onClose: () => void onRename: (newName: string) => Promise item?: FileItem loading?: boolean } export const RenameItemModal = forwardRef((props, ref) => { const { isOpen, onClose, onRename, item, loading = false } = props const [newName, setNewName] = useState('') const [error, setError] = useState('') const { translate } = useLocalization() // Update input when item changes useEffect(() => { if (item) { setNewName(item.name) } }, [item]) const handleSubmit = async (e: FormEvent) => { e.preventDefault() if (!newName.trim()) { setError(`${item?.type === 'folder' ? 'Folder' : 'File'} name is required`) return } if (newName.trim() === item?.name) { onClose() return } try { await onRename(newName.trim()) setError('') onClose() } catch { setError(`Failed to rename ${item?.type}`) } } const handleClose = () => { setNewName('') setError('') onClose() } if (!item) return null return (

{translate(`::FileManager.${item.type === 'folder' ? 'RenameFolder' : 'RenameFile'}`)}

setNewName(e.target.value)} />
) }) RenameItemModal.displayName = 'RenameItemModal' // Delete Confirmation Modal export interface DeleteConfirmModalProps { isOpen: boolean onClose: () => void onDelete: () => Promise items: FileItem[] loading?: boolean } export const DeleteConfirmModal = forwardRef( (props, ref) => { const { isOpen, onClose, onDelete, items, loading = false } = props const { translate } = useLocalization() const handleDelete = async () => { try { await onDelete() onClose() } catch { // Error handling is done in parent component } } const folderCount = items.filter((item) => item.type === 'folder').length const fileCount = items.filter((item) => item.type === 'file').length return (

{translate('::FileManager.DeleteConfirmationTitle')}

{translate('::FileManager.DeleteConfirmationMessage')}

{folderCount > 0 && (

{folderCount} folder{folderCount > 1 ? 's' : ''}

)} {fileCount > 0 && (

{fileCount} file{fileCount > 1 ? 's' : ''}

)}
{items.length === 1 && (

{items[0].name}

)}
) }, ) DeleteConfirmModal.displayName = 'DeleteConfirmModal'