Select all files of given type

This commit is contained in:
Connor Yoh 2025-08-01 14:43:34 +01:00
parent ff37edae64
commit 1fb730229c
2 changed files with 46 additions and 29 deletions

View File

@ -35,13 +35,13 @@ const ConvertSettings = ({
onParameterChange, onParameterChange,
getAvailableToExtensions, getAvailableToExtensions,
selectedFiles, selectedFiles,
disabled = false disabled = false
}: ConvertSettingsProps) => { }: ConvertSettingsProps) => {
const { t } = useTranslation(); const { t } = useTranslation();
const theme = useMantineTheme(); const theme = useMantineTheme();
const { colorScheme } = useMantineColorScheme(); const { colorScheme } = useMantineColorScheme();
const { setSelectedFiles } = useFileSelectionActions(); const { setSelectedFiles } = useFileSelectionActions();
const { setSelectedFiles: setContextSelectedFiles } = useFileContext(); const { activeFiles, setSelectedFiles: setContextSelectedFiles } = useFileContext();
const allEndpoints = useMemo(() => { const allEndpoints = useMemo(() => {
const endpoints = new Set<string>(); const endpoints = new Set<string>();
@ -105,14 +105,7 @@ const ConvertSettings = ({
})); }));
}, [parameters.fromExtension, getAvailableToExtensions, endpointStatus]); }, [parameters.fromExtension, getAvailableToExtensions, endpointStatus]);
const handleFromExtensionChange = (value: string) => { const resetParametersToDefaults = () => {
onParameterChange('fromExtension', value);
// Auto-select target if only one option available
const availableToOptions = getAvailableToExtensions(value);
const autoTarget = availableToOptions.length === 1 ? availableToOptions[0].value : '';
onParameterChange('toExtension', autoTarget);
onParameterChange('imageOptions', { onParameterChange('imageOptions', {
colorType: COLOR_TYPES.COLOR, colorType: COLOR_TYPES.COLOR,
dpi: 300, dpi: 300,
@ -132,24 +125,44 @@ const ConvertSettings = ({
}); });
onParameterChange('isSmartDetection', false); onParameterChange('isSmartDetection', false);
onParameterChange('smartDetectionType', 'none'); onParameterChange('smartDetectionType', 'none');
};
if (selectedFiles.length > 0 && value !== 'any') {
const matchingFiles = selectedFiles.filter(file => { const setAutoTargetExtension = (fromExtension: string) => {
const extension = file.name.split('.').pop()?.toLowerCase() || ''; const availableToOptions = getAvailableToExtensions(fromExtension);
const autoTarget = availableToOptions.length === 1 ? availableToOptions[0].value : '';
if (value === 'image') { onParameterChange('toExtension', autoTarget);
return isImageFormat(extension); };
}
const filterFilesByExtension = (extension: string) => {
return extension === value; return activeFiles.filter(file => {
}); const fileExtension = detectFileExtension(file.name);
if (matchingFiles.length !== selectedFiles.length) { if (extension === 'any') {
setSelectedFiles(matchingFiles); return true;
} else if (extension === 'image') {
const matchingFileIds = matchingFiles.map(file => (file as any).id || file.name); return isImageFormat(fileExtension);
setContextSelectedFiles(matchingFileIds); } else {
return fileExtension === extension;
} }
});
};
const updateFileSelection = (files: File[]) => {
setSelectedFiles(files);
const fileIds = files.map(file => (file as any).id || file.name);
setContextSelectedFiles(fileIds);
};
const handleFromExtensionChange = (value: string) => {
onParameterChange('fromExtension', value);
setAutoTargetExtension(value);
resetParametersToDefaults();
if (activeFiles.length > 0) {
const matchingFiles = filterFilesByExtension(value);
updateFileSelection(matchingFiles);
} else {
updateFileSelection([]);
} }
}; };

View File

@ -20,7 +20,7 @@ import { BaseToolProps } from "../types/tool";
const Convert = ({ onPreviewFile, onComplete, onError }: BaseToolProps) => { const Convert = ({ onPreviewFile, onComplete, onError }: BaseToolProps) => {
const { t } = useTranslation(); const { t } = useTranslation();
const { setCurrentMode } = useFileContext(); const { setCurrentMode, activeFiles } = useFileContext();
const { selectedFiles } = useToolFileSelection(); const { selectedFiles } = useToolFileSelection();
const scrollContainerRef = useRef<HTMLDivElement>(null); const scrollContainerRef = useRef<HTMLDivElement>(null);
@ -49,9 +49,13 @@ const Convert = ({ onPreviewFile, onComplete, onError }: BaseToolProps) => {
if (selectedFiles.length > 0) { if (selectedFiles.length > 0) {
convertParams.analyzeFileTypes(selectedFiles); convertParams.analyzeFileTypes(selectedFiles);
} else { } else {
convertParams.resetParameters(); // Only reset when there are no active files at all
// If there are active files but no selected files, keep current format (user filtered by format)
if (activeFiles.length === 0) {
convertParams.resetParameters();
}
} }
}, [selectedFiles]); }, [selectedFiles, activeFiles]);
useEffect(() => { useEffect(() => {
convertOperation.resetResults(); convertOperation.resetResults();