Auto rename works

This commit is contained in:
Connor Yoh 2025-08-29 17:23:26 +01:00
parent a0f41a0e69
commit 4933904683
4 changed files with 62 additions and 77 deletions

View File

@ -139,5 +139,8 @@
"app/core/src/main/java", "app/core/src/main/java",
"app/common/src/main/java", "app/common/src/main/java",
"app/proprietary/src/main/java" "app/proprietary/src/main/java"
] ],
"[typescript]": {
"editor.defaultFormatter": "vscode.typescript-language-features"
}
} }

View File

@ -1,25 +1,43 @@
import { useTranslation } from 'react-i18next'; import { useTranslation } from 'react-i18next';
import { useToolOperation } from '../shared/useToolOperation'; import { ToolType, useToolOperation } from '../shared/useToolOperation';
import { createStandardErrorHandler } from '../../../utils/toolErrorHandler'; import { createStandardErrorHandler } from '../../../utils/toolErrorHandler';
import { AutoRenameParameters } from './useAutoRenameParameters'; import { AutoRenameParameters, defaultParameters } from './useAutoRenameParameters';
export const getFormData = ((parameters: AutoRenameParameters) =>
Object.entries(parameters).map(([key, value]) =>
[key, value.toString()]
) as string[][]
);
// Static function that can be used by both the hook and automation executor
export const buildAutoRenameFormData = (parameters: AutoRenameParameters, file: File): FormData => {
const formData = new FormData();
formData.append("fileInput", file);
// Add all permission parameters
getFormData(parameters).forEach(([key, value]) => {
formData.append(key, value);
});
return formData;
};
// Static configuration object
export const autoRenameOperationConfig = {
toolType: ToolType.singleFile,
buildFormData: buildAutoRenameFormData,
operationType: 'autoRename',
endpoint: '/api/v1/misc/auto-rename',
filePrefix: 'autoRename_',
preserveBackendFilename: true, // Use filename from backend response headers
defaultParameters,
} as const;
export const useAutoRenameOperation = () => { export const useAutoRenameOperation = () => {
const { t } = useTranslation(); const { t } = useTranslation();
const buildFormData = (parameters: AutoRenameParameters, file: File): FormData => { return useToolOperation({
const formData = new FormData(); ...autoRenameOperationConfig,
formData.append("fileInput", file);
formData.append("useFirstTextAsFallback", parameters.useFirstTextAsFallback.toString());
return formData;
};
return useToolOperation<AutoRenameParameters>({
operationType: 'autoRename',
endpoint: '/api/v1/misc/auto-rename',
buildFormData,
filePrefix: '', // Not used when preserveBackendFilename is true
multiFileEndpoint: false,
preserveBackendFilename: true, // Use filename from backend response headers
getErrorMessage: createStandardErrorHandler(t('auto-rename.error.failed', 'An error occurred while auto-renaming the PDF.')) getErrorMessage: createStandardErrorHandler(t('auto-rename.error.failed', 'An error occurred while auto-renaming the PDF.'))
}); });
}; };

View File

@ -178,7 +178,8 @@ export const useToolOperation = <TParams>(
endpoint: config.endpoint, endpoint: config.endpoint,
buildFormData: config.buildFormData, buildFormData: config.buildFormData,
filePrefix: config.filePrefix, filePrefix: config.filePrefix,
responseHandler: config.responseHandler responseHandler: config.responseHandler,
preserveBackendFilename: config.preserveBackendFilename
}; };
processedFiles = await processFiles( processedFiles = await processFiles(
params, params,

View File

@ -1,78 +1,41 @@
import React, { useEffect } from "react";
import { useTranslation } from "react-i18next"; import { useTranslation } from "react-i18next";
import { useEndpointEnabled } from "../hooks/useEndpointConfig";
import { useFileContext } from "../contexts/FileContext";
import { useToolFileSelection } from "../contexts/FileSelectionContext";
import { createToolFlow } from "../components/tools/shared/createToolFlow"; import { createToolFlow } from "../components/tools/shared/createToolFlow";
import { useBaseTool } from "../hooks/tools/shared/useBaseTool";
import { BaseToolProps, ToolComponent } from "../types/tool";
import { useAutoRenameParameters } from "../hooks/tools/autoRename/useAutoRenameParameters"; import { useAutoRenameParameters } from "../hooks/tools/autoRename/useAutoRenameParameters";
import { useAutoRenameOperation } from "../hooks/tools/autoRename/useAutoRenameOperation"; import { useAutoRenameOperation } from "../hooks/tools/autoRename/useAutoRenameOperation";
import { BaseToolProps } from "../types/tool"; import { useAutoRenameTips } from "../components/tooltips/useAutoRenameTips";
const AutoRename = ({ onPreviewFile, onComplete, onError }: BaseToolProps) => { const AutoRename =(props: BaseToolProps) => {
const { t } = useTranslation(); const { t } = useTranslation();
const { setCurrentMode } = useFileContext();
const { selectedFiles } = useToolFileSelection();
const autoRenameParams = useAutoRenameParameters(); const base = useBaseTool(
const autoRenameOperation = useAutoRenameOperation(); '"auto-rename-pdf-file',
useAutoRenameParameters,
useAutoRenameOperation,
props
);
// Endpoint validation return createToolFlow({
const { enabled: endpointEnabled, loading: endpointLoading } = useEndpointEnabled(autoRenameParams.getEndpointName()); title: { title:t("auto-rename.title", "Auto Rename PDF"), tooltip: useAutoRenameTips()},
useEffect(() => {
autoRenameOperation.resetResults();
onPreviewFile?.(null);
}, [autoRenameParams.parameters]);
const handleAutoRename = async () => {
try {
await autoRenameOperation.executeOperation(autoRenameParams.parameters, selectedFiles);
if (autoRenameOperation.files && onComplete) {
onComplete(autoRenameOperation.files);
}
} catch (error) {
if (onError) {
onError(error instanceof Error ? error.message : t("auto-rename.error.failed", "Auto-rename operation failed"));
}
}
};
const handleThumbnailClick = (file: File) => {
onPreviewFile?.(file);
sessionStorage.setItem("previousMode", "auto-rename-pdf-file");
setCurrentMode("viewer");
};
const handleSettingsReset = () => {
autoRenameOperation.resetResults();
onPreviewFile?.(null);
setCurrentMode("auto-rename-pdf-file");
};
const hasFiles = selectedFiles.length > 0;
const hasResults = autoRenameOperation.files.length > 0 || autoRenameOperation.downloadUrl !== null;
return createToolFlow({
files: { files: {
selectedFiles, selectedFiles: base.selectedFiles,
isCollapsed: hasFiles || hasResults, isCollapsed: base.hasResults,
placeholder: t("auto-rename.files.placeholder", "Select a PDF file in the main view to get started"),
}, },
steps: [], steps: [],
executeButton: { executeButton: {
text: t("auto-rename.submit", "Auto Rename"), text: t("auto-rename.submit", "Auto Rename"),
isVisible: !hasResults, isVisible: !base.hasResults,
loadingText: t("loading"), loadingText: t("loading"),
onClick: handleAutoRename, onClick: base.handleExecute,
disabled: !autoRenameParams.validateParameters() || !hasFiles || !endpointEnabled, disabled: !base.params.validateParameters() || !base.hasFiles || !base.endpointEnabled,
}, },
review: { review: {
isVisible: hasResults, isVisible: base.hasResults,
operation: autoRenameOperation, operation: base.operation,
title: t("auto-rename.results.title", "Auto-Rename Results"), title: t("auto-rename.results.title", "Auto-Rename Results"),
onFileClick: handleThumbnailClick, onFileClick: base.handleThumbnailClick,
}, },
}); });
}; };