mirror of
https://github.com/Stirling-Tools/Stirling-PDF.git
synced 2025-08-02 18:45:21 +00:00
Select all files of given type
This commit is contained in:
parent
ff37edae64
commit
1fb730229c
@ -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([]);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -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();
|
||||||
|
Loading…
x
Reference in New Issue
Block a user