diff --git a/frontend/src/components/tooltips/useRemovePasswordTips.ts b/frontend/src/components/tooltips/useRemovePasswordTips.ts
deleted file mode 100644
index 1ec303cd6..000000000
--- a/frontend/src/components/tooltips/useRemovePasswordTips.ts
+++ /dev/null
@@ -1,20 +0,0 @@
-import { useTranslation } from 'react-i18next';
-import { TooltipContent } from '../../types/tips';
-
-export const useRemovePasswordTips = (): TooltipContent => {
- const { t } = useTranslation();
-
- return {
- header: {
- title: t("removePassword.title", "Remove Password")
- },
- tips: [
- {
- description: t(
- "removePassword.tooltip.description",
- "Removing password protection requires the current password that was used to encrypt the PDF. This will decrypt the document, making it accessible without a password."
- )
- }
- ]
- };
-};
diff --git a/frontend/src/tools/RemovePassword.tsx b/frontend/src/tools/RemovePassword.tsx
index 970eb324b..3688f6a66 100644
--- a/frontend/src/tools/RemovePassword.tsx
+++ b/frontend/src/tools/RemovePassword.tsx
@@ -1,61 +1,12 @@
-import { useTranslation } from "react-i18next";
-import { createToolFlow } from "../components/tools/shared/createToolFlow";
-import RemovePasswordSettings from "../components/tools/removePassword/RemovePasswordSettings";
-import { useRemovePasswordParameters } from "../hooks/tools/removePassword/useRemovePasswordParameters";
-import { useRemovePasswordOperation } from "../hooks/tools/removePassword/useRemovePasswordOperation";
-import { useRemovePasswordTips } from "../components/tooltips/useRemovePasswordTips";
-import { useBaseTool } from "../hooks/tools/shared/useBaseTool";
-import { BaseToolProps, ToolComponent } from "../types/tool";
+import GenericTool from '../components/tools/shared/GenericTool';
+import { removePasswordDefinition } from './definitions/removePasswordDefinition';
+import { BaseToolProps, ToolComponent } from '../types/tool';
const RemovePassword = (props: BaseToolProps) => {
- const { t } = useTranslation();
- const removePasswordTips = useRemovePasswordTips();
-
- const base = useBaseTool(
- 'removePassword',
- useRemovePasswordParameters,
- useRemovePasswordOperation,
- props
- );
-
- return createToolFlow({
- files: {
- selectedFiles: base.selectedFiles,
- isCollapsed: base.hasResults,
- },
- steps: [
- {
- title: t("removePassword.password.stepTitle", "Remove Password"),
- isCollapsed: base.settingsCollapsed,
- onCollapsedClick: base.hasResults ? base.handleSettingsReset : undefined,
- tooltip: removePasswordTips,
- content: (
-
- ),
- },
- ],
- executeButton: {
- text: t("removePassword.submit", "Remove Password"),
- isVisible: !base.hasResults,
- loadingText: t("loading"),
- onClick: base.handleExecute,
- disabled: !base.params.validateParameters() || !base.hasFiles || !base.endpointEnabled,
- },
- review: {
- isVisible: base.hasResults,
- operation: base.operation,
- title: t("removePassword.results.title", "Decrypted PDFs"),
- onFileClick: base.handleThumbnailClick,
- onUndo: base.handleUndo,
- },
- });
+ return ;
};
// Static method to get the operation hook for automation
-RemovePassword.tool = () => useRemovePasswordOperation;
+RemovePassword.tool = () => removePasswordDefinition.useOperation;
export default RemovePassword as ToolComponent;
diff --git a/frontend/src/tools/Sanitize.tsx b/frontend/src/tools/Sanitize.tsx
index f37c8fa0b..28c0cc220 100644
--- a/frontend/src/tools/Sanitize.tsx
+++ b/frontend/src/tools/Sanitize.tsx
@@ -1,59 +1,12 @@
-import { useTranslation } from "react-i18next";
-import { createToolFlow } from "../components/tools/shared/createToolFlow";
-import SanitizeSettings from "../components/tools/sanitize/SanitizeSettings";
-import { useSanitizeParameters } from "../hooks/tools/sanitize/useSanitizeParameters";
-import { useSanitizeOperation } from "../hooks/tools/sanitize/useSanitizeOperation";
-import { useBaseTool } from "../hooks/tools/shared/useBaseTool";
-import { BaseToolProps, ToolComponent } from "../types/tool";
+import GenericTool from '../components/tools/shared/GenericTool';
+import { sanitizeDefinition } from './definitions/sanitizeDefinition';
+import { BaseToolProps, ToolComponent } from '../types/tool';
const Sanitize = (props: BaseToolProps) => {
- const { t } = useTranslation();
-
- const base = useBaseTool(
- 'sanitize',
- useSanitizeParameters,
- useSanitizeOperation,
- props
- );
-
- return createToolFlow({
- files: {
- selectedFiles: base.selectedFiles,
- isCollapsed: base.hasResults,
- placeholder: t("sanitize.files.placeholder", "Select a PDF file in the main view to get started"),
- },
- steps: [
- {
- title: t("sanitize.steps.settings", "Settings"),
- isCollapsed: base.settingsCollapsed,
- onCollapsedClick: base.settingsCollapsed ? base.handleSettingsReset : undefined,
- content: (
-
- ),
- },
- ],
- executeButton: {
- text: t("sanitize.submit", "Sanitize PDF"),
- isVisible: !base.hasResults,
- loadingText: t("loading"),
- onClick: base.handleExecute,
- disabled: !base.params.validateParameters() || !base.hasFiles || !base.endpointEnabled,
- },
- review: {
- isVisible: base.hasResults,
- operation: base.operation,
- title: t("sanitize.sanitizationResults", "Sanitization Results"),
- onFileClick: base.handleThumbnailClick,
- onUndo: base.handleUndo,
- },
- });
+ return ;
};
// Static method to get the operation hook for automation
-Sanitize.tool = () => useSanitizeOperation;
+Sanitize.tool = () => sanitizeDefinition.useOperation;
export default Sanitize as ToolComponent;
diff --git a/frontend/src/tools/definitions/removePasswordDefinition.ts b/frontend/src/tools/definitions/removePasswordDefinition.ts
new file mode 100644
index 000000000..8f048a59c
--- /dev/null
+++ b/frontend/src/tools/definitions/removePasswordDefinition.ts
@@ -0,0 +1,41 @@
+import { ToolDefinition } from '../../components/tools/shared/toolDefinition';
+import { RemovePasswordParameters, useRemovePasswordParameters } from '../../hooks/tools/removePassword/useRemovePasswordParameters';
+import { useRemovePasswordOperation } from '../../hooks/tools/removePassword/useRemovePasswordOperation';
+import RemovePasswordSettings from '../../components/tools/removePassword/RemovePasswordSettings';
+
+export const removePasswordDefinition: ToolDefinition = {
+ id: 'removePassword',
+
+ useParameters: useRemovePasswordParameters,
+ useOperation: useRemovePasswordOperation,
+
+ steps: [
+ {
+ key: 'settings',
+ title: (t) => t("removePassword.password.stepTitle", "Remove Password"),
+ component: RemovePasswordSettings,
+ tooltip: (t) => ({
+ header: {
+ title: t("removePassword.title", "Remove Password")
+ },
+ tips: [
+ {
+ description: t(
+ "removePassword.tooltip.description",
+ "Removing password protection requires the current password that was used to encrypt the PDF. This will decrypt the document, making it accessible without a password."
+ )
+ }
+ ]
+ }),
+ },
+ ],
+
+ executeButton: {
+ text: (t) => t("removePassword.submit", "Remove Password"),
+ loadingText: (t) => t("loading"),
+ },
+
+ review: {
+ title: (t) => t("removePassword.results.title", "Decrypted PDFs"),
+ },
+};
diff --git a/frontend/src/tools/definitions/sanitizeDefinition.ts b/frontend/src/tools/definitions/sanitizeDefinition.ts
new file mode 100644
index 000000000..991add9b1
--- /dev/null
+++ b/frontend/src/tools/definitions/sanitizeDefinition.ts
@@ -0,0 +1,28 @@
+import { ToolDefinition } from '../../components/tools/shared/toolDefinition';
+import { SanitizeParameters, useSanitizeParameters } from '../../hooks/tools/sanitize/useSanitizeParameters';
+import { useSanitizeOperation } from '../../hooks/tools/sanitize/useSanitizeOperation';
+import SanitizeSettings from '../../components/tools/sanitize/SanitizeSettings';
+
+export const sanitizeDefinition: ToolDefinition = {
+ id: 'sanitize',
+
+ useParameters: useSanitizeParameters,
+ useOperation: useSanitizeOperation,
+
+ steps: [
+ {
+ key: 'settings',
+ title: (t) => t("sanitize.steps.settings", "Settings"),
+ component: SanitizeSettings,
+ },
+ ],
+
+ executeButton: {
+ text: (t) => t("sanitize.submit", "Sanitize PDF"),
+ loadingText: (t) => t("loading"),
+ },
+
+ review: {
+ title: (t) => t("sanitize.sanitizationResults", "Sanitization Results"),
+ },
+};