import { DuplicateGroup, DuplicateScanProgress } from '../../store' import { FolderScopeDropdown } from '../FolderScopeDropdown' import { Tooltip } from '../Tooltip' import { WarningIcon } from '../icons' import { duplicateProgressLabel, duplicateProgressPercent, formatBytes, formatRelativeTime, } from './format' export function DuplicateFinderHeader({ confirmingDelete, deleteResult, deleting, duplicateGroups, duplicateLastScanned, duplicateScanError, duplicateScanning, duplicateScanProgress, duplicateScanWarning, hasResults, hasScanned, onClearSelection, onConfirmDelete, onDelete, onScan, onSelectKeepFirstAll, selectedCount, setConfirmingDelete, }: { confirmingDelete: boolean deleteResult: string | null deleting: boolean duplicateGroups: DuplicateGroup[] duplicateLastScanned: number | null duplicateScanError: string | null duplicateScanning: boolean duplicateScanProgress: DuplicateScanProgress | null duplicateScanWarning: string | null hasResults: boolean hasScanned: boolean onClearSelection: () => void onConfirmDelete: () => void onDelete: () => void onScan: () => void onSelectKeepFirstAll: () => void selectedCount: number setConfirmingDelete: (value: boolean | ((current: boolean) => boolean)) => void }) { const totalWasted = duplicateGroups.reduce( (sum, group) => sum + group.file_size * (group.images.length - 1), 0 ) const totalDuplicateImages = duplicateGroups.reduce( (sum, group) => sum + group.images.length - 1, 0 ) const progressLabel = duplicateProgressLabel(duplicateScanProgress) const progressPercent = duplicateProgressPercent(duplicateScanProgress) return (

Duplicate Finder

{duplicateScanning ? duplicateScanProgress ? `${progressLabel}… ${duplicateScanProgress.processed.toLocaleString()} / ${duplicateScanProgress.total.toLocaleString()}${duplicateScanProgress.skipped > 0 ? ` · ${duplicateScanProgress.skipped.toLocaleString()} skipped` : ''}` : 'Starting scan…' : hasResults ? `${duplicateGroups.length} group${duplicateGroups.length === 1 ? '' : 's'} · ${formatBytes(totalWasted)} reclaimable` : duplicateLastScanned !== null ? 'No duplicates found' : 'Scan your library for identical files'}

{!duplicateScanning && duplicateLastScanned !== null ? (

Last scanned {formatRelativeTime(duplicateLastScanned)}

) : null}
{hasResults && selectedCount === 0 && !deleting ? ( ) : null} {selectedCount > 0 ? ( <> {selectedCount} marked for deletion
{confirmingDelete && !deleting ? ( <>

Delete from disk

Permanently delete {selectedCount} file{selectedCount === 1 ? '' : 's'} from your computer. This removes the actual file{selectedCount === 1 ? '' : 's'}{' '} from disk and cannot be undone.

) : null}
) : null}
{duplicateScanning && duplicateScanProgress ? (
) : null} {duplicateScanError ? (

{duplicateScanError}

) : null} {duplicateScanWarning ? (

{duplicateScanWarning}

) : null} {deleteResult ?

{deleteResult}

: null}
) }