'use client' import { useState, useCallback } from 'react' import { Header } from '@/components/layout/Header' import { DropZone } from '@/components/images/DropZone' import { ImageCard } from '@/components/images/ImageCard' import { Lightbox } from '@/components/images/Lightbox' import { GlobalActions } from '@/components/images/GlobalActions' import { MockupModalFromImage } from '@/components/mockup/MockupModalFromImage' import { ErrorBoundary } from '@/components/common/ErrorBoundary' import { useImages } from '@/hooks/useImages' import type { ImageItem } from '@/types/images' function ImagesPageInner() { const { items, addFiles, setFeather, setAlphaThreshold, rotate, uploadOne, uploadAll, removeItem, assignProduct, reprocess, detour } = useImages() const [lightboxItem, setLightboxItem] = useState(null) const [mockupItem, setMockupItem] = useState(null) const openMockup = useCallback((id: string) => { const item = items.find(i => i.id === id) if (item) setMockupItem(item) }, [items]) const [selected, setSelected] = useState>(new Set()) const toggleSelect = useCallback((id: string, value: boolean) => { setSelected(prev => { const next = new Set(prev) if (value) next.add(id) else next.delete(id) return next }) }, []) const selectAll = useCallback(() => { const detourable = items.filter(i => i.status === 'converted' || i.status === 'not_found' || i.status === 'error' ) setSelected(new Set(detourable.map(i => i.id) as string[])) }, [items]) const clearSelection = useCallback(() => setSelected(new Set()), []) const detourSelected = useCallback(() => { Array.from(selected).forEach(id => detour(id)) setSelected(new Set()) }, [selected, detour]) const detourable = items.filter(i => i.status === 'converted' || i.status === 'not_found' || i.status === 'error' ) return ( <>
{items.length > 0 ? `${items.length} image${items.length > 1 ? 's' : ''}` : ''} } />
{items.length > 0 && ( )} {/* Barre de sélection multiple pour détourage par lot */} {detourable.length > 0 && (
{detourable.length} image{detourable.length > 1 ? 's' : ''} sans détourage {selected.size > 0 && ( <> · {selected.size} sélectionnée{selected.size > 1 ? 's' : ''} )}
)} {items.length > 0 && (
{items.map((item) => ( ))}
)} {items.length === 0 && (

📂

Déposez des images pour commencer

Le nom du fichier (sans extension) doit correspondre à une référence produit Shopify

)}
setLightboxItem(null)} /> {mockupItem && ( setMockupItem(null)} /> )} ) } export default function ImagesPage() { return ( ) }