'use client' import type { FolderEntry } from '@/lib/client-types' import { useSecret } from '@/hooks/useSecret' import { useFolderEntries } from '@/hooks/useFolderEntries' import { useUploadOrchestrator } from '@/hooks/useUploadOrchestrator' import SecretInput from './upload/SecretInput' import FolderDropzone from './upload/FolderDropzone' import FolderCard from './upload/FolderCard' import ActionButtons from './upload/ActionButtons' import OverwriteConfirmModal from './upload/OverwriteConfirmModal' import NoChangesModal from './upload/NoChangesModal' import DriveErrorModal from './upload/DriveErrorModal' export default function UploadZone() { const { secret, secretError, secretVisible, isSecretEmpty, setSecretError, handleSecretChange, toggleSecretVisible, } = useSecret() const { entries, setEntries, updateEntry, removeEntry, resetEntries, allDone, hasErrors, } = useFolderEntries() const { isUploading, isChecking, isResolvingDriveError, globalError, setGlobalError, overwriteConfirm, setOverwriteConfirm, noChangesFolder, setNoChangesFolder, driveError, handleUpload, handleOverwriteCancel, handleDriveContinue, handleDriveCancel, handleCancel, handleReset, proceedUpload, } = useUploadOrchestrator({ secret, setSecretError, entries, updateEntry, resetEntries, }) const handleFolderSelected = (entry: FolderEntry) => { setGlobalError(null) setEntries([entry]) } const handleToggleViewer = (index: number) => { const entry = entries[index] if (entry?.modelUrl) { updateEntry(index, { viewerOpen: !entry.viewerOpen }) } } const hasPendingOrErrors = entries.some((f) => f.status === 'pending' || f.status === 'error') return (
{entries.length === 0 && (

Deposez un dossier complet contenant votre modele 3D nomme {' '}model.glb {' '}ainsi que toutes les textures necessaires. {' '}Les textures peuvent etre en {' '}.png, {' '}.jpg {' '}ou .webp. {' '}Utilisez un nom simple si la texture s'applique au modele entier, et un nom detaille si elle correspond a une partie precise du modele, {' '}par exemple color_porte.jpg, {' '}roughness_tuyaux.png, {' '}normal_dashboard.webp {' '}ou opacity_fenetre.png

)} {entries.length === 0 && (
)} {globalError && (

{globalError}

)} {entries.length > 0 && (
{entries.map((entry, i) => ( ))}
)} {overwriteConfirm && ( )} {noChangesFolder && ( { setNoChangesFolder(null) handleReset() }} onModify={() => setNoChangesFolder(null)} /> )} {driveError && ( )}
) }