mirror of
https://github.com/Frooodle/Stirling-PDF.git
synced 2025-09-08 17:51:20 +02:00
Auto rename works
This commit is contained in:
parent
a0f41a0e69
commit
4933904683
5
.vscode/settings.json
vendored
5
.vscode/settings.json
vendored
@ -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"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -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.'))
|
||||||
});
|
});
|
||||||
};
|
};
|
@ -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,
|
||||||
|
@ -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,
|
||||||
// Endpoint validation
|
useAutoRenameOperation,
|
||||||
const { enabled: endpointEnabled, loading: endpointLoading } = useEndpointEnabled(autoRenameParams.getEndpointName());
|
props
|
||||||
|
);
|
||||||
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({
|
return createToolFlow({
|
||||||
|
title: { title:t("auto-rename.title", "Auto Rename PDF"), tooltip: useAutoRenameTips()},
|
||||||
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,
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
Loading…
Reference in New Issue
Block a user