import React, { useState, useRef, useEffect } from 'react' import { __ } from '@wordpress/i18n' import { Button } from '../../common/Button' import { DuplicateActionSelector, DragDropUploadArea, SelectedFilesList, SnippetSelectionTable, ImportResultDisplay } from './components' import { ImportCard } from '../shared' import { useFileSelection, useSnippetSelection, useImportWorkflow } from './hooks' type DuplicateAction = 'ignore' | 'replace' | 'skip' type Step = 'upload' | 'select' export const FileUploadForm: React.FC = () => { const [duplicateAction, setDuplicateAction] = useState('ignore') const [currentStep, setCurrentStep] = useState('upload') const selectSectionRef = useRef(null) const fileSelection = useFileSelection() const importWorkflow = useImportWorkflow() const snippetSelection = useSnippetSelection(importWorkflow.availableSnippets) useEffect(() => { if (currentStep === 'select' && selectSectionRef.current) { selectSectionRef.current.scrollIntoView({ behavior: 'smooth', block: 'start' }) } }, [currentStep]) const handleFileSelect = (files: FileList | null) => { fileSelection.handleFileSelect(files) importWorkflow.clearUploadResult() } const handleParseFiles = async () => { if (!fileSelection.selectedFiles) return const success = await importWorkflow.parseFiles(fileSelection.selectedFiles) if (success) { snippetSelection.clearSelection() setCurrentStep('select') } } const handleImportSelected = async () => { const snippetsToImport = snippetSelection.getSelectedSnippets() await importWorkflow.importSnippets(snippetsToImport, duplicateAction) } const handleBackToUpload = () => { setCurrentStep('upload') fileSelection.clearFiles() snippetSelection.clearSelection() importWorkflow.resetWorkflow() } const isUploadDisabled = !fileSelection.selectedFiles || fileSelection.selectedFiles.length === 0 || importWorkflow.isUploading const isImportDisabled = snippetSelection.selectedSnippets.size === 0 || importWorkflow.isImporting return (

{__('Upload one or more Code Snippets export files and the snippets will be imported.', 'code-snippets')}

{__('Afterward, you will need to visit the ', 'code-snippets')} {__('All Snippets', 'code-snippets')} {__(' page to activate the imported snippets.', 'code-snippets')}

{currentStep === 'upload' && ( <> {(!importWorkflow.uploadResult || !importWorkflow.uploadResult.success) && ( <>

{__('Choose Files', 'code-snippets')}

{__('Choose one or more Code Snippets (.xml or .json) files to parse and preview.', 'code-snippets')}

{fileSelection.selectedFiles && fileSelection.selectedFiles.length > 0 && ( )}
)} )} {currentStep === 'select' && importWorkflow.availableSnippets.length > 0 && !importWorkflow.uploadResult?.success && (

{__('Available Snippets', 'code-snippets')} ({importWorkflow.availableSnippets.length})

{__('Select the snippets you want to import:', 'code-snippets')}

)} {importWorkflow.uploadResult && ( )}
) }